
Estou tendo dificuldades para usar o gcsfuse para montar um bucket de armazenamento em um diretório que está sendo usado para uploads de SFTP em uma VM do mecanismo de computação CentOS 7 no GCP. Inicialmente tentei montá-lo usando as instruções básicas montadas da seguinte forma:
GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse al-dev-sftp /sftp
mas não consegui criar arquivos/diretórios no diretório montado. Depois de pesquisar, montei o drive como:
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
que permitiu a criação de arquivos e diretórios. No entanto, não consegui chown/chmod nenhum dos arquivos ou diretórios conforme necessário para fazer chroot nos diretórios de usuários do jail como um caso de uso normal para SFTP.
Para tentar superar isso, criei links simbólicos para a unidade de armazenamento SFTP montada, o que funcionou bem até percebermos que colocar arquivos no SFTP estava sincronizando corretamente, mas se colocássemos um arquivo no bucket, ele não estava sincronizando de volta com o SFTP montado diretório. Tentei fazer um rsync, mas não importa em que direção tentei, perdemos arquivos de qualquer maneira. (Mais tarde li que o gcsfuse não suporta vinculação).
Fazendo mais pesquisas, encontrei um projeto no githubpara uma configuração de sftp do kubernetes gcsisso parecia promissor. Não estou usando contêineres de forma alguma, mas estava interessado em saber como a montagem foi feita e também em qualquer configuração de SFTP usada. Isso me levou a criar uma montagem assim:
gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload
que montará meu diretório de upload em um intervalo separado para cada usuário (não é o ideal, mas se eu conseguir fazê-lo funcionar, tudo bem) e posso colocar a propriedade root na pasta do usuário enquanto dou permissão ao usuário na pasta de upload, prendendo perfeitamente o usuário em SFTP.
O problema é que quando o usuário faz login via SFTP (no filezilla) e tenta navegar até a pasta de upload, recebe uma mensagem de erro:
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
que obviamente existe.
Minha entrada de configuração sshd é:
Match User wraheem
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /test_sftp/wraheem
AllowTcpForwarding no
que funciona bem com qualquer outro diretório normal com o padrão jail de root possuir o diretório do usuário e o usuário possuir os subdiretórios.
Olhei para a própria montagem e vi o seguinte:
wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
e o que mais me chamou a atenção é que user_id e group_id estão definidos como zero (root), embora eu possa adicionar arquivos e ao fazer um ls -l as permissões de pasta e arquivo são definidas:
drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload
Eu me pergunto se, embora eu tenha permissões, o ponto de montagem pertence ao root, então isso nem importa. Como teste, tentei definir o diretório remoto padrão para /media (de propriedade do root) e obtive exatamente o mesmo erro no filezilla de antes.
Alguém já usou o gcsfuse dessa maneira para SFTP? Ou alguém pode ver onde perdi uma etapa do problema de configuração?
Obrigado por qualquer ajuda que vocês possam imaginar; Estou me perguntando se isso pode ser usado para SFTP neste momento ...