将用户 chroot 到不同位置的多个目录

将用户 chroot 到不同位置的多个目录

我想知道如何限制用户只能访问/etc/httpd、等目录/etc/php以及/var/www/html其自己的主目录并具有 RWX 权限。

另外,我希望能够限制该用户只能启动/停止/重新启动 apache 服务。

我能想到的就是 chroot,但我只是用一个目录完成了这一操作。有任何想法吗?

答案1

被监禁的用户将无法按原样访问这些文件夹。如果您在文件系统上启用了 acl,则可以创建常规用户并使用访问控制列表来控制对目录的访问。

要授予用户“Bob”访问目录的权限,请创建一个组,将 Bob 放入该组中,然后递归地授予该组对 /etc/http/ 中所有现有文件和新创建文件的访问权限:

# groupadd WebAccessGroup
# usermod -a -G WebAccessGroup Bob
# setfacl -Rm d:g:WebAccessGroup:rwx,g:WebAccessGroup:rwx /etc/httpd/

您还可以只授予用户“Bob”wrx 对 /etc/httpd 的访问权限,而无需创建组:

# setfacl -Rm d:u:Bob:rwx,u:Bob:rwx /etc/httpd/

要允许 WebAccessGroup 组启动和停止 Apache,您可以授予该组 sudo 访问权限来运行您以 root 身份启动/停止 Apache 时调用的特定脚本:

使用“visudo”命令将以下内容添加到 /etc/sudoers 文件中:

# visudo
%WebAccessGroup   ALL=(root)    NOEXEC: /usr/bin/httpd

然后 Bob 将使用 sudo 启动 Apache:

$ sudo /usr/sbin/httpd -k start

** 注意:如果您以非 root 用户(本例中为“anotheruser”)身份在非标准端口上运行 Apache,则将 All=(root) 更改为 All=(anotheruser) 并运行 start 会更安全、更好命令如下:

sudo -u anotheruser /usr/sbin/httpd -k start

答案2

在 Linux 上,您可以使用绑定挂载使其他目录在 chroot 中可见:

# mkdir -p /users/chroot/var/www/html
# mount --bind /var/www/html /users/chroot/var/www/html 
etc.

要允许用户重新启动单个服务,您可以使用sudo并允许用户运行诸如service apache2 restart等命令。

不过,让用户处于 chroot 状态并允许用户重新启动位于 chroot 之外的服务可能会很困难。这需要服务管理器(systemd?)所需的一切在 chroot 中可见。那时,在同一个 chroot(或容器或虚拟机)内运行整个服务器可能会更容易。

相关内容