【分享】Linux文件目录ACL权限管理

一、ACL 权限简介:

在linux系统中,用户对文件的操作权限有 r-读, w-写, x-可执行三种,我们将访问文件的用户分为三类,user,group,other。如果系统中某个用户想对某个文件有写入的权限,但是该用户是属于other,如果是这样,就只能够开放other的权限。但是一旦开放other的权限,那么所有人就对该文件有写入的权限了。文件的ACL权限就很好的解决了这个问题,它可以设置一个特定文件的特定权限

命令格式:

setfacl 参数选项 文件/目录名

参数选项:

-m 设定ACL权限
-x 删除指定用户,用户组的ACL权限,针对用户,用户组
-b 删除文件所有的ACL权限,针对文件
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设置ACL权限

二、开启ACL权限:

如果系统没有ACL软件,需要安装:
# yum -y install libacl acl
如果想拥有文件ACL的权限,就必须为文件系统添加一个ACL属性。查看分区是否开启ACL权限:
# mount | grep /dev/sda1
/dev/sda1 on /mnt type ext3 (rw) —> 未开启
临时开启,系统重启失效:
# mount -o remount,acl /dev/sda
# mount | grep /dev/sda1
/dev/sda1 on /mnt type ext3 (rw,acl) —> 已开启
永久启用ACL:
# vi /etc/fstab
示例:
/dev/sda1   /mnt   ext3   defaults,acl   1 2

三、设置ACL权限

1. 设置用户ACL权限:指定特定用户对此文件/目录拥有的r/w/x权限
命令格式: setfacl -m u:用户名:权限(rwx) 目录/文件名
使用示例: setfacl -m u:user1:rwx /aclTest
注意: 用户具体拥有的权限并不一定是设置acl时指定的权限,和设置的最大默认权限进行“与”操作后得到的权限为用户实际拥有的权限
2. 设置用户组ACL权限:指定特定用户组对此文件/目录拥有的r/w/x权限
命令格式: setfacl -m g:用户名:权限(rwx) 目录/文件名
使用示例: setfacl -m g:group2:rwx /aclTest
注意: 用户组中的用户具体拥有的权限并不一定是设置acl时指定的权限,和设置的最大默认权限进行与操作后得到的权限为用户组中的用户实际拥有的权限
3. 设置最大ACL权限:指定资源ACL权限的最大权限,防止给予用户/用户组ACL权限过高
命令格式: setfacl -m m:权限(rwx) 目录/文件名
使用示例: setfacl -m m:rwx /aclTest
注意: 如果不显示设置用户最大权限,那么默认最大权限为用户第一次设置ACL时指定的权限值
4. 设置递归权限: 指对目前此目录下的所有文件均进行此ACL设置
命令格式: setfacl -m u/g:用户名:权限(rwx) -R 目录
使用示例: setfacl -m u:user1:rw -R /aclTest
注意: 针对的是设置此ACL权限之前已经创建好的所有文件,都会默认新增此ACL权限,之后创建的文件不会新增此ACL限制
5. 设置默认权限: 指对之后此目录下新建的文件默认进行此ACL权限设置
命令格式: setfacl -m d:u/g:用户名:权限(rwx) 目录
使用示例: setfacl -m d:u:user1:rw /aclTest
注意:针对的是设置ACL权限之后新建的文件默认具有的ACL权限,无论是此目录的子文件,子子文件,新建后都会拥有此ACL权限
6. 最佳实践:
同时设置目录的默认权限和递归权限,确保此目录下新建的文件和目录目前所有的文件都具有相同的ACL权限
setfacl -m u:用户名:权限(rwx) -R 目录
setfacl -m d:u/g:用户名:权限(rwx) -R 目录

四、查看ACL权限:

1. 简单查看:
# ls -ld 目录名
设置了ACL权限的文件或目录,权限后会新增一个+
2. 查看ACL权限详情:
# getfacl 文件/目录名

五、删除ACL权限:

1. 删除文件或目录具体的ACL组/用户权限: setfacl -x u/g:用户名/组名 文件/目录名
# setfacl -x g:group2 /project/ : 删除/project 的group2 组ACL权限
# setfacl -x u:user1 /project/ : 删除/project 的user1 用户ACL权限
2. 针对文件或目录所有的ACL权限: setfACL -b 文件/目录名
# setfacl -b /project : 删除/project的所有ACL权限
3.移除文件的默认ACL属性:
# setfacl -k /mnt/redhat/

六、ACL 相关命令及注意事项:

1.前面的例子中我们都注意到了getfacl命令是用来读取文件的ACL, setfacl是用来设定文件的Acess ACL.
这里还有一个chacl是用来改变文件和目录的Access ACL and Default ACL. 它的具体参数大家可以去看man page.
我只想提及一下 “chacl -B 文件/目录”,它可以彻底删除文件或者目录的ACL属性(包括Default ACL).比如你即使用了setfacl -x删除了所有文件的ACL属性,那个+号还是会出现在文件的末尾,所以正确的删除方法应该是用chacl -B
2.用cp来复制文件的时候我们现在可以加上-p选项.这样在拷贝文件的时候也将拷贝文件的ACL属性.对于不能拷贝的ACL属性将给出警告
3.mv命令将会默认地移动文件的ACL属性. 同样如果操作不允许的情况下会给出警告
4.如果用chmod命令改变Linux 文件权限的时候相应的ACL值也会改变.反之改变ACL的值,相应的文件权限也会改变

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享