Как получить доступ sudo к акциям, смонтированным Gigolo

Как можно найти в Интернете или здесь, я могу использовать 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 ресурсам? Или как запустить Жиголо, чтобы получить sudo доступ к акциям?

2 ответа

Жиголо это фронтенд gvfs, gvfs использует FUSE (Файловая система в Userspace) для монтирования сетевых устройств (таких как общие папки Windows). Такие точки монтирования обычно не могут быть прочитаны другими пользователями, кроме того, кто его монтировал, даже root, Зачем? Карл Ауэр предполагает здесь, что причина в том, что

Тот факт, что у вас есть доступ с правами root в одной системе, не означает, что вам следует разрешить просматривать файлы, к которым другие люди имеют доступ в других системах. Я уверен, что именно поэтому каталог.gvfs управляется так, как он есть.

То есть, если вы являетесь пользователем A на машине X, и вы смонтировали какой-то каталог с машины 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) Теперь вы можете перезапустить демон gvfs-fuse с помощью allow_root вариант. Во-первых, размонтируйте ваш ~/.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 доступ к телефону Android, установленному в gvfs для того, чтобы сделать резервную копию файлов. Я подумал, что стоит задокументировать, что я сделал для людей, которые ищут решение. Необходимые шаги были взяты из @Malte Skoruppas ответ и изменен на 18.04.

18 апреля точка монтирования 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)

После этого рут может получить доступ к директории.

Я не знаю почему маунт показывает allow_other скорее, чем allow_root, Если я бегу gvfsd-fuse с -o allow_other поведение такое же.

Другие вопросы по тегам