用户可以读取但 root 不能读取的目录?

用户可以读取但 root 不能读取的目录?

我的 homedir 下有一个名为“.gvfs”的目录。作为我的普通用户帐户,我可以正常读取它:

~ $ ls -lart ~raldi/.gvfs
total 4
dr-x------  2 raldi raldi    0 2009-05-25 22:17 .
drwxr-xr-x 60 raldi raldi 4096 2009-05-25 23:08 ..
~ $ ls -d ~raldi/.gvfs
dr-x------ 2 raldi raldi 0 2009-05-25 22:17 /home/raldi/.gvfs

但是,作为 root 我无法“ls”甚至“ls -d”它:

# ls ~raldi/.gvfs
ls: cannot access /home/raldi/.gvfs: Permission denied
# ls -d ~raldi/.gvfs
ls: cannot access /home/raldi/.gvfs: Permission denied

并且,为了确保:

# echo $UID $EUID
0 0

这只是 Ubuntu 8.10 的简单家庭安装,没有 NFS 或任何类似的东西。我看到该目录被标记为非全球可读(和非全球可读),但我认为当您是 root 时,这些都不适用。例如,我可以在 /tmp 中创建一个 mode-000 目录并将其提供给非 root 用户,并且 root 可以毫无困难地读取、写入它,等等。

知道发生什么事了吗?

答案1

从:http://bugzilla.gnome.org/show_bug.cgi?id=534284

这一切都很不幸,但是这是内核级别的 fuse 人员做出的决定(除了挂载 fs 的用户之外的其他用户无法访问它,包括 root 用户),我们对此无能为力。

另请参阅:https://bugs.launchpad.net/gvfs/+bug/225361

解决方案似乎是更新你的/etc/fuse.conf并启用用户允许其他选项。您可能还需要让 gvfs 传递 allow_root 或 allow_other,但我不确定如何执行此操作。

当然,放弃所有 GUI 工具(如 gvfs)并从命令行挂载文件系统可能会容易得多,因为在命令行中您可以完全控制某些东西的挂载方式。

答案2

.gvfs目录是 Gnome VFS 用户空间文件系统,它为虚拟文件系统(例如远程 samba 挂载、webdav 挂载)提供直接文件系统路径,因此 Gnome 在操作远程文件时可以将路径传递给不支持 VFS 的程序。

由于它是 FUSE 挂载和应用程序,因此它可以拒绝 root 权限 - 在这种情况下执行访问检查的代理是 FUSE 应用程序,而不是内核。

默认情况下,gvfs守护进程仅允许所有者遍历目录。

答案3

可能有以下几种情况,按可能性排序

  • 检查 /var/log/messages (或 /var/log/syslog)是否存在文件系统损坏
  • 你使用 SELinux 吗?
  • google 建议 lsattr ~raldi/.gvfs 可能表明该文件应用了特殊功能。

相关内容