发现网络上或者这里,我可以使用 Gigolo 挂载 Windows 共享,甚至可以通过终端通过目录访问它~/.gvfs/share on server/
,例如:
ls ~/.gvfs/share\ on\ server/
不幸的是,当我尝试通过命令访问同一目录时sudo
,例如
sudo ls ~/.gvfs/share\ on\ server/
失败的原因如下:
ls: cannot access /home/user/.gvfs/share\ on\ server/: Permission denied
关于如何访问sudo
现有的 Gigolo 安装的共享,您有什么建议吗?或者,如何运行 Gigolo 才能访问sudo
共享?
答案1
Gigolo 是 的前端gvfs
。gvfs
使用 FUSE(用户空间中的文件系统)来挂载网络设备(例如 Windows 共享)。除了挂载它的用户之外,其他用户通常无法读取此类挂载点,即使是root
。为什么?Karl Auer 建议这里原因是
仅仅因为您在一个系统上拥有 root 访问权限并不意味着您应该被允许查看其他人在其他系统上有权访问的文件。我确信这就是 .gvfs 目录以这种方式管理的原因。
也就是说,如果你是机器 X 上的用户 A,并且你将机器 Y 上的某个目录(你也有登录名)挂载到机器 X 上的某个位置,那么root
机器 X 就不应该能够读取该目录,因为root
机器 X 通常可能根本没有对机器 Y 的访问权限。
考虑到这一点,如果您确实想允许root
访问您的~/.gvfs
目录,您可以按以下步骤操作。
1) 编辑文件/etc/fuse.conf
并取消注释 行#user_allow_other
。这将允许您的用户稍后使用该选项启动 gvfs-fuse 守护进程allow_root
,这正是您想要的。以下命令可快速为您完成此操作:
$ sudo sed -i -e 's/#user_allow_other/user_allow_other/' /etc/fuse.conf
2) 将您自己的用户添加到该fuse
组,以便您可以读取该文件/etc/fuse.conf
。否则上一步中的更改将不起作用。
$ sudo addgroup USERNAME fuse
$ newgrp fuse
USERNAME
当然,请将其替换为您的用户名。该newgrp
命令避免了注销并重新登录以使组更改生效的需要。通过发出以下命令来检查它是否有效:
$ groups
并验证是否fuse
列在您的用户所属的组中。如果不起作用,请注销并重新登录。无论如何,/etc/fuse.conf
在您继续下一步之前,您的用户应该能够阅读。
3) 您现在可以使用该allow_root
选项重新启动 gvfs-fuse 守护进程。首先,卸载您的~/.gvfs
目录:
$ fusermount -zu $HOME/.gvfs
接下来,要重新启动守护进程,在 Ubuntu 13.10 上发出以下命令:
$ killall gvfsd-fuse
$ /usr/lib/gvfs/gvfsd-fuse -o allow_root $HOME/.gvfs
在旧版 Ubuntu 中,后两个命令可能改为:
$ killall gvfs-fuse-daemon
$ /usr/lib/gvfs/gvfs-fuse-daemon -o allow_root $HOME/.gvfs
4) 重新启动 Gigolo 并再次挂载您的 Windows 共享。root
现在应该能够读取您的~/.gvfs
目录。
就是这样!
为了使这些更改永久生效:
要使更改永久生效,您可以将步骤 3 中的三个命令写入一个小脚本,并在登录时自动启动。可能有更简洁的方法可以做到这一点,但这应该可行。您的脚本将包含以下内容:
!#/bin/bash
fusermount -zu $HOME/.gvfs
killall gvfsd-fuse
/usr/lib/gvfs/gvfsd-fuse -o allow_root $HOME/.gvfs
将其保存到文件并使该文件可执行:
chmod 755 /path/to/the/file
此脚本现在应在登录时自动执行。要了解如何自动启动应用程序,请参阅如何在登录时自动启动应用程序?。
关于此问题的更多讨论可以在这里找到: https://lists.ubuntu.com/archives/ubuntu-users/2008-November/165644.html
答案2
我在 18.04 上也有类似的要求,我想允许 root 访问安装的 Android 手机以gvfs
备份文件。我认为记录我所做的工作对那些在谷歌上搜索解决方案的人来说是值得的。所需步骤取自@Malte Skoruppas
答案并针对 18.04 进行了修改。
在 18.04 上,gvfs 挂载点不在/run/user/$UID/gvfs
。$HOME/.gvfs
在我的情况下,UID=1000。
登录后的情况是这样的:
gvfsd-fuse
在跑:
$ pgrep gvfsd-fuse -l
1856 gvfsd-fuse
挂载已存在:
$ mount | grep gvfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
并且 root 没有权限读取该目录
# ls /run/user/1000/gvfs
ls: cannot access '/run/user/1000/gvfs': Permission denied
普通用户具有读取权限,/etc/fuse.conf
因此我们不必创建保险丝组并将我们的用户添加到其中。
$ grep allow /etc/fuse.conf
# Set the maximum number of FUSE mounts allowed to non-root users.
# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other
为了授予root
访问权限,我进行了以下操作:
$ fusermount -zu /var/run/user/1000/gvfs/
$ pkill gvfsd-fuse
$ /usr/lib/gvfs/gvfsd-fuse -o allow_root /var/run/user/1000/gvfs/
$ mount | grep gvfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)
此后 root 可以访问该目录。
我不知道为什么显示 mountallow_other
而不是allow_root
。如果我gvfsd-fuse
用-o allow_other
运行,行为是一样的。