У меня возникают трудности с использованием gcsfuse, монтируя ведро хранилища в каталог, который используется для загрузки по SFTP на виртуальную машину вычислительного ядра CentOS 7 в GCP. Сначала я попытался смонтировать его, используя основные инструкции, которые смонтированы следующим образом:
GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse al-dev-sftp /sftp
но я не мог создавать файлы / каталоги в смонтированном каталоге. После исследования я смонтировал диск следующим образом:
GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse -o allow_other --gid 0 --uid 0 --file-mode 777 --dir-mode 777 al-dev-sftp /sftp
что позволило создавать файлы и каталоги. Однако я не мог использовать chown / chmod для каких-либо файлов или каталогов по мере необходимости для chroot пользовательских каталогов тюрьмы в качестве обычного варианта использования SFTP.
Чтобы попытаться преодолеть это, я создал символические ссылки на смонтированный диск хранения SFTP, что было нормально, пока мы не заметили, что размещение файлов на SFTP синхронизируется правильно, но если мы поместили файл в корзину, он не синхронизировался с подключенным SFTP каталог. Я пробовал выполнить rsync, но в каком бы направлении я ни пытался, мы все равно теряли файлы. (Позже я прочитал, что gcsfuse не поддерживает связывание).
Проведя еще несколько исследований, я нашел проект на github для настройки kubernetes gcs sftp это выглядело многообещающим. Я никоим образом не использую контейнеры, но меня интересовало, как выполняется монтирование, а также какая-либо используемая конфигурация SFTP. Это привело меня к созданию такого крепления:
gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload
который смонтирует мой каталог загрузки в отдельное ведро для каждого пользователя (не идеально, но если я смогу заставить его работать, тогда ОК), и я могу передать права root на папку пользователя, давая пользователю разрешение на папку загрузки, идеально заключая пользователь в SFTP.
Проблема в том, что когда пользователь входит в систему через SFTP (в filezilla) и пытается перейти в свою папку загрузки, он получает сообщение об ошибке:
Status: Retrieving directory listing of "/test_sftp/wraheem/upload"...
Command: cd "/test_sftp/wraheem/upload"
Error: Directory /test_sftp/wraheem/upload: no such file or directory
который, очевидно, существует.
Моя запись конфигурации sshd:
Match User wraheem
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /test_sftp/wraheem
AllowTcpForwarding no
который отлично работает с любым другим обычным каталогом с шаблоном тюрьмы, когда root владеет каталогом пользователя, а пользователь владеет подкаталогами.
Посмотрел на само крепление и увидел следующее:
wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
и что меня выделило, так это то, что user_id и group_id установлены на ноль (root), хотя я могу добавлять файлы, а при выполнении ls -l устанавливаются права доступа к папке и файлу:
drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload
Интересно, даже если у меня есть разрешения, точка монтирования принадлежит пользователю root, так что это даже не имеет значения. В качестве теста я попытался установить удаленный каталог по умолчанию на / media (принадлежит root) и получил ту же самую ошибку в filezilla, что и раньше.
Кто-нибудь использовал gcsfuse таким образом для SFTP? Или кто-нибудь может увидеть, где я пропустил этап настройки?
Спасибо за любую помощь, о которой вы можете подумать; Мне интересно, можно ли сейчас использовать это для SFTP ...