루트가 아닌 사용자로부터 루트 명령을 실행하려면 Set uid를 사용하십시오.

루트가 아닌 사용자로부터 루트 명령을 실행하려면 Set uid를 사용하십시오.

다음 두 파일을 고려하십시오. summarize실행 가능한 UID 비트는 다른 그룹에 속한 다른 사용자가customers.dat 파일을 이용하여 요약 실행 파일을 실행할 수 있도록 설정됩니다.

-rw-------  steve  sales  customers.dat
-rwsr-xr-x  steve  sales  summarize

이제 다음 두 파일을 고려하십시오.

-rwxrwx--- 1 root   root   5974 May 17 13:53 1.out
-rwsrwsrwx 1 root   root   5970 May 17 14:03 a.out

둘 다 다른 사용자가 실행하기를 원하는 실행 파일 a.out이며 1.out호출을 사용하여 내부에서 실행합니다 system("./1.out");.

하지만 항상 권한 거부 오류가 발생합니다.

sh: ./1.out: Permission denied

나에게는 두 경우가 모두 동일해 보인다. 권한 거부 오류가 발생하는 이유는 무엇입니까? 내가 뭐 놓친 거 없니?

답변1

에서 발췌Set-UID 프로그램 및 취약점:

– system()이 먼저 /bin/sh를 호출한다는 점을 기억하세요. Fedora에서는 매개변수 "sh", "-c" 및 사용자 제공 문자열을 사용하여 /bin/sh를 실행합니다.

– Fedora에서 /bin/sh(실제로는 bash)는 Set-UID 비트 옵션을 무시합니다. 따라서 Set-UID 프로그램에서 시스템(cmd)을 호출할 때 cmd 자체가 Set-UID 프로그램이 아니면 cmd는 루트 권한으로 실행되지 않습니다. Bash의 다음 코드는 Set-UID 비트를 제거합니다. 사실 Set-UID 셸을 허용해야 하는 타당한 이유가 전혀 생각나지 않습니다. Fedora는 올바른 일을 하고 있습니다. 다른 많은 Unix 운영 체제에서는 아직 이 일을 하고 있지 않습니다.

이에 따르면 1.out에는 uid가 설정되어 있지 않으며 a.out은 실행 전에 권한을 제거합니다.

관련 정보