sudoers 配置允许编辑特定目录(及其子目录)中的文件

sudoers 配置允许编辑特定目录(及其子目录)中的文件

我如何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

看起来没有直接的方法。旧邮件列表帖子暗示几年前就讨论过这样的功能,但看看当前更新日志这表明这篇文章的悲观观点是正确的,而且没有任何结果。

您能更改这些文件的组所有权吗?如果可以,您可以使用chmod g+S /var/www/vhosts/hostabc,然后新文件也将获得该组。或者,也许更好,尽管不太透明,您可以使用 ACL。这些方法可以让您sudo完全避免使用。

答案3

或者,为了扩展 mattdm 的建议,不要忘记 sudo 可用于向 root 以外的用户授予访问权限。您可以为此目的创建一个自定义用户,chown -R customuser:customgroup /var/www/vhosts/hostabc然后将 userabc sudo 权限授予 customuser 用户。该用户不用于其他任何用途,因此这样做相当安全。

您也不必担心使用 chmod +S 来确保继承,因为编辑将以 customuser 用户身份完成。

相关内容