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

Jon*_*Day 3 permissions centos sudo

我如何sudo为用户提供访问权限,但将他们限制为仅编辑文件,以及指定目录下的文件。例如,我希望用户abc能够编辑所有文件/var/www/vhosts/hostabc/及其子文件。

Mir*_*ici 5

解决方案1: 您可以使用sudoedit

%editors_group ALL=(root) sudoedit /var/www/vhosts/hostabc/*
Run Code Online (Sandbox Code Playgroud)

并将所有编辑器添加到 editors_group

通配符不允许路径遍历,因为

sudoedit 命令行参数中使用的通配符应为路径名,因此正斜杠 ('/') 不会与通配符匹配

另请注意:

永远不应授予用户 sudoedit 权限来编辑驻留在用户具有写访问权限的目录中的文件,无论是直接还是通过通配符。如果用户对该目录具有写访问权限,则可以用指向另一个文件的链接替换合法文件,从而允许编辑任意文件。从版本 1.8.15 开始,除非启用了 sudoedit_follow Defaults 选项或 sudoedit 命令以 FOLLOW 标记为前缀,否则 sudoedit 将拒绝打开符号链接。但是,如果目录可写且链接目标位于同一文件系统上,则仍然可以创建硬链接。

来源:sudoers手册页。

解决方案 2: 您可以使用POSIX ACL,而不是使用 sudo 机制。

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
Run Code Online (Sandbox Code Playgroud)