Я настраиваю сервер для размещения своегорестикРезервное копирование. Резервное копирование будет осуществляться через SFTP. Во время резервного копирования restic не нужно удалять или изменять какие-либо файлы, поэтому я решил, что хочу защититься от возможности пользователя сделать это. Таким образом, любой, у кого есть доступ к машине, на которой выполняется резервное копирование, не сможет легко скомпрометировать мои резервные копии.
Я хочу использовать chroot, чтобы ограничить доступ только к резервному репозиторию для этого пользователя. Единственное, что я придумал, это запуск chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATION
cron каждую минуту, но это кажется хакерским.
Есть ли более элегантный способ?
решение1
Вы можете достичь этого путем смешиванияxattr(расширенные атрибуты для Linux) &утилита inotify:
Одним из способов достижения этого может быть использование расширенных атрибутов:
1- Установите правильные разрешения для вашего каталога, чтобы любой мог создавать в нем файлы иCD'к этому:
sudo chmod 777 $BACKUP_LOCATION
2- Установкаinotify-инструменты(Это зависит от вашей ОС), эта утилита позволит вам наблюдать за изменениями, внесенными в $BACKUP_LOCATION, и здесь это как раз тот случайновые файлысоздано обнаружение:
3- Отредактируйте и сохраните приведенный ниже скрипт. Новые файлы будут иметь расширенный атрибут.неизменный(это значит, что их нельзя удалить или отредактировать даже с правами root) и такжер--,р--,р--разрешения:
#!/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- Создайте службу в разделе'/etc/systemd/system/backupprotection.service' который запустит ваш скрипт как демон, поскольку он должен работать в фоновом режиме, а также для того, чтобы убедиться, что скрипт продолжает работать даже после перезагрузки:
[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- Перезагрузите новую конфигурацию с диска:
sudo systemctl демон-перезагрузка
6- Включите службу, чтобы она запустилась после загрузки systemd:
sudo systemctl enable backuprotection
7- Запустите и проверьте состояниерезервная защитауслуга :
sudo systemctl start script.sh
sudo systemctl status backuprotection
8- Проверьте атрибуты и разрешения новых созданных файлов в $BACKUP_LOCATION:
# Permissions should be r--,r--,r--
ls -ltr $BACKUP_LOCATION
# "i" should be set on the 5th position
lsattr $BACKUP_LOCATION