명령이나 프로세스가 실패하는 경우 이 디버깅 절차를 사용합니다. 첫번째 권한 실패를 찾아서 수정한 후 ppriv -eD command 명령을 다시 실행하여 추가 권한 요구 사항을 찾아야 할 수도 있습니다.
% ppriv -eD touch /etc/acct/yearly touch[5245]: missing privilege "file_dac_write" (euid = 130, syscall = 224) needed at zfs_zaccess+0x258 touch: cannot create /etc/acct/yearly: Permission denied
/etc/name_to_sysnum 파일에서 syscall 번호의 이름을 찾습니다.
% grep 224 /etc/name_to_sysnum creat64 224
이 예에서는 creat64() 호출이 실패합니다. 성공하려면 /etc/acct/yearly 디렉토리에 파일을 만드는 권한을 프로세스에 지정해야 합니다.
truss 명령은 일반 셸에서 권한 사용을 디버그할 수 있습니다. 예를 들어, 다음 명령은 실패하는 touch 프로세스를 디버그합니다.
% truss -t creat touch /etc/acct/yearly creat64("/etc/acct/yearly", 0666) Err#13 EACCES [file_dac_write ] touch: /etc/acct/yearly cannot create
확장된 /proc 인터페이스가 truss 출력에서 오류 코드 뒤에 file_dac_write 권한이 누락되었다고 보고합니다.
예 7-6 ppriv 명령을 사용하여 프로파일 셸의 권한 사용 조사이 예에서 jdoe 사용자는 objadmin 역할을 맡을 수 있습니다. objadmin 역할에는 Object Access Management 권한 프로파일이 포함됩니다. 이 권한 프로파일을 통해 objadmin 역할은 objadmin이 소유하지 않은 파일에 대한 권한을 변경할 수 있습니다.
다음 발췌 부분에서 jdoe가 useful.script 파일에 대한 권한 변경을 실패합니다.
jdoe% ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 useful.script jdoe% chown objadmin useful.script chown: useful.script: Not owner jdoe% ppriv -eD chown objadmin useful.script chown[11444]: missing privilege "file_chown" (euid = 130, syscall = 16) needed at zfs_zaccess+0x258 chown: useful.script: Not owner
jdoe가 objadmin 역할을 맡을 때 파일에 대한 사용 권한이 변경됩니다.
jdoe% su - objadmin Password: xxxxxxxx # ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 useful.script # chown objadmin useful.script # ls -l useful.script -rw-r--r-- 1 objadmin staff 2303 Apr 10 10:10 useful.script # chgrp admin useful.script # ls -l objadmin.script -rw-r--r-- 1 objadmin admin 2303 Apr 10 10:11 useful.script예 7-7 root 사용자가 소유한 파일 변경
이 예는 권한 에스컬레이션에 대한 보호 조치를 보여줍니다. 자세한 내용은 권한 에스컬레이션 및 커널 권한을 참조하십시오. 파일은 root 사용자가 소유합니다. 비교적 덜 강력한 역할인 objadmin이 파일 소유권을 변경하려면 모든 권한이 필요하므로 작업을 실패합니다.
jdoe% su - objadmin Password: xxxxxxxx # cd /etc; ls -l system -rw-r--r-- 1 root sys 1883 Oct 10 10:20 system # chown objadmin system chown: system: Not owner # ppriv -eD chown objadmin system chown[11481]: missing privilege "ALL" (euid = 101, syscall = 16) needed at zfs_zaccess+0x258 chown: system: Not owner