sudo 실행 파일에는 루트가 소유한 setuid 비트가 있습니다. 실행 파일은 두 가지 작업을 수행합니다.
- 사용자가 허용되는지 확인
execve argv[1]
(의사 코드)
일반적으로 이를 통해 일반 사용자는 루트로 프로그램을 실행할 수 있습니다. 문제는 setuid로 인해 시작 시 루트이므로 사용자가 누구인지 모르기 때문에 사용자가 허용되는지 확인하는 방법입니다.
답변1
문제는 setuid로 인해 시작 시 루트이므로 사용자가 누구인지 모르기 때문에 사용자가 허용되는지 확인하는 방법입니다.
여기서 uid와 Effective uid의 개념이 등장합니다. setuid 프로그램을 실행하면,getuid
여전히 "실제" 사용자의 uid를 반환합니다. setuid 비트로 인해 유효 uid가 변경됩니다. 바라보다man getuid
및 관련 문서의 세부 사항.
답변2
당신이 제안한 것은 정확히 sudo가 작동하는 방식입니다... 적어도 그것이 시작입니다.
실제로 작동하려면 많은 일이 일어나야 하며, sudo는 보안을 유지하고 이벤트를 기록하기 위해 꽤 복잡한 작업을 수행합니다. 실행되어서는 안 되는 경우와 사용자가 사용할 권한이 없는 경우에도 실행되도록 속일 수 있는 순진한 버전을 작성하는 것은 쉽습니다.