符号链接将"权限被拒绝"...给root

Xke*_*per 10 linux symlink file-permissions

我写了一个简单的脚本来自动创建一个符号链接.

#!/pseudo
today = "/tmp/" + date("Y-m-d")
exec("ln -sf " + today + " /tmp/today")
Run Code Online (Sandbox Code Playgroud)

很简单; 得到今天的日期并制作符号链接.理想情况下,午夜后运行,-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 ..
Run Code Online (Sandbox Code Playgroud)

请注意,它工作正常,所有权限都是世界可读的,一切看起来都不错.

但如果其他人想要使用这个链接(我们会说,root,但任何其他用户都有这个问题),会发生一些非常奇怪的事情:

root /tmp# cd today
bash: cd: today: Permission denied
Run Code Online (Sandbox Code Playgroud)

我完全不知道为什么会这样.我也试过创建链接ln -s -n -f(不是" --no-dereferencing"很好解释),但出现了同样的问题.

wen*_*zul 12

由于/ tmp通常设置了粘滞位,因此对/ tmp/today的访问被拒绝protected_symlinks.您可以通过设置禁用此保护

sysctl -w fs.protected_symlinks=0
Run Code Online (Sandbox Code Playgroud)

protected_symlinks:

长期存在的一类安全问题是基于符号链接的使用时间检查时间种族,最常见于/ tmp这样的世界可写目录.利用此缺陷的常用方法是在遵循给定符号链接时跨越特权边界(即根进程遵循属于另一个用户的符号链接).有关多年来数百个示例的可能不完整列表,请参阅:http: //cve.mitre.org/cgi-bin/cvekey.cgi?keyword =/tmp

设置为"0"时,符号链接跟随行为不受限制.

设置为"1"时,只有在粘性世界可写目录之外,或者符号链接和跟随符的uid匹配时,或者目录所有者与符号链接的所有者匹配时,才允许遵循符号链接.

这种保护基于Openwall和grsecurity的限制.

欲知详情检查这个.