Linux学习—ACL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习—ACL相关的知识,希望对你有一定的参考价值。
ACL—-普通的权限设置方法只可以修改文件所属人,所属组和其他人的权限,如果想把文件权限设置的更加复杂,更加详细的话,例如使每个用户有不同的权限,传统的修改权限的方法已经不够用了,那么我们需要用到访问控制列表(ACL).
目录
ACL是什么
开启ACL方法
ACL的用法和作用
优先顺序
mask详解
备份和恢复ACL
一、ACL是什么
即实现灵活的控制列表,对权限更加细化的设置,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。
Linux 下用户对文件的操作权限有 r-读, w-写, x-可执行三种,而对linux 下的文件而言,用户身份分为:所有者, 所属组, 其它人, 且文件的所有者,所属组都只能是一个,所以在对文件分配用户的使用权限时,只能对这三种身份进行分配rwx 权限.
Linux 主要作为服务器系统使用,用户众多.所以在实际使用场景中,这三种身份并不能很好地实现资源权限分配问题,所以就有了ACL权限.ACL 权限就是为了解决linux 下三种身份不能满足资源权限分配需求的问题的。
二、开启ACL方法
CentOS 6 需要对新建分区手动开启ACL:
①创建分区
fdisk /dev/sda
n
enter
+2G
w
②同步分区表
partx -a /dev/sda
③创建文件系统
mkfs.ext4 /dev/sda6
④开启ACL支持
tune2fs -o acl /dev/sda6
⑤查看ACL
tune2fs -l /dev/sda6 |grep option
CentOS 7 默认开启
三、ACL的用法和作用
ACL的用法格式:
getfacl file|directory 查看文件的ACL权限
setfacl -m u:wang:rwx file|directory 设置文件对于用户wang的ACL权限
setfacl -Rm g:sales:rwx directory 递归设置目录下的所有文件的ACL权限
setfacl -M file.acl file|directory 按照file.acl的内容批量设置文件的ACL权限
例如: 编辑file.acl的内容
vim file.acl
u:lisi:rwx
u:wang:r-x
g:shuguo:---
:wq
setfacl -M file.acl test 这样一次性给test文件设置多个ACL权限
setfacl -m g:salesgroup:rw file| directory 设置文件对于组salesgroup的ACL权限
setfacl -d -m u:wang:rx directory 设置以后在该目录下创建文件和目录时的默认ACL权限
setfacl -k file|directory 取消默认设置
setfacl -x u:wang file|directory 取消ACL权限
setfacl -X file.acl directory 按照文件file.acl批量取消
setfacl–b file 删除所有ACL权限
********************************************************************************************************
结合案例分析ACL的作用:
①进入/app目录下创建testdir目录,查看该目录的权限为755,其他人只能进入该目录,不能创建在该目录下文件
②增加用户lisi
③登录lisi用户,进入/app/testdir/,尝试创建文件,
结果显示:Permission denied
④setfacl -m u:lisi:rwx testdir/,然后查看去权限,发现多了个 +
⑤再次尝试创建文件,这次成功
四、优先顺序
我们继续做这个小实验:
chown lisi testdir chmod 555 testdir setfacl -m u:lisi:rwx testdir
这样文件所属人的权限位r-x,ACL设置文件所属人的权限是rwx,这样就产生了冲突,但实际上lisi用户下创建testdir目录下的文件时失败.说明权限生效具有优先顺序。
在没有设置ACL的时候,权限的优先顺序为:owner > group > other
在加入了ACL之后,分为了owner,ACL user,group,ACL group,other五个类别,他们的优先顺序为:
owner > ACL user> group 和ACL group谁的权限多,谁优先 > other
总结:当设置ACL的时候,我们经常把文件所属组设置成root,只需要使用ACL的权限。
五、mask详解
定义:只影响除所有者和other的之外的人和组的最大权限,即ACL user,group,ACL group三类
格式:
setfacl -m m:rw- testdir/ 修改目录testdir/的mask值为rw-
一旦设置了ACL权限,原来组的权限就变为不可改的状态并且组的权限位也不在显示的是组的权限,而是mask的权限,即使利用chmod g=***的方法修改的也是mask的值,而不是原来组的权限.
mask是实时更新的,每使用一次setfacl,mask更新一次,用户的权限需要与mask进行逻辑与运算后,才能变成有效的权限,用户或组的设置必须存在于mask权限设定范围内才会生效.所以在所有的ACL都设置好了之后,最后修改mask,限制ACL权限.
案例:
原来的权限位r-x
getfacl /testdir
setfacl -m u:liubei:r-- testdir ,然后mask的值为r-x
setfacl -m g:guanyu:-w- testdir ,然后mask的值为rwx
setfacl -m m:--- testdir ,然后mask的值为---,并且刚才设置的ACL有效权限都变为---
setfacl -m u:zhangfei:--x testdir ,然后mask的值为rwx
六、备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息。我们需要对ACL进行备份以至可以恢复ACL。
getfacl file|directory > acl.txt 备份
setfacl --restore acl.txt 恢复
以上是关于Linux学习—ACL的主要内容,如果未能解决你的问题,请参考以下文章
Linux之acl库的安装与使用(限制Linux某用户的访问权限)