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


14

나는 약간의 실험을하고 이상한 무언가를 발견했다 /usr/bin/bash-test. 의 인스턴스를 실행할 때 bash-test홈 디렉토리가로 설정되지 않았고 /root에서 whoami명령을 실행할 때 bash-test내 사용자 이름 root이로 보고 bash-test되지 않아 루트로 실행되지 않았 음을 나타냅니다. 그러나 setuid 비트를 on으로 설정하면 whoami예상대로 모든 쉘에서 루트로보고되었습니다.

setuid 비트를 설정하려고 시도했지만 /usr/bin/bash동일한 동작을 관찰했습니다.

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

linux  bash  setuid 

1
질문 에서 setuid에 대한 추가 정보를 찾을 수 있습니다.
Anthon

Chen, Dean 및 Wagner의 Setuid Demystified 도 참조하십시오 . 오래된 종이이지만 여전히 적용됩니다.

답변:


21

설명은 성가시다. bash 자체가 그 이유이다. strace우리의 친구입니다 (이것이 작동하려면 반드시 SUID 루트 여야합니다) :

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

bash는 SUID root (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, 쉘 구성 등)으로 실행 되지 않으며 루트 권한으로 실행됩니다 (즉, 파일을 삭제하거나 권한을 변경하는 등).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.