我如何sudo
为用户提供访问权限,但限制他们只能编辑文件,并且只能编辑指定目录下的文件。例如,我希望用户abc
能够编辑/var/www/vhosts/hostabc/
其子目录中的所有文件。
答案1
解决方案 1:
您可以使用sudoedit
:
%editors_group ALL=(root) sudoedit /var/www/vhosts/hostabc/*
并将所有编辑者添加到 editors_group
通配符不允许路径遍历,因为
sudoedit 命令行参数中使用的通配符应为路径名,因此正斜杠 ('/') 将不会与通配符匹配
另请注意:
永远不应授予用户 sudoedit 权限来编辑位于用户有写权限的目录中的文件,无论是直接编辑还是通过通配符编辑。如果用户有该目录的写权限,则可以用指向另一个文件的链接替换合法文件,从而允许编辑任意文件。从版本 1.8.15 开始,除非启用了 sudoedit_follow Defaults 选项或 sudoedit 命令带有 FOLLOW 标记前缀,否则 sudoedit 将拒绝打开符号链接。但是,如果目录可写且链接目标位于同一文件系统上,仍然可以创建硬链接。
来源:sudoers请参阅手册页。
解决方案 2: 除了使用 sudo 机制之外,您还可以使用POSIX ACL。
groupadd hostabc # Create a group that will have read-write access to the folder
setfacl -R -m g:hostabc:rwX /var/www/vhosts/hostabc/ # Allow full access for hostabc group, recursively
setfacl -R -d -m g:hostabc:rwX /var/www/vhosts/hostabc/ # Same permissions for new files and folders
getfacl /var/www/vhosts/hostabc/ # To show the permissions
usermod -a -G hostabc user1 # Add user1 to hostabc group
答案2
答案3
或者,为了扩展 mattdm 的建议,不要忘记 sudo 可用于向 root 以外的用户授予访问权限。您可以为此目的创建一个自定义用户,chown -R customuser:customgroup /var/www/vhosts/hostabc
然后将 userabc sudo 权限授予 customuser 用户。该用户不用于其他任何用途,因此这样做相当安全。
您也不必担心使用 chmod +S 来确保继承,因为编辑将以 customuser 用户身份完成。