이 setUID 예제가 작동하지 않는 이유는 무엇입니까? [복사]

이 setUID 예제가 작동하지 않는 이유는 무엇입니까? [복사]

저는 스크립트를 실행하는 사용자가 스크립트를 실행할 때 소유자의 권한을 상속받는 setuid 및 setgid에 대해 배우고 있습니다. 이를 테스트하기 위해 권한 4755를 가진 사용자 Fiverr로 /home/Fiverr/test.sh에 bash를 만들었습니다.

rwsr-xr-x 1 fiverr fiverr 39 Dec  6 13:47 /home/fiverr/test.sh

여기에는 다음 내용이 포함되어 있습니다.

#!/bin/bash
touch /home/fiverr/raza.txt

나(raza)로 로그인하여 실행하려고 했으나 권한이 거부되었습니다. 어떻게요?

touch: cannot touch ‘/home/fiverr/raza.txt’: Permission denied

답변1

보안 조치로 인해 bash 스크립트의 uid 설정은 작동하지 않습니다. 과거에는 setuid/setgid 기능이 권한 상승에 남용되어 이제는 bash 바이너리 및 확장 bash 스크립트가 setuid/setgid 권한을 상속/포기할 수 없으며 루트만 최신에서 setuid 파일을 생성할 수 있다는 등의 제한이 있습니다. 리눅스 배포판.

이를 실행하려면 C로 컴파일된 바이너리 래퍼를 사용하거나 바이너리에서 완전히 실행하기 전에 setuid를 얻어야 합니다.

Debian을 사용한다면 /bin/dash의 복사본을 설정하고 거기에서 원하는 것을 호출할 수 있습니다.

관련 정보