用户权限管理始终是 Unix 系统管理中最重要的环节。大家对 Linux/Unix 的 UGO 权限管理方式一定不陌生,还有最常用的 chmod 命令。为了实现一些比较复杂的权限管理,往往不得不创建很多的组,并加以详细的记录和区分(很多时候就是管理员的噩梦)。可以针对某一个用户对某一文件指定一个权限,恐怕管理员都期待的功能。比如对某一个特定的文件,用户A可以读取,用户B所在的组可以修改,惟独用户B不可以……。于是就有了IEEE POSIX 1003.1e这个ACL的标准。所谓ACL,就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。
Linux下一切皆文件,使用ll -ai可以查询文件的详细信息
[shayu@hzclov51 ~]$ ll -ai
total 72
11265 drwx------ 4 shayu shayu 4096 Mar 9 18:13 .
8005 drwxr-xr-x. 4 root root 4096 Mar 9 17:40 ..
11274 -rw-rw-r-- 1 shayu shayu 17225 Mar 9 17:44 1.LOG
11277 -rw------- 1 shayu shayu 303 Mar 9 20:50 .bash_history
11268 -rw-r--r-- 1 shayu shayu 18 Jul 9 2013 .bash_logout
11267 -rw-r--r-- 1 shayu shayu 176 Jul 9 2013 .bash_profile
11269 -rw-r--r-- 1 shayu shayu 124 Jul 9 2013 .bashrc
11270 -rw-r--r-- 1 shayu shayu 500 May 7 2013 .emacs
33797 drwxr-xr-x 2 shayu shayu 4096 Jul 14 2010 .gnome2
11271 -rw-r--r-- 1 shayu shayu 171 Oct 16 2013 .kshrc
11272 -rw-r--r-- 1 shayu shayu 124 Oct 24 2013 .mkshrc
11266 drwxr-xr-x 4 shayu shayu 4096 Mar 7 22:52 .mozilla
11275 -rw-rw-r-- 1 shayu shayu 0 Mar 9 17:58 test
11276 -rw------- 1 shayu shayu 627 Mar 9 17:46 .viminfo
11273 -rw-r--r-- 1 shayu shayu 658 Aug 6 2013 .zshrc
可以看到每个文件有10列信息展现出来,详细解释如下:
第一列:inode(关于inode可以参考http://www.ruanyifeng.com/blog/2011/12/inode.html这篇文章);
第二列:文件种类和权限(http://blog.csdn.net/sjyu_ustc/article/details/61914536);
第三列: 文件硬链接个数;
第四列: 文件的属主;
第五列:文件所归属的组;
第六列:文件的大小;
第七、八、九列:最后访问或修改时间;
第十列:文件名
先来直观的感受下getfacl都输出什么?
[shayu@hzclov51 ~]$ getfacl 1.LOG
# file: 1.LOG
# owner: shayu
# group: shayu
user::rw-
group::rw-
other::r--
无非是一些文件的权限及属主相关的信息,那他所输出的信息也没有什么特殊的,是否没有必要存在该命令呢?其实不然,事物的存在都有他存在的缘由的。
下面我们看一种场景,当然仍以1.LOG文件为例
该文件具有可读可写(owner)可读可写(group)可执行(other)权限
那么现在系统中存在一用户shayu1,shayu1用户不属于shayu用户组(group),显然针对上述文件而言它属于其他组(other),那么我如何达到shayu1用户对1.LOG文件拥有可读可写权限呢?
方案一:使用chmod命令增加other用户的可写权限,如chmod o+w 1.LOG或者chmod 666 1.LOG。该方法当然可以达到上述目的,但是放大了other用户的权限,比如shayu2(也属于other组)同样也具有了可读可写权限
方案二:就是要讲到的setfacl命令,该命令可以针对某个或某些用户,设置特定的权限,从而不受所属组的影响。
[shayu@hzclov51 ~]$ setfacl -m user:shayu1:rw- 1.LOG
[shayu@hzclov51 ~]$ getfacl 1.LOG
# file: 1.LOG
# owner: shayu
# group: shayu
user::rw-
user:shayu1:rw-
group::rw-
mask::rw-
other::r--
此时在使用ll命令,发现多了个+,这表明该文件为acl文件
[shayu@hzclov51 ~]$ ll -ai 1.LOG
11274 -rw-rw-r--+ 1 shayu shayu 17225 Mar 9 17:44 1.LOG
详细的命令介绍可以使用man setfacl或者http://man.linuxde.net/setfacl