실제적이고 유효한 사용자 ID는 어떻게 작동하나요?

실제적이고 유효한 사용자 ID는 어떻게 작동하나요?

일반 사용자가 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)

관련 정보