내가 볼 때
usr/bin/
디렉토리에서 passwd가 포함된 명령줄을 봤습니다.
-rwsr-xr-x. 1 root root 30768 2012-02-22 20:48 /usr/bin/passwd
그리고 루트 권한을 얻기 위해 변경을 허용합니다. 와 함께.
루트만이 다른 사용자의 비밀번호를 변경할 수 있는지 궁금합니다.
passwd user
이 명령의 위치를 찾아보고 싶습니다.
이 명령도 usr/bin/ 디렉토리의 일부입니까? 아니면 다른 것
내가 하고 싶은 일은.
나는 로그인한다
user1
그리고 유형
[user1] passwd user2
물론 어떤 면에서는 막혀있습니다. 하지만 나는 그것에 대해 더 알고 싶습니다.
답변1
유닉스(및 리눅스)는 다음과 같은 개념을 가지고 있습니다.진짜사용자와효과적인사용자. /usr/bin/passwd
유효 사용자를 파일의 소유자로 설정하는 것과 같은 setuid 프로그램 ; 이 경우 유효 사용자를 로 설정합니다 root
.
이제 이러한 상승된 권한으로 프로그램이 수행하는 작업은 프로그램 자체에 달려 있습니다.
프로그램 의 경우 passwd
사용자 이름을 전달하면 해당 프로그램이 사용자 이름을 확인합니다.진짜사용자는 루트입니다. 그렇다면 성공하고, 그렇지 않으면 오류를 반환합니다.
따라서 root
사용자가 실행할 수 /usr/bin/password user2
있고 이것이 작동하지만 user
동일한 명령을 실행하면 실패합니다. 프로그램은 하나 뿐이지만 실행하는 사용자에 따라 작동 방식이 달라집니다.
답변2
passwd
파일 을 수정하려면 루트 권한이 필요하기 때문에 바이너리는 suid 입니다 /etc/shadow
. 권한이 없는 사용자가 다른 사용자의 비밀번호를 수정하는 것은 허용되지 않습니다. 모든 사용자의 비밀번호를 수정할 수 있지만 root
그것이 적합한 이유는 아닙니다.