Разрешить пользователю SFTP создавать новые файлы, но не изменять и не удалять их.

Разрешить пользователю SFTP создавать новые файлы, но не изменять и не удалять их.

Я настраиваю сервер для размещения своегорестикРезервное копирование. Резервное копирование будет осуществляться через SFTP. Во время резервного копирования restic не нужно удалять или изменять какие-либо файлы, поэтому я решил, что хочу защититься от возможности пользователя сделать это. Таким образом, любой, у кого есть доступ к машине, на которой выполняется резервное копирование, не сможет легко скомпрометировать мои резервные копии.

Я хочу использовать chroot, чтобы ограничить доступ только к резервному репозиторию для этого пользователя. Единственное, что я придумал, это запуск chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATIONcron каждую минуту, но это кажется хакерским.

Есть ли более элегантный способ?

решение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

Связанный контент