配置文件访问控制列表--使用2.6内核的新功能

作者:马路遥

如果您使用过Solaris 之类的Unix ,也许就不会对ACL(Access Control List,访问控制列表)感到陌生。在2.4内核中。ACL往往作为补丁存在。而在2.6中,她已经是标准内核的一部分了。
传统的Unix权限,只能对文件设定用户、组和其他人的权限。也就是我们常用的755、644之类的权限。如果想为一个文件定义若干个不同组的用户的访问权限,往往非常复杂,甚至根本不可能实现。而ACL可以简单的解决这个问题。为文件配置任意用户和组的访问权限。

首先需要正确编译2.6内核,并确保有下列选项
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y

用新内核启动后,要使用ACL功能。首先需要在挂载的时候添加必要的参数。
mount -t ext3 -o rw,acl /dev/hda8 /your_mount_point
或在 /etc/fstab 中加入下列行
/dev/hda8 ext3 /your_mount_point defaults,acl 1 1

正确的挂载文件系统以后。就可以使用ACL命令来修改文件的ACL属性了。修改和查询ACL属性的命令有setfacl 、getfacl 和chacl,其中chacl命令是一个SGI IRIX 兼容命令,主要适用于那些对SGI IRIX 以及XFS文件系统比较熟悉的用户。本文只介绍setfacl和getfacl 命令。
给文件添加acl属性
使得文件 1.txt 可以被用户 test 读写
setfacl -m u:test:rw 1.txt (test用户可读写)
使得文件 1.txt 可以被qmail组的组员读,但不能写
setfacl -m g:qmail:r 1.txt (qmail组可读)

把文件2.txt的acl属性设定为和1.txt 相同:
getfacl 1.txt | setfacl –set-file=- 2.txt

同时为文件设置不同用户或组的权限:
setfacl -m u:testmail:rw,g:qmail:rx,g:nofiles:x 2.txt (testmail用户可读写、qmail组组员可读可执行、nofiles 组组员可执行)

setfact和getfacl 命令都并不复杂。读者可自行查看其man page 以获得更详细的用法。

笔者曾经长期从事系统管理员的职业。工作中遇到的最大困难往往不是高难度的内核或Apache 之类的问题。而是在配置文件服务器(samba)时,领导会规定非常特别的权限。经常具体到人、具体到组的读和写的权限都必须配置。这在samba 中可以但时非常难于实现。有了acl访问控制列表的功能,问题就会简单地迎刃而解。

randomness