当前位置: 首页>>技术教程>>正文


Ubuntu-非root用户可以在chroot监狱中运行进程吗?

, ,

问题描述

非root用户是否可以在Ubuntu上运行chroot进程?

最佳方案

在Linux上,chroot(2)系统调用只能由特权进程进行。流程所需的功能是CAP_SYS_CHROOT。

您不能chroot作为用户的原因很简单。假设您有一个setuid程序(例如sudo),它会检查/etc /sudoers是否允许您执行某些操作。现在,使用您自己的/etc /sudoers将其放在chroot chroot中。突然,您立即进行特权升级。

可以设计一个程序以chroot自身并作为setuid进程运行,但这通常被认为是不好的设计。 chroot的额外安全性不会激发setuid的安全性问题。

次佳方案

@ imz–IvanZakharyaschev对pehrs的回答发表评论说,引入命名空间可能是可能的,但是尚未对此进行测试并将其发布为答案。是的,的确使非root用户可以使用chroot。

给定一个statically-linked dash和一个statically-linked busybox,以及一个以非root用户身份运行的bash 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

该名称空间中的root用户ID映射到该名称空间之外的非root用户ID,反之亦然,这就是为什么系统将当前用户拥有的文件显示为用户ID 0所拥有的原因。常规ls -al root,而没有unshare ,确实将其显示为当前用户拥有。


注意:能够使用chroot的进程是well-known,能够脱离chroot。由于unshare -r会向普通用户授予chroot权限,因此,如果在chroot环境中允许这样做,则会带来安全风险。实际上,它是不允许的,并且失败:

unshare: unshare failed: Operation not permitted

符合unshare(2)文档:

EPERM (since Linux 3.9)

CLONE_NEWUSER was specified in flags and the caller is in a chroot environment (i.e., the caller’s root directory does not match the root directory of the mount namespace in which it resides).

第三种方案

这些天来,您希望使用LXC(Linux容器)而不是chroot /BSD监狱。它位于chroot和虚拟机之间,为您提供许多安全控制和常规可配置性。我相信,作为用户运行它所需要做的就是成为拥有必要文件/设备的组的成员,但是其中可能还涉及功能/系统权限。无论哪种方式,它都应该非常可行,因为LXC是很新的,在将SELinux等添加到Linux内核很久之后。

另外,请记住,您只能以root用户身份编写脚本,但可以使用sudo授予用户安全运行这些脚本的权限(如果需要,可以没有密码,但请确保脚本是安全的)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10836.html,未经允许,请勿转载。