setfacl -m u:bill:x /bin/bash 给于用户 bill 有执行的权限
setfacl -m u:bill:--- /bin/bash 给于用户 bill 没有执行的权限
setfacl -b /bin/bash 清楚所有的acl规则
-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。 -k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。 -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 --mask:重新计算有效权限,即使ACL mask被明确指定。 -d,--default:目录设定默认的acl规则。 --restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。 --test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。 -R,--recursive:递归的对所有文件及目录进行操作。 -L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。 -P,--physical:跳过所有符号链接,包括符号链接文件。 --version:输出setfacl的版本号并退出。 --help:输出帮助信息。 --:标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。
让我们来据个例子说明一下,下面我们就用getfacl命令来查看一个定义好了的ACL文件:
[root@localhost ~]# getfacl ./test.txt # file: test.txt # owner: root # group: admin user::rw- user:john:rw- group::rw- group:dev:r-- mask::rw- other::r--
前面三个以#开头的定义了文件名,file owner和group。这些信息没有太大的作用,接下来我们可以用--omit-header
来省略掉。
user::rw- 定义了ACL_USER_OBJ, 说明file owner拥有read and write permission user:john:rw- 定义了ACL_USER,这样用户john就拥有了对文件的读写权限,实现了我们一开始要达到的目的 group::rw- 定义了ACL_GROUP_OBJ,说明文件的group拥有read and write permission group:dev:r-- 定义了ACL_GROUP,使得dev组拥有了对文件的read permission mask::rw- 定义了ACL_MASK的权限为read and write other::r-- 定义了ACL_OTHER的权限为read
需要注意的几点
一、
[root@localhost ~]# setfacl -m u:maihao:--- /data/
setfacl: /data/: Operation not supported ###说明这个挂载的硬盘不支持ACL,需要更改挂载属性
[root@localhost ~]# cat /etc/fstab
/dev/vdb1 /data ext3 defaults,acl 0 0 ##红色为修改内容
修改之后需要重新mount你的file system:
二、
如果用chmod命令改变Linux file permission的时候相应的ACL值也会改变,反之改变ACL的值,相应的file permission也会改变。