硬链接创建 - 权限?

硬链接创建 - 权限?

哪些权限会​​影响硬链接创建?文件所有权本身重要吗?


假设用户想要创建指向目录中alice文件的硬链接。target.txttarget-dir

  • alice都需要哪些权限?target.txttarget-dir
  • 如果target.txt由 user 拥有bill并且target-dir由 user 拥有chad,这会改变什么吗?

我尝试通过在ext4文件系统上创建以下文件夹/文件结构来模拟这种情况:

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

虽然alice可以创建到 的软链接target.txt,但她无法创建硬链接:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

如果alice拥有target.txt并且没有更改权限,则硬链接成功。我在这里缺少什么?

答案1

要创建硬链接,alice需要所有情况下write+execute的权限。target-dir所需的权限target.txt会有所不同:

  • 如果fs.protected_hardlinks = 1那么alice需要其所有权target.txt或至少是read+write其权限。
  • 如果fs.protected_hardlinks = 0那么任何权限集都可以;即使是000也可以。

这是对类似问题的回答缺少的信息可以回答这个问题。

此提交消息(强调我的):

在与系统文件位于同一分区上具有用户可写目录的系统上,一类长期存在的安全问题是基于硬链接的检查时间使用时间竞争,最常见于全局可写目录中像/tmp。利用此缺陷的常见方法是在遵循给定的硬链接时跨越权限边界(即根进程遵循另一个用户创建的硬链接)。此外,还存在一个问题,即用户可以“固定”可能存在漏洞的 setuid/setgid 文件,从而使管理员实际上无法完全升级系统。

解决方案是仅当用户已经是现有文件的所有者,或者他们已经具有对现有文件的读/写访问权限时才允许创建硬链接

答案2

alice需要至少的读取权限target.txt和写入+执行权限target-dir

现在,权限结构作为三重分离的集合工作:

  1. 用户权限:适用于用户拥有该节点。
  2. 组权限:适用于任何用户属于该组拥有该节点。
  3. 其他人的权限:适用于任何其他用户/组不拥有该节点。

因此,所有权问题仅影响所需权限所在的权限集alice,即:

  • 如果alice是所有者用户,则所需的权限必须在“用户”部分。
  • 如果alice是拥有它的组的一部分,则所需的权限必须位于“组”部分。
  • 如果alice不拥有它并且不属于拥有它的组,则所需的权限必须位于“其他”部分。

相关内容