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_LOCATION
jede 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