我想知道如何限制用户只能访问/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(或容器或虚拟机)内运行整个服务器可能会更容易。