![이 setUID 예제가 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/78975/%EC%9D%B4%20setUID%20%EC%98%88%EC%A0%9C%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
저는 스크립트를 실행하는 사용자가 스크립트를 실행할 때 소유자의 권한을 상속받는 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의 복사본을 설정하고 거기에서 원하는 것을 호출할 수 있습니다.