哪些权限会影响硬链接创建?文件所有权本身重要吗?
假设用户想要创建指向目录中alice
文件的硬链接。target.txt
target-dir
- 和
alice
都需要哪些权限?target.txt
target-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
。
现在,权限结构作为三重分离的集合工作:
- 用户权限:适用于用户拥有该节点。
- 组权限:适用于任何用户属于该组拥有该节点。
- 其他人的权限:适用于任何其他用户/组不拥有该节点。
因此,所有权问题仅影响所需权限所在的权限集alice
,即:
- 如果
alice
是所有者用户,则所需的权限必须在“用户”部分。 - 如果
alice
是拥有它的组的一部分,则所需的权限必须位于“组”部分。 - 如果
alice
不拥有它并且不属于拥有它的组,则所需的权限必须位于“其他”部分。