需要允许用户使用 sudo 更改特定目录下文件的权限。以下方法可行:
user1 ALL= NOPASSWD: /bin/chown -[RPfchv] user2\:user2 /opt/some/path/[a-zA-Z0-9]*
但是,这并不能阻止用户偷偷摸摸地做类似的事情:
[user1@rhel ~] sudo /bin/chown -v user2:user2 /opt/some/path/../../../etc/shadow
有什么办法可以防止这种情况发生吗?
机器运行的是 Linux(Red Hat)
答案1
sudo 引入了固有的安全风险,通常不建议将其提供给信任度不高的用户。
为什么不简单地限制对父目录的递归 chown?
sudoers 主要使用通配符。根据手册页,它不匹配通配符上的 /。更多详细信息请参阅手册页。
至于更高级的解决方案,脚本应该可以解决问题。
[root@server wmoore]# egrep '^wmoore' /etc/sudoers
wmoore ALL= NOPASSWD: /bin/chown -[RPfchv] wmoore\:wmoore /home/wmoore/[a-zA-Z0-9]*
[wmoore@server ~]$ sudo -l
User wmoore may run the following commands on this host:
(root) NOPASSWD: /bin/chown -[RPfchv] wmoore:wmoore /home/wmoore/[a-zA-Z0-9]*
[wmoore@server ~]$ sudo chown -R wmoore:wmoore /home/wmoore/../../tmp/test
Sorry, user wmoore is not allowed to execute '/bin/chown -R wmoore:wmoore /home/wmoore/../../tmp/test' as root on server.
哦,对了。sudo 包:
Name : sudo Relocations: (not relocatable)
Version : 1.6.9p17 Vendor: CentOS
Release : 3.el5_3.1 Build Date: Tue 24 Mar 2009 07:55:42 PM EDT
CentOS5。
答案2
尝试制作一个“chroot 替换”脚本,该脚本在执行 chown() 操作之前验证输入。然后将此脚本而不是 /bin/chown 添加到 sudoers 文件中。然后,您可以根据需要为用户设置“chown”别名。
另一方面,您确定您的用户需要使用 root 权限执行 chown 吗?也许目录上的 sgid 或 suid 位可以解决您的问题?