Permitir que un usuario SFTP cree nuevos archivos, pero no los modifique ni los elimine

Permitir que un usuario SFTP cree nuevos archivos, pero no los modifique ni los elimine

Estoy configurando un servidor para alojar miresticorespaldo. La copia de seguridad se realizará mediante SFTP. Durante la copia de seguridad, restic no necesita eliminar ni modificar ningún archivo, así que decidí que me gustaría protegerme para que el usuario no pudiera hacerlo. De esa manera, cualquiera que tenga acceso a la máquina de la que se realiza la copia de seguridad no podrá comprometer fácilmente mis copias de seguridad.

Quiero usar chroot para restringir el acceso solo al repositorio de respaldo para ese usuario. Lo único que se me ocurrió es ejecutar chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATIONcron cada minuto, pero parece complicado.

¿Existe una forma más elegante?

Respuesta1

Puedes lograr esto mediante la combinación dexattr(atributos extendidos para Linux) &inotificar utilidad:

Una forma de lograr esto puede ser utilizando atributos extendidos:

1- Establezca los permisos correctos en su directorio para que cualquiera pueda crear archivos dentro de él y 'cd' a ello:

sudo chmod 777 $BACKUP_LOCATION

2- Instalarherramientas-inotify(Depende de tu SO), esta utilidad te permitirá ver los cambios realizados en $BACKUP_LOCATION y aquí está el caso denuevos archivosdetección creada:

3- Edite y guarde el siguiente script. Aquí los nuevos archivos tendrán un atributo extendidoinmutable(eso significa que no se pueden eliminar ni editar ni siquiera mediante root) y tambiénr--,r--,r--permisos:

#!/bin/sh
BACKUPDIR="/path/your/backup/directory"
inotifywait -m -r -e create --format '%w%f' "${BACKUPDIR}" | while read NEWFILE
do
    chmod 444 "$NEWFILE"
    chattr +i "$NEWFILE"
done

4- Crea un servicio en'/etc/systemd/system/backuprotection.servicio' eso ejecutará su secuencia de comandos como un demonio porque necesita activarse en segundo plano y también para asegurarse de que la secuencia de comandos siga ejecutándose incluso después de reiniciar:

[Unit]
Description=Service for backup protection

[Service]
User=root
ExecStart=/path/your/script.sh
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

5- Vuelva a cargar la nueva configuración desde el disco:

sudo systemctl daemon-reload

6- Habilite su servicio, para que se inicie una vez que systemd haya arrancado:

sudo systemctl enable backuprotection

7- Iniciar y comprobar el estado deprotección de respaldoservicio :

sudo systemctl start script.sh
sudo systemctl status backuprotection

8- Verifique los nuevos atributos y permisos de los archivos creados en $BACKUP_LOCATION:

# Permissions should be r--,r--,r--
ls -ltr $BACKUP_LOCATION
# "i" should be set on the 5th position
lsattr $BACKUP_LOCATION

información relacionada