누구나 쓰기 가능한 (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
Unix 권한은 실수로 누군가가 setuid 파일에 그룹 또는 전체 쓰기 가능 비트를 설정한 경우 파일에 쓰기를 허용하지만 낯선 사람이 해당 파일의 소유자 및 그룹 ID를 변경하는 것을 허용하지 않습니다.
따라서 수정 후 커널은 파일에 악성 코드가 기록되지 않았는지 확인하기 위해 파일에서 setuid/setgid 비트를 삭제합니다.
물론 루트 사용자는 setuid 비트를 복원할 수 있지만 일반 사용자가 누군가의 실수로 권한 있는 실행 파일에 대한 쓰기 액세스 권한을 얻은 경우 이를 악용할 수 없습니다.
그리고 해당 영역의 커널 부분을 알고 있으면 커널의 소스 코드를 편집하고 다시 컴파일하지 않고 해당 영역을 비활성화할 수 있는지 확신할 수 없습니다.
Linux의 setuid 스크립트는 실행 후 setuid 상태를 얻지 못합니다. 실제로 커널은 setuid 상태 없이 스크립트의 전체 경로를 마지막 구문 분석 인수로 사용하여 스크립트 인터프리터를 시작한 다음 인터프리터가 스크립트를 일반 파일로 읽기 때문입니다. 그러나 이는 다른 Unix 시스템에 따라 다를 수 있습니다.