Sep
27
访问控制列表(Access Control List)已经加入核心有很长一段时间了,包括红旗DC 4.1已经有该驱动可以加载。但最近才发现,原来自己对它还不熟悉,特重新温习一遍。
一、为什么
为什么要使用ACL?原因在于使用标准的基于用户、用户组的文件和目录权限设置,无法为两个或多个以上用户指定不同的权限。例如,设定某文件的用户、用户组权限,但同组不同用户的权限就单独设置了。
而启动ACL后,可以在定义文件或目录的许可控制方面大大地增强灵活性,也有助于在Samba或其他应用及文件系统中使用。
二、启动
默认的加载选项是没有启动ACL支持的,原来是:
我们可以这样操作:
也可以修改/etc/fstab文件为:
三、使用
1、准备
原状态:
2、设置
1)对用户设置
允许user1用户读和执行权限:
查看,会看到在权限后面多出一个+号,而且其设置高于标准权限:
2)对用户组设置
允许group1用户组对文件读写权限:
查看:
3)修改
修改user1对file的权限为只读:
※-s 和-m的差别在于,-m会覆盖原来的ACL设置,而-s不会。
4)删除
删除指定用户或用户组的权限:
删除所有的ACL权限:
4、设置默认权限
默认权限只能对目录有效,对文件是无法设置的。
1)准备
2)设置
3)优先级
我把use2用户也加入到group1组,但独立设置权限为只读:
尝试:
※可以看到,最具体的ACL是优先于默认的ACL
四、相关操作
1、拷贝
原状态:
第一次拷贝:
第二次拷贝(使用-p参数):ACL权限保留,-a选项也可以
※注意:
如果从一个支持ACL的文件系统向一个不支持ACL的文件系统移动或带ACL属性的拷贝,则会得到类似下面这样的错误提示:
2、移动
也能保持ACL权限。
3、拷贝ACL权限
当对多个文件或目录执行同样的操作的话,我们可以从原文件获得权限设置:
4、拷贝默认ACL权限
原来:
[
拷贝:
5、备份与恢复
6、打包
原来:
tar命令是不能保留ACL权限的,但可以使用star命令,而且必须指定Hex格式:
查看:(注意结果)
解压:
五、附录
1、命令man翻译
2、参考文档
ACL访问控制系统
Linux文件系统ACL介绍
一、为什么
为什么要使用ACL?原因在于使用标准的基于用户、用户组的文件和目录权限设置,无法为两个或多个以上用户指定不同的权限。例如,设定某文件的用户、用户组权限,但同组不同用户的权限就单独设置了。
而启动ACL后,可以在定义文件或目录的许可控制方面大大地增强灵活性,也有助于在Samba或其他应用及文件系统中使用。
二、启动
默认的加载选项是没有启动ACL支持的,原来是:
mount|grep /dev/sdb
/dev/sdb on /data type ext3 (rw)
/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)
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
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
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--
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--
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--
[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--
[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--
[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
[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
[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
[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
-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--
# 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
[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
[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
[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
[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]# 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
[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
[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
[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).
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).
-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
[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 只是测试
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 在路径中不剥除'/'字符
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介绍
guest
2011/04/20 00:16
写得很不错,谢谢
分页: 1/1 1