Sep 27

[原]启动访问控制列表ACL 不指定

linuxing , 18:25 , 基础知识 » 系统命令 , 评论(1) , 引用(0) , 阅读(20855) , Via 本站原创 | |
 访问控制列表(Access Control List)已经加入核心有很长一段时间了,包括红旗DC 4.1已经有该驱动可以加载。但最近才发现,原来自己对它还不熟悉,特重新温习一遍。
一、为什么
 为什么要使用ACL?原因在于使用标准的基于用户、用户组的文件和目录权限设置,无法为两个或多个以上用户指定不同的权限。例如,设定某文件的用户、用户组权限,但同组不同用户的权限就单独设置了。
 而启动ACL后,可以在定义文件或目录的许可控制方面大大地增强灵活性,也有助于在Samba或其他应用及文件系统中使用。
二、启动
默认的加载选项是没有启动ACL支持的,原来是:
mount|grep /dev/sdb
/dev/sdb on /data type ext3 (rw)

我们可以这样操作:
umount /dev/sdb
mount -o acl /dev/sdb /data
mount|grep /dev/sdb
/dev/sdb on /data type ext3 (rw,acl)

也可以修改/etc/fstab文件为:
引用
/dev/sdb /data ext3 defaults,acl 0 0

三、使用
1、准备
mkdir /data/test;cd /data/test
touch file1 file2

原状态:
引用
# ll
total 0
-rw-r--r--  1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2

2、设置
1)对用户设置
允许user1用户读和执行权限:
# setfacl -s u:user1:rx file1

查看,会看到在权限后面多出一个+号,而且其设置高于标准权限:
引用
# ll
total 4
-rw-r-xr--+ 1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:r-x
group::r--
mask::r-x
other::r--

2)对用户组设置
允许group1用户组对文件读写权限:
setfacl -s g:group1:rw file1

查看:
引用
[root@ora02 test]# ll
total 4
-rw-rwxr--+ 1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
[root@ora02 test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:r-x
group::r--
group:group1:rw-
mask::rwx
other::r--

3)修改
修改user1对file的权限为只读:
引用
[root@ora02 test]# setfacl -m u:user1:r file1
[root@ora02 test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:r--
group::r--
group:group1:rw-
mask::rw-
other::r--

※-s 和-m的差别在于,-m会覆盖原来的ACL设置,而-s不会。
4)删除
删除指定用户或用户组的权限:
引用
[root@ora02 test]# setfacl -x u:user1 file1
[root@ora02 test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
group:group1:rw-
mask::rw-
other::r--

删除所有的ACL权限:
引用
[root@ora02 test]# setfacl -b file1
[root@ora02 test]# ll
total 0
-rw-r--r--  1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
[root@ora02 test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::r--

4、设置默认权限
默认权限只能对目录有效,对文件是无法设置的。
1)准备
引用
[root@ora02 test]# mkdir hoho
[root@ora02 test]# chown -R user1:group1 hoho
[root@ora02 test]# ll
total 4
-rw-r--r--  1 root  root      0 Sep 27 16:47 file1
-rw-r--r--  1 root  root      0 Sep 27 16:47 file2
drwxr-xr-x  2 user1 group1 4096 Sep 27 16:59 hoho

2)设置
引用
[root@ora02 test]# setfacl -m d:g:group1:rw hoho
[root@ora02 test]# ll
total 8
-rw-r--r--  1 root  root      0 Sep 27 16:47 file1
-rw-r--r--  1 root  root      0 Sep 27 16:47 file2
drwxr-xr-x+ 2 user1 group1 4096 Sep 27 16:59 hoho
[root@ora02 test]# getfacl hoho
# file: hoho
# owner: user1
# group: group1
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:group1:rw-
default:mask::rwx
default:other::r-x

3)优先级
我把use2用户也加入到group1组,但独立设置权限为只读:
[root@ora02 test]# usermod -g group1 user2
[root@ora02 test]# setfacl -m u:user2:r hoho

尝试:
引用
# su - user2
-bash-3.00$ cd /data/test/
-bash-3.00$ touch hoho/good
touch: cannot touch `hoho/good': Permission denied

※可以看到,最具体的ACL是优先于默认的ACL
四、相关操作
1、拷贝
原状态:
[root@ora02 test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--

第一次拷贝:
引用
[root@ora02 test]# cp file1 file3
[root@ora02 test]# ll
total 4
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
-rw-r--r--  1 root root 0 Sep 27 17:06 file3

第二次拷贝(使用-p参数):ACL权限保留,-a选项也可以
引用
[root@ora02 test]# cp -p file1 file4
[root@ora02 test]# getfacl file4
# file: file4
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
[root@ora02 test]# ll
total 8
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file1
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
-rw-r--r--  1 root root 0 Sep 27 17:06 file3
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file4

※注意:
如果从一个支持ACL的文件系统向一个不支持ACL的文件系统移动或带ACL属性的拷贝,则会得到类似下面这样的错误提示:
引用
cp: preserving permissions for `filename': Operation not supported

