Open dadahua555 opened 5 years ago
`ll /proc/self ls: cannot read symbolic link '/proc/self': No such file or directory lrwxrwxrwx 1 root root 0 Sep 29 20:09 /proc/self `` 同时df之类的命令也无法执行了。
经过实验,发现仅仅使用
cmd.SysProcAttr = &syscall.SysProcAttr{ Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS | syscall.CLONE_NEWNET | syscall.CLONE_NEWIPC, }
运行shell并不能隔离pid,使用sudo运行编译出来的文件后,进入容器,会发现id是0,然后真的具有root权限。
而使用
cmd.SysProcAttr = &syscall.SysProcAttr{ Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS | syscall.CLONE_NEWUSER, UidMappings: []syscall.SysProcIDMap{ { ContainerID: 0, HostID: 0, Size: 1, }, }, GidMappings: []syscall.SysProcIDMap{ { ContainerID: 0, HostID: 0, Size: 1, }, }, }
问题就解决了,/proc目录没有问题了,容器也没有真正的root权限了。但是为何如此,我还是没弄明白。有人指点一下吗?
内核版本5.0.0-31-generic #33~18.04.1-Ubuntu SMP Tue Oct 1 10:20:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
在代码code-4.1中,为什么在容器中执行mount,显示的还是继承父进程的设备?
新的内核版本中,使用Mount之前调用下面这行代码
syscall.Mount("", "/", "", syscall.MS_PRIVATE|syscall.MS_REC, "")
您好,@dadahua555 ,我也是在ubuntu18.04上运行代码,遇到了run -d top时后台并没有top的情况,请问您是否有遇到?
您好,@dadahua555 ,我也是在ubuntu18.04上运行代码,遇到了run -d top时后台并没有top的情况,请问您是否有遇到?
以非交互式模式下执行 top 命令需要使用 top -b [-n 10],否则top进程会出现 failed tty get 错误。
新的内核版本中,使用Mount之前调用下面这行代码
syscall.Mount("", "/", "", syscall.MS_PRIVATE|syscall.MS_REC, "")
@Baloneo 多谢,加入这行代码确实解决问题了。
但是想咨询下这行代码的含义和具体的作用。是将当前目录挂载到根目录下吗?还是什么意思?
内核版本5.0.0-31-generic #33~18.04.1-Ubuntu SMP Tue Oct 1 10:20:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 在代码code-4.1中,为什么在容器中执行mount,显示的还是继承父进程的设备?
您好,我使用4.15.0-142的内核版本也出现了同样的问题,容器中显示的还是父进程的设备,这应该如何解决
一样也遇到这个问题:在实验了ID Namespace的代码后,执行Mount Namespace中的操作mount -t proc proc /proc
后查看, ls /proc
和ps -ef
结果和书上一样,没有发现异样。但是当重新编译执行后续代码是。出现了和issue作者一样的问题
也是在宿主机上执行任何sudo的命名,都会出现sudo: no tty present and no askpass program specified
的错误
有那位大神能指点下迷津呢?这是什么问题导致的?
@dadahua555 请问你有调查出是什么原因吗?
但是想咨询下这行代码的含义和具体的作用。是将当前目录挂载到根目录下吗?还是什么意思?
@yunkai123 意思是把所有挂载点的传播类型改为 private,避免本 namespace 中的挂载事件外泄。
@dadahua555 请问你有调查出是什么原因吗?
@y00rb issues/41#issuecomment-478799767 & issues/41#issuecomment-1041294090
我的环境是Ubuntu18.04,编译的是几天前从这里git** clone的代码。编译之前先git checkout code-3.1的tag上了。一旦运行完mydocker返回后,在终端执行sudo,报错sudo: no tty present and no askpass program specified。/proc目录下,self,network等几个文件夹变成红色,文件名为数字的进程文件夹也不在了。只能用root关机重启才能解决。我猜猜是否没有彻底隔离?但是看不出来问题,希望作者能给我解答。