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 도구(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 아래에서 새로 생성된 파일 x속성 및 권한을 확인합니다.

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

관련 정보