모든 파일/디렉토리에 고정 소유자가 있는지 확인하기 위해 FreeBSD가 설치된 데이터 세트에서 "setuid"를 사용하는 것이 혼란스럽습니까?

모든 파일/디렉토리에 고정 소유자가 있는지 확인하기 위해 FreeBSD가 설치된 데이터 세트에서 "setuid"를 사용하는 것이 혼란스럽습니까?

처음에는 내가 하고 싶은 일이 단순하다고 생각했어요. 그러나 FreeBSD 페이지를 더 많이 볼수록 man이것이 가능한지 더 혼란스러워집니다.

데이터 파일 전용 zfs 풀이 있습니다. 위에서 작성/저장된 모든 항목에 대해 상당히 엄격한 일관성과 제어를 설정하고 싶습니다. 한 가지 측면은 통합된 소유자/그룹을 갖도록 모든 "정적" 파일을 유지하고 싶다는 것입니다(이전에는 다른 사용자가 작성한 실행 불가능한 파일이 다른 계정으로 분할될 때 이것이 나에게 정말 고통스러웠습니다).

기반으로이 InfoSec SE 질문데이터 풀을 참조하는 스크립트나 운영 체제 파일이 없고 실행 권한을 쉽게 설정하지 않은 상태로 둘 수 있으므로 이 단일 사용자 루트를 만드는 것이 가장 쉬운 것 같습니다.

그래서 간단하게 들리는 것 같아요. chmod setuid비트를 사용하면 모든 것이 정상입니다. man chmod이 말 외에는할 수 없어-o suiddir데이터 세트가 다음을 사용하여 설치되지 않은 경우("모드" 참조). 좋아, 이것은 기본값이 아니기 때문에 약간 고통스럽지만 작동합니다.

man mount 그런 다음 추가실행 비트가 제거되었지만(양호) 다음과 같이 표시됩니다."그리고 루트가 부여되지 않습니다"기술적으로는 내가 만든 루트가 아닌 "가상" 사용자에게 파일을 제공할 수 있었지만 이는 예상치 못한 일이었습니다.

제외하고 추가하세요"UFS 파일 시스템만 이 옵션을 지원합니다", 내가 설치한 파일 시스템이 ZFS이기 때문에 결국 setiud 비트를 사용할 수 없는 것 같습니다.

NFSv4 ACL을 사용하고 있지만 소유권 상속에 도움이 되는 내용을 찾을 수 없습니다. 사용자가 기존 소유자를 변경하는 것을 방지하는 데에만 사용되는 것 같습니다.

그래서 내가 무엇을 할 수 있니? 데이터 세트에서 생성/수정된 모든 파일에 대해 단일 파일 소유자를 적용하고 싶지만 이 페이지에서는 이를 수행할 수 없는 것처럼 보입니다.

이것을 달성할 수 있는 방법이 있나요?

고쳐 쓰다:

@Raphael Ahrens - 정적 파일이란 단순히 시스템 프로세스에 의해 실행되거나 호출되지 않는 전체 데이터세트의 파일을 의미합니다. 이는 데이터세트의 어느 곳에서나 사용자가 생성/이동/수정한 데이터 파일 및 디렉터리 계층일 뿐입니다.

나는 당신이 준 명령을 시도했습니다. 나는 이것이 유효한 zfs 속성이라는 것을 알지 못했습니다 setuid. 그것이 유효하다면 문제가 해결될 것입니다. 하지만 시도해 보면 활성화/상속된 것으로 보고되지만 실제로는 플래그를 무시합니까? 제가 뭔가 잘못하고 있는 걸까요? 아니면 다른 기능을 활성화해야 합니까? 결과는 다음과 같습니다. 어쩌면 내가 틀렸을 수도 있습니다.

# id
uid=0(root) gid=0(wheel) groups=0(wheel),1002(data_managers)

# su -l temp_user

% id
uid=1003(temp_user) gid=65533(nogroup) groups=65533(nogroup),1002(data_managers)

% cd /mnt/test_pool

% ls -lt
drwsrwxrwx  11 root  data_managers  12 Apr  3 15:25 test_dataset

% zfs get setuid test_pool/test_dataset
NAME            PROPERTY  VALUE   SOURCE
test_pool/test_dataset  setuid    on      default

% cd test_dataset

% ls -lt
drwsrwxrwx  11 root  data_managers  12 Apr  3 15:26 test_dataset2

% zfs get setuid test_pool/test_dataset/test_dataset2
NAME                            PROPERTY  VALUE   SOURCE
test_pool/test_dataset/test_dataset2  setuid    on      default

% cd test_dataset2

% touch testfile
% ls -lt testfile
-rw-r--r--  1 temp_user  data_managers  0 Apr  3 15:27 testfile

dir+dataset 및 해당 상위 dir+dataset는 setuid + 상속 집합을 표시하지만 그 안에 생성된 파일은 상위 디렉터리()의 소유자 temp_user대신 소유자 = user( ) 를 호출하여 생성됩니다.root

업데이트 2:

아래 출력을 보면 문제가 명확하게 표시됩니다.

데이터 세트는 ZFS에서 setuid 활성화되어 있습니다. suiddir 옵션으로 설치됩니다. 긴 dir 출력은 setuid 비트가 설정되었음을 보여줍니다. dir은 루트가 소유하고 호출 사용자는 "temp_user"입니다. 그러나 OP에 명시된 바와 같이 OP에 인용된 매뉴얼 페이지에서는 새로 생성된 파일( test0)이 루트 대신 owner=temp_user를 사용하여 생성됩니다.

이것이 제가 해결하려는 문제입니다. ZFS 파일이 파일 소유권을 상속받도록 하거나(가능한 경우) 해결 방법을 찾으십시오.

# id
uid=0(root) gid=0(wheel) groups=0(wheel),1002(data_managers)

# su -l temp_user

% id
uid=1003(temp_user) gid=65533(nogroup) groups=65533(nogroup),1002(data_managers)

% zfs get setuid test_pool/test_dataset/test_dataset2
NAME                        PROPERTY  VALUE   SOURCE
test_pool/test_dataset/test_dataset2  setuid    on      default

% mount | grep 'test_dataset2'
test_pool/test_dataset/test_dataset2 on /mnt/test_pool/test_dataset/test_dataset2 (zfs, local, noatime, suiddir, nfsv4acls)

% cd /mnt/test_pool/test_dataset

% ls -lt
drwsrwxrwx  5 root  wheel  9 Apr  3 22:30 test_dataset2

% cd test_dataset2

% touch test0

% ls -lt test0
-rw-r--r--  1 temp_user  wheel  0 Apr  3 22:32 test0

관련 정보