- 察看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
对于不熟悉命令行的人可以试一试这个图形化界面的程序来操作ACL。
回复删除详请参见:http://rofi.pinchito.com/eiciel/