这对我来说有点难以意识到,但我遇到了一种非常奇怪的行为,涉及ACL 扩展文件权限和硬/符号链接。我会尽力让我的问题简短明了,但我首先必须向您展示我目前情况的一个例子,因为我不知道发生了什么或它叫什么。
假设我们有一个有两个用户的系统,我们称他们为alice
和bob
,他们在一定程度上共享一个名为 的文件夹,stuff
具有以下权限:
bob@server:~$ getfacl /home/stuff getfacl:
Removing leading '/' from absolute path names
# file: home/stuff
# owner: alice
# group: bob
user::rwx
group::-wx
other::---
default:user::rwx
default:user:bob:rwx
default:group::-wx
default:mask::rwx
default:other::---
如您所见,该文件夹的所有者是alice
,但 bob 可以在其中写入内容并使其可执行,以便alice
可以在(+x 标志)中运行。但是,由于 ACL,每次 bob 将文件写入/复制到 时stuff
,文件的权限都会发生更改,最终如下所示。假设我们在bob
主目录中创建一个文件并将其移动到stuff
.
bob@server:~$ touch myfile
bob@server:~$ chmod 777 myfile
bob@server:~$ ls -la myfile
-rwxrwxrwx 1 bob bob 0 myfile
bob@server:~$ mv myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwx---+ 1 bob bob 0 /home/stuff/myfile
正如您所看到的,即使myfile
位于该文件夹中stuff
,alice
也无法访问它。因为该文件属于bob:bob
,alice
所以必须使用“其他”文件权限来访问它,这是---
根据上述ls
命令的最后一个。尽管如此,因为alice
是文件夹的所有者,她可以删除它们(尽管我收到有关myfile
受到保护的警告)。
有趣的来了。如果我不移动/复制myfile
,而是创建指向它的硬链接,请观察会发生什么。
bob@server:~$ ln myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwxrwx 2 bob bob 0 /home/stuff/myfile
显然alice
可以阅读和使用它。事实上,如果在我的系统上进行测试,她确实可以。尽管如此,符号链接似乎根本不起作用。
bob@server:~$ ln -s myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
lrwxrwxrwx 1 bob bob 4 /home/stuff/myfile -> /home/bob/myfile
这次,虽然该链接也设置了所有权限lrwxrwxrwx
(正是因为它是一个链接,任何人都必须能够关注它才能获得权限)但alice
无法执行它,只能将其删除。
我的问题:
- 为什么我首先可以通过硬链接“跳过”ACS 权限?
- 为什么同样的技巧不适用于符号链接?
- 这是故意的还是安全漏洞?
答案1
由于alice
对目录具有写权限stuff/
,即使 Alice 不是文件的所有者,她也可以修改其内容。
使用 Linux ACL 时,创建文件(或复制文件,因为副本在目标处创建新文件)时将应用权限,如下所述man acl
。移动文件mv
保留权限当文件可以移动而不复制时。看起来由于某种原因mv
无法移动文件并进行复制,因为 ACL 应用于myfile
.
创建硬链接是完全不同的。创建硬链接会创建一个目录条目(在目标目录),该条目指向相同的索引节点与原始文件一样,换句话说,同一个文件存在于多个目录中。文件权限(ACL 和传统 UNIX 权限)都存储在 inode 中。由于 和 都/home/stuff/myfile
指向/home/bob/myfile
同一个 inode,因此其中任何一个的任何更改都会反映到另一个。这就是为什么alice
可以访问硬链接。 (777)的权限/home/bob/myfile
与 的权限相同/home/stuff/myfile
。
相反,符号链接指向目标路径。访问符号链接指向的文件需要与访问目标文件相同的权限。可能alice
没有对bob
的主目录的搜索(执行位)访问权限,因此访问失败。