正如在网上或这里找到的,我可以使用 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
访问共享?
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