Назад | Перейти на главную страницу

Проблемы с синхронизацией при использовании gcsfuse, смонтированного для каталога SFTP

У меня возникают трудности с использованием 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 ...