还会有其它一些特殊权限,如:SUID、SGID、 Sticky bit,还有一些需要通过命令lsattr来查看和chattr来设置的隐藏权限。
ACL(Access Control List)即访问控制列表。主要是针对单一用户,单一文件或目录进行rwx权限的细部设定。可以针对用户(User)、群组(Group)、默认属性掩码(mask)进行设置。
注意:
如果是用tune2fs命令启用分区的ACL功能,用mount命令是看不到的,要使用tune2fs -l <分区>,查看“Default mount options:”的信息。
方法一:
#mount -o remount /dev/sda7
方法二:
还可以使用tune2fs命令设置分区永久启用ACL。
tune2fs -o acl <分区> #设置分区永久启用ACL。
tune2fs -l <分区> #查看分区详细信息
可以看到“Default mount options: acl”的信息,说明这个分区的ACL已经启用了。getfacl:取得文件或目录的ACL设置信息。
setfac:设置文件或目录的ACL设置信息。
chacl:同setfacl,也是用来设定ACL设置信息。用法类似于chmod。不常用。
命令常用参数:
-a , --access:显示文件或目录的访问控制列表。
-d , --default:显示文件或目录的默认(缺省)的访问控制列表。
-e , --all-effective:列出有效权限。
-c , --omit-header:不显示默认的访问控制列表。
-R , --recursive:操作递归到子目录。
-t , --tabular:使用列表输格式出ACL设置信息。
-n , --numeric:显示ACL信息中的用户和组的UID和GID。
-m, --modify=acl:更改文件或目录的ACL规则。
-x, --remove=acl:删除文件或目录指定的ACL规则。
-b, --remove-all:删除文件或目录所有的ACL规则。
-k, --remove-default:删除文件或目录默认的ACL规则。
-d, --default:设置目录默认的ACL规则(只对目录有效)。
-M, --modify-file=file:从一个文件读入ACL设置信息并以此为模版修改当前文件或目录的ACL规则。
-X, --remove-file=file:从一个文件读入ACL设置信息并以此为模版删除当前文件或目录的ACL规则。
--set=acl:设置当前文件的ACL规则。
--set-file=file:从文件读入ACL规则来设置当前文件或目录的ACL规则。
--mask:重新计算有效权限,即使ACL mask被明确指定。
--restore=file:从文件恢复备份的ACL规则(这些文件可由getfacl -R产生<---针对目录)。通过这种机制可以恢复整个目录树的acl设置信息。此参数不能和除--test以外的任何参数一同执行。
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。
--test:测试模式,不会改变任何文件或目录的ACL规则,操作后的ACL规格将被显示。
-R --recursive:递归处理,将指定目录下的所有文件及子目录一并处理。
指定ACL规则的4种情况:
(1)[d:]u:<UID|用户>:<权限> #指定用户的ACL,[d:]表示配置用户对文件或目录的默认的ACL,权限可以使用字符或数字。
(2)[d:]g:<GID|用户组>:<权限> #指定用户的ACL,[d:]表示配置用户对文件或目录的默认的ACL,权限可以使用字符或数字。
(3)[d:]o:<权限> #相关于普通权限中其他用户的权限,[d:]表示配置用户对文件或目录的默认的ACL,权限可以使用字符或数字。
(4)[d:] m:<权限> #指定有效权限,[d:]表示配置的默认的权限,权限可以使用字符或数字。
使设置信息能正常执行,需要满足以下条件:
★ 三个基本设置不能被删除。
★ 任何一条包含指定的用户名或群组名的设置信息必须包含有效的权限组合(即rwx的权限组合)。
★ 缺省设置信息必须存在。
setfacl -m u:[用户列表]:[rwx] #针对用户的权限规范。
setfacl -m g:[群组列表]:[rwx] #针对群组的权限规范。
注意:多了一个mask:rwx。这是一个权限掩码。用来控制你所设置的扩展ACL权限。你所设置的权限必须存于mask规定的范围内才会生效。也就是所谓的“有效权限(effective permission)”。你可以用getfacl -e命令查看,如下图:
setfacl -m m:[rwx]
setfacl -m m::[rwx]
注意:如果setfacl命令不指定操作用户,那么就是对默认属主用户权限的操作(例如acl_test/目录,owner:root,group:root),这时候的setfacl命令功能上和传统的chmod相同。例如setfacl u::rwx,g::rwx,o::rwx acl_test/ 等价于chmod 777 acl_test/ 。就是把缺省设置信息全部设置为rwx的权限了。
注意:
文件和目录设置了ACL规则后,通过“ls -l”或“ll”命令查看文件或目录所属群组权限时,所看到的权限不再是该文件或目录所属群组权限,而是ACL的mask的权限,不再显示群组的权限;mask有可能是最大权限(即rwx),也可能不是(如:r或rw);所以要查看文件或目录所属群组的准确权限应该使用getfacl命令。
可以使用以下三种中的任意一种规范。
(1)setfacl -d -m [ug]:列表:[rwx] <目录> (注意:-d参数必须放在最前面。)
(2)setfacl -d --set [ug]:列表:[rwx] <目录> (注意:-d参数必须放在最前面。)
(3)setfacl -m d:[ug]:列表:[rwx] <目录>
setfacl -x [ug]:用户或组 <文件或目录>:删除特定用户或组在相关文件或目录上的ACL规则。
setfacl -b <文件或目录>:删除文件或目录上所有的ACL规则。
注意:加上-R参数可以对目录递归处理。
注意:
cp和mv命令对于ACL的支持,mv命令保持ACL设置信息,cp命令在使用-p,-a参数时保留ACL设置信息。但是如果从一个支持ACL的文件系统向一个不支持ACL的文件系统移动或带ACL属性的拷贝,则会得到类似下面这样的错误提示,cp: preserving permissions for `filename’: Operation not supported
删除acl_test目录下acl_vim文件的ACL设置信息,如下图:
转载于:https://blog.51cto.com/seanbook/658865