Linux文件、目录管理权限命令--setfacl与getfacl

简    介:setfacl与getfacl是一对对应的命令.而且都有acl,ACL 有两种,一种是存取 ACL (access ACLs),针对文件和目录设置访问控制列表。一种是默认 ACL (default ACLs),只能针对目录设置。如果目录中的文件没有设置 ACL,它就会使用该目录的默认 ACL,传统的 Linux 文件系统的权限控制是通过 user、group、other 与 r(读)、w(写)、x(执行) 的不同组合来实现的。

参    数:

[test1@localhost ~]$ setfacl -h
setfacl 2.2.49 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  -m, --modify=acl        modify the current ACL(s) of file(s)#更改文件的访问控制列表
  -M, --modify-file=file  read ACL entries to modify from file#从文件读取访问控制列表条目更改
  -x, --remove=acl        remove entries from the ACL(s) of file(s)#根据文件中访问控制列表移除条目
  -X, --remove-file=file  read ACL entries to remove from file#从文件读取访问控制列表条目并删除
  -b, --remove-all        remove all extended ACL entries  #删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留
  -k, --remove-default    remove the default ACL #删除缺省的acl规则。
      --set=acl           set the ACL of file(s), replacing the current ACL#设定替换当前的文件访问控制列表
      --set-file=file     read ACL entries to set from file#从文件中读取访问控制列表条目设定
      --mask              do recalculate the effective rights mask#重新计算有效权限掩码
  -n, --no-mask           don't recalculate the effective rights mask #不要重新计算有效权限。setfacl默认会重新计算acl mask,除非mask被明确的制定
  -d, --default           operations apply to the default ACL#设定默认的acl规则
  -R, --recursive         recurse into subdirectories#递归的对所有文件及目录进行操作
  -L, --logical           logical walk, follow symbolic links#跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录
  -P, --physical          physical walk, do not follow symbolic links#跳过所有符号链接,包括符号链接文件
      --restore=file      restore ACLs (inverse of `getfacl -R')#从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行
      --test              test mode (ACLs are not modified)#测试模式,不会改变任何文件的acl规则,操作后acl规则将被列出
  -v, --version           print version and exit#输出setfacl的版本号并退出
  -h, --help              this help text#输出帮助信息。
[test1@localhost ~]$
#选项-m和-x后面跟acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则。
#选项--set和--set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。
#选项-m(--modify和-M(--modify-file)选项修改文件或目录的acl规则。
#选项-x(--remove)和-C(--remove-file)选项删除acl规则。
#当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。
#当在不支持acls的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于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

你可能感兴趣的:(setfacl,getfacl)