如何获得对 Gigolo 挂载的共享的 sudo 访问权限

Fri*_*dFX 0 gvfs fuse gigolo

正如在网上这里找到,我可以使用 Gigolo 挂载 Windows 共享,甚至可以通过终端通过~/.gvfs/share on server/目录访问它,例如:

ls ~/.gvfs/share\ on\ server/
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试通过命令访问同一目录时sudo,例如

sudo ls ~/.gvfs/share\ on\ server/
Run Code Online (Sandbox Code Playgroud)

失败了:

ls: cannot access /home/user/.gvfs/share\ on\ server/: Permission denied
Run Code Online (Sandbox Code Playgroud)

关于如何sudo访问现有 Gigolo 挂载共享的任何建议?或者,如何运行 Gigolo 以sudo访问共享?

Mal*_*ppa 6

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. 这将允许您的用户稍后使用您想要的allow_root选项启动 gvfs-fuse 守护进程。以下命令可以快速为您完成:

$ sudo sed -i -e 's/#user_allow_other/user_allow_other/' /etc/fuse.conf
Run Code Online (Sandbox Code Playgroud)

2) 将您自己的用户添加到fuse组中,以便您可以阅读文件/etc/fuse.conf。否则,上一步中的更改将无效。

$ sudo addgroup USERNAME fuse
$ newgrp fuse
Run Code Online (Sandbox Code Playgroud)

USERNAME当然,替换为您的用户名。该newgrp命令避免了注销并重新登录以使组更改生效的需要。通过发出以下命令检查它是否有效:

$ groups

并验证它fuse是否列在您的用户所属的组中。如果它不起作用,请注销并重新登录。无论如何,/etc/fuse.conf在您继续下一步之前,您的用户应该能够阅读。

3) 您现在可以使用该allow_root选项重新启动 gvfs-fuse 守护进程。首先,卸载您的~/.gvfs目录:

$ fusermount -zu $HOME/.gvfs
Run Code Online (Sandbox Code Playgroud)

接下来,要重新启动守护程序,请在 Ubuntu 13.10 上发出以下命令:

$ killall gvfsd-fuse
$ /usr/lib/gvfs/gvfsd-fuse -o allow_root $HOME/.gvfs
Run Code Online (Sandbox Code Playgroud)

在较旧的 Ubuntu 版本中,后两个命令可能是:

$ killall gvfs-fuse-daemon
$ /usr/lib/gvfs/gvfs-fuse-daemon -o allow_root $HOME/.gvfs
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

将其保存到文件并使文件可执行:

chmod 755 /path/to/the/file
Run Code Online (Sandbox Code Playgroud)

这个脚本现在应该在登录时自动执行。要了解如何自动启动应用程序,请参阅如何在登录时自动启动应用程序?.

关于这个问题的更多讨论可以在这里找到:https : //lists.ubuntu.com/archives/ubuntu-users/2008-November/165644.html

  • 好的,事情是这样的。出于某种原因,您的系统没有创建组 `fuse`,因此没有使 `/etc/fuse.conf` 属于组 `fuse`。您创建了组,但您还需要相应地更改文件的所有权以模拟正常行为:`sudo chown root:fuse /etc/fuse.conf` 会处理这个问题。根据`/etc/group`,你的用户`nuzz` 已经是`fuse` 组的一部分。请使用命令 `groups` 确保确实如此。如果它没有显示`fuse`,请尝试注销并重新登录。然后,您应该可以继续进行答案的第 3 步。 (2认同)