我可以配置 sudo (通过 sudoers 文件)以允许用户对系统中的任何文件或目录运行chown
和命令。chmod
但是,我只想授予用户对驻留在该/var/www/html
目录下的文件运行这些命令的权限。
如何限制特权命令,使用户只能在预先指定的目录中运行它们?
例如:以下命令授予index.html
文件 777 权限。
sudo chmod 777 /var/www/html/index.html
现在我想执行两个操作
限制
sudo
用户只能chmod
从chown
内部运行/var/www/html
禁止用户在系统的其他地方执行这些命令(例如命令不能在
/var/www
或中运行/var/ftp
)
答案1
你问的问题即使不是不可能,也是很困难的。即使您确实限制了特定目录下的文件的应用程序chown
,chmod
有人仍然可以传递符号链接,从而影响他们喜欢的任何地方的文件。
幸运的是,您尝试做的事情很可能不是解决实际问题的正确方法,并且还有另一种有效的方法。
通常,需要额外权限来创建和修改文件的用户/var/www
会被添加到一个组中(通常www-data
,或者您可能为站点的不同部分拥有不同的组)。您可以使用组所有权和 setgid 目录:chgrp www-data /var/www/html; chmod g+ws /var/www/html
允许www-data
组中的每个人都写入该/var/www/html
目录,并且在该目录中创建的文件将由该组拥有,www-data
而不是由创建该文件的用户的主要组拥有。然而,这不是很灵活。
你可能应该做的是设置访问控制列表对于/var/www
.首先,确保 ACL 已启用:/var/www
必须使用该acl
选项挂载打开的文件系统。看使目录中的所有新文件可供组访问寻求帮助。还要安装 ACL 实用程序(getfacl
和setfacl
)。然后/var/www/html
向应该拥有这些权限的用户授予对树的额外权限。您可以设置每个用户的 ACL,但通常更容易将对文件系统的一部分具有相同权限的用户放入一个组中,并为该组设置 ACL。例如,如果组中的用户html-writers
应对以下树具有读写访问权限/var/www/html
:
setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html
答案2
/etc/sudoers
您可以使用命令 add 将文件中的所有参数限制为“myuser”使用的命令visudo
:
## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt
为每个操作启用日志记录,添加:
Defaults logfile=/var/log/sudo.log
示例输出:
[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt
-sh-3.1$
当你使用sudo时,前提应该是“myuser”是一个值得信任的人。请小心文件权限,没有简单的方法可以阻止恶意 sudo 用户从外部资源链接文件并更改它。
答案3
实际上有一种相当简单的方法可以做到这一点,即创建 Bash(或您选择的 shell)脚本来限制对特定文件或目录的修改。
在您的示例中,它看起来像这样:
$ vi /usr/local/bin/mychmod
#!/bin/bash
chmod 777 /var/www/index.html
然后,您将更改 sudoers 文件以允许 www-data 执行 /usr/local/bin/mychmod。
但请记住,允许用户输入(例如,允许用户更改 chmodded 的文件或目录)到此空间是极其危险的,如果您想做类似的事情,您需要知道如何过滤掉注入攻击那。攻击者可以通过这种方式轻松地以 root 身份执行任何命令,从而有效地损害系统的安全性。