(一)概述
ACL(Access Control List)主要用于在提供传统的owner,group,others的read,write,execute权限之外进行细部权限设置。ACL可以针对单一用户,单一文件或目录来进行r,w,e的权限设置。
ACL主要针对以下三个方面来设置权限。
1) 用户(user):可以针对用户来设置权限。
2) 群组(group): 以群组为对象来设置权限。
3) 默认属性(mask): 在目录下建立新文件/目录时,设置新数据的默认权限。
下面的章节将举例说明这几个方面的设置方法。
(二)文件系统设置支持ACL功能
要使用ACL功能,首先要使得文件系统支持它。可以采取下面的方法。
例2.1:让/home支持ACL
# mount -o remount,acl /home
# mount | grep acl
/dev/hda5 on /home type ext3 (rw, acl)
如果希望在开机时就设置好ACL功能,可以修改/etc/fstab实现。
# vi /etc/fstab
/dev/hda5 /home ext3 defaults,acl 1 2
(三)对文件和目录设置ACL权限
将文件系统设置成支持ACL后,就可以使用如下命令来观察和设置某个文件或者目录的ACL权限了。
1) getfacl: 取得某个文件/目录的ACL权限
2) setfacl: 设置某个文件/目录的ACL权限
先看setfacl命令的用法。
setfacl [-mxdb] 设置值
-m:设置一个ACL权限
-x: 取消一个ACL权限
-d: 设置默认的ACL权限,仅能针对目录使用
-b: 全部ACL权限都移除
最常用的就是-m参数。下面举例说明它如何针对用户(u),组(g)和默认权限(m)来设置ACL权限的。
例3.1:针对用户dmtsai,设置其对文件file1的权限为rx
# setfacl -m u:dmtsai:rx file1
# gatfacl file1
# file: file1
# owner: flagonxia
# group: flagonxia
user: :rwx
user:dmtsai:rx
group::rx
mask::rwx
others::rx
例3.2:针对群组users,设置这个组对文件file2的权限为rw
# setfacl -m g:users:rw file2
例3.3:设置对文件file3的默认权限为rwx
# setfacl -m m:rwx file1
(四)ACL中的mask的作用
上面一节中例3.3,设置了mask为rwx。它有点类似系统的umask,在ACL中设置的用户权限都要和它进行逻辑与运算后,才能变成有效权限。
继续上一节的例子,我们这回将mask设置为r-x。
# setfacl -m m:rx file1
然后,将用户dmtsai对文件file1的ACL权限设置为rwx
# setfacl -m u:dmtsai:rwx file1
实际上,dmtsai对file1的有效权限是rx(和mask进行逻辑与的结果)。
续
我在fedora 9中尝试在已有的分区里试验acl功能,结果失败,提示Operation not permitted。这个分区的类型是ext3。
在已有的分区内试验acl不是很安全,有破坏原有文件系统之虞。网上介绍了一种创建一个文件系统的方法。
step 1:#dd if=/dev/zero of=/opt/testptn bs=1k count=512
step 2:#losetup /dev/loop0 /opt/testptn
step 3:#mkfs.ext2 /dev/loop0
step 4:#mount -o rw,acl /dev/loop0 /mnt/test
说明:step 2中,将循环设备和一个step 1中创建的空白文件建立了关联,使我们能将这个循环设备用作硬盘驱动器。
在这个分区里试验acl是成功的。