몇 가지 실험을 하다가 뭔가 이상한 점을 발견했습니다. 내 bash 복사본에 setuid 비트를 설정해도 /usr/bin/bash-test
아무런 효과가 없는 것 같습니다. 인스턴스를 실행할 때 bash-test
내 홈 디렉터리가 로 설정되지 않고 /root
에서 명령을 실행할 때 내 사용자 이름이 로 보고되지 않아 루트로 실행되고 있지 않음을 나타냅니다. 그러나 setuid 비트를 on으로 설정하면 예상대로 모든 셸에서 루트로 보고됩니다.whoami
bash-test
root
bash-test
whoami
/usr/bin/bash
또한 setuid 비트 설정을 시도하고 동일한 동작을 관찰했습니다.
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
, 쉘 구성 등)로 실행하면 루트로 실행됩니다.그 힘(즉, 모든 파일을 삭제하고 권한을 변경할 수 있습니다.)