ACL权限
概述
普通权限设置只能针对三类人:属主、属组、其他,针对超出三类人以上的权限,我们使用文件的普通权限无法实现了。应对类似这种非常复杂的权限问题,如何解决?文件的ACL权限(Access Control List 访问控制列表)。
ACL就是对访问进行控制的一张表。文件的ACL设置可以通过ACL让指定的某个用户或者用户组队对某个文件设置特别的权限(后门)。
常用命令
setfacl详解
setfacl
命令允许用户为文件或目录设置访问控制列表(ACL)。ACL允许用户为单个文件或目录添加或删除特定用户或组的权限,而不是使用标准的用户和组许可。
基本语法
以下是 setfacl
命令的基本语法:
setfacl [选项] [文件/目录]
选项
以下是 setfacl
命令的常用选项:
m
:添加新的ACL项。x
:删除ACL项。R
:递归地为目录及其子目录设置ACL。b
:删除文件或目录的所有ACL。k
:删除默认ACL。
示例
以下是 setfacl
命令的示例:
1.为文件添加ACL:
setfacl -m u:john:rw file.txt
此命令将给用户 john
添加对 file.txt
文件的读写权限。
2.为目录添加ACL:
setfacl -m g:developers:rwx /var/www/html
此命令将给组 developers
添加对 /var/www/html
目录的读、写和执行权限。
3.递归地为目录及其子目录设置ACL:
setfacl -R -m u:john:rw /var/www/html
此命令将给用户 john
添加对 /var/www/html
目录及其子目录的读写权限。
4.删除ACL:
setfacl -b file.txt
此命令将删除 file.txt
文件的所有ACL。
结论
setfacl
命令是管理文件和目录访问权限的强大工具。它允许用户为单个文件或目录添加或删除特定用户或组的权限。通过使用 setfacl
命令,用户可以更好地控制对文件和目录的访问。
getfacl详解
getfacl
是Linux/Unix系统中的一个命令,用于查看文件或目录的访问控制列表(ACL),它可以显示文件或目录的ACL信息,也可以将ACL信息保存到文件中备份或恢复。
语法
getfacl [OPTIONS] FILE
选项
以下是getfacl
命令的一些常用选项:
选项 | 描述 |
---|---|
-R | 递归显示目录下所有文件和子目录的ACL信息 |
-p | 显示权限信息,而不仅仅是ACL信息 |
-s | 显示ACL信息的摘要信息 |
-b | 显示ACL信息的二进制格式 |
-n | 显示UID和GID而不是用户名和组名 |
-h | 显示ACL信息时,将UID和GID转换成对应的用户名和组名 |
示例
以下是一些getfacl
命令的示例:
- 显示文件的ACL信息
$ getfacl file.txt
- 显示目录的ACL信息
$ getfacl /path/to/directory
- 将文件的ACL信息保存到文件中
$ getfacl file.txt > file.acl
- 将目录的ACL信息保存到文件中
$ getfacl -R /path/to/directory > directory.acl
结论
getfacl
是一个非常有用的命令,它可以让用户查看和管理ACL信息,从而更好地控制文件和目录的访问权限。通过掌握getfacl
命令的使用方法,用户可以更好地管理系统资源,保护系统安全。
注意事项
使用getfacl命令来查看文件的ACL权限,文件一旦设置了acl权限,那么该文件的9列权限后就变成+,此时该文件表面上看到的权限全部都不一定生效,如果想看该文件的真实权限,需要使用getfacl来查看。例如:getfacl file.txt。文件的ACL规则格式如下:
#file: 1.txt
#owner: z
#group: z
user:user1:rwx
user:user2:rw
group:group1:rwx
group:group2:rw
上述4行表示的意思是:user1对该文件有rwx权限,user2对该文件有rw权限,group1组的用户对该文件有rwx权限,group2组内的用户对该文件有rw权限。":"将3列分隔开了。如果第一列是user,第二列没有值,就表示该行设置的是owner的权限;如果第一列是group,第二列没有值,就表示该行设置的是group的权限;如果第一列是other,那么该行表示other的权限,other总在最后一行;如果第一列是mask,表示acl的最高权限,表示acl设置的权限不能超过mask的权限(只用来限制非拥有者,非root用户)。
ACL表由上至下匹配的,匹配到之后就停止匹配(第一个匹配到的那个就是它的权限),例如,hzz用户对该文件无任何权限。
针对目录设置acl权限意义不大,目录的权限只有三类才有意义:—、rwx、r-x。恰好目录有三类有意义的权限,针对三类人设置即可满足。一般我们对目录设置的acl权限和对普通文件设置的acl权限意义不一样,我们希望对目录设置的acl权限是,当一个新的文件在目录中被创建的时候,默认携带的acl权限。对目录设置默认的acl权限,针对目录设置acl权限的目的不在于访问控制,而在于acl权限的继承。使用setfacl -m d:u:hzz:r test/
命令来设置目录的ACL权限,default开头的行,default开头的所有字段,表示在该目录下创建的文件,会继承的acl权限。
设置mask权限,可以使用setfacl -m mask::r-x file.txt
命令,给目录设置mask权限可以使用setfacl -m d:mask::r-x test
命令。权限位的最后一位是+号表示有acl权限。