分类: LINUX
2014-08-18 13:38:14
原文地址:[原创] POSIX ACL 学习笔记 - (下篇) 作者:ailms
#问题 :下面各种权限组合的结果
[答案] :
-)1、mask 高于 owner :
[root@mail tmp]#
getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::rw-
[root@mail tmp]#
setfacl -m m:rwx file1
[root@mail tmp]#
getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
mask::rwx
other::rw-
[root@mail tmp]#
ll file1
-rw-rwxrw-+ 1 root root 0 Nov 19 22:27 file1 # 注释 :可以看到 group
变了有 excute 权限
[root@mail tmp]#
./file1
[root@mail tmp]#
换成 bob 用户测试
[bob@mail ~]$
/tmp/file1
-bash: /tmp/file1: Permission denied
[bob@mail ~]$ cd
/tmp
[bob@mail tmp]$
./file1
-bash: ./file1: Permission denied
[bob@mail tmp]$
换成 test 用户 ,test 用户就是 root 组的
[root@mail tmp]#
id test
uid=501(test) gid=501(test)
groups=501(test),0(root)
[root@mail tmp]#
[test@mail ~]$
/tmp/file1
-bash: /tmp/file1: Permission denied
[test@mail ~]$
可以看到 owner
自动具有了
excute 权限,但 other
没有
-)2、mask 高于 group :
[root@mail tmp]#
setfacl -m m:rw file1
[root@mail tmp]#
getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
mask::rw-
other::rw-
[root@mail tmp]#
[test@mail ~]$ id
uid=501(test) gid=501(test) groups=0(root),501(test)
context=user_u:system_r:unconfined_t
[test@mail ~]$
[test@mail tmp]$
echo "date" >> file1
-bash: file1: Permission denied # 注释 :可以看到 test 用户虽然属于 root 组也不能写
[test@mail tmp]$
[test@mail tmp]$
newgrp root # 注释 :切换
primary group 为 roo 组
[test@mail tmp]$
id
uid=501(test) gid=0(root) groups=0(root),501(test)
context=user_u:system_r:unconfined_t
[test@mail tmp]$ echo
"ok" > file1
bash: file1: Permission denied # 注释 ;还是不允许写文件
[test@mail tmp]$
-)3、mask 高于 other :
[root@mail tmp]#
getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
mask::rw-
other::r--
[root@mail tmp]#
[bob@mail tmp]$
echo "ok" > file1
-bash: file1: Permission denied # 注释 :同样是不具备 w 权限
[bob@mail tmp]$
-)4、mask 小于 owner :
[root@mail tmp]#
chmod 777 file1
[root@mail tmp]#
ll file1
-rwxrwxrwx 1 root
root 0 Nov 20 11:03 file1
[root@mail tmp]#
setfacl -m m:rx file1
[root@mail tmp]#
getfacl file1
# file: file1
# owner: root
# group: root
user::rwx # 注释 :owner 不受影响
group::rwx #effective:r-x # 注释 :但 group
变成了没有 w 权限
mask::r-x
other::rwx #
注释 :而 other
保留写权限
[root@mail tmp]#
现在由 test 用户(属于 root 组的)的进行写测试
[test@mail tmp]$
echo "ok" > file1
bash: file1: Permission denied # 注释 :的确不能写。
[test@mail tmp]$
再由 bob 用户(属于 other)的进行写测试 :
[bob@mail tmp]$
id
uid=500(bob) gid=500(bob) groups=500(bob)
context=user_u:system_r:unconfined_t
[bob@mail tmp]$
echo "ok" > file1
[bob@mail tmp]$
[bob@mail tmp]$
cat file1
ok # 注释 :可以进行写操作
[bob@mail tmp]$
-)5、mask 小于 group :
见上面
-)6、mask 小于 other :
见上面
总结 :
-)1、当 mask 高于 group、other 权限时,group、other 还是保持原来的权限,但 owner 可以获得和 mask 一样的权限
===============================================================================================
#问题 :同上,为什么 mask 不影响 other ?
[答案] :
[root@mail tmp]# touch file1
[root@mail tmp]# chmod o+w file1
[root@mail tmp]# ll file1
-rw-r--rw- 1 root root 0 Nov 20 11:20 file1
[root@mail tmp]# setfacl -m m:r file1
[root@mail tmp]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::rw- # 注释 :并没有显示 effective
[root@mail tmp]#
[bob@mail tmp]$ echo "ok" > file1
[bob@mail tmp]$
bob 用户可以写文件
[test@mail tmp]$ echo "ok" > file1
bash: file1: Permission denied # 注释 :属于 root组的test用户不能写文件
[test@mail tmp]$
===============================================================================================
#问题 :如果用 chmod 修改了文件权限,acl 条目会自动变化吗?
[答案] :
会
[root@mail tmp]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::rw-
[root@mail tmp]# ll file1
-rw-r--rw-+ 1 root root 3 Nov 20
11:21 file1
[root@mail tmp]#
[root@mail tmp]# chmod 777 file1
[root@mail tmp]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
group::r-- # 注释 :可看到 group
还是只有读权限而已
mask::rwx
other::rwx
[root@mail tmp]#
[root@mail tmp]# ll file1
-rwxrwxrwx+ 1 root root 3 Nov 20
11:21 file1 #
注释 :但这里显示 group 有写权限
[root@mail tmp]#
[test@mail tmp]$ id
uid=501(test) gid=0(root) groups=0(root),501(test)
context=user_u:system_r:unconfined_t
[test@mail tmp]$ echo "ok" > file1
bash: file1: Permission denied # 注释 :group 的确不能写文件
[test@mail tmp]$
但 other 可写
[bob@mail tmp]$ echo "ok" > file1
[bob@mail tmp]$
===============================================================================================
#问题 :setfacl -d 设置
default ACL
[答案] :
[root@mail tmp]# setfacl --set d:u:bob:rw RPMS
[root@mail tmp]# getfacl RPMS
# file: RPMS
# owner: bob
# group: bob
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:bob:rw-
default:group::r-x
default:mask::rwx
default:other::r-x
[root@mail tmp]#
然后在 RPMS/ 下创建文件和子目录
[root@mail RPMS]# touch file1
[root@mail RPMS]# ll file1
-rw-rw-r--+ 1 root root 0 Nov 20
11:40 file1 # 注释 :可以看到有+号
[root@mail RPMS]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:bob:rw- # 注释 :bob 默认就可以读/写文件
group::r-x #effective:r-- # 注释 :但 group
只有 r 权限,没有了 x 权限,因为这是文件,默认是没有 x 权限的。
mask::rw- # 注释 :注意到这个 default mask 和 RPMS/
的 default mask 不同,这里没有 x 权限
other::r--
[root@mail RPMS]# mkdir subdir
[root@mail RPMS]# ll -d subdir
drwxrwxr-x+ 2 root root 4096 Nov
20 11:40 subdir
[root@mail RPMS]# getfacl subdir
# file: subdir
# owner: root
# group: root
user::rwx
user:bob:rw-
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bob:rw- # 注释 :对于子目录,bob 也默认有写权限
default:group::r-x # 注释 :由于是目录,所以默认为 r-x
default:mask::rwx # 注释 :group 和 other 都是等于 base
group、base other 权限
default:other::r-x
[root@mail RPMS]#
===============================================================================================
问题 :setfacl -k 删除
default ACL 条目
[答案] :
[root@mail tmp]# setfacl --test -k RPMS/
RPMS: *,
[root@mail tmp]#
[root@mail tmp]# setfacl --test -R -k RPMS/
RPMS: *,
RPMS/file1: *,*
RPMS/subdir: *,
[root@mail tmp]#
===============================================================================================
问题 :setfacl -m 和 -M 的操作是修改而不是覆盖。
[答案] :
两者都是修改,而不是覆盖。
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:rw-
user:test:rwx
group::r--
mask::rwx
other::r--
[root@mail tmp]# setfacl -m u:bob:rx file
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:r-x
user:test:rwx
group::r--
mask::rwx
other::r--
[root@mail tmp]#
可以看到 test 条目不受影响。
-m 和 -M 的差别在于,-M 是从文件读取操作,这个文件一般是
getfacl 的输出
[root@mail tmp]# getfacl RPMS/ >acl.file
[root@mail tmp]# setfacl -b RPMS/
[root@mail tmp]# setfacl -M acl.file RPMS/
[root@mail tmp]# getfacl RPMS/
===============================================================================================
#问题 :setfacl
-m 和 --set 的区别
[答案] :
-m 是修改,--set 是覆盖。
一般不建议使用 --set ,因为 --set 必须给出完整的定义,应该使用
--set-file
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:rw-
group::r--
group:test:rwx
mask::rwx
other::r--
[root@mail tmp]#
现在打算重新设置,bob 改为 rwx ,并去掉 test 组的权限
[root@mail tmp]# cat acl.file
# file: file
# owner: root
# group: root
user::rw-
user:bob:rwx
group::r--
mask::rwx
other::r--
[root@mail tmp]#
[root@mail tmp]# setfacl --set-file acl.file file
[root@mail tmp]#
[root@mail
tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:rwx
group::r--
mask::rwx
other::r--
[root@mail tmp]#
===============================================================================================
问题 :setfacl --no-mask 禁止自动计算 mask
[答案] :
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:rwx
group::r--
mask::rwx
other::r--
[root@mail tmp]# setfacl --no-mask -m u:bob:rx file
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:r-x
group::r--
mask::rwx # 注释 ;默认 mask 应该变成 r-x 的
other::r--
[root@mail tmp]#
===============================================================================================
问题 :同上,现在重新计算 mask
[答案] :
[root@mail tmp]# getfacl file > acl.file
[root@mail tmp]# setfacl
--set-file acl.file file
[root@mail tmp]#
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:r-x
group::r--
mask::rwx # 注释 :可以看到
--no-mask 是永久起作用的,除非你使用了 --mask 才能再次启用,现在 mask 并没有自动更新
other::r--
[root@mail tmp]# setfacl --mask
--set-file acl.file file
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:r-x
group::r--
mask::r-x # 注释 :现在 mask 变成了 r-x 了
other::r--
[root@mail tmp]#
===============================================================================================
问题 :setfacl -R 实现递归操作
[答案] :
[root@mail tmp]# getfacl RPMS/
# file: RPMS
# owner: bob
# group: bob
user::rwx
group::r-x
other::r-x
[root@mail tmp]#
[root@mail tmp]# setfacl --test -R -m u:bob:rw RPMS
RPMS:
u::rwx,u:bob:rw-,g::r-x,m::rwx,o::r-x,*
RPMS/file1:
u::rw-,u:bob:rw-,g::r--,m::rw-,o::r--,*
RPMS/subdir:
u::rwx,u:bob:rw-,g::r-x,m::rwx,o::r-x,*
RPMS/subdir/file2: u::rw-,u:bob:rw-,g::r--,m::rw-,o::r--,*
RPMS/subdir/file3:
u::rw-,u:bob:rw-,g::r--,m::rw-,o::r--,*
[root@mail tmp]#
===============================================================================================
问题 :setfacl 默认是如何处理 symbolic link 的?
[答案] :
默认是作用于 target
[root@mail tmp]# ll
total 120
-rw-r--r-- 1 root root
97 Nov 22 21:55 acl.file
-rw-r--r-- 1 root root 0 Nov 22 22:04 file
lrwxrwxrwx 1 root root 4 Nov 22 22:05 link -> file
[root@mail tmp]# setfacl --set-file acl.file link
[root@mail tmp]#
[root@mail tmp]# ll
total 120
-rw-r--r-- 1 root root
97 Nov 22 21:55 acl.file
-rw-rwxr--+ 1 root
root 0 Nov 22 22:04 file
lrwxrwxrwx 1 root root 4 Nov 22 22:05 link -> file
[root@mail tmp]#
===============================================================================================
#问题 :setfacl
--logical 和 --physical 的作用
[答案] :
--logical 是默认操作,见上面。--physical 则是跳过 symbolic link 和 target ,不做任何操作
[root@mail tmp]# setfacl --physical --set-file acl.file link
[root@mail tmp]#
[root@mail tmp]# ll
total 120
-rw-r--r-- 1 root root
97 Nov 22 21:55 acl.file
-rw-r--r-- 1 root root 0 Nov 22 22:04 file
lrwxrwxrwx 1 root root 4 Nov 22 22:05 link -> file
[root@mail tmp]#
可以看到 link 和 file 都没有变化
===============================================================================================
问题 ;setfacl -x 和 -X的用法
[答案] :
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:bob:r-x
group::r--
group:test:rwx
mask::rwx
other::r--
[root@mail tmp]# setfacl -x u:bob file
[root@mail tmp]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
group::r--
group:test:rwx
mask::rwx
other::r--
[root@mail tmp]#
可以看到 bob 条目不见了
===============================================================================================
问题 ;setfacl --restore 的用法
[答案] :
--restore 和 --set-file 不同,它不用指定要设置的文件,因为这些信息在文件中已经包含了
[root@mail tmp]# getfacl -R file RPMS/ > acl.file # 注释 :递归获得多个文件的信息
[root@mail tmp]# setfacl -b -R file RPMS/
[root@mail tmp]#
[root@mail tmp]# ll -d file RPMS/
-rw-r--r-- 1 root root 0 Nov 22 22:04 file
drwxr-xr-x 3 bob
bob 73728 Nov 22 10:37 RPMS/
[root@mail tmp]#
[root@mail tmp]# setfacl --restore acl.file
[root@mail tmp]# ll -d file RPMS/
-rw-rwxr--+ 1 root root 0 Nov 22 22:04 file
drwxrwxr-x+ 3 bob bob
73728 Nov 22 10:37 RPMS/
[root@mail tmp]#
可以看到 file 和 RPMS/
目录的 acl 设置又恢复了