允許 SFTP 使用者建立新文件,但不能修改或刪除它們

允許 SFTP 使用者建立新文件,但不能修改或刪除它們

我正在設定一個伺服器來託管我的雷斯蒂奇備份。備份將透過 SFTP 完成。在備份過程中,restic 不需要刪除或修改任何文件,因此我決定防止使用者執行此操作。這樣,任何有權存取正在備份的電腦的人都無法輕易破壞我的備份。

我想使用 chroot 來限制該用戶僅存取備份儲存庫。我唯一想到的就是chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATION每分鐘運行一次 cron,但這看起來很hacky。

有更優雅的方式嗎?

答案1

您可以透過混合來實現這一點屬性(Linux 的擴充屬性)&inotify實用程式:

實現此目的的一種方法是使用擴充屬性:

1- 在您的目錄上設定正確的權限,以便任何人都可以在其中建立檔案並“光碟' 對它:

sudo chmod 777 $BACKUP_LOCATION

2-安裝inotify 工具(這取決於您的作業系統),該實用程式將可以觀察 $BACKUP_LOCATION 上所做的更改,這裡是這樣的情況新文件建立檢測:

3-編輯並儲存以下腳本,這裡新檔案將具有擴充屬性不可變的(這意味著即使是 root 也無法刪除或編輯它們)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

相關內容