如果使用過Unix,就不會對ACL(Access Control List,訪問控制列表)感到陌生。在Linux 2.4內(nèi)核中。ACL作為補丁存在,而在2.6新內(nèi)核中,它已經(jīng)是標(biāo)準(zhǔn)內(nèi)核的一部分了。
傳統(tǒng)Unix的ACL,只能對文件設(shè)定用戶、組和其他人的權(quán)限,也就是我們常用的755、644之類的權(quán)限。如果想為一個文件交叉定義若干個不同組的用戶訪問權(quán)限,比如說tom、mary、tony、tod分別屬于不同的組,某一文件想讓mary和tony只讀,tom和tod可寫,其他用戶不可訪問。這種要求用傳統(tǒng)的Unix ACL是無法實現(xiàn)的。
Linux 2.6內(nèi)核中的ACL正是為應(yīng)付類似的需求所設(shè)計的。它可以方便地為文件配置任意用戶和組的訪問權(quán)限。
要想使用ACL功能,首先需要正確編譯2.6內(nèi)核,并確保有下列選項:
CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y |
用新內(nèi)核啟動后,還要求在掛載分區(qū)的時候添加必要的參數(shù)“acl”。
mount -t ext3 -o rw,acl /dev/hda8 /your_mount_point |
或在 /etc/fstab 中加入下列行,實現(xiàn)自動mount分區(qū)并且?guī)в小癮cl”參數(shù)。
/dev/hda8 ext3 /your_mount_point defaults,acl 1 1 |
正確掛載文件系統(tǒng)后,就可以使用ACL的命令來修改文件的ACL屬性了。修改ACL屬性的命令有setfacl、getfacl 和chacl,其中chacl是一個SGI IRIX兼容命令,主要適用于那些對SGI IRIX以及XFS文件系統(tǒng)比較熟悉的用戶。本文只介紹setfacl和getfacl命令,具體用法如下面的例子:
1.使文件1.txt可以被用戶test讀寫
setfacl -m u:test:rw 1.txt |
2.使文件1.txt可以被qmail組的組員讀,但不能寫
setfacl -m g:qmail:r 1.txt |
3.把某一文件的ACL屬性copy給另一文件
比如把文件1.txt的ACL屬性copy給2.txt:
getfacl 1.txt | setfacl -set-file=- 2.txt |
4.同時為文件設(shè)置不同用戶或組的權(quán)限
比如對文件2.txt設(shè)定testmail用戶可讀寫,qmail組組員可讀可執(zhí)行,nofiles 組組員可執(zhí)行:
setfacl -m u:testmail:rw,g:qmail:rx,g:nofiles:x 2.txt ip access-group outbound out |
查看man page可獲得setfact和getfacl命令更詳細(xì)的用法。
在系統(tǒng)管理員的工作中,遇到的最大的困難往往不是高難度的內(nèi)核問題,也不是配置Apache服務(wù)器之類的問題,而是控制文件訪問權(quán)限的問題。主管領(lǐng)導(dǎo)常常會提出非常特別的要求,權(quán)限配置經(jīng)常具體到人,這在配置文件服務(wù)器Samba時非常難于實現(xiàn),使用2.6內(nèi)核中的ACL(訪問控制列表)新功能,問題就會迎刃而解。


