다른 사람에게 권한을 부여하는 대신 setuid를 설정하는 이유

다른 사람에게 권한을 부여하는 대신 setuid를 설정하는 이유

일반 사용자가 자신의 비밀번호를 업데이트하려고 한다고 가정해 보겠습니다 /etc/passwd.

와 같은 작업을 수행하는 것이 더 나은 이유는 -rws------다른 사용자가 -rwx---rwx.

제가 개념을 실제로 이해하지 못했을 수도 있으므로 누군가가 저에게 설명해 줬으면 좋겠기 때문에 제가 틀렸다면 정정해 주세요.

답변1

setuid 비트( sin -rws------)는 프로그램이 실행될 때마다 생성된 프로세스가 다음을 사용함을 의미합니다.프로그램 파일을 소유한 사용자. admin파일을 소유하고 실행하는 경우 john결과 프로세스는 admin의 유효 사용자 ID로 실행됩니다. (비록 john"실제" 사용자 ID는 여전히 전달됩니다.) 일반적으로 admin일반 사용자가 할 수 없는 작업을 수행하는 것이 가능 john하지만 프로그램은 실행 중인 사용자가 수행하려는 작업을 제어하기 위해 추가 검사를 수행할 수 있다는 것이 일반적입니다.

위의 권한을 사용하면 소유자 외에는 누구도 프로그램을 실행할 수 없으므로 setuid 비트는 의미가 없습니다.

권한이 있으면 -rwx---rwx파일 그룹의 구성원이 아닌 사람은 누구나 파일을 실행할 수 있지만 자신의 사용자 ID로 실행하게 됩니다. 그들은 프로그램을 통해 추가적인 권리를 받지 않습니다.

답변2

여기서 중요한 점은 이것이 /etc/passwd보호된 파일이라는 것입니다. 관리자 외에는 누구도 편집할 수 없습니다. 내 데비안에서는 -rw-r--r--SUID가 무엇과 관련되어 있는지 명확하지 않습니다. 이것은 당신에게 이해가 되지 않습니다 /etc/passwd. 이는 변경될 수 있는 프로그램에만 의미가 있습니다 /etc/passwd. 그러나 이제 -rws------ikkachu가 위에서 설명한 것처럼 이 프로그램 파일에는 별 의미가 없습니다. -rws---r-x일반 사용자가 아마도 실행할 것이므로 이는 의미가 있습니다. 그러나 이 파일은 /etc/passwd보호된 파일이므로 변경이 필요한 실행 파일을 작성할 때 이러한 보호를 고려해야 합니다. 그건 그렇고, 고정 비트는 보안상의 이유로 스크립팅 언어에서 작동하지 않습니다.

답변3

자신의 비밀번호를 변경하려면 사용자는 어떻게든 새 비밀번호 해시를 작성해야 합니다 /etc/shadow(또는 /etc/passwd섀도우 비밀번호 구현이 없는 레거시 시스템의 경우).

사용자에게 파일에 대한 쓰기 액세스가 허용되면 사용자는 파일의 모든 항목을 변경할 수 있습니다.누구나비밀번호를 입력하고 모든 사용자를 가장하여 쉽게 루트 액세스 권한을 얻을 수 있습니다. 이는 분명히 받아들일 수 없는 일입니다.

솔루션은 사용자가 수행할 수 있는 능력을 갖춘 "게이트키퍼"입니다.특정한 행위루트 수준 액세스 권한이 있습니다. 즉, 자신을 변경할 수 있습니다.내 자신의비밀번호만.

/bin/passwd프로그램은 바로 게이트키퍼 프로그램입니다. 사용자가 루트(또는 경우에 따라 적절한 추가 권한이 있는 경우)가 아닌 이상 사용자 자신의 비밀번호만 변경할 수 있도록 매우 주의 깊게 작성되었습니다. 게이트키퍼 프로그램이 준비되면 사용자가 프로그램을 실행할 수는 있지만 프로그램 내용을 수정할 수 없도록 권한이 설정됩니다. 그 다음에setuid 루트프로그램에 권한이 추가됩니다. 특정 프로그램을 실행하는 모든 프로세스에 루트 액세스 권한이 부여됩니다.특정 프로세스가 진행되는 동안에만.

때로는 setuid 루트 프로그램의 권한이 4111로 설정되거나 ---s--x--x루트가 아닌 사용자가 프로그램을 실행할 수만 있고 다른 방법으로는 해당 내용을 읽을 수 없도록 설정됩니다.

운영 체제에는 setuid 프로그램에 대한 몇 가지 보호 기능이 내장되어 있습니다. 예를 들어, 루트 사용자가 아니면 setuid 루트 프로그램을 실행하는 프로세스에 디버거를 연결할 수 없습니다. 일반 사용자가 setuid 프로그램을 읽을 수 있고 사용자가 프로그램의 복사본을 만들려고 시도하는 경우 복사본은 일반적으로 그렇지 않더라도 setuid 권한 비트를 잃게 됩니다. 복사본을 만든 사용자에 의해 생성되므로 더 이상 복사본이 아닙니다.setuid 루트하지만setuid [사용자 이름], 그리고 어쨌든 그 일을 할 수 없을 가능성이 높습니다.

관련 정보