1、传统Linux文件系统权限的问题
传统Linux文件系统有三类用户:文件属主-u,组用户-g,其它用户-o,以及三种访问权限:读-r,写-w,执行或目录进入-x,但很多时候并不能满足对文件访问的细微控制,对组用户和其它用户的权限设置粒度比较粗。
例如,对于文件A,除了文件属主,想让10个用户能够访问该文件,其它用户无法访问该文件,那么方法如下:1) 将能访问文件A的10个用户加入A的组g,赋予A的组访问权限;2) A的其它用户无访问权限。
存在的问题是:在1)中,如果对10个组用户再细分,5个用户有rw权限,另外5个用户只有r权限,则无法做到,因为A的组用户只有一种权限。简而言之,在Linux中,一个文件或目录的访问权限最多分三种:属主,组,其它,不能满足多于3种的权限划分,这正是引入ACL的目的。
2、ACL
ACL 是 Access Control List 的缩写,主要的目的是在传统Linux文件系统权限基础上提供更细粒度的权限控制,可以针对单个用户、单个文件或目录进行 ,这对于需要比较复杂、特殊的权限设置是非常有用的。由於 ACL 是Unix-like 系统额外的支持项目,因此要使用 ACL必需要有文件系统的支持才行。 目前绝大部分的文件系统都有支援 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。
3、启动ACL
[root@linux ~]# mount -o remount,acl /home
[root@linux ~]# mount | grep /home
/dev/hda5 on /home type ext3 (rw,acl)
或者编辑/etc/fstab
[root@linux ~]# vi /etc/fstab
/dev/hda5 /home ext3 defaults,acl 1 2
4、ACL设置
$ setfacl //设定某文件或目录的ACL
$ getfacl //取得某文件或目录的ACL设定值
建立用户 test对project目录的使用权限(需要有 w):
[cb@linux home]$ ls -ld project/
drwx------ 2 cb cb 4.0K 10月 3 18:32 project
[cb@linux home]$ setfacl -m u:test:rwx project
[cb@linux home]$ getfacl project
# file: project/
# owner: cb
# group: cb
user::rwx
user:test:rwx
group::---
mask::rwx
other::---
[cb@linux home]$ ls -ld project/
drwxrwx---+ 2 cb cb 4096 10月 3 18:32 project //多了一个+ 的标志,具体的权限得用getfacl来看,ugo的设置与实际有误差
=-=-=-=-=
Powered by Blogilo