<< Back to man.ChinaUnix.net

1.4. 文件访问控制列表(Access Control Lists,ACL)

传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。

要启用ACL,需内核提供ACL支持和安装ACL管理工具。现在的2.6内核都提供ACL支持,在编译内核时只要在file systems分支下,把Ext2 POSIX Access Control Lists或Ext3 POSIX Access Control Lists选中就可以了。用以下命令挂接硬盘启用文件系统ACL。

debian:~# mount -t ext2 -o acl /dev/hda1 /mnt/hda1

我们也可把选项写到/etc/fstab文件中,在需启用acl的分区选项包含acl参数。

ACL有两种,一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,它就会使用该目录的默认ACL。要设置ACL,首先要安装管理工具,它们分别是getfacl和setfacl,在debian中只要安装acl软件包即可。

debian:~# apt-get install acl

setfacl工具可为文件和目录ACL,命令格式如下:

setfacl -m <rules> <files>

rules的格式如下,多条规则间可用逗号分隔。

u:uid:perms   #为用户设置ACL,perms为r、w、x的组合
g:gid:perms   #为组设置ACL
o:perms      #为其它组设置ACL
m:perms      #设置有效权限屏蔽

下面是setfacl的实例:

debian:~# setfacl -m u:jims:rw testfile.txt   
#-m选项表示添加或修改文件或目录的权限访问列表

debian:~# setfacl -x u:jims:rw testfile.txt
#-x选项表示删除文件或目录的访问列表

要设置默认的ACL,只在rules前加一个d:,以表示指定一个目录,如:

debian:~# setfacl -m d:o:rx /data

getfacl用以显示文件或目录的ACL,如:

debian:getfacl debian.xml
# file: debian.xml
# owner: jims
# group: jims
user::rwx
group::r--
other::r--
[Note]
tar和dump工具不能备份ACL文件,如果我们要备份ACL文件系统,可以使用star工具。另外,samba可通过--with-acl-support编译选项支持ACL。