SFTP ユーザーに新しいファイルの作成を許可するが、変更や削除は許可しない

SFTP ユーザーに新しいファイルの作成を許可するが、変更や削除は許可しない

私は自分のホスティング用のサーバーをセットアップしていますレスティックバックアップ。バックアップは SFTP 経由で行われます。バックアップ中、restic はファイルを削除したり変更したりする必要がないため、ユーザーがそれを実行できないように保護することにしました。そうすれば、バックアップ対象のマシンにアクセスできる人は誰でも、簡単にバックアップを侵害できなくなります。

chroot を使用して、そのユーザーのバックアップ リポジトリへのアクセスのみを制限したいと思います。思いついた唯一の方法は、chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATION1 分ごとに cron を実行することですが、これはハッキングのようです。

もっとエレガントな方法はありますか?

答え1

これを実現するには、属性(Linux の拡張属性) &inotify ユーティリティ:

これを実現する 1 つの方法は、拡張属性を使用することです。

1- ディレクトリに適切な権限を設定し、誰でもその中にファイルを作成できるようにし、CD' それに:

sudo chmod 777 $BACKUP_LOCATION

2- インストールinotify ツール(OSによって異なります)、このユーティリティを使用すると、$BACKUP_LOCATIONに加えられた変更を監視することができます。ここでは、新しいファイル作成された検出:

3- 以下のスクリプトを編集して保存します。ここで新しいファイルは拡張属性を持ちます。不変(つまり、ルートであっても削除や編集はできない)また、r--、r--、r--権限:

#!/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/backuprotection.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 の下にある新しく作成されたファイルの xattributes と権限を確認します。

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

関連情報