루트가 아닌 다른 사용자가 소유한 파일 읽기

루트가 아닌 다른 사용자가 소유한 파일 읽기

백업 서버에서 서버를 백업하고 있습니다. 백업된 각 서버에는 백업 서버에 자체 계정이 있으며 파일은 재동기화됩니다. 복구를 단순화하려면 권한을 그대로 유지하는 것이 중요합니다(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일 것입니다.

관련 정보