即使在同一组中也无法读取文件

即使在同一组中也无法读取文件

我为用户创建了指向一个文件(位于另一个用户主目录中)的新符号链接。但是即使同组用户且文件权限为755也无法读取。

[lmurugan@localhost ~]$ ls -lrt
total 0
lrwxrwxrwx. 1 root       root       34 Feb 16 16:36 3000.log -> /home/dkanagaraj/.forever/f3-w.log
lrwxrwxrwx. 1 dkanagaraj dkanagaraj 34 Feb 16 16:38 3030.log -> /home/dkanagaraj/.forever/z_lZ.log
[lmurugan@localhost ~]$ less 3030.log
3030.log: Permission denied


[lmurugan@localhost ~]$ ls -lrt
total 0
lrwxrwxrwx. 1 root       root       34 Feb 16 16:36 3000.log -> /home/dkanagaraj/.forever/f3-w.log
lrwxrwxrwx. 1 dkanagaraj dkanagaraj 34 Feb 16 16:38 3030.log -> /home/dkanagaraj/.forever/z_lZ.log

[lmurugan@localhost ~]$ id
uid=1006(lmurugan) gid=1000(dkanagaraj) groups=1000(dkanagaraj)

[lmurugan@localhost ~]$ id dkanagaraj
uid=1000(dkanagaraj) gid=1000(dkanagaraj) groups=1000(dkanagaraj),10(wheel)

[dkanagaraj@localhost .forever]$ ls -lrt /home/dkanagaraj/.forever/f3-w.log
-rwxr-xr-x. 1 dkanagaraj dkanagaraj 425361 Feb 16 16:46 /home/dkanagaraj/.forever/f3-w.log

[dkanagaraj@localhost .forever]$ ls -lrt /home/dkanagaraj/.forever/z_lZ.log
-rwxr-xr-x. 1 dkanagaraj dkanagaraj 570027 Feb 16 16:46 /home/dkanagaraj/.forever/z_lZ.log

答案1

您混淆了命令的输出。

首先,“3030.log”是一个链接

[lmurugan@localhost ~]$ ls -lrt 
total 0 
lrwxrwxrwx. 1 root       root       34 Feb 16 16:36 3000.log -> /home/dkanagaraj/.forever/f3-w.log
lrwxrwxrwx. 1 dkanagaraj dkanagaraj 34 Feb 16 16:38 3030.log -> /home/dkanagaraj/.forever/z_lZ.log

第一个位置中的“l”与“-> /home/dkanagaraj/.forever/z_lZ.log”一样显示这一点

因此显示您链接到的文件的权限以及父目录 dkanagaraj 和 .forever 的权限

ls -l /home/dkanagaraj/.forever/z_lZ.log

http://linuxcommand.org/lts0070.php有关文件和目录权限的讨论。

答案2

bodhi.zazen 的答案是正确的,但我想回答得有点不同:权限附加到 inode,符号链接及其目标都有自己的 inode。考虑问题, 以下:

$ ls -l foo issues
lrwxrwxrwx 1 jklowden jklowden    6 Feb 18 16:46 foo -> issues
-rw-rw-r-- 1 jklowden jklowden 2380 Jan 29 14:02 issues

$ stat foo
  File: ‘foo’ -> ‘issues’
  Size: 6               Blocks: 0          IO Block: 4096   symbolic link
Device: 811h/2065d      Inode: 11406493    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/jklowden)   Gid: ( 1000/jklowden)
Access: 2016-02-18 16:46:52.224805576 -0500
Modify: 2016-02-18 16:46:40.905398163 -0500
Change: 2016-02-18 16:46:40.905398163 -0500
 Birth: -

$ stat issues 
  File: ‘issues’
  Size: 2380            Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d      Inode: 11405468    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/jklowden)   Gid: ( 1000/jklowden)
Access: 2016-01-29 14:05:26.122808636 -0500
Modify: 2016-01-29 14:02:52.106866058 -0500
Change: 2016-01-29 14:02:52.106866058 -0500
 Birth: -

通常,文件的权限控制您可以使用它执行的操作,但正如大多数系统上发生的那样,符号链接文件的权限不控制任何内容。 (你可以chmod 0 foo, 还是ln -sf foo 酒吧有效。)这里,inode 11405468 上的权限才是最重要的。

[以下内容已更正。感谢 dave_thompson_085 的澄清评论。]

在您的示例中,真实文件(不是符号链接)当然是f3-w.log.由于它属于您的组 dkanagaraj,并且具有组读取权限,因此您希望能够读取其内容,无论您使用什么符号链接。

读取该文件的权限是由它的路径控制。 访问文件时,需要对路径名中列出的所有目录具有执行权限。Linux编程接口,第 15.4.3 节,第 297 页)。因为符号链接使用其目标的绝对路径名,德卡纳加拉吉群体需求执行每个路径名组件的权限:/homedkanagaraj.forever。路径权限约束适用于任何文件,包括符号链接本身,但我认为您已经涵盖了。

相关内容