基本信息: setfacl和getfacl是相应的命令对,有acl。 acl有两种。 一个是访问控制列表(ACL ),用于为文件和目录设置访问控制列表。 一个是默认ACL (默认ACLs ),只能为目录设置。 如果目录中的文件没有设置ACL,则使用该目录的默认ACL。 传统的Linux文件系统权限控制通过user、group、other和r、w、x、运行的不同组合实现。
参数:
[test1@localhost ~]$ setfacl -h
setfacl2.2. 49---- setfileaccesscontrollists
usage : setfacl [-bkndrlp ] nqdjw|- x . } file .
-m,- -修改=aclmodifythecurrentacl (s ) of file(s ) #修改文件的访问控制列表
从-M,--modify-file=filereadaclentriestomodifyfromfile #文件中读取访问控制列表条目的更改
-x,--remove=基于文件(s ) of file(s ) #文件中的访问控制列表删除条目
从-X,--remove-file=filereadaclentriestoremovefromfile #文件中读取和删除访问控制列表条目
-b,--remove-allremoveallextendedaclentries #删除所有扩展的acl规则,并保留基本acl规则(所有者、组或其他)
-k,--remove-defaultremovethedefaultacl #删除默认ACL规则。
-set=ACLsettheACLoffile(s ),replacing the current ACL#设置将替换当前文件访问控制列表
从- set-file=filereadaclentriestosetfromfile #文件读取访问控制列表条目设置
- maskdorecalculatetheeffectiverightsmask #重新计算有效的权限掩码
-n,--no-mask don ' trecalculatetheeffectiverightsmask #请勿重新计算有效权限。 默认情况下,setfacl会重新计算acl mask,除非明确创建了mask
-d,--defaultoperationsapplytothedefaultacl #设置默认ACL规则
-R,--recursiverecurseintosubdirectories #递归处理所有文件和目录
-L,- -跟踪逻辑逻辑世界,跟随symbolic links #符号链接。 默认情况下,只跟踪符号链接文件,而跳过符号链接目录
-P,--physical physical walk,do not follow symbolic links#跳过包含符号链接文件的所有符号链接
- restore=filerestoreacls (inverse of ` getfacl -R ' )用于从可由getfacl-r生成的文件中恢复备份的ACL规则。 此机制允许恢复整个目录树的acl规则。 不能与--test以外的参数一起执行
-测试测试模式(aclsarenotmodified )测试模式。 文件的acl规则不会更改,操作后会列出acl规则
-v,- -版本打印版本和退出#将输出setfacl的版本号并退出
-h,--help this help text#输出帮助信息。
[test1@localhost ~]$
#选项-m和-x后面跟acl规则。 多个acl规则之间用逗号(,)分隔。 选项-M和-X用于从文件或标准输入中读取acl规则。
#选项--set和--set-file用于设置文件或目录的acl规则将被以前的设置复盖。
#选项--m (修改和--m )--修改文件)选项修改文件或目录中的acl规则。
#选项--x (移除)和-c (移除-文件)选项删除acl规则。
如果使用#-m和-X选项从文件读取规则,则setfacl接受getfacl命令的输出格式。
如果在不支持acls的文件系统上使用setfacl命令,setfacl将更改文件权限位。 如果acl规则与文件权限位不完全匹配,setfacl将修改文件权限位以尽可能对acl规则作出响应,向标准错误发送错误消息,并以大于0的状态返回。
说明:提示用户
设置权限[test1@localhost ~]$ setfacl -m u:username:rw- test.txt //普通的文件
[test1@localhost ~]$ setfacl -m d:u:username:rw- test/ //对目录设置
对组设置权限
[test1@localhost ~]$ setfacl -m g:group:r-- test.txt
[test1@localhost ~]$ setfacl -m d:g:group:r-- test/
查看权限
[test1@localhost ~]$ getfacl filename/directory //文件或目录名
注 意:设置的文件或目录是刚刚新挂载的,它会提示“Operation not supported”,原因是新挂载的硬盘默认没有acl权限!手动添加ACL权限
[test1@localhost ~]$ vim /etc/fstab
UUID="****************" /mnt/data ext4 defaults,acl 0 0
/dev/sda1 /mnt/data2 ext4 defaults,acl 0 0
#挂载的时候,尽量都UUID方式,因为这样挂载起来比较安全,具体的uuid可以使用命令来查看
[test1@localhost ~]$ blkid
/dev/sda2: UUID="0e478849-816a-4d0f-b554-62341a611e80" TYPE="ext4"
实 例:
添加权限
#用户test创建一个目录dir一个文件fil
[test@localhost ~]$ mkdir dir
[test@localhost ~]$ touch fil
#修改fil权限使其他用户不可以访问
[test@localhost ~]$ chmod 750 fil
[test@localhost ~]$ ll
total 4
drwxrwxr-x 2 test test 4096 Jul 26 14:14 dir
-rwxr-x--- 1 test test 0 Jul 26 14:14 fil
#切换到用户test1验证权限
[test@localhost ~]$ su - test1
Password:
[test1@localhost ~]$ cd /home/test/d
-bash: cd: /home/test/d: Permission denied
#没有给test1进入/home/test权限
[test1@localhost ~]$ su - test
Password:
[test@localhost ~]$ getfacl /home/test
getfacl: Removing leading '/' from absolute path names
# file: home/test
# owner: test
# group: test
user::rwx
group::---
other::---
default:user::rwx
default:user:test1:rwx
default:group::---
default:mask::rwx
default:other::---
#给其他用户访问test目录权限
[test@localhost ~]$ chmod 755 /home/test
[test@localhost ~]$ getfacl /home/test
getfacl: Removing leading '/' from absolute path names
# file: home/test
# owner: test
# group: test
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:test1:rwx
default:group::---
default:mask::rwx
default:other::---
[test@localhost ~]$ su - test1
Password:
#创建好的目录其他用户是没有写权限
[test1@localhost ~]$ cd /home/test/dir
[test1@localhost dir]$ touch fil1
touch: cannot touch `fil1': Permission denied
#提示test1对dir没有写权限
[test1@localhost ~]$ cat /home/test/fil
cat: /home/test/fil: Permission denied
#提示test1对fil无访问权限
[test1@localhost ~]$ su - test
Password:
#修改test1对fil有访问权限,对dir有完全权限
[test@localhost ~]$ setfacl -m u:test1:r fil ;setfacl -m u:test1:4 fil
[test@localhost ~]$ setfacl -m u:test1:rwx dir ;setfacl -m u:test1:7 dir
[test@localhost ~]$ su - test1
Password:
[test1@localhost ~]$ touch /home/test/dir/file3
#test1对dir有写权限了
[test1@localhost ~]$ cat /home/test/fil
#test1可以访问fil了
#test1 test2都属于file dir的other组,通过test2依然无法访问fil 和dir的写操作
[root@localhost ~]# su - test2
[test2@localhost ~]$ cat /home/test/fil
cat: /home/test/fil: Permission denied
[test2@localhost ~]$ touch /home/test/dir/file4
touch: cannot touch `/home/test/dir/file4': Permission denied
[test2@localhost ~]$
删除权限
[test@localhost ~]$ getfacl /home/test/fil
getfacl: Removing leading '/' from absolute path names
# file: home/test/fil
# owner: test
# group: test
user::rwx
user:test1:r--
group::r-x
mask::r-x
other::---
[test@localhost ~]$ setfacl -x u:test1: /home/test/fil
[test@localhost ~]$ getfacl !$
getfacl /home/test/fil
getfacl: Removing leading '/' from absolute path names
# file: home/test/fil
# owner: test
# group: test
user::rwx
group::r-x
mask::r-x
other::---
[test@localhost ~]$ su - test1
Password:
[test1@localhost ~]$ cat /home/test/fil
cat: /home/test/fil: Permission denied
[test@localhost ~]$ getfacl /home/test/dir/
getfacl: Removing leading '/' from absolute path names
# file: home/test/dir/
# owner: test
# group: test
user::rwx
user:test1:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:test:rwx
default:user:test1:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
[test@localhost ~]$ setfacl -x u:test1 /home/test/dir/
[test@localhost ~]$ getfacl /home/test/dir/
getfacl: Removing leading '/' from absolute path names
# file: home/test/dir/
# owner: test
# group: test
user::rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:test:rwx
default:user:test1:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
[test1@localhost ~]$ touch /home/test/dir/file6
touch: cannot touch `/home/test/dir/file6': Permission denied