linux之权限
ACL
-
acl启用
acl(access control list),用于灵活控制权限 要使用acl功能首先要启用此功能,acl功能在挂载磁盘时启用,CentOS7上挂载时会自动开启此功能. 查看默认挂载选项 # tune2fs -l /dev/sda1 |grep acl Default mount options: user_xattr acl 手动挂载时开启 # mount -o acl /dev/DEVICE /MOUNT_DIR ACL生效顺序: owner --> acl_owner --> group,acl_group(谁的权限大就使用谁的权限位) --> other
-
acl设置和查看(setfacl,getfacl)
-
setfacl,getfacl命令
setfacl 设置文件ACL setfacl [options] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ... setfacl --restore=file options: -b 清空ACL规则及结构 -k 删除默认ACL -R 递归操作 --set-file=-|FILE '-'表示标准输出,根据stdin或文件内容设置acl规则 例:getfacl file1 | setfacl --set-file=- file2 -m|-x : '-m'设置acl规则,'-x'删除指定acl规则(从命令行获取acl_spec) -M|-X : 同'-m'和'-x',从文件或标准输出获取acl_spec acl_spec: [d:] [u:]uid|username [:perms] [d:] g:gid|groupname [:perms] [d:] m[:] [:perms] [d:] o[:] [:perms] u: 设置对象为owner g: 设置对象为group o: 设置对象为other d: 设置默认acl m: 设置mask perms 权限位 getfacl 显示文件acl规则 getfacl [options] file ... -R 递归查看
-
权限生效顺序
- 1 验证owner与acl_owner顺序 分别设置owner与acl_onwer权限为400,000.实验其结果,再将权限设置交换,再次验证其结果. 1.1 owner 400 acl_owner 000 设置相关环境 # echo 123 > /tmp/a # cd /tmp # chmod 400 a # chown liubei a # ll a -r--------. 1 liubei root 4 Aug 31 09:44 a # setfacl -m u:liubei:--- a # getfacl a|grep user user::r-- user:liubei:--- 进入liubei用户查看文件: # su - liubei $ cat /tmp/a 123 1.2 owner 000 acl_owner 400 # chmod 000 a # setfacl -m u:liubei:r-- a # getfacl a|grep user user::--- user:liubei:r-- 进入liubei用户查看文件: # su - liubei # cat /tmp/a cat: a: Permission denied 结论: owner优先于acl_owner - 2 验证group与acl_group顺序 实验说明: 分别设置group,acl_group权限为050,040,查看结果.再将权限设置交换,查看结果. 2.1 group 050 acl_group 040 设置相关环境 # vim /tmp/a.sh #!/bin/bash echo hello # cd /tmp # chmod 050 a.sh # chgrp liubei a.sh # setfacl -m g:liubei:r-- # getfacl a.sh |grep group # group: liubei group::r-x group:liubei:r-- 切换liubei验证结果 # su - liubei $ cd /tmp $ cat a.sh #!/bin/bash echo hello $ ./a.sh hello 2.2 group 040 acl_group 050 设置相关环境 # chmod 040 a.sh # setfacl -m g:liubei:r-x a.sh # getfacl a.sh |grep group # group: liubei group::r-x group:liubei:r-x 切换liubei验证结果 # su - liubei $ cd /tmp $ cat a.sh #!/bin/bash echo hello $ ./a.sh hello 结论: group和acl_group根据权限大小来决定谁生效. - 3 结果 owner > acl_owner > group,acl_group(权限大小) > other 此处不证明other与acl_other
-
acl中的mask作用
acl中mask代表了acl的最高权限上限. 其mask影响acl_user,group,acl_group,acl_other的权限位. 其权限必须在mask权限范围内才可生效. mask在设定其它类型的acl规则时,会根据所有权限进行逻辑与后的值进行更新. 例: 设置acl_owner为-w-,再将mask值修改为rwx. 现在添加一个acl_group为r--,再次查看mask. # touch a # chmod 700 a # setfacl -m u:liubei:-w- a # setfacl -m m:rwx a # getfacl a |grep -E 'user|group|mask' # group: root user::rwx user:liubei:-w- group::--- mask::rwx 此时mask值为rwx # setfacl -m g:liubei:r-- a # getfacl a|grep -E 'user|group|mask' # group: root user::rwx user:liubei:-w- group::--- group:liubei:r-- mask::rw- 此时mask值变为rw- 大于mask的无效acl示例: # echo 123 > /tmp/a ;cd /tmp # chmod 000 a # chgrp liubei a # ll a total 0 ----------. 1 root root 0 Aug 31 10:54 a # setfacl -m g:liubei:r-- a 此时用liubei用户查看a # su - liubei $ cat /tmp/a 123 接着修改mask值为--- # setfacl -m m:--- a # getfacl a|grep group # group: liubei group::--- group:liubei:r-- #effective:--- 此时再次使用liubei用户查看a # su - liubei $ cat /tmp/a cat: a: Permission denied 注意: #effective:--- 表示的是权限大于mask的权限位会失效,当其他小于的权限位依然会有效. 如 #effective:-w- 表示只生效了w权限 建议: mask最后设置 临时将所有用户都设为0权限,直接将mask设为---
-
default作用
默认acl的设置是为了能够在目录下创建的文件继承其acl规则. 默认acl规则只对未来创建的文件生效,不对当前已存在文件生效. 示例: # cd /tmp # mkdir a # touch a/b # chgrp -R liubei a # setfacl -Rm d:g:liubei:rwx a # getfacl -R a # file: a/ # owner: root # group: liubei user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:group:liubei:rwx default:mask::rwx default:other::r-x # file: a//b # owner: root # group: liubei user::rw- group::r-- other::r-- 没有默认acl # touch a/c # getfacl a/c # file: a/c # owner: root # group: root user::rw- group::r-x #effective:r-- group:liubei:rwx #effective:rw- 默认acl生成 mask::rw- other::r--
-
-
acl备份和恢复
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p 参数. 但是tar等常见的备份工具是不会保留目录 和文件的ACL信息 导出规则 getfacl -R /tmp/dir1 > acl.txt 清空规则 setfacl -R -b /tmp/dir1 恢复规则 setfacl -R --set-file=acl.txt /tmp/dir1 setfacl --restore acl.txt 查看规则 getfacl -R /tmp/dir1 总结: 备份的规则只能在原目录中生效
命令总结:
chmod,chown,chgrp,umask,chattr,lsattr,setfacl,getfacl
本文转自 撒旦搞时间 51CTO博客,原文链接:http://blog.51cto.com/12074120/1963882,如需转载请自行联系原作者