파일이 수정된 후 suid 비트가 설정되지 않는 이유는 무엇입니까?

파일이 수정된 후 suid 비트가 설정되지 않는 이유는 무엇입니까?

전역적으로 쓰기 가능한 (s|g)uid 파일이 있습니다.

ls -lh suid_bin.sh
-rwsr-srwx 1 root root 168 mai   23 16:46 suid_bin.sh

루트가 아닌 사용자 계정을 사용하여 로그인하십시오. 저는 "suid_bin.sh"를 수정하기 위해 vi(또는 다른 편집기)를 사용합니다. 새 콘텐츠를 저장한 후 (s|g)uid 비트가 설정 해제됩니다.

ls -lh suid_bin.sh 
-rwxr-xrwx 1 root root 168 mai   23 16:46 suid_bin.sh

왜? 수정 후에 (s|g)uid 비트를 유지하는 방법이 있습니까?

답변1

누군가 실수로 setuid 파일에 그룹 또는 누구나 쓸 수 있는 비트를 설정한 경우 Unix 권한을 통해 파일 쓰기는 허용되지만 낯선 사람이 해당 파일의 소유자 및 그룹 ID를 변경하는 것은 허용되지 않습니다.

따라서 수정된 커널은 파일에 악성 코드가 기록되지 않도록 파일에서 setuid/setgid 비트를 제거합니다.

물론 루트 사용자는 setuid 비트를 복원할 수 있지만 일반 사용자는 누군가의 실수로 인해 권한 있는 실행 파일에 대한 쓰기 액세스 권한을 얻은 경우 이를 악용할 수 없습니다.

그리고 이 영역의 커널 부분을 알고 있으므로 커널 소스를 편집하고 다시 컴파일하지 않고 이를 비활성화할 수 있는지 확신할 수 없습니다.

Linux의 setuid 스크립트는 실행 후 setuid 상태를 얻지 못합니다. 실제로 커널은 setuid 상태 없이 스크립트 해석기를 시작하고 스크립트의 전체 경로를 마지막 구문 분석 인수로 사용한 다음 해석기가 스크립트를 일반 스크립트로 처리하기 때문입니다. 파일 읽기. 그러나 이는 다른 Unix 시스템에서는 다를 수 있습니다.

관련 정보