ACL

参考 ACL: Using Access Control List on Linux

What is ACL

ACL - Access Control List,用于在Linux文件系统传统的权限控制机制之外,提供更加精细化的文件权限控制。

对于一个文件而言,它有三组权限控制位,分别对应该文件的ownergroupother,即可以为这三类用户分别设置它们的readwriteexec权限。但在有些场景下,我们需要更加精细的权限控制,而光靠传统上述的权限机制可能无法实现。此时,我们可以借助ACL来实现。




配置系统

要使用ACL机制,首先要确保

  1. 文件系统的ACL选项打开:通过命令tune2fs -l <文件系统名>查看

    [root@ecs3 home]# tune2fs -l /dev/xvda1 | grep mount
    Last mounted on: /
    Default mount options: user_xattr acl
    Last mount time: Fri Dec 26 09:48:08 2014
    Maximum mount count: -1

  2. 安装了ACL工具:如果,命令getfaclsetfacl可以使用,说明ACL工具已经安装好了。




使用ACL

下面使用ACL来分别配置group和user的权限

配置group权限

假设:创建一个名为jack的用户和一个名为testgroup的群组,并将jack加入到testgroup中。

[root@quickstart tao2]# groupadd testgroup
[root@quickstart tao2]# useradd -d /home/jack -g testgroup jack



然后,我们希望使得testgroup中的用户对目录/home/cloudera具有rwx的权限(该目录本来的权限为wxrwxr-x cloudera cloudera,我们要针对testgroup加上写权限)。

[jack@quickstart home]# ll /home
total 36
drwxrwxr-x  29 cloudera cloudera   4096 May 21 01:05 cloudera
drwx------   4 jack     testgroup  4096 May 21 06:18 jack

可见,现在群组testgroup对目录/home/cloudera是没有写权限的。

setfacl

现在我们用setfacl命令来设置群组testgroup对目录/home/cloudera的权限,之后用命令getfacl来查看设置结果:

[root@quickstart home]# setfacl -m g:testgroup:wx /home/cloudera/
[root@quickstart home]# getfacl /home/cloudera/
getfacl: Removing leading '/' from absolute path names
# file: home/cloudera/
# owner: cloudera
# group: cloudera
user::rwx
group::rwx
group:testgroup:-wx
mask::rwx
other::r-x

关于setfacl命令的参数: -m 表示 modify, g:testgrouop:w中的g表示设置的类别是group,testgroup是被设置的群组名称,wx表示设置的目标权限。

现在测试一下jack能不能在目录/home/cloudera中创建一个文件:

[root@quickstart home]# su - jack
[jack@quickstart ~]$ touch /home/cloudera/newFile

用户jack确实可以在/home/cloudera中创建一个文件。


getfacl

关于getfacl的输出:前几行的意义很明显,讲讲最后三行的意义:

  • group:testgroup:-wx表示群组testgroup对目标文件的权限是wx
  • mask::rwx表示对目标文件(或目录)来说,除owner外的用户和群组对其最高权限为rwx
  • other::r-x是什么意思?


mask

如果我们将testgroup的权限设置为wx,同时将mask设置为r,那么testgroup对目标文件/目录就无法写入,因为mask限制了除owner外的用户和群组对目标文件/目录的最高权限

[root@quickstart home]# setfacl -b cloudera/
[root@quickstart home]# setfacl -m g:testgroup:wx,mask:r cloudera/
[root@quickstart home]# su - jack
[jack@quickstart ~]$ cd /home
[jack@quickstart home]$ touch cloudera/x
touch: cannot touch `cloudera/x': Permission denied [jack@quickstart home]$ getfacl cloudera/ # file: cloudera/ # owner: cloudera # group: cloudera user::rwx group::--- group:testgroup:-wx #effective:--- mask::r-- other::r-x 

你可能感兴趣的:(linux)