答案1
Linux 与大多数类 Unix 系统一样(Apple OS/X 是少数例外之一),在解析目标时会忽略符号链接的权限。
然而,与其他文件一样,符号链接的所有权与在设置了该位的目录(t
例如/tmp
.
为了能够删除或重命名 中的文件(无论是否有符号链接)/tmp
,您需要是该文件的所有者。这是人们可能想要更改符号链接的所有权(以授予或删除取消链接/重命名它的权限)的原因之一。
$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed
$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted
另外,正如马克·普洛特尼克在他的书中提到的现在已删除答案、备份和归档应用程序需要lchown()
将符号链接恢复到其原始所有者。另一种选择是在创建符号链接之前切换 euid 和egid,但这不会有效且会使符号链接提取到的目录的权限管理变得复杂。
答案2
posix 中没有 lchmod(),但有 fchmodat() 可以允许设置符号链接的权限。这仍然不需要评估符号链接的权限。