
Rclone
Montaje de sitios WebDav, SharePoint y almacenamiento en nube en Linux con Rclone y Systemd.
Introducción
Rclone es un comando que permite el montaje de sitios WebDav y otros servicios de almacenamiento en nube como una unidad o carpeta tanto en Windows, Mac o Linux.
Prerrequisitos
En CentOs, para el automontaje tras los reinicios, necesitaremos tener instalado el servicio fuse en nuestra maquina:
yum install fuse fuse3
Instalamos rclone:
yum install rclone
En otros sistemas podemos descargar su instalador en https://rclone.org/downloads/
En algunos casos necesitaremos también la información del sitio. La obtendremos cambiando la url a: https://TenantID.sharepoint.com/sites/NombredelStio/_api/v2.1/drives
Para acceso a carpetas compartidas con un usuario seguir esta documentación: Using Rclone for Sharepoint Shared Files | Zuar
Establecer la conexión de un sitio
Las conexiones, por lo general, se establecen mediante la cuenta del usuario con acceso a dicho recurso en el tenant. Sin embargo, hemos configurado una app de AzureAD con credenciales para acceder a estos recursos, con dirección de redirección a http://localhost:53682 para realizar la inyección de tokens automática.
Para el flujo automático de credenciales de aplicaciones Azure sigue estos pasos: Sharepoint mediante AppAzure
Conectaremos como ejemplo a una carpeta de un sitio Microsoft Sharepoint.
En primer lugar, necesitaremos establecer la conexión al terminal del servidor con la opción de redirección del puerto 53682, ya que necesitaremos verificar nuestra cuenta 365 a través del navegador de nuestro propio equipo:
ssh -L localhost:53682:localhost:53682 root@ipdelservidor
Comenzaremos la configuración con la opción config:
rclone config
Se mostrará una lista de las conexiones ya establecidas sobre las opciones:
Name onedriue onedriue e) Edit existing remote n) Nen remote d) Delete remote r) Rename remote c) Copy remote s) Set configurcltion passnord q) Quit config e/n/d/r/c/s/q> Pulsamos en el teclado n, con lo que nos pedirá un nombre para la nueva conexión. Lo llamaremos sharepoint. Tras pulsar enter nos listará todos los servicios de almacenaje posibles, elegiremos 26 Onedrive (puede variar):
name> sharepoint Type of storage to configure. Enter a string ualue. Press Enter for the default ( Choose a number from belon, Alias for an existing ’amazon cloud drive or type in your onn value remote Amazon 53 Compliant Storage Prouiders including LAS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, and Tencent COS 19 / 11 / 13 / 16 / 17 / 19 / 29 / Dropbox Encrypt/Decrypt a FTP Connection remote Google Cloud Storage (this is not Google Drive) Igoogle cloud storage Google Photos Igoogle photos Hadoop distributed file system In memory object storage system. Jottacloud Ijottacloud
25 / Microsoft 26 / Microsoft 28 / OpenStack 31 / QingC10ud Azure Blob Storage OneDriue Snift (Rackspace Cloud Files, Object Storage Memset Memstore, 32 / SSH/SFTP Connection 34 / Tardigrade Decentralized Cloud Storage \ “tardigrade 36 / Llnion merges the contents of seueral 49 / http Connection Storage> 26 upstream fs A continuación copiaremo el clientID y el secret de nuestra app azure en ambas preguntas. Elegiremos la región del centro de datos que nos interese, en nuestro caso el global (1):
Storage> 26 ** See help for onedriue backend at: https://rclone.()rg/onedriue/ ** OAuth Client Id Leaue blank normal I y. Enter a string ualue. client_id> 0Auth Client Secret Leaue blank normal I y. Enter a string ualue. client_secret> Press Enter for the default ( Press Enter for the default ( Choose national cloud region for OneDriue. Enter a string ualue. Press Enter for the default (“global Choose a number from belon, or type in your onn value Microsoft Cloud Global Microsoft Cloud for LIS Gouernment lus Microsoft Cloud Germany “ del Azure and Office 365 operated by 21Vianet in China Icn region> 1 Ante la pregunta si queremos editar la configuración avanzada, responderemos NO, tras lo cual nos preguntará si queremos usar la configuración automática. En nuestro caso hemos redirigido el puerto de la validación web por ssh a nuestro equipo, con lo que responderemos sí (Y):
region> 1 Edit aduanced config? (y/n) n) No (default) Remote config Llse auto config?
- Say Y i f not sure
- Say N i f you are norking on a remote or headless machine Y) Yes (default)
Success! All done. Please go back to rclone. Al regresar a la consola, veremos un listado de los tipos de conexión que podemos establecer. Podemos buscar un sitio en concreto con 4. En nuestro caso elegimos 3 E introduciremos el nombre del sitio sharepoint, tras lo cual pulsamos 1 (Documentos):
Aaiting for code… Got code Choose a number from belon, 2 / Root Sharepoint site or type in an existing value 3 / Sharepoint site name or LIRL (e.g. 4 / Search for a Sharepoint site 6 / Type in Si tel D (aduanced) Your choice> 2 mysite or https://contoso.sharepoint.com/sites/mysite)
Nos informará de la url real, documentos compartidos, y aceptamos todo. Nos mostrará todos los datos y el token de la conexión.
Volveremos al menú principal donde podemos ver ya nuestra conexión al sitio sharepoint.
Conexión mediante aplicación de Azure
IMPORTANTE: Nuestro sitio debe tener como administrador (que no propietario) un grupo que contenga a los administradores del tenant.
Crearemos una aplicación de ámbito inquilino único y como URI de redirección web http://localhost (ambos MUY IMPORTANTES);
Añadiremos permisos de API para el sharepoint seleccionado (Sites.Selected) y lo validaremos:
Permisos configurados Las aplicaciones están autorizadas a llamar a las API cuando los usuarios o administradores les conceden permisos como parte del proces permisos configurados debe incluir todos los permisos que necesita la aplicación. Mas información sobre los permisos y el consentimiento
- Agregar un permiso Conceder consentimiento de administrador para Mi Empresa S.L. Nombre de permisos/API Tipo Descripción Se necesita el conse … V SharePoint (2) Sites.Read.All Aplicación Read items in all site collections Sí Sites.Selected Aplicación Access selected site collections Sí
Adicionalmente, si queremos añadir el remoto mediante búsqueda, agregaremos la lectura de todos los sitios (Sites.Read.All), de lo contrario tendremos que añadirlo mediante la url o el driveID manualmente.
Crearemos un secret y lo copiaremos.
Concederemos permisos de escritura al Sharepoint objetivo desde la consola de M365 CLI:
m365 spo site apppermission add –permission write –appId ClientIDdelaaplicacion –siteUrl https://urldel.sharepoint.com/site/ejemplo
Realizamos los pasos descritos para configurar un nuevo remoto y usaremos el clientID de la aplicación, el secret creado anteriormente y el id del tenant;
Responderemos que sí cuando nos pregunte por si deseamos acceder a la configuración avanzada, y habilitaremos el flujo de credenciales de aplicación (client_credentials = true);
Se validará automáticamente de forma transparente y terminamos de configurar el remoto de la forma habitual (dependiendo del permiso concedido durante el paso 2);
Podemos usar la configuración resultante en nuestros servidores y driver csi para kubernetes.
Hay que inicializar el acceso (por ejemplo, con el prompt de credenciales de rclone) en nombre de la organización para que nuestro código consiga autenticar, de lo contrario nos devolverá errores.
Más información: https://www.blimped.nl/running-application-with-limited-sharepoint-permissions
Montaje de conexiones
Una vez establecida nuestra conexión, crearemos una carpeta vacía donde montarla:
mkdir /raiz/carpeta
Necesitaremos añadir rclone como argumento tipo del comando mount. Esto se consigue simplemente añadiendo un enlace simbólico:
ln -s /usr/bin/rclone /sbin/mount.rclone
Crearemos un script para cada montaje llamado raiz-carpeta.tipo, donde raiz es el nombre de la carpeta raiz, - corresponde a /, y carpeta la que se encuentra dentro de la raiz es el punto de montaje;
Indicando la conexión (what) en la carpeta (where) en /etc/systemd/system/raiz-carpeta.mount:
[Unit]
Description=Mount for /raiz/carpeta
[Mount]
Type=rclone
What=name:Canal/carpeta
Where=/raiz/carpeta
Options=rw,allow_other,args2env,vfs-cache-mode=writes,config=/carpetadeconfiguracion/rclone.conf
Luego, un script de automontaje para ese punto en /etc/systemd/system/raiz-carpeta.automount:
[Unit]
Description=AutoMount for /raiz/carpeta
[Automount]
Where=/raiz/carpeta
TimeoutIdleSec=600
[Install]
WantedBy=multi-user.target
Inciamos el servicio, lo que hará que se monte bajo demanda, desconectando el montaje transcurrido el tiempo definido en TimeoutIdleSec:
systemctl enable –now raiz-carpeta.automount
Más información: https://rclone.org/commands/rclone_mount/#rclone-as-unix-mount-helper
Existen múltiples opciones adicionales de montaje, como el filtrado de archivos. Más información: https://rclone.org/commands/rclone_mount/
Desmontar una conexión existente
Como hemos visto, rclone utiliza fuse como servicio para crear los montajes, en lugar del archivo fstab como es habitual. Para desmontar una conexión debemos usar el comando:
fusermount -uz /raiz/carpeta
¿Necesitas ayuda implementando esta solución?
El equipo de ingenieros de Kuretes puede encargarse de la configuración, migración y mantenimiento seguro de estos entornos en tu infraestructura empresarial.