Вопрос или проблема
Я использовал 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
.
Применение
Для выявления и решения проблемы можно предпринять следующие шаги:
-
Проверка прав на директорию монтирования: Каталог
~/fusessh
, куда производится монтирование, должен иметь правильные права доступа. Ошибка "Permission denied" может возникать из-за недостаточных разрешений.- Команда
chmod o+rx ~/fusessh
может быть полезна для предоставления всем пользователям возможности чтения и выполнения на данной папке.
- Команда
-
Проверка прав доступа к
fusermount
: Убедитесь, что бинарий/bin/fusermount3
имеет установленные права SUID.- Выполните проверку с помощью команды:
ls -l /bin/fusermount3
. Бинарий должен быть с режимом-rwsr-xr-x
.
Если это не так, исправьте указав:sudo chmod 4755 /bin/fusermount3
.
- Выполните проверку с помощью команды:
-
Сравнение UID и GID на обеих системах: На обеих системах, локальной и удалённой, UID/GID вашего пользователя должны совпадать. Если они различны, FUSE может попытаться выполнить монтирование от имени "чужого" пользователя.
- Выполните команду
id
и на локальной, и на удалённой машине, чтобы убедиться в совпадении UID и GID.
- Выполните команду
-
Конфигурация
/etc/fuse.conf
: Проверьте файл настроек FUSE. Он должен содержать строкуuser_allow_other
.- Добавьте строку
user_allow_other
, если она отсутствует, чтобы разрешить пользователю монтировать файловую систему с флагом-o allow_other
.
- Добавьте строку
-
Использование опций монтирования: Попробуйте добавить конкретные опции в команду монтирования
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.