Почему не удается найти read / run / user / 1000 / gvfs, даже если он работает от имени пользователя root?

34

Может кто-нибудь сказать мне, что я делаю не так, что это или как это исправить? Я запускаю Fedora 18 и получаю сообщение об ошибке

[root@servername /]# find . -name ngirc
find: `./run/user/1000/gvfs': Permission denied
[root@servername /]# 
[root@thinktank /]# pwd
/
[root@thinktank /]# ls -ltr ./run/user/1000
ls: cannot access ./run/user/1000/gvfs: Permission denied
total 0
d?????????? ? ?    ?      ?            ? gvfs
lrwxrwxrwx. 1 root root  17 May 28 12:30 X11-display -> /tmp/.X11-unix/X0
drwx------. 2 kal  kal  120 May 28 12:30 keyring-QjDw4b
drwx------. 2 kal  kal   40 May 28 12:30 gvfs-burn
drwx------. 2 kal  kal   60 May 28 12:30 krb5cc_5f0bcaf94f916d6b61696e2251a4dbb3
drwx------. 2 kal  kal   60 May 28 18:25 dconf
кал
источник
Вы не делаете ничего плохого, и я предлагаю просто игнорировать ошибку. Если это не приемлемо, как насчет исключения точки монтирования GVFS из findкомандной строки?
tripleee

Ответы:

33

Вы не делаете ничего плохого, и нечего исправлять. /run/user/$uid/gvfsили ~$user/.gvfsэто точка монтирования интерфейса FUSE для GVFS . GVFS - это виртуальная файловая система для Gnome, которая позволяет приложениям Gnome получать доступ к ресурсам, таким как серверы FTP или Samba, или к содержимому zip-файлов, например локальным каталогам. FUSE - это способ реализации драйверов файловой системы в виде пользовательского кода (вместо кода ядра). Шлюз GVFS-FUSE делает драйверы файловой системы GVFS доступными для всех приложений, а не только для тех, которые используют библиотеки Gnome.

Управлять границами доверия с файловыми системами FUSE сложно, потому что драйвер файловой системы работает как непривилегированный пользователь, в отличие от кода ядра для традиционных файловых систем. Чтобы избежать сложностей, по умолчанию файловые системы FUSE доступны только пользователю, выполняющему процесс драйвера. Даже root не может обойти это ограничение.

Если вы ищете файл только на локальных файловых системах, перейдите -xdevк find. Если вы хотите просмотреть несколько локальных файловых систем, перечислите их все.

find  / /home -xdev -name ngirc

Если файл присутствует со вчерашнего дня, вы можете попробовать locate ngircвместо этого ( locateпоиск в базе данных имен файлов, которая обычно обновляется ночью).

Если вы хотите пересечь точки монтирования GVFS, вы должны сделать это как соответствующий пользователь.

find / -name ngirc -path '/run/user/*/gvfs' -prune -o -path '/home/*/.gvfs' -prune -o -name ngirc -print
for d in /run/user/*; do su "${d##*/}" -c "find $d -name ngirc -print"; done
Жиль "ТАК - перестань быть злым"
источник
Спасибо за отличное объяснение GVFS и FUSE. Я попытался запустить 'find', как в вашем примере, и это сработало отлично
кал
Как FUSE предотвращает доступ root к файлам? Наверняка root имеет возможность отключить такие защиты.
Акинос
1
@Nat Root может изменить fsuid своего процесса на целевой uid, поэтому в смысле безопасности обходить защиту тривиально. Но функция контроля доступа в ядре запрещает доступ к root. Это явление также происходит с другими файловыми системами, например, root не может получить доступ к частным каталогам NFS без переключения на UID владельца.
Жиль "ТАК ... перестать быть злым"
2
чтобы «избежать осложнений» ... Ну, это, безусловно, создало одно огромное осложнение, так как я не могу использовать команду mount для сопоставления пути общего ресурса с более чистым именем папки. Доступ запрещен для root при использовании sudo mount.
Nuzzolilo
@Nuzzolilo Я понятия не имею, о чем ты говоришь. Если у вас есть проблема, задайте новый вопрос и обязательно объясните свой сценарий.
Жиль "ТАК - перестань быть злым"
10

Это проблема с предохранителями . Ни один пользователь, кроме владельца, не может читать. Чтобы обойти конфигурацию по умолчанию, попробуйте включить опцию user_allow_other. Эта опция указывается путем добавления ее в /etc/fuse.conf. Это не имеет значения, просто укажите опцию в пустой строке.

Кристофер
источник
Спасибо. Я не совсем понимаю, что такое предохранитель, но после прочтения небольшого количества сообщения об ошибке в вашем комментарии и комментария don_crissti, я предполагаю, что это связано с жестким диском USB, который я подключил, или моим сервером samba? Есть ли какие-либо проблемы безопасности, которые я должен учитывать при включении «user_allow_other», и есть ли другие варианты для монтирования, которые я должен рассмотреть? Спасибо.
кал
1
Спасибо, но на самом деле это не решение для меня, если никто не может использовать систему. Как я могу сказать, кто владелец? Я попытался отключить / отключить внешний жесткий диск и завершить работу сервера Samba. Все, что я действительно хочу сделать, это иметь возможность искать файл во всей файловой системе без ущерба для безопасности. Есть ли альтернатива FUSE и есть ли способ точно сказать, для чего он используется? Спасибо.
кал
askubuntu.com/questions/715637/… Я попробовал предложение @Christopher, но параметры командной строки не соблюдаются. Я подозреваю, что автоматическая установка запуска демона настроена определенным образом, но я не могу найти документацию по конфигурации для этого
Nuzzolilo
3

Если вы получаете разрешение и другие детали для gvfs согласно следующему

d?????????? ? ?    ?      ?            ? gvfs

затем просто размонтируйте ваши gvfs с помощью следующей команды. Ваша проблема будет решена после выполнения этого процесса.

umount ~/gvfs(umount /run/user/112/gvfs in my case).

GVFS (виртуальная файловая система GNOME) - это виртуальная файловая система для рабочего стола GNOME, которая позволяет пользователям легко получать доступ к удаленным данным через SFTP, FTP, WebDAV, SMB и локальные данные с помощью интеграции с udev, поэтому вам не нужно бояться отключать эту систему. ,

Мохд Мизам
источник
3

это старая ветка, но в отчетах об ошибках gnome это недавно открытая проблема, поэтому она может быть полезна любому, кто часами ищет решение для исправления проблем с gvfs-fuser - которые, похоже, тесно связаны между собой.

Ошибка Msg от meld:

Error copying '/media/root/5FDA03906F33F217/SAVE/rsyncTEST-usb/allusers' to '/run/user/0/gvfs/ftp:host=192.168.0.103/var/ftp/ftpd/images/PersistenceUSBs/rsync-meld/allusers'

[Errno 95] Operation not supported: '/run/user/0/gvfs/ftp:host=192.168.0.103/var/ftp/ftpd/images/PersistenceUSBs/rsync-meld/allusers'.

Я столкнулся с проблемой gvfs-fuser при попытке использовать meld / diff / kdiff поверх ftp. Кажется, проблема между fuser и gvfs. Кажется, что проблема не возникает в 3.15.1, но начинает поступать в 3.15.2. (Новая версия python?) Решение - это обходной путь, а не исправление - файлы / каталоги будут копироваться, но ошибка все равно будет отображаться.

Ответ Кристофера определяет проблему и дает решение.

Другим возможным решением является использование sshfs (см. Этот комментарий и эту ветку ). Дополнительную информацию gvfs-commandsсмотрите в разделе В чем разница между командами gvfs и общими командами, такими как cat, ls, cp?

Возможные ошибки включают GNOME # 317875 и GNOME # 768281 .

сомнение
источник