2、移动
也能保持ACL权限。
引用
[root@ora02 test]# mv file1 file5
[root@ora02 test]# ll
total 8
-rw-r--r--  1 root root 0 Sep 27 16:47 file2
-rw-r--r--  1 root root 0 Sep 27 17:06 file3
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file4
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file5

3、拷贝ACL权限
当对多个文件或目录执行同样的操作的话,我们可以从原文件获得权限设置:
引用
[root@ora02 test]# getfacl file5 | setfacl --set-file=- file2
[root@ora02 test]# ll
total 12
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file2
-rw-r--r--  1 root root 0 Sep 27 17:06 file3
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file4
-rw-rw-r--+ 1 root root 0 Sep 27 16:47 file5

4、拷贝默认ACL权限
原来:
[
引用
root@ora02 test]# setfacl -m d:u:user1:rwx dir1
[root@ora02 test]# ll
total 24
drwxr-xr-x+ 2 root root 4096 Sep 27 17:15 dir1
drwxr-xr-x  2 root root 4096 Sep 27 17:15 dir2
-rw-rw-r--+ 1 root root    0 Sep 27 16:47 file2
-rw-r--r--  1 root root    0 Sep 27 17:06 file3
-rw-rw-r--+ 1 root root    0 Sep 27 16:47 file4
-rw-rw-r--+ 1 root root    0 Sep 27 16:47 file5

拷贝:
引用
[root@ora02 test]# getfacl -d dir1 | setfacl -d -M- dir2
[root@ora02 test]# getfacl dir2
# file: dir2
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

5、备份与恢复
引用
[root@ora02 test]# getfacl -R ./ > acl.bak.txt
[root@ora02 test]# setfacl --restore acl.bak.txt

6、打包
原来:
引用
[root@ora02 test]# setfacl -m u:user1:rx file1
[root@ora02 test]# ll
total 4
-rw-r-xr--+ 1 root root 0 Sep 27 17:29 file1

tar命令是不能保留ACL权限的,但可以使用star命令,而且必须指定Hex格式:
[root@ora02 test]# star -Hexustar -zv -acl -c f=file.star.gz *
a file1 0 bytes, 0 tape blocks
a hoho directory
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).

查看:(注意结果)
引用
[root@ora02 test]# tar tzvf file.star.gz
-rw-r-xr-- root/root         0 2006-09-27 17:29:22 file1
[root@ora02 test]# star tzvf file.star.gz
     0 -rw-r-xr--+ root/root Sep 27 17:29 2006 file1
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).

解压:
引用
[root@ora02 test]# mkdir hoho/
[root@ora02 test]# mv file.star.gz hoho/
[root@ora02 test]# cd hoho/
[root@ora02 hoho]# star -acl -zvx f=file.star.gz
x file1 0 bytes, 0 tape blocks
x hoho/ directory
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
[root@ora02 hoho]# ll
total 12
-rw-r--r--  1 root root  361 Sep 27 17:34 file.star.gz
-rw-r-xr--+ 1 root root    0 Sep 27 17:29 file1

五、附录
1、命令man翻译
引用
setfacl 2.2.23 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
 -m, --modify=acl        修改文件的ACL设置
 -M, --modify-file=file  从指定的文件读取ACL情况并用于加入设置后面跟的文件
 -x, --remove=acl        删除文件的指定ACL设置
 -X, --remove-file=file  从指定的文件读取ACL情况并用于移除后面跟的文件
 -b, --remove-all        删除全部ACL设置
 -k, --remove-default    删除默认ACL
     --set=acl           设置ACL来替换当前的ACL
     --set-file=file     从指定的文件读取ACL情况并用于设置后面跟的文件
     --mask              重新计算有效的正确的掩码
 -n, --no-mask           不重新计算有效的正确的掩码
 -d, --default           设置默认ACL
 -R, --recursive         递归模式,对全部目录及文件设置
 -L, --logical           跟随链接去设置实际文件
 -P, --physical          设置链接文件
     --restore=file      从指定的文件恢复ACL设置(由`getfacl -R'生成的)
     --test              只是测试

引用
getfacl 2.2.23 -- get file access control lists
Usage: getfacl [-dRLP] file ...
     --access            只显示ACL
 -d, --default           只显示默认的ACL
     --omit-header       不显示注释部分
     --all-effective     显示全部有效的权限
     --no-effective      显示无效的权限
     --skip-base         跳过只有基础权限的文件,不显示
 -R, --recursive         递归模式
 -L, --logical           跟随链接去设置实际文件
 -P  --physical          设置链接文件
     --tabular           使用tabular输出模式
     --numeric           不显示用户名、用户组,而用UID、GID代替print numeric user/group identifiers
     --absolute-names    在路径中不剥除'/'字符

2、参考文档
ACL访问控制系统
Linux文件系统ACL介绍
Tags: , ,
guest
2011/04/20 00:16
写得很不错,谢谢
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]