硬链接、符号链接和 ACL 文件夹权限如何交互?

硬链接、符号链接和 ACL 文件夹权限如何交互?

这对我来说有点难以意识到,但我遇到了一种非常奇怪的行为,涉及ACL 扩展文件权限和硬/符号链接。我会尽力让我的问题简短明了,但我首先必须向您展示我目前情况的一个例子,因为我不知道发生了什么或它叫什么。


假设我们有一个有两个用户的系统,我们称他们为alicebob,他们在一定程度上共享一个名为 的文件夹,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位于该文件夹中stuffalice也无法访问它。因为该文件属于bob:bobalice所以必须使用“其他”文件权限来访问它,这是---根据上述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的主目录的搜索(执行位)访问权限,因此访问失败。

相关内容