ral*_*ldi 9 security linux unix filesystems permissions
在我的 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
Run Code Online (Sandbox Code Playgroud)
但是,作为 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
Run Code Online (Sandbox Code Playgroud)
而且,只是为了确保:
# echo $UID $EUID
0 0
Run Code Online (Sandbox Code Playgroud)
这只是 Ubuntu 8.10 的简单家庭安装,没有 NFS 或任何类似的东西。我看到该目录被标记为非世界可读(和非世界x-able),但我认为当你是 root 时,这些都不适用。例如,我可以在 /tmp 中创建一个 mode-000 目录并将其提供给非 root 用户,root 读取它、编写它都没有问题,无论如何。
知道发生了什么吗?
Zor*_*che 21
来自:http : //bugzilla.gnome.org/show_bug.cgi?id=534284
这都是不幸的,但它是由内核级别的熔断器人员做出的决定(安装 fs 的用户以外的用户无法访问它,包括 root),我们对此无能为力。
另见:https : //bugs.launchpad.net/gvfs/+bug/225361
解决方案似乎是更新您的/etc/fuse.conf并启用user_allow_other选项。您可能还需要让 gvfs 传递 allow_root 或 allow_other,但我不确定如何执行此操作。
当然,简单地放弃所有 GUI 工具(如 gvfs)并从命令行挂载文件系统可能会容易得多,您可以完全控制某些内容的确切挂载方式。
该.gvfs目录是 Gnome VFS 用户空间文件系统,它为虚拟文件系统(例如远程 samba 挂载、webdav 挂载)提供了直接的文件系统路径,因此 Gnome 可以在操作远程文件时将路径传递给不支持 VFS 的程序。
由于它是 FUSE 安装和应用程序,因此它可以拒绝 root 权限 - 在这种情况下执行访问检查的代理是 FUSE 应用程序,而不是内核。
默认情况下,gvfs守护进程只允许所有者遍历目录。