ula*_*ula 3 linux permissions acl
我试图弄清楚为什么 ls 命令的输出发生了变化。我的意思是文件的组权限。
我创建了一个名为“file”的文件并更改了它的所有者和组:
[root@training group3]# touch file
[root@training group3]# ls -la file
-rw-r--r--. 1 root root 0 Sep 8 15:29 file
[root@training group3]# chown uczen file
[root@training group3]# chgrp group3 file
[root@training group3]# ls -la file
-rw-r--r--. 1 uczen group3 0 Sep 8 15:29 file
[root@training group3]# getfacl file
# file: file
# owner: uczen
# group: group3
user::rw-
group::r--
other::r--
Run Code Online (Sandbox Code Playgroud)
然后我为用户“ula”添加了额外的 rwx 权限:
[root@training group3]# setfacl -m u:ula:rwx file
[root@training group3]# getfacl file
# file: file
# owner: uczen
# group: group3
user::rw-
user:ula:rwx
group::r--
mask::rwx
other::r--
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么 ls -la 命令(下面)的输出现在显示该组的“rwx”,而不是上面 getfacl 显示的“r--”。如果通过 setfacl 我只为某些用户 (ula) 添加了权限,为什么该组的权限已(似乎?)更改
[root@training group3]# ls -la file
-rw-rwxr--+ 1 uczen group3 0 Sep 8 15:29 file
Run Code Online (Sandbox Code Playgroud)
我不记得我在哪里找到了解释的基本原理,但基本上是为了避免意外。
大多数人习惯于ls描述任何人都可以获得的所有访问权限时可见的三个集合。因此,如果“组”列保留其原始含义,则可能会产生意外的安全漏洞。例如,你有这个文件...
-rw-rwxr--+ 1 uczen group3 0 Sep 8 15:29 file
Run Code Online (Sandbox Code Playgroud)
...并且您想限制除所有者之外的任何人编写它,因此您运行chmod go-w,并最终得到以下结果:
-rw-r-xr--+ 1 uczen group3 0 Sep 8 15:29 file
Run Code Online (Sandbox Code Playgroud)
现在,如果您赶时间,您可能不会注意到+存在 ACL的迹象,或者不知道其含义。如果有一个 ACL 允许其他人写入该文件,那么您最终会获得比预期更开放的权限。
请注意,这也适用于程序,而不仅仅是人类。一些程序——例如ssh——检查 Unix 权限位并要求 group/other 根本没有权限。如果文件有一个宽松的 ACL,ssh就不会知道。(即使有人更新 OpenSSH 以了解 ACL,旧版本仍然不了解它们。)
因此,POSIX ACL 有一个特殊的mask:条目来设置授予默认组和所有 ACL 成员的所有权限的最大值,并且 Unix 权限的“组”字段更改为显示值而不是 Unix 组。例如,如果您这样做,您实际上将设置。mask:chmod g=rxmask::rx
因此,如果您看到rw-r--r--+那里,您可以确定没有人可以写入该文件,无论可能存在什么 ACL,并且实际上不必检查它们。类似地,如果程序看到权限为 0600 的文件,它也可以确定这一点,而无需有关 POSIX ACL(以及未来的 RichACL、NFSv4 ACL 或其他类型——如果它们遵循这种特殊行为)的特殊知识。
请注意,getfacl输出仍将默认组条目列为group::r--。如果您想实际更改该特定条目,则需要使用setfacl.
也可以看看:
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |