Tiempo atrás escribí una entrada explicando cómo hacer que un sistema usase cuentas de sistema espaciales para recibir datos de copias de seguridad.
Desde hace unos meses estoy perfeccionando, a ratos, un pequeño juego de utilidades para ayudarme en la configuración y uso de máquinas como receptores de copias de seguridad de terceros.
Dicho paquete se llama msat-sb y está incluido dentro de un proyecto mayor llamado msat; un acrónimo atrevido y original que viene a decir algo así como: My System Administration Tools y que puede verse en su propio repositorio: https://git.astillas.net/msat.
El paquete msat-sb (sb procede de secure backups) contiene dos scripts: el primero se llama sb-setup y el segundo sb-adduser. El primero nos sirve para retocar la configuración de varios ejecutables y para advertirnos de cómo deberían estar la de otros.
El segundo es un poco más complejo: solicita un nombre completo de usuario o cliente y con él crea un nombre abreviado que emplear para acceder al sistema. También crea los directorios de usuario, ajustando permisos, y se asegura de que existan al menos los imprescindibles para poder trabajar con el sistema.
El mayor escollo lo he encontrado en que el directorio jaula (chroot) que tiene que ser obligatoriamente propiedad de root así que, evitando trucos como los enlaces blandos dado que pretendemos que este mecanismo sea masivo, al final nos tenemos que conformar con que existan zonas específicas para guardar datos.
No queda tan elegante como sftp://usuario@servidor y tendremos que conformarnos con que exista un directorio llamado data donde poder escribir. Esto, por otra parte, es una oportunidad para añadir un directorio public_html para que publique cosas y otro .ssh para guardar claves de conexión.
El árbol entonces queda de la siguiente forma:
root@backups:/srv/backups# tree -puag .
└── [drwxrwxr-x root root ] sb_servidse
├── [drwxrwsr-x sb_servidse sb ] data
├── [drwxrwsr-x sb_servidse sb ] public_html
│ └── [-rw-rw-r-- sb_servidse sb ] README
├── [-rw-rw-r-- sb_servidse sb ] README
├── [drwxrwsr-x sb_servidse sb ] .ssh
│ └── [-rw-rw-r-- sb_servidse sb ] README
└── [-rw-rw---- sb_servidse sb ] .Xauthority
4 directories, 4 files
La configuración de servicios queda como en la entrada antes mencionada; la diferencia es que hay que emplear el programa sb-adduser como administrador para crear las cuentas.
Configuración de servidores
El programa sshd debe contener el siguiente párrafo:
override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server -u 0002
UsePAM yes
Match Group sb
ChrootDirectory %h
AllowTCPForwarding no
X11Forwarding no
Mientras que el programa rssh debe estar de la siguiente forma:
# Registro de eventos
logfacility = LOG_USER
# Ejecutables permitidos
allowscp
allowsftp
allowrsync
# Máscara de creación de archivos
umask = 002
# Y la siguiente línea deshabilitada porque el cambio de
# directorio ya lo realiza sshd
#chrootpath=/chroot