일반 사용자가 자신의 비밀번호를 업데이트하려고 한다고 가정해 보겠습니다 /etc/passwd
.
와 같은 작업을 수행하는 것이 더 나은 이유는 -rws------
다른 사용자가 -rwx---rwx
.
제가 개념을 실제로 이해하지 못했을 수도 있으므로 누군가가 저에게 설명해 줬으면 좋겠기 때문에 제가 틀렸다면 정정해 주세요.
답변1
setuid 비트( s
in -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 [사용자 이름], 그리고 어쨌든 그 일을 할 수 없을 가능성이 높습니다.