符号链接不起作用,使用标准 UBUNTU 16 LTS...它显示“权限被拒绝”,我期望获得访问权限,即使在chown
.
完整示例:
sudo rm /tmp/file.txt # if exist, remove
cd ~
sudo chmod 666 data/file.txt
ls -l data/file.txt # "-rw-rw-rw-" as expected
more data/file.txt # working fine
sudo ln -sf $PWD/data/file.txt /tmp/file.txt # fine
ls -l /tmp/file.txt # "lrwxrwxrwx", /tmp/file.txt -> /home/thisUser/file.txt
more /tmp/file.txt # fine
sudo chown -h postgres:postgres /tmp/file.txt
sudo more /tmp/file.txt # NOT WORK! but its is sudo! and 666!
答案1
这些操作应该会产生错误消息:没有权限。目录/tmp
具有包括粘滞位在内的权限。该错误是内核配置的结果fs.protected_symlinks
。
要显示设置,sysctl fs.protected_symlinks
.1
设置时这等于。暂时禁用,即不建议, sysctl fs.protected_symlinks=0
.永久关闭,这又是不建议, sysctl -w fs.protected_symlinks=0
.
看patchwork.kernel.org了解更多信息。
为了避免链接失效,下面是来自超链接的符号链接的主要摘要段落。
基斯·库克 - 2012 年 7 月 2 日晚上 8:17
这为 Linux VFS 添加了符号链接和硬链接限制。
符号链接:
一类长期存在的安全问题是基于符号链接的检查时间使用时间竞争,最常见于世界可写目录(如 /tmp)。利用此缺陷的常见方法是在遵循给定的符号链接时跨越权限边界(即根进程遵循属于另一个用户的符号链接)。有关多年来可能不完整的数百个示例的列表,请参阅: http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
解决方案是仅在粘性世界可写目录之外、或者当符号链接和追随者的 uid 匹配、或者当目录所有者与符号链接的所有者匹配时,才允许遵循符号链接。