我的机器中有 2 个用户:linuxlite
和otheruser
。
otheruser
有一个文件:
otheruser@linuxlite:~$ ls -l a
-rw-rw-r-- 1 otheruser otheruser 6 Mar 31 12:47 a
otheruser@linuxlite:~$ cat a
hello
linuxlite
在以下位置创建了一个文件和一个符号链接/tmp
:
otheruser@linuxlite:~$ ls -l /tmp/file /tmp/link
-rw-rw-r-- 1 linuxlite linuxlite 3 Mar 31 12:49 /tmp/file
lrwxrwxrwx 1 linuxlite linuxlite 17 Mar 31 12:49 /tmp/link -> /home/otheruser/a
现在,虽然otheruser
可以读/tmp/file
和/home/otheruser/a
,但他不能读/tmp/link
:
otheruser@linuxlite:~$ cat /tmp/file
hi
otheruser@linuxlite:~$ cat /home/otheruser/a
hello
otheruser@linuxlite:~$ cat /tmp/link
cat: /tmp/link: Permission denied
我的问题是,如果他可以读取目标以及他在与符号链接相同的目录中拥有的另一个文件,为什么不能otheruser
读取他拥有的符号链接?linuxlite
如果重要的话,那么权限/tmp
是:
otheruser@linuxlite:~$ ls -l -d /tmp
drwxrwxrwt 9 root root 4096 Mar 31 13:17 /tmp
发行版是Linux Lite 3.0,内核是:Linux 4.4.0-21.generic (i686)
答案1
Linux Lite 基于 Ubuntu,限制世界可写粘性目录中的符号链接(包括/tmp
):那里的符号链接只能由其所有者取消引用。
如果您在其他地方(例如)创建符号链接/home/linuxlite
,您将能够以您期望的方式取消引用它。
(Ubuntu 并不是唯一一个以这种方式运行的发行版;我提到了 Linux Lite 和 Ubuntu 之间的联系,因为这方面的文档似乎是特定于 Ubuntu 的。)