如何获取 Gigolo 安装的共享的 sudo 访问权限

如何获取 Gigolo 安装的共享的 sudo 访问权限

发现网络上或者这里,我可以使用 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 是 的前端gvfsgvfs使用 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运行,行为是一样的。

相关内容