如何获取由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
当然,用您的用户名替换USERNAME
。 newgrp
命令可以避免再次注销和重新登录,以使组更改生效。 通过发出命令检查它是否有效:
$ 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
,行为是一样的。