я использую sshfs для монтирования удаленной папки с другого сервера на локальный сервер. Подключение удаленной папки работает без проблем с помощью следующей команды:
sshfs -o allow_other someServerFromSSHConfig:/home/data/somefolder/ /some/local/folder
Проблема в том, что я не могу изменить владельца файлов с помощью chown (независимо от прав root). Я всегда получаю:
chown: changing ownership of ‘/somefolder/file.img’: Permission denied
Пользователь, который обращается к папке, является членом группы предохранителей. Даже если я добавлю дополнительные параметры монтирования в sshfs, чтобы установить владельца как userx:groupx
Я не могу изменить разрешения с помощью userx
и используя chown -R userx:groupx [...]
Я ожидаю, что смогу установить права пользователей для файлов в подключенных папках, но это не так.
Как вы сказали в комментариях, вы подключаетесь как data @ remote_server Это означает, что вы не можете chown
вообще. Sshfs - это всего лишь грубая абстракция, вам разрешены только те действия, которые вы можете выполнять внутри sftp data@remote_server
Всякая абстракция дырявая, и эта тоже.
Только root @ remote_server может chown
на удаленном_сервере. Неважно, каким пользователем вы являетесь на local_server.
Обратите внимание, что sftp root@remote_server
вам обычно нужно PermitRoot yes
или PermitRoot without-password
в удаленных /etc/ssh/sshd_config
Это рискованно.
PS. По умолчанию sshd вообще не разрешает вход в систему с правами root из-за PermitRoot no
вариант. Поэтому обычно вы не можете использовать sshfs root @ remote_host. Если вы хотите протестировать поведение chown через root, я бы рекомендовал установить PermitRoot without-password
. Это означает, что root может войти в систему, когда открытый ключ добавлен в /root/.ssh/authorized_keys
. С этим параметром root не может войти в систему только с помощью пароля root, поэтому это в некоторой степени безопасно.
PS2. Если вам нужно немного больше безопасности, вы можете настроить другой экземпляр sshd только для этого файлового ресурса; с участием ForceCommand internal-sftp
и с chroot
это значительно повысило бы безопасность root, но потребовалось бы использовать новый порт TCP и новое исключение межсетевого экрана.
Если вы хотите установить конкретного владельца файла для смонтированной папки sshfs, вам необходимо сделать это с помощью uid=USER_ID_N,gid=USER_GID_N
и idmap=user
параметры.
# sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876
Он сопоставит UID удаленного пользователя "sessions" с локальным пользователем, который запускает этот процесс ("root" в приведенном выше примере), и GID останется неизменным. Следует знать, что ваш UID (идентификатор пользователя, уникальный номер вашего пользователя в системе) не обязательно совпадает на двух хостах. Когда вы используете ls -l, имя пользователя, связанное с каждым файлом, печатается в третьем столбце. Однако в файловой системе хранятся только UID, и ls просто просматривает UID и находит связанное с ним имя пользователя. В Unix важны UID, а не имена пользователей. Поэтому, если у вас 1000 на локальном хосте и 1003 на удаленном хосте, смонтированный каталог sshfs будет отображать другое имя пользователя для ваших файлов. Однако это не проблема, потому что ssh-сервер на удаленном компьютере фактически читает и записывает файлы. Таким образом, даже если он отображается в ls -l как другой UID, любые изменения будут выполняться через ssh-сервер на удаленном хосте, который будет использовать правильный UID для удаленной машины. Проблемы могут возникнуть, если вы попытаетесь использовать программу, которая просматривает UID файлов (например, ls печатает неправильное имя пользователя).
В idmap = пользователь опция гарантирует, что файлы, принадлежащие удаленному пользователю, принадлежат локальному пользователю. Если вы не используете idmap = user, файлы в смонтированном каталоге могут казаться принадлежащими кому-то другому, потому что ваш компьютер и удаленный компьютер имеют разные представления о числовом идентификаторе пользователя, связанном с каждым именем пользователя. idmap = user не будет переводить UID для других пользователей.
Цитируется по: https://help.ubuntu.com/community/SSHFS