将“权限被拒绝”的符号链接...给根
Posted
技术标签:
【中文标题】将“权限被拒绝”的符号链接...给根【英文标题】:Symlink giving "Permission denied"... to root 【发布时间】:2014-12-17 05:56:43 【问题描述】:我编写了一个简单的脚本来自动创建符号链接。
#!/pseudo
today = "/tmp/" + date("Y-m-d")
exec("ln -sf " + today + " /tmp/today")
足够简单;获取今天的日期并进行符号链接。理想情况下在午夜之后使用 -f
运行,因此它只是就地更新它。
这很好用! ...为我的用户。
xkeeper /tmp$ ls -ltr
drwxrwxrwx xkeeper xkeeper 2014-10-21
lrwxrwxrwx xkeeper xkeeper today -> /tmp/2014-10-21/
xkeeper /tmp$ cd today
xkeeper /tmp/today$ cd ..
请注意,它工作正常,所有权限都是世界可读的,一切看起来都很好。
但是如果其他人想使用这个链接(我们会说,root,但任何其他用户都有这个问题),就会发生非常奇怪的事情:
root /tmp# cd today
bash: cd: today: Permission denied
我完全不知道为什么会这样。我也尝试使用ln -s -n -f
创建链接(不是“--no-dereferencing
”解释得很好),但出现了同样的问题。
【问题讨论】:
请注意,如果我使用 root 自己创建链接(所有其他用户都可以访问它),它工作得非常好,但这并不能真正解释为什么如果由 其他用户。#!/pseudo
是什么意思?
好吧,很奇怪。我尝试在/var/www/
的某个临时文件夹中以相同的方式创建一个链接,它按预期工作,没有权限错误。到底是什么。
@wenzul ...什么?这有参考吗?这是我第一次听到这样的事情,而谷歌搜索却一无所获。它也违背了根在 40 年的 Unix 和一般计算中的传统角色......
@andlabs 好的,我的意思是 /tmp 的这种差异行为,但可能使用了错误的词...
【参考方案1】:
由于 /tmp 通常设置了粘滞位,因此对 /tmp/today 的访问会因protected_symlinks
而被拒绝。
您可以通过设置禁用此保护
sysctl -w fs.protected_symlinks=0
protected_symlinks:
长期存在的一类安全问题是基于符号链接的 time-of-check-time-of-use 竞赛,最常见于 world-writable /tmp 等目录。利用该漏洞的常用方法 是在遵循给定符号链接时跨越特权边界(即 root 进程遵循属于另一个用户的符号链接)。对于一个可能 多年来数百个示例的不完整列表,请参阅: http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
当设置为“0”时,符号链接跟随行为不受限制。
当设置为“1”时,符号链接只允许在外面时被遵循 一个粘性的世界可写目录,或者当符号链接的 uid 和 追随者匹配,或者当目录所有者与符号链接的所有者匹配时。
此保护基于 Openwall 和 grsecurity 中的限制。
更多详情请查看this。
【讨论】:
这很有道理,并解释了为什么它可以在其他目录中工作...还解释了为什么以 root 身份创建链接有效(因为 root 还拥有/tmp
)。
很好的答案,这让我省了很多苦头。谢谢!以上是关于将“权限被拒绝”的符号链接...给根的主要内容,如果未能解决你的问题,请参考以下文章
“npm -g yarn”给出“权限被拒绝,符号链接......”但正确的权限确实存在[重复]
在终端中安装 Sublime Text 的命令行工具“subl”,权限被拒绝?