setfacl命令详解
setfacl
命令提供了强大的工具来管理文件和目录的权限,允许比传统UNIX权限模型更细粒度的控制。通过掌握这些选项和语法,可以灵活地配置系统中的访问控制策略。
setfacl
命令用于设置或修改文件和目录的访问控制列表(ACL),ACL允许为文件或目录分配更精细的权限,超越传统的所有者、组、和其他用户权限模型。
常用选项
- -m:修改ACL。用于添加或修改文件或目录的ACL条目。
1 | setfacl -m u:username:rwx file |
解释:为用户username设置文件file的权限为rwx。
- -x:移除ACL。用于从文件或目录中移除指定的ACL条目。
1 | setfacl -x u:username file |
解释:移除用户username对文件file的ACL条目。
- -b:删除所有ACL。用于移除文件或目录的所有ACL条目。
1 | setfacl -b file |
解释:删除文件file的所有ACL条目,使其恢复为仅使用传统的rwx权限。
- -k:删除默认ACL。用于删除目录的默认ACL条目,但保留其他ACL条目。
1 | setfacl -k directory |
解释:删除目录directory的默认ACL条目。
- -d:默认ACL。用于设置目录的默认ACL条目,这些条目会被自动继承到新创建的文件和子目录。
1 | setfacl -d -m d:u:username:rwx directory |
解释:为目录directory设置用户username的默认ACL条目rwx。
- -R:递归应用ACL。用于递归设置指定目录及其子目录和文件的ACL。
1 | setfacl -R -m u:username:rwx directory |
解释:递归地为目录directory及其所有子目录和文件设置用户username的权限为rwx。
- -n:不重写掩码。在修改ACL时,保留现有的掩码值。
1 | setfacl -n -m u:username:rwx file |
解释:在不更改现有掩码的情况下,为用户username设置文件file的权限为rwx。
- --set:设置ACL。完全覆盖现有ACL,用新的ACL条目集替换现有的ACL。
1 | setfacl --set u:username:rwx file |
解释:将文件file的ACL设置为仅用户username拥有rwx权限,删除所有其他ACL条目。
- -M:从文件读取ACL。用于从指定文件中读取ACL条目,并将其应用于目标文件或目录。
1 | setfacl -M aclfile file |
解释:从文件aclfile中读取ACL条目,并将其应用于文件file。
- -X:从文件中删除ACL。用于从指定文件中读取要删除的ACL条目。
1 | setfacl -X aclfile file |
解释:从文件aclfile中读取要删除的ACL条目,并将其从文件file的ACL中删除。
ACL 条目格式
ACL条目格式为[d[efault]:][u[ser]:uid|g[roup]:gid|m[ask]|o[ther]]:perms
,其中:
default
:指定为默认ACL,仅适用于目录。user:uid
:用户权限条目。group:gid
:组权限条目。mask
:限制对文件的最大允许权限。other
:其他用户的权限条目。perms
:权限,r
表示读取,w
表示写入,x
表示执行。
示例
为文件设置特定用户的读写执行权限:
1
setfacl -m u:john:rwx myfile
为用户
john
设置文件myfile
的rwx
权限。
为目录及其子目录和文件递归设置权限:
1
setfacl -R -m g:developers:rwx /mydir
为组
developers
递归地设置目录/mydir
及其内容的rwx
权限。
删除某个用户的ACL条目:
1
setfacl -x u:john myfile
移除用户
john
在文件myfile
上的ACL条目。
查看文件的ACL:
1
getfacl myfile
使用
getfacl
查看文件或目录的ACL条目。
设置目录下所有新创建的子目录和文件的默认权限为775
1 | setfacl -m d:u::rwx,d:g::rwx,d:o::r-x /path/to/directory |
解释:
d:u::rwx - 设置默认的用户权限为775 (rwx表示7)。
d:g::rwx - 设置默认的组权限为775 (rwx表示7)。
d:o::r-x - 设置默认的其他用户权限为775 (r-x表示5)。