Haw*_*eye 22 ubuntu root chroot
非 root 用户是否可以在 Ubuntu 上运行 chroot 进程?
peh*_*hrs 16
在 Linux 上,chroot(2)系统调用只能由具有特权的进程进行。进程需要的能力是 CAP_SYS_CHROOT。
您不能以用户身份 chroot 的原因很简单。假设您有一个 setuid 程序,例如 sudo,它会检查 /etc/sudoers 是否允许您执行某些操作。现在用你自己的 /etc/sudoers 把它放在一个 chroot chroot 中。突然间,您的权限立即提升。
可以将程序设计为 chroot 自身并将其作为 setuid 进程运行,但这通常被认为是糟糕的设计。chroot 的额外安全性不会引发 setuid 的安全问题。
hvd*_*hvd 11
@imz--IvanZakharyaschev 对 pehrs 的回答发表评论说,引入命名空间是可能的,但这尚未经过测试并作为答案发布。是的,这确实使非 root 用户可以使用 chroot。
给定一个静态链接dash,一个静态链接busybox,以及一个bash以非 root 身份运行的正在运行的shell:
$ mkdir root
$ cp /path/to/dash root
$ cp /path/to/busybox root
$ unshare -r bash -c 'chroot root /dash -c "/busybox ls -al /"'
total 2700
drwxr-xr-x 2 0 0 4096 Dec 2 19:16 .
drwxr-xr-x 2 0 0 4096 Dec 2 19:16 ..
drwxr-xr-x 1 0 0 1905240 Dec 2 19:15 busybox
drwxr-xr-x 1 0 0 847704 Dec 2 19:15 dash
Run Code Online (Sandbox Code Playgroud)
在该命名空间的根用户ID被映射到该命名空间的非根用户ID以外,反之亦然,这就是为什么由当前用户所拥有的用户ID作为资0正则系统显示的文件ls -al root,而不unshare,确实将它们显示为当前用户拥有。
注意:众所周知,能够使用 的进程chroot能够突破chroot. 由于unshare -r会将chroot权限授予普通用户,因此如果在chroot环境中允许这样做,则会存在安全风险。事实上,这是不允许的,并且失败了:
取消共享:取消共享失败:不允许操作
与unshare(2)文档匹配:
EPERM(自 Linux 3.9 起)
CLONE_NEWUSER是在flags中指定的,并且调用者在chroot 环境中(即调用者的根目录与其所在的挂载命名空间的根目录不匹配)。
| 归档时间: |
|
| 查看次数: |
22744 次 |
| 最近记录: |