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设置细部权限。
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1577458