Linux系统中传统的权限设置方法比较简单,仅有3种身份、3种权限而已,通过配合chmod和chown等命令来对文件的权限或所有者进行设置。如果要进行比较复杂的权限设定,例如某个目录要开放给某个特定的使用者使用时,这些传统的方法就无法满足要求了。

例如对于/home/project目录,该目录的所有者是student用户,所属组是users组,预设权限是770。现在有个名为natasha的用户,属于natasha组,希望能够对/home/project目录具有读写执行权限;还有一个名为instructor的用户,属于instructor组,希望能够对/home/project目录具有读取和执行权限。

很明显,利用chmod或chown命令是无法完成这个要求的。因而,Linux系统提供了ACL(Access Control List)专门来完成这种细部权限设置。

1. 设置ACL

设置ACL使用的是setfacl命令,该命令格式如下:

setfacl [选项] 设定值文件名

常用选项:

  • -m,设定一个ACL规则。
  • -x,取消一个ACL规则。
  • -b,取消所有的ACL规则。

例:设置natasha对/home/project目录具有rwx权限。

[root@localhost ~]# setfacl -m u:natasha:rwx /home/project/
[root@localhost ~]# ll -d /home/project/
drwxrwxrwx+ 2 student users 4096 12月 2 16:43 /home/project/

设置完ACL后,查看文件详细信息时在权限部分会多出一个“+”的标识,代表文件启用了ACL权限。

下面再设置instructor用户对/home/project目录具有r-x权限。

[root@localhost ~]# setfacl -m u:instructor:r-x /home/project/
2. 管理ACL

通过getfacl命令可以来查看ACL权限。

[root@localhost ~]# getfacl /home/project/
getfacl: Removing leading '/' from absolute path names
# file: home/project/
# owner: student
# group: users
user::rwx
user:instructor:r-x
user:natasha:rwx
group::rwx
mask::rwx
other::rwx

通过“setfacl –m”命令可以来修改ACL。

例:将instructor用户的权限修改为rwx。

[root@localhost ~]# setfacl -m u:instructor:rwx /home/project/

通过“setfacl -x”命令可以从ACL中去除某个用户。

例:将instructor用户从ACL中去除。

[root@localhost ~]# setfacl -x u:instructor /home/project/
3. 启动ACL支持

ACL可以针对用户设置,也可以针对用户组设置。要使用ACL必须要有文件系统的支持,Linux中标准的EXT2/EXT3/EXT4文件系统都支持ACL功能。但是要注意,RHEL6中默认的文件系统支持ACL,如果是新挂载的分区,则不支持ACL应用,可以在挂载文件系统时使用“-o acl”选项启动ACL支持。

例:将/dev/sdb1分区挂载到/home目录,并启动ACL支持。文件系统挂载之后,通过mount命令确认ACL已启动。

[root@localhost ~]# mount -o acl /dev/sdb1 /home
[root@localhost ~]# mount | grep home
/dev/sdb1 on /home type ext4 (rw,acl)

如果想要在系统启动时自动应用ACL功能,则需要修改/etc/fstab文件,添加以下行:

[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /home ext4 defaults,acl 0 0
4. 配置ACL时应注意的问题

ACL用于提供额外权限,主要用来对权限进行微调。在系统中设置权限时,主要还是应该依靠chmod、chown这些传统的方法,而不能以ACL为主,否则维护起来会比较吃力。

因而当在生产环境中设置权限时,建议先用chmod、chown设置总体权限,然后根据需要再用ACL设置细部权限。


转载于:https://blog.51cto.com/yttitan/1577458