다음 SUID 인 것처럼 놀랍게도OpenBSD의 SUID 비트를 설정해도 유효하지 않은 UID가 실행 파일 소유자에게 저장되지 않는 이유는 무엇입니까? 내가 Mac 용 패러랠에 게스트 OS로 오픈 BSD 5.3의 신선한 설치할 때 사용하고
$ uname -a
OpenBSD openbsd.localdomain 5.3 GENERIC#53 amd64
, 비트 세트의 SUID와 루트가 소유 한 바이너리 파일의 UID로 실행 설정되지 않았습니다. 하지 상태에서
<real_uid, effective_uid, saved_uid> = <1000, 1000, 1000>
및 :
<real_uid, effective_uid, saved_uid> = <1000, 0, 0>
을 예상대로 UID 1000 실행 이러한 프로그램이 프로그램이 상태에서 시작하는 경우 즉,이다.
왜 이런 경우입니까? 나는 다른 유닉스 시스템에서의 setuid 행동을 평가하기위한 ( setuid_min.bin 로 컴파일) 대화 형 C 프로그램을 작성했습니다
: 여기
내가 문제를 발견하는 방법에 관한 세부 사항입니다. 이 프로그램은 UID 1000의 홈 디렉토리의 서브 디렉토리에 있으며, sudo 명령은 소유권과 SUID를 변경하는 데 사용됩니다. 다음 프로그램이 실행되고 난 효과가 진짜를보고 할 UID를 입력하고 프로세스의 UID를 저장 : 이을 some_pid
$ sudo chown root:staff setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwxr-xr-x 1 root staff [...] setuid_min.bin
$ sudo chmod a+s setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwsr-sr-x 1 root staff [...] setuid_min.bin
$ ./setuid_min.bin
uid
1000 1000 1000 some_pid
exit
$
하는 것으로
위 과정 setuid_min.bin 의 PID입니다 . 이 프로그램은 다음과 같은 쉘 명령의 출력을보고하여 실제 UID, 유효 UID 및 저장 UID를보고 이을 my_pidps -ao ruid,uid,svuid,pid | grep '[ ]my_pid$'
는 pid는 GETPID()에 의해보고이다. 이것이 사실 일지 모를 유일한 추측은 OpenBSD가 setuid_min.bin이있는 디렉토리의 소유권/사용 권한을 사용하고 있거나 소유권을 실제로 변경하지 않고있는 기본 사용 권한 구조를 가지고 있다는 것입니다. 사용자는 sudo을 사용하여 파일 권한을 변경합니다.