명령의 권한 집합을 보면 passwd
다음이 표시됩니다.
user@apple:~$ ls -l /bin/passwd
-rwsr-xr-x 1 root root 59976 Nov 24 2022 /bin/passwd
/bin/passwd
SUID 비트가 설정되고 소유자는 root
사용자입니다. 즉, 명령을 실행하면 passwd
사용자의 권한으로 명령이 실행됩니다 root
.
이미 사용자 권한 이 passwd
있는데 root
다른 사용자의 비밀번호를 변경하려고 하면 왜 이런 메시지가 표시됩니까 test
?
user@apple:~$ passwd test
passwd: You may not view or modify password information for test.
동일한 명령을 실행하지만 을 사용하면 sudo
비밀번호를 변경할 수 있습니다. 왜 그런 겁니까?
답변1
이 특정 구현에서는 다른 사람의 비밀번호를 변경하려면 사용자로 passwd
명령을 실행해야 합니다 .root
앱 에는 귀하가 해당 사용자인지 확인하고 그렇지 않은 경우 다른 사람의 비밀번호를 변경하는 것을 거부하는 passwd
코드가 있습니다 . root
그렇다면 root
누구의 비밀번호도 변경할 수 있습니다.
예를 들어, 로그인 alice
한 후 실행 하면 비밀번호 변경을 거부하므로 passwd bob
코드가 실행됩니다 . 그러나 실행 하면root
bob
alice
sudo passwd bob
sudo
명령은 인수를 다음과 같이 실행하기 때문에root
alice
이 passwd
앱을 사용하면 다른 사람의 비밀번호를 변경할 수 있습니다.
src/passwd.c
다음을 사용하여 (Debian에서) 얻은 의 라인 apt source passwd
:
static bool amroot; /* The caller's real UID was 0 */
…
/*
* The program behaves differently when executed by root than when
* executed by a normal user.
*/
amroot = (getuid () == 0);
…
/*
* If the UID of the user does not match the current real UID,
* check if I'm root.
*/
if (!amroot && (pw->pw_uid != getuid ())) {
(void) fprintf (stderr, _("%s: You may not view or modify password information for %s.\n"), Prog, name);
SYSLOG ((LOG_WARN, "%s: can't view or modify password information for %s", Prog, name));
closelog ();
exit (E_NOPERM);
}
답변2
다른 사용자의 비밀번호를 변경할 수 있다는 것은많은보안 취약성이므로 passwd
이미 루트가 아닌 이상 허용하지 않는 것이 좋습니다.