일반 사용자가 passwd 파일을 변경하려고하면 setuid를 통해 사용자에게 효과적인 사용자 액세스 권한이 부여됩니다. 사용자는 일시적으로 root가되어 passwd를 편집 할 수 있습니다.
그러나 다른 사람이 아닌 암호 만 편집 할 수 있습니까? 그러나 효과적인 사용자 액세스는 루트입니다. 어떻게 다른 암호를 변경할 수 없습니까?
setuid를 사용하여 프로그램을 실행할 때 실제로 유효 사용자가 루트이지만 실제 사용자 ID가 여전히 귀하의 이름 인 경우의 의미는 무엇입니까?
답변
프로그램에서 허용하지 않기 때문에 다른 비밀번호를 변경할 수 없습니다. 프로그램은으로 실행되기 때문에 원하는 비밀번호를 변경할 수있는 시스템 권한이 root
있지만 프로그램은 사용자에게 해당 권한을 사용할 수있는 방법을 제공하지 않도록 특별히 설계되었습니다.
사용자가 일시적으로 루트가되는 것은 아니며 신뢰할 수있는 프로그램이 루트 권한으로 실행된다는 것입니다. 분명히 사용자가 허용 된 것만 수행하도록 제한하도록 특별히 설계된 프로그램 만 안전하게 setuid로 만들 수 있습니다.
답변
비밀번호 변경시 실제 사용자 ID는 유효 사용자 ID가 아닌 것으로 확인되므로 유효 사용자 ID는 root인데도 비밀번호 만 변경할 수 있습니다. 실제 사용자 ID가 아닌 유효 사용자 ID 만 변경할 수 있습니다.
루트 사용자 만이 실제 사용자 ID를 변경하여 권한이없는 사용자로 프로그램을 실행할 수 있습니다. 실제 사용자 ID는 세션 시작시 설정되어 있으므로 변경할 수 없습니다.
그렇기 때문에 실제 사용자 ID는 변경되지 않았기 때문에 비밀번호 만 변경할 수 있습니다 (아직 루트 사용자가 아니기 때문에).
답변
유닉스에서의 초기 해킹은 setuid 쉘 스크립트에 대한 심볼릭 링크를 만들고 링크를 호출하는 것이었다 -i
. 이로 인해 의도 한대로 sh -i
스크립트를 실행하는 대신 -i
대화식 쉘을 시작한 다음 스크립트를 호출 하여 전체 기능을 사용할 수 있습니다. 효과적인 사용자 ID를 사용하여 passwd
사용자 또는 루트 자체 의 파일 을 수정할 수 있습니다 . 이를 방지하는 가장 좋은 방법은 SELinux를 사용하여 신뢰 스크립트 또는 프로그램이 SELinux가 허용하는 영역 외부에서 수정되는 것을 방지하는 것입니다.
또 다른 기법은 루트 사용자가 단일 세트를 제외하고 한 세트를 수정할 수없는 중요한 파일에 불변 비트를 갖는 것입니다.
root 권한으로 사용자는 비밀번호없이 시스템에 로그온하도록 사용자를 초대 할 수 있으며 다른 사용자로 표시되지만 일반적인 권한있는 프로세스는이를 방지하기 위해 매우 노력합니다.
어떤 종류의 네트워크 파일링 시스템을 사용하는 경우 루트 사용자는 루트 대신 해당 파일 공간에 아무도없는 것으로 간주되어 신뢰할 수없는 컴퓨터가 대학 캠퍼스와 같은 신뢰할 수있는 네트워크에 참여할 수 있습니다.
답변
set-password 프로그램은 모든 기능을 수행 할 수는 있지만 암호 만 변경하도록 프로그래밍되어 있으므로 암호 만 변경할 수 있습니다. 실제 사용자 ID를 확인하여 변경할 비밀번호를 결정합니다.
set-uid 프로그램을 호출하더라도 실제 사용자 ID를 변경할 수 없으므로 프로그램은이를 사용하여 보안을 구현할 수 있습니다. 운영 체제는 set uid root 프로그램에 대한 보안을 포기합니다.
참고 : set uid root 프로그램은 실제 사용자 ID를 변경할 수도 있습니다 (그러나이 사용 사례에서는 사용되지 않습니다).
경고 : set uid root는 유해한 것으로 간주됩니다 (이상적이지 않음). 요즘에는 기능을 사용해야합니다 ( gnu / linux 및 http://man7.org/linux/man-pages/man7/capabilities.7.html 에서 파일 권한을 설정하는 다른 방법 은 무엇입니까 참조 )