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

正如在网络或这里找到的 ,我可以使用Gigolo来安装Windows共享,甚至通过终端访问它,通过~/.gvfs/share on server/目录~/.gvfs/share on server/~/.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访问权限?

Gigolo是gvfs的前端。 gvfs使用FUSE(用户空间中的文件系统)来安装网络设备(例如Windows共享)。 除了安装它的用户之外,其他用户通常无法读取此类挂载点,即使是root用户也是如此。 为什么? Karl Auer 在这里建议的原因是

仅仅因为您在一个系统上具有root访问权限并不意味着您应该被允许查看其他人可以在其他系统上访问的文件。 我很确定这就是为什么.gvfs目录的管理方式。

也就是说,如果你是机器X上的用户A,并且你从机器Y(你也有登录)安装一些目录到机器X上的某个地方,那么机器X上的root应该不能读取它,因为机器X上的root通常根本不能访问机器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 

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

 $ sudo addgroup USERNAME fuse $ newgrp fuse 

当然,用您的用户名替换USERNAMEnewgrp命令可以避免再次注销和重新登录,以使组更改生效。 通过发出命令检查它是否有效:

$ groups

并validationfuse是否列在您的用户所属的组中。 如果它不起作用,请退出并重新登录。 无论如何,在继续下一步之前,您的用户应该能够阅读/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

我在18.04有一个类似的要求,我想让root访问一个安装在gvfs中的Android手机,以便备份文件。 我认为值得记录我为谷歌搜索解决方案所做的事情。 所需步骤取自@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之后可以访问dir。

我不知道为什么mount显示allow_other而不是allow_root 。 如果我用-o allow_other运行gvfsd-fuse ,行为是一样的。