Setuid 비트가 bash에 영향을 미치지 않는 것 같습니다.

Setuid 비트가 bash에 영향을 미치지 않는 것 같습니다.

나는 약간의 실험을 하다가 이상한 점을 발견했습니다. 에 있는 bash 복사본에 setuid 비트를 설정해도 /usr/bin/bash-test효과가 없는 것 같았습니다. 의 인스턴스를 실행했을 때 bash-test내 홈 디렉터리가 로 설정되지 않았고 에서 명령 /root을 실행했을 때 내 사용자 이름이 로 보고되지 않았습니다 . 이는 루트로 실행되고 있지 않음을 나타냅니다. 그러나 setuid 비트를 에 설정하면 예상대로 모든 셸에서 루트인 것으로 보고되었습니다.whoamibash-testrootbash-testwhoami

setuid 비트 /usr/bin/bash도 설정해 보았지만 동일한 동작이 관찰되었습니다.

setuid 비트를 설정할 때 bash가 루트로 실행되지 않는 이유는 무엇입니까? selinux가 이것과 관련이 있을까요?

답변1

설명은 좀 짜증스럽습니다. bash 자체가 이유입니다. strace우리의 친구입니다(이 작업을 수행하려면 SUID 루트 자체여야 합니다).

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash는 SUID 루트(UID!=EUID)가 시작되었음을 감지하고 루트 권한을 사용하여 이 권한을 버리고 EUID를 UID로 재설정합니다. 그리고 나중에는 FSUID도 확인합니다...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

결국 기회는 없습니다. UID 루트(예: sudo)로 bash를 시작해야 합니다.

편집 1

매뉴얼 페이지에는 다음과 같이 나와 있습니다.

실제 사용자(그룹) ID와 동일하지 않은 유효 사용자(그룹) ID로 쉘이 시작되고 -p 옵션이 제공되지 않으면 시작 파일이 읽히지 않고 쉘 기능이 환경에서 상속되지 않으며 SHELLOPTS , BASHOPTS, CDPATH 및 GLOBIGNORE 변수가 환경에 나타나면 무시되고 유효 사용자 ID가 실제 사용자 ID로 설정됩니다. 호출 시 -p 옵션이 제공되면 시작 동작은 동일하지만 유효 사용자 ID는 재설정되지 않습니다.

그러나 이것은 나에게는 효과가 없습니다. -p시작 옵션에서도 언급되지 않습니다. 나도 시도했다 --posix; 작동하지 않았습니다.

답변2

어쨌든 SUID 루트 프로그램은하지 않습니다루트 환경( $HOME, 쉘 구성 등)으로 실행하면 루트로 실행됩니다.(즉, 모든 파일을 삭제하고 권한을 변경할 수 있습니다.)

관련 정보