Problemas de sincronización al usar gcsfuse montado para un directorio SFTP

Problemas de sincronización al usar gcsfuse montado para un directorio SFTP

Tengo dificultades para usar gcsfuse para montar un depósito de almacenamiento en un directorio que se utiliza para cargas SFTP en una máquina virtual con motor informático CentOS 7 en GCP. Inicialmente intenté montarlo usando las instrucciones básicas que se montaron de la siguiente manera:

GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse al-dev-sftp /sftp

pero no pude crear archivos/directorios en el directorio montado. Después de investigar, monté el disco de la siguiente manera:

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

lo que permitió la creación de archivos y directorios. Sin embargo, no pude cambiar/modificar ninguno de los archivos o directorios según fuera necesario para hacer chroot en los directorios de usuarios de jail como un caso de uso normal para SFTP.

Para intentar superar esto, creé enlaces simbólicos a la unidad de almacenamiento SFTP montada, lo cual estuvo bien hasta que notamos que colocar archivos en SFTP se sincronizaba correctamente, pero si colocamos un archivo en el depósito, no se sincronizaba nuevamente con el SFTP montado. directorio. Intenté hacer algo de rsync, pero no importa en qué dirección lo intenté, perdimos archivos de cualquier manera. (Más tarde leí que gcsfuse no admite enlaces).

Investigando un poco más encontré un proyecto de github.para una configuración sftp de kubernetes gcseso parecía prometedor. No estoy usando contenedores de ninguna manera, pero estaba interesado en cómo se realizó el montaje y en cualquier configuración SFTP utilizada. Esto me llevó a crear una montura como esta:

 gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload

que montará mi directorio de carga en un depósito separado para cada usuario (no es ideal, pero si puedo hacerlo funcionar, entonces está bien) y puedo colocar la propiedad raíz en la carpeta del usuario mientras le doy permiso al usuario en la carpeta de carga, encarcelando perfectamente el usuario en SFTP.

El problema con esto es que cuando el usuario inicia sesión a través de SFTP (en filezilla) e intenta navegar a su carpeta de carga, recibe un mensaje de error:

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 evidentemente existe.

Mi entrada de configuración sshd es:

Match User wraheem
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /test_sftp/wraheem
AllowTcpForwarding no

que funciona bien con cualquier otro directorio normal con el patrón de cárcel de que la raíz sea propietaria del directorio del usuario y el usuario sea propietario de los subdirectorios.

Miré la montura y vi lo siguiente:

wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)

y lo que me llamó la atención es que user_id y group_id están configurados en cero (raíz) aunque puedo agregar archivos y al hacer un ls -l se configuran los permisos de carpeta y archivo:

drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload

Me pregunto si, aunque tengo permisos, el punto de montaje es propiedad de root, por lo que ni siquiera importa. Como prueba, intenté configurar el directorio remoto predeterminado en /media (propiedad de root) y obtuve exactamente el mismo error en filezilla que antes.

¿Alguien ha utilizado gcsfuse de esta manera para SFTP? ¿O alguien puede ver dónde me perdí un paso del problema de configuración?

Gracias por cualquier ayuda que se les ocurra; Me pregunto si esto se puede usar para SFTP en este momento...

información relacionada