为针对Unix系统权限机制的不足,一个名为POSIX ACL的全新权限机制诞生了,目的就是为了给各Unix系统之间制定一个兼容的ACL标准,使得各操作系统之间使用统一的接口。ACL为现有权限机制的延伸,在现有机制的三个基本设定(owner、group、other)的基础上加入了对某指定使用者或群组的存取权限设定。
在Linux Kernel 2.6上已经正式支持POSIX ACL,常用的档案系统(如:ext2,ext3,xfs,jfs以及ReiserFS)都能使用ACL。当然,在编译kernel时需要启动ACL。
相关的kernel option:
CONFIG_EXT3_POSIX_ACL
CONFIG_EXT2_POSIX_ACL
虽然kernel中已支持POSIX ACL,但是它并不会自动启动,我们必须在挂载档案系统时指明要使用的ACL。
例如:
也可以在/etc/fstab中加入选项:
/dev/sda1 /home ext3 acl 1 2
我们使用getfacl指令来查看一个文件或目录的ACL,使用setfacl指令来更改一个文件或目录的ACL。
其中setfacl指令的用法:
setfacl option rules files
option:
-x 移出ACL中的规则
rules:
指定某位使用者的权限
group:(gid/name):(perms) 指定某一群组的权限
other::(perms) 指定其它使用者的权限
mask::(perms) 设定有效的权限屏蔽
注:perms即r(read)、w(write)、x(execute)。user、group、other、mask可以简写为:u , g , o , m。
例子:设定一文件a.txt,其创建用户alen,群组com,现在要让用户alen和linda都能读写操作,群组com和proj只能读取,其它用户无任何权限操作。
命令如下:
setfacl -m user::rw,user:linda:rw,group::r,group:proj:r,o::- a.txt
ACL分为两种类型:存取型ACL(Access ACL)和预设型ACL(Default ACL),之前所介绍的就是存取型ACL。其中:存取型ACL可用于文件或目录,它决定该文件或目录本身的使用权限;预设型ACL只能用于目录,它决定了该目录下新建的文件或目录的ACL。
要设定预设型ACL只需在每个规则前加上"default:" 。
例如:
setfacl -m default:user::rw /home/alex
或简写为: setfacl -m d:u::rw /home/alex
例子:要设定/home/alex的预设型ACL为:使用者alex和sam能读写,群组只具有读的权力。
命令如下:
setfacl -m d:u::rw,d:u:sam:rw,d:g::r,d:o::- /home/alex