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

 访问控制列表(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介绍

红旗十周年用户大会——广州站(邀请函)
在Windows下使用红旗HA Cluster  配置工具
红旗Asianux 3.0 安装 Oracle 9i
从Oracle E-Delivery下载Oracle Enterprise Linux
安装及配置红旗高可用服务器 HA 5.0 [5] – 使用WebManager

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/113250.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论