ACL权限控制

ACL,即访问控制列表(Access Control List), 可以实现更为灵活的文件访问权限控制,除了文件的所有者,所属组和其他人,可以为更多的用户设置权限,ACL可以对特定的用户、特定的用户组、特定的文件或目录来进行rwx的权限控制。
如,某一个文件,不让单一的某个用户访问。

1.设置文件访问权限setfacl

chmod命令可以把文件权限分为u:g:o,也就是(user:group:other)三组,而setfacl可以对每一个文件或目录设置更精确的文件权限,setfacl可以理解为文件访问权限扩展或者说增强。
语法如下:

setfacl [-bkndrlp] {-m|-M|-x|-X} file

-m,   --modify=acl   修改文件的acl权限
格式:setfacl -m file or dir

-M,   --modify-file=file   通过acl配置文件来为文件设置acl访问权限
格式:setfacl -M xxx.acl file or dir

 xxx.acl中格式如下:
 #u:表示给用户添加权限,
 #user:指定确定存在的用户名,
 #rwx:表示具有访问文件具有的权限
 u:user:rwx
 #g:表示给用组添加权限,
 # group:指定确定存在的用户组,
 #rwx:表示具有访问文件具有的权限
g:group:r

-x,   --remove=acl   删除文件的acl访问权限
-X,   --remove-file=file   删除file文件提供的acl权限
-b,   --remove-all   删除所有 acl 权限
-k,   --remove-default   删除缺省的acl规则。如果没有缺省规则,将不提示。
      --set=acl   
      -set-file=file   
      --mask   重新计算有效权限,即使ACL mask被明确指定。 

-n,   --no-mask   不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。有效权限是由两部分组成
的,一部分是通过setfacl设置的权限,一部分是由mask设置的权限,通过
setfacl添加进来的用户具有的权限会首mask的限制,可以将mask作为一个
统一控制门限,通过setfacl设置的用户可以实现一键控制。

-d,   --default   使用默认的acl权限操作

-R,   --recursive   递归设置acl权限,从当前目录开始,递归设置子目录下的
文件及目录权限

--restore=file   从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。
通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的
任何参数一同执行。

--test  测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号
链接目录。
-P,--physical:跳过所有符号链接,包括符号链接文件。
-v,   --version   输出setfacl的版本号并退出。
-h,   --help   输出帮助信息。

注意

  • centos7及以上的版本,xfsext4文件系统具有ACL功能
  • centos7及以前的版本,默认手工创建的ext4文件系统没有ACL功能,需要手动添加
    tune2fs -o acl /dev/sdb1
    mount -o acl /dev/sdb1 /mnt/test
  • ACL生效顺序:所有者 > 自定义用户 > 自定义组 > 其他人
  • 全局访问控制权限生效顺利:
  1. 检查所有者是否具有访问权限;
  2. 检查ACL权限是否具有访问权限;
  3. 检查用户是否具有访问权限;
  4. 检查用户所在的组是否具有访问权限;
  5. 检查other是否具有访问权限;
2.备份和恢复ACL

主要的文件操作拷贝命令cpscp等都支持ACL,只需要在命令选项上加上-p参数即可,但是常用的备份工具是不会保留目录和文件ACL信息。

你可能感兴趣的:(shell编程)