2013-09-16 10 views
0

다음 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_pid

ps -ao ruid,uid,svuid,pid | grep '[ ]my_pid$' 

는 pid는 GETPID()에 의해보고이다. 이것이 사실 일지 모를 유일한 추측은 OpenBSD가 setuid_min.bin이있는 디렉토리의 소유권/사용 권한을 사용하고 있거나 소유권을 실제로 변경하지 않고있는 기본 사용 권한 구조를 가지고 있다는 것입니다. 사용자는 sudo을 사용하여 파일 권한을 변경합니다.

답변

0

대부분의 경우 바이너리는 "nosuid"로 마운트 된 기본 파티션 중 하나에 있습니다. 설치 스크립트가 생성하는 기본 fstab은 suid 바이너리를 포함하지 않는 한 모든 nosuid를 마운트합니다.