可以手动跟踪符号链接路径,但“cd”返回权限被拒绝

可以手动跟踪符号链接路径,但“cd”返回权限被拒绝

我正在尝试访问目录/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

相关内容