다음 두 파일을 고려하십시오. 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은 실행 전에 권한을 제거합니다.