Einem SFTP-Benutzer das Erstellen neuer Dateien erlauben, diese aber nicht ändern oder löschen.

Einem SFTP-Benutzer das Erstellen neuer Dateien erlauben, diese aber nicht ändern oder löschen.

Ich richte einen Server ein, um meineresticBackup. Das Backup wird über SFTP durchgeführt. Während des Backups muss restic keine Dateien löschen oder ändern, daher habe ich beschlossen, dass ich mich davor schützen möchte, dass der Benutzer dies tun kann. Auf diese Weise kann niemand mit Zugriff auf die Maschine, die gesichert wird, meine Backups so leicht kompromittieren.

Ich möchte chroot verwenden, um den Zugriff auf das Backup-Repository für diesen Benutzer zu beschränken. Das einzige, was mir eingefallen ist, ist, es chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATIONjede Minute mit cron auszuführen, aber das scheint ein Hack zu sein.

Gibt es einen eleganteren Weg?

Antwort1

Dies erreichen Sie durch den Mix ausxattr(erweiterte Attribute für Linux) &inotify-Dienstprogramm:

Eine Möglichkeit, dies zu erreichen, kann die Verwendung erweiterter Attribute sein:

1- Legen Sie die richtigen Berechtigungen für Ihr Verzeichnis fest, damit jeder darin Dateien erstellen undCD' dazu :

sudo chmod 777 $BACKUP_LOCATION

2- Installiereninotify-tools(Das hängt von Ihrem Betriebssystem ab), dieses Dienstprogramm ermöglicht es, die Änderungen an $BACKUP_LOCATION zu beobachten, und hier ist es der Fall vonneue DateienErkennung erstellt:

3- Bearbeiten und speichern Sie das folgende Skript. Hier haben die neuen Dateien als erweitertes Attributunveränderlich(das heißt, sie können nicht einmal von root gelöscht oder bearbeitet werden) und außerdemr--, r--, r--Berechtigungen:

#!/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- Erstellen Sie einen Dienst unter„/etc/systemd/system/backupprotection.service“ Dadurch wird Ihr Skript als Daemon ausgeführt, da es im Hintergrund ausgeführt werden muss und um sicherzustellen, dass das Skript auch nach einem Neustart weiter ausgeführt wird:

[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- Laden Sie die neue Konfiguration von der Festplatte neu:

sudo systemctl daemon-reload

6- Aktivieren Sie Ihren Dienst, sodass er nach dem Booten von systemd gestartet wird:

sudo systemctl enable backuprotection

7- Starten und überprüfen Sie den Status vonBackup-SchutzService :

sudo systemctl start script.sh
sudo systemctl status backuprotection

8- Überprüfen Sie die x-Attribute und Berechtigungen der neu erstellten Dateien unter $BACKUP_LOCATION:

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

verwandte Informationen