fusermount: отказано в доступе

Вопрос или проблема

Я использовал sshfs на своей машине с Linux Mint для монтирования директории с другой машины в интернете. Это работало сразу из коробки.

Затем я попробовал ту же самую команду на машине с Ubuntu (Ubuntu 22.04.3 LTS) и получил следующую ошибку:

~$ sshfs -v <некоторая машина в интернете> ~/fusessh/
fusermount3: не удалось смонтировать: Отказано в доступе

Вот права доступа в моем домашнем каталоге на машине с Ubuntu:

drwx------ 27 my_user group_a    4096 Sep 15 14:36 .
drwx------  2 my_user group_b  4096 Aug 23 13:06 Desktop
drwx------  2 my_user group_b  4096 Aug 23 13:06 Documents
drwx------  2 my_user group_b  4096 Aug 23 13:06 Downloads
drwx------  2 my_user group_b  4096 Sep 12 14:04 fusessh

my_user состоит в обеих group_a и group_b.

~$ groups thsi
my_user : group_b sudo group_a

Редактировать на основе комментариев:

~$ ls -l /bin/fusermount3
-rwsr-xr-x 1 root root 35200 Mar 23  2022 /bin/fusermount3

В режиме песочницы:

~$ unshare --map-root-user
~# ls -l /bin/fusermount3 
-rwsr-xr-x 1 nobody nogroup 35200 Mar 23  2022 /bin/fusermount3

Выполните id, чтобы дважды проверить идентификаторы пользователей и групп ваших аккаунтов как на локальной, так и на удаленной системе. Я предполагаю, что они разные, даже если имена совпадают. В этом случае FUSE пытается модифицировать локальную точку монтирования как пользователь other, с точки зрения chmod и прав доступа. Поэтому нужно выполнить chmod o+rx ~/fusessh. Режим (права доступа) этой точки монтирования будет изменен в соответствии с режимом корня файловой системы, которую вы монтируете, иначе директория должна быть пустой, если ничего не смонтировано, поэтому предоставление прав other на чтение и выполнение не должно представлять большой риск для безопасности.

Чтобы отмонтировать, каждая директория в пути монтирования должна иметь права на выполнение. Выполните realpath ~/fusessh, затем убедитесь, что в каждой директории в этом пути есть установленный бит разрешения на выполнение для other (все еще предполагается, что UID/GID различаются на каждой системе).

Примечание: я выкладываю это сейчас, потому что столкнулся с этими же проблемами сегодня. Честно говоря, я точно не знаю, как FUSE работает на низком уровне. В моем случае UID был одинаковым на обеих системах, но GID различался. Тем не менее, ничего не работало, пока я не предоставил права other. Я экспериментировал с параметрами монтирования uid, gid и default_permissions, но ни один из них не решил проблемы. Мне кажется, что эти параметры монтирования изменили свои соответствующие атрибуты после монтирования файловой системы, но FUSE работал под UID/GID удаленной системы до завершения монтирования. Снова, это лишь предположение, но оно соответствует поведению.

.

Ответ или решение

Вопрос о возникновении ошибки "fusermount3: mount failed: Permission denied" при использовании sshfs (SSH Filesystem) на Ubuntu 22.04.3 LTS может быть достаточно сложным для диагностики и исправления, особенно если аналогичный процесс без проблем работает на другой системе, например, на Linux Mint. В таких случаях следует рассмотреть целый ряд потенциалных причин и решения, чтобы выявить и устранить проблему. Вместе с рассмотрением теории и примера, следует также применить конкретные шаги, которые помогут в решении задачи.

Теория

FUSE (Filesystem in Userspace) позволяет пользователям монтировать файловые системы в пользовательском пространстве без необходимости привилегий суперпользователя. Это возможно за счёт специальной программы fusermount, которая позволяет монтировать и размонтировать файловые системы с установленным разрешением SUID, дающим возможность выполнения от имени владельца файла — обычно пользователя root.

Когда вы пытаетесь использовать sshfs для монтирования удаленной директории, процесс зависит от корректной установки разрешений на fusermount и соответствующих UID/GID (идентификаторов пользователя/группы) на обеих системах, локальной и удалённой.

Пример

В вашем случае, команда sshfs работает на Linux Mint, но вызывает ошибку на Ubuntu при попытке смонтировать тот же удалённый ресурс в каталог ~/fusessh. Вероятной причиной может быть разница в конфигурациях систем или в системных аккаунтах (UID/GID), а также контроль доступа к директории или бинарию fusermount3.

Применение

Для выявления и решения проблемы можно предпринять следующие шаги:

  1. Проверка прав на директорию монтирования: Каталог ~/fusessh, куда производится монтирование, должен иметь правильные права доступа. Ошибка "Permission denied" может возникать из-за недостаточных разрешений.

    • Команда chmod o+rx ~/fusessh может быть полезна для предоставления всем пользователям возможности чтения и выполнения на данной папке.
  2. Проверка прав доступа к fusermount: Убедитесь, что бинарий /bin/fusermount3 имеет установленные права SUID.

    • Выполните проверку с помощью команды: ls -l /bin/fusermount3. Бинарий должен быть с режимом -rwsr-xr-x.
      Если это не так, исправьте указав: sudo chmod 4755 /bin/fusermount3.
  3. Сравнение UID и GID на обеих системах: На обеих системах, локальной и удалённой, UID/GID вашего пользователя должны совпадать. Если они различны, FUSE может попытаться выполнить монтирование от имени "чужого" пользователя.

    • Выполните команду id и на локальной, и на удалённой машине, чтобы убедиться в совпадении UID и GID.
  4. Конфигурация /etc/fuse.conf: Проверьте файл настроек FUSE. Он должен содержать строку user_allow_other.

    • Добавьте строку user_allow_other, если она отсутствует, чтобы разрешить пользователю монтировать файловую систему с флагом -o allow_other.
  5. Использование опций монтирования: Попробуйте добавить конкретные опции в команду монтирования sshfs, такие как uid=<your_uid> и gid=<your_gid>, чтобы указать монтирование с использованием конкретных идентификаторов пользователя и группы.

    • Например: sshfs -o uid=1000,gid=1000 <remote_user>@<remote_host>:/remote/path ~/fusessh

Если вышеописанные шаги не решают проблему, рекомендуется проверить системные лог-файлы, такие как /var/log/syslog и /var/log/auth.log, на наличие дополнительных ошибок или предупреждений, которые могли бы дать подсказки о причине проблемы.

Следует также удостовериться, что ваша система имеет все последние обновления и исправления безопасности, которые могут устранить известные проблемы с sshfs или FUSE.

Бывают случаи, когда ошибка может быть в пакете sshfs или FUSE на конкретной версии Ubuntu, и обновление программного обеспечения до последней версии может решить возникшую проблему.

Выполнение данных шагов позволит вам выявить основную причину ошибки и предпринять необходимые действия для её устранения, улучшив тем самым стабильность и функциональность работы системы с использованием sshfs на платформе Ubuntu 22.04.3 LTS.

Оцените материал
Добавить комментарий

Капча загружается...