我正在尝试访问目录/usr/software/test/agnostic
。此路径涉及多个符号链接。如下面的记录所示,我无法直接 cd 到该路径,但我可以检查每一步并 cd 到符号链接的目录,直到到达目的地。为什么会这样?(我该如何修复它?)
Ubuntu 12.10,bash
> ls /usr/software/test/agnostic
ls: cannot access /usr/software/test/agnostic: Permission denied
> cd /usr/software/test
> cd agnostic
bash: cd: agnostic: Permission denied
> pwd -P
/x/eng/localtest/arch/x86_64-redhat-rhel5
> ls -al | grep agnostic
lrwxrwxrwx 1 root root 15 Oct 23 2007 agnostic -> noarch/agnostic
> ls -al | grep noarch
...
lrwxrwxrwx 1 root root 23 Oct 23 2007 noarch -> /x/eng/localtest/noarch
> cd noarch
> cd agnostic
bash: cd: agnostic: Permission denied
> ls -al | grep agnostic
lrwxrwxrwx 1 5808 dip 4 Oct 5 2010 agnostic -> main
> cd main
> ls
(correct output of `ls`)
> pwd
/usr/software/test/noarch/main
> pwd -P
/x/eng/localtest/noarch/main
答案1
作为记录在这里:
如果您在全局可写目录中有一个符号链接,并且该目录的粘性位设置为只有文件所有者才能删除它(例如 /tmp),则只有符号链接的所有者才能取消引用它。其他所有人在尝试执行任何操作时都会获得 EACCES,包括尝试 stat() 符号链接之类的操作。如果您遇到这种情况,您的 Ubuntu 内核将记录如下消息:
non-matching-uid symlink following attempted in sticky world-writable directory by cat (fsuid 915 != 2315)
yama_inode_follow_link: 16 callbacks suppressed
解决方法是将其设置kernel.yama.protected_sticky_symlinks
为 0(关闭)。
暂时执行此操作(测试是否能解决您的问题):
sudo -i
echo 0 > /proc/sys/kernel/yama/protected_sticky_symlinks
为了使更改永久生效(下次重启时),请在 sysctl.conf 文件中添加一行:
echo "kernel.yama.protected_sticky_symlinks = 0" | sudo tee -a /etc/sysctl.conf