su와 같은 프로그램이 /etc/shadow에 액세스할 수 있는 이유는 무엇입니까?

su와 같은 프로그램이 /etc/shadow에 액세스할 수 있는 이유는 무엇입니까?

일반적으로 루트만 액세스할 수 있습니다 /etc/shadow. 그러나 su및 같은 프로그램은 sudo루트로 실행하지 않고도 비밀번호를 확인할 수 있습니다. 따라서 질문은: 왜 이러한 프로그램이 /etc/shadow허가 없이 액세스될 수 있습니까? 모듈을 사용하여 Python을 통해 허가 없이 액세스하려고 했지만 spwd(예상대로) 액세스가 되지 않았습니다. 이 프로그램은 어떤 메커니즘을 사용합니까?

답변1

su와 같은 프로그램이 /etc/shadow에 액세스할 수 있는 이유는 무엇입니까?

프로그램 이미지 supasswd이미 설정되어 있기 때문입니다 SetUID. 다음을 사용하여 확인할 수 있습니다.

[root@tpserver tmp]#  ls -l /usr/bin/passwd
-r-s--x--x  1 root root 21200 Aug 22  2013 /usr/bin/passwd

파일 권한을 보면 "s"가 표시됩니다. 누군가 프로그램을 실행하려고 하면 passwd기본적으로 파일 소유자(여기서는 루트)의 권한이 필요합니다. 이는 루트 사용자만이 파일을 passwd편집하거나 업데이트할 수 있으므로 모든 사용자가 프로그램을 실행할 수 있는 루트 권한을 얻을 수 있음을 의미합니다 . 다른 사용자는 할 수 없습니다. 일반 사용자가 터미널에서 이 프로그램을 실행 하면 유효 UID가 "root"로 설정되어 있으므로 프로그램은 "root"로 실행됩니다. 따라서 일반 사용자는 쉽게 파일을 업데이트할 수 있습니다./etc/passwd/etc/shadowpasswdpasswd

또는 매개변수 chmod와 함께 명령을 사용하여 각각 실행 파일에 setuid 및 setgid 비트를 설정할 수 있습니다.u+sg+s


긴 답변: Set-User_Id(SUID): 일시적으로 전원 켜기:

기본적으로 사용자가 파일을 실행할 때 파일을 실행하는 프로세스는 사용자와 동일한 권한을 갖습니다. 실제로 프로세스는 그의 기본 그룹과 사용자 ID를 상속합니다.

실행 파일에 SUID 속성을 설정하면 해당 파일을 실행한 프로세스는 사용자의 ID를 사용하지 않고 파일 소유자의 사용자 ID를 사용합니다.

Dennis Ritchie가 발명한 SUID 메커니즘에는 잠재적인 보안 위험이 있습니다. 이를 통해 사용자는 루트가 소유한 파일을 실행하여 숨겨진 권한을 얻을 수 있습니다.

$ ls -l /etc/passwd /etc/shadow /usr/bin/passwd
-rw-r--r-- 1 root root 2232 Mar 15 00:26 /etc/passwd
-r-------- 1 root root 1447 Mar 19 19:01 /etc/shadow

목록에는 passwd는 모든 사람이 읽을 수 있지만 Shadow는 그룹 및 다른 사람이 읽을 수 없음이 표시됩니다. 프로그램을 실행하는 사용자가 이 두 범주 중 하나(다른 범주일 수 있음)에 속하면 섀도우에 대한 읽기 테스트에서 액세스가 실패합니다. 일반 사용자가 자신의 비밀번호를 변경하려고 한다고 가정해 보겠습니다. 그는 어떻게 이런 일을 할 수 있었습니까? 그는 다음을 실행하여 이를 수행할 수 있습니다 /usr/bin/passwd. 많은 UNIX/Linux 프로그램에는 사용자가 민감한 시스템 파일, 즉 /etc/shadow편집기를 사용하여 직접 수행할 수 없는 작업을 업데이트할 수 있는 특수 권한 모드가 있습니다 . 프로그램도 마찬가지입니다 passwd.

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 6 2007 /usr/bin/passwd

권한 필드의 사용자 범주에 있는 문자 s는 SUID(사용자 ID 설정)라는 특수 패턴을 나타냅니다. 이 모드는 프로그램 인스턴스 기간 동안 프로세스에 파일 소유자의 권한을 부여합니다. 따라서 권한이 없는 사용자가 passwd를 실행하면 프로세스의 유효 UID는 해당 사용자의 UID가 아닌 루트(프로그램 소유자)의 UID가 됩니다. 그런 다음 passwd는 이 SUID 권한을 사용하여 /etc/shadow.

참고 링크

관련 정보