Я экспериментирую с пространствами имен пользователей, используя Go в Linux. Я не могу понять, что, хотя я устанавливаю сопоставления uid и gid при создании пространства имен, оно все равно идентифицируется как пользователь nobody, когда я запускаю двоичный файл с помощью sudo, но когда я запускаю его под обычным пользователем, все работает нормально. Для справки см. мой код ниже
...
cmd := exec.Command("/bin/sh")
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUSER,
UidMappings: []syscall.SysProcIDMap{
{
ContainerID: 0,
HostID: 1000,
Size: 1,
},
},
GidMappings: []syscall.SysProcIDMap{
{
ContainerID: 0,
HostID: 1000,
Size: 1,
},
},
}
cmd.Run()
....
...
От хоста я могу подтвердить, что сопоставление пользователей и групп действительно прошло успешно. Текущий идентификатор процесса: 87751.
sudo cat /proc/87751/uid_map
0 1000 1
sudo cat /proc/87751/gid_map
0 1000 1
Но когда я запускаю бинарный файл после сборки
go build -o user_n
sudo ./user_n
sh-5.0$ whoami
nobody
sh-5.0$ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Но когда я запускаю бинарный файл от обычного пользователя, он работает, как и ожидалось.
./user_n
sh-5.0# whoami
root
sh-5.0# id
uid=0(root) gid=0(root) groups=0(root),65534(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Хотя запуск двоичного файла с использованием обычного пользователя является вариантом, я хотел бы знать, почему запуск с использованием sudo не дает ожидаемых результатов. Любые указатели будут очень признательны.
Больше информации
Fedora 31
Kernel 5.3.11-100.fc29.x86_64
go version go1.14.3 linux/amd64