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

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

У меня возникли трудности с использованием gcsfuse при монтировании контейнера хранилища в каталог, который используется для загрузок SFTP на виртуальной машине CentOS 7 compute engine в 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 каталогов пользователей jail в обычном случае использования SFTP.

Чтобы попытаться обойти это, я создал символические ссылки на смонтированный диск хранения SFTP, что было нормально, пока мы не заметили, что размещение файлов на SFTP синхронизировалось правильно, но если мы помещали файл в корзину, он не синхронизировался обратно в смонтированный каталог SFTP. Я пробовал делать rsync, но независимо от того, в каком направлении я пробовал, мы теряли файлы в любом случае. (Позже я прочитал, что gcsfuse не поддерживает связывание).

Проведя еще немного исследований, я нашел проект на GitHubдля настройки sftp kubernetes gcsэто выглядело многообещающе. Я не использую контейнеры никоим образом, но мне было интересно, как было сделано монтирование, а также какая конфигурация 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

который отлично работает с любым другим обычным каталогом с шаблоном jail, где 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 на данном этапе...

Связанный контент