2006-06-23

ACL的常见操作

Linux传统上只支持UGO(user,group,other)权限管理,但是Linux 2.6 内核版本开始支持ACL,即Access Control List,而在Solaris和Windows 2000/XP上ACL早就得到了支持。在维护StudIP和Ilias Server的时候都经常要用到ACL,下面总结一下如何在Linux下对ACL进行操作。

  • 察看ACL


jiad4701@urts12:~> getfacl backup
# file: backup
# owner: jiad4701
# group: jiad4701
user::rwx
group::---
other::---


  • 添加和修改ACL


jiad4701@urts12:~/> setfacl -m u:wwwrun:rwx studip-2005-12-11.sql
jiad4701@urts12:~/> getfacl studip-2005-12-11.sql
# file: studip-2005-12-11.sql
# owner: jiad4701
# group: jiad4701
user::rw-
user:wwwrun:rwx
group::r--
mask::rwx
other::r--


如果要对整个目录作递归操作,只需添加 -R 选项:
setfacl -R -m u:wwwrun:rwx direcoryname

我经常使用下面的命令来让运行apache的用户来有权读取文件:
jiad4701@urts12:~> cd htdocs/studip
jiad4701@urts12:~/htdocs/studip>find . -type f -user jiad4701 -exec setfacl -m u:wwwrun:r {} \; -print
jiad4701@urts12:~/htdocs/studip>find . -type d -user jiad4701 -exec setfacl -m u:wwwrun:rwx {} \; -print


  • 删除和覆盖ACL


删除ACL使用-x 选项,如:

jiad4701@urts12:~/> setfacl -x u:wwwrun studip-2005-12-11.sql
jiad4701@urts12:~/> getfacl studip-2005-12-11.sql
# file: studip-2005-12-11.sql
# owner: jiad4701
# group: jiad4701
user::rw-
group::r--
mask::r--
other::r--


如果要去掉所有的ACL,使用 -b 选项。

也可以用 --set 设置一些新的ACL项,并把原有的ACL项全部都覆盖掉。-m选项只是修改已有的配置或是新增加一些。--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL,如:

jiad4701@urts12:~/> setfacl --set u::rw,u:wwwrun:rw,g::r,o::- studip-2005-12-11.sql
jiad4701@urts12:~/> getfacl studip-2005-12-11.sql
# file: studip-2005-12-11.sql
# owner: jiad4701
# group: jiad4701
user::rw-
user:wwwrun:rw-
group::r--
mask::rw-
other::---


也可以从一个文件来读取ACL设置,如:

setfacl --set-file=/usr/local/config/acls/sonst.read -R studip

sonst.read文件包含的内容如下:

  • 设置目录的默认ACL


如果希望在一个目录中新建的文件和目录都使用同一个预定的ACL,那么我们可以使用默认ACL。在对一个目录设置了默认的ACL以后,每个在目录中创建的文件都会自动继承目录的默认ACL作为自己的ACL。用setfacl的-d选项就可以实现:

jiad4701@urts12:~/>setfacl -d --set g:medien:rwx studip

  • 备份和恢复ACL


cp和mv都支持ACL,只是cp命令需要加上 -p 参数,但是tar等常见的备份工具是不会保留目录和文件的ACL信息的。如果要备份和恢复带有ACL的文件和目录,那么可以先把ACL备份到一个文件里。以后用--restore选项来回恢复这个文件中保存的ACL信息:

备份:
jiad4701@urts12:~/htdocs> getfacl -R studip > studip.acl

恢复:
jiad4701@urts12:~/htdocs> setfacl --resstore studip.acl

1 条评论:

  1. 对于不熟悉命令行的人可以试一试这个图形化界面的程序来操作ACL。
    详请参见:http://rofi.pinchito.com/eiciel/

    回复删除