백업 서버에서 서버를 백업하고 있습니다. 백업된 각 서버에는 백업 서버에 자체 계정이 있으며 파일은 재동기화됩니다. 복구를 단순화하려면 권한을 그대로 유지하는 것이 중요합니다(rsync -p 사용).
파일을 읽고 통계를 생성할 수 있는 스크립트를 만들려고 합니다. 루트에서 실행되는 스크립트가 마음에 들지 않으며 스크립트가 모든 사용자에 대해 모든 파일을 읽을 수 있어야 하기 때문에 모든 백업 사용자에 대해 스크립트를 실행할 수도 없습니다. 그러나 파일이 600 등으로 chmodded되면 문제가 발생합니다. 권한을 건드리고 싶지 않지만 루트와 소유자 이외의 다른 사용자는 읽을 수 없습니다.
루트가 아닌 특정 사용자는 권한 수준에 관계없이 디렉터리나 파티션의 모든 파일을 읽을 수 있어야 합니다(그리고 파일 소유자는 이를 막을 수 없어야 합니다). 이것을 달성할 수 있는 방법이 있나요? ZFS 볼륨을 사용하여 FreeBSD를 실행하고 있습니다.
답변1
사용 sudo
.
파일에 정확하고 구체적인 명령이 나열되어 있는 경우 sudoers
해당 명령은 나열된 대로 정확하게 호출되어야 합니다 sudoers
. 그렇지 않으면 거부됩니다.
예를 들어:
backupuser ALL=(root) /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
이 예에서 사용자는 backup
표시된 대로 정확하게 명령을 실행할 수 있습니다.
sudo /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
sudo rsync...
명령 대신 호출되거나 sudo /usr/bin/rsync
플래그 또는 경로가 다른 경우 명령이 실패합니다.
스크립트에서 이 작업을 수행하는 경우 다음 명령을 비밀번호 없이 사용할 수 있도록 설정하고 싶을 것입니다.
backupuser ALL=(root) NOPASSWD: /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
sudoers(5)
자세한 내용은 아래 매뉴얼 페이지를 참조하십시오 Cmnd_list
.
답변2
백업 사용자만 실행할 수 suid
있는 버전을 작성할 수 있습니다 cat
(백업 사용자 전용 그룹을 생성하고 해당 그룹만 실행 파일을 읽을 수 있도록 설정). 이렇게 하면 cat
관심 있는 디렉터리의 파일만 읽을 수 있습니다. (심볼릭 링크를 비활성화하고 이와 같은 트릭을 알고 싶을 수도 있습니다 /dir/../otherdir/
.)
그러면 스크립트는 이 실행 파일을 사용하여 루트 권한 없이 파일을 읽을 수 있습니다.
답변3
경고하다:Stephane이 아래 설명에서 지적했듯이 파일 소유자는 여전히 ACL을 취소할 수 있습니다.
머신에 대한 루트 액세스 권한이 있는 경우 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.ACL:
setfacl -R -m u:USERNAME:r /path/to/direcory
이를 통해 사용자 USERNAME
는 /path/to/directory
.
답변4
ZFS는 이를 위한 몇 가지 메커니즘을 제공합니다.
메커니즘 중 하나는 아직 연구 중이고 아직 구현되지 않았지만 "소유자" 재정의를 사용하여 데이터 세트를 탑재할 수 있습니다. 이 경우 스냅샷을 복제하고 해당 소유자를 백업 사용자로 덮어쓰고 백업을 만든 다음 복제본을 제거할 수 있습니다. 단점은 파일의 실제 소유권을 백업하지 않는다는 것입니다.
가장 좋은 솔루션은 아마도 ZFS nfsv4 스타일 ACL일 것입니다.