일반 사용자가 passwd 파일을 변경하려는 경우 사용자는 setuid를 통해 효과적인 사용자 액세스 권한을 얻게 됩니다. 사용자는 일시적으로 루트가 되어 비밀번호를 편집할 수 있습니다.
하지만 비밀번호는 본인만 변경할 수 있고 다른 사람의 비밀번호는 변경할 수 없나요? 그러나 유효한 사용자 액세스는 루트입니다. 그렇다면 왜 자신의 비밀번호가 아닌 다른 비밀번호를 변경하는 것이 허용되지 않습니까?
setuid로 프로그램을 실행할 때 유효 사용자는 루트이지만 실제 사용자 ID는 여전히 귀하의 이름입니다. 이것이 실제로 의미하는 것은 무엇입니까?
답변1
다른 비밀번호는 변경할 수 없습니다. 프로그램에서 허용하지 않기 때문입니다. 이 프로그램은 으로 실행되기 때문에 원하는 비밀번호를 변경할 수 있는 시스템 권한을 가지고 있지만 root
, 프로그램은 사용자에게 이러한 권한을 사용할 수 있는 방법을 제공하지 않도록 특별히 설계되었습니다.
일시적으로 루트가 되는 것은 사용자가 아니라 루트 권한으로 실행되는 신뢰할 수 있는 프로그램입니다. 분명히, 사용자가 허용되어야 하는 작업만 수행하도록 제한하도록 특별히 설계된 프로그램만이 setuid를 안전하게 사용할 수 있습니다.
답변2
유효한 사용자 ID는 root이지만, 비밀번호 변경 시에는 유효 사용자 ID가 아닌 실제 사용자 ID를 확인하므로 비밀번호 변경만 가능합니다. 실제 사용자 ID가 아닌 유효 사용자 ID만 변경할 수 있습니다.
루트 사용자만이 실제 사용자 ID를 변경하여 권한이 없는 사용자로 프로그램을 실행할 수 있습니다. 실제 사용자 ID는 세션 시작 시 설정되므로 변경할 수 없습니다.
그렇기 때문에 실제 사용자 ID는 변경되지 않으므로 비밀번호만 변경할 수 있습니다(이는 여전히 루트 사용자가 아닌 사용자 ID이기 때문입니다).
답변3
Unix의 초기 해킹은 setuid 쉘 스크립트에 대한 심볼릭 링크를 만들고 해당 링크를 호출하는 것이었습니다 -i
. 이로 인해 스크립트가 호출되고 sh -i
예상대로 호출된 스크립트를 실행하는 대신 -i
대화형 셸이 실행되어 전체 권한을 부여합니다. 유효 사용자 ID는 passwd
모든 사용자 또는 루트 자체의 파일을 수정하는 데 사용될 수 있습니다. 이를 방지하는 가장 좋은 방법은 SELinux를 사용하여 신뢰할 수 있는 스크립트나 프로그램이 SELinux에서 실행이 허용되는 영역 외부에서 수정되는 것을 방지하는 것입니다.
또 다른 기술은 루트 사용자라도 해당 파일 세트를 수정할 수 없도록 중요한 파일에 불변 비트를 설정하는 것입니다(단일 사용자 모드 제외).
루트로서 사용자를 초대하여 비밀번호 없이 시스템에 로그인하고 임의의 사용자로 표시할 수 있지만 일반 권한이 있는 프로세스는 이러한 일이 발생하지 않도록 최선을 다할 것입니다.
일종의 네트워크 파일 시스템을 사용하는 경우 루트 사용자는 루트가 아닌 해당 파일 공간의 모든 사람으로 처리되므로 신뢰할 수 없는 컴퓨터가 대학 캠퍼스와 같은 신뢰할 수 있는 네트워크에 참여할 수 있습니다.
답변4
비밀번호 설정 프로그램은 무엇이든 할 수 있지만 비밀번호만 변경하도록 프로그래밍되어 있기 때문에 비밀번호만 변경할 수 있습니다. 실제 사용자 ID를 확인하여 변경할 비밀번호를 결정합니다.
set-uid 루틴을 호출하더라도 실제 사용자 ID를 변경할 수 없기 때문에 프로그램은 보안 목적으로 이를 악용할 수 있습니다. 운영 체제는 set uid 루트 프로그램의 보안을 포기합니다.
참고: set uid root 프로그램은 실제 사용자 ID를 변경할 수도 있습니다(그러나 이 사용 사례에서는 유용하지 않습니다).
경고: uid 루트 설정은 해로운 것으로 간주됩니다(이상적이지 않음). 요즘에는 함수를 사용해야 합니다(참조:Gnu/linux에서 파일 권한 등을 설정하는 다른 방법은 무엇입니까?그리고http://man7.org/linux/man-pages/man7/capability.7.html)