다른 사용자의 비밀번호를 변경하기 위해 "sudo" 및 "passwd" 명령을 사용해야 하는 이유는 무엇입니까?

다른 사용자의 비밀번호를 변경하기 위해 "sudo" 및 "passwd" 명령을 사용해야 하는 이유는 무엇입니까?

명령의 권한 집합을 보면 passwd다음이 표시됩니다.

user@apple:~$ ls -l /bin/passwd
-rwsr-xr-x 1 root root 59976 Nov 24  2022 /bin/passwd

/bin/passwdSUID 비트가 설정되고 소유자는 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코드가 실행됩니다 . 그러나 실행 하면rootbobalicesudo passwd bobsudo명령은 인수를 다음과 같이 실행하기 때문에rootalicepasswd앱을 사용하면 다른 사람의 비밀번호를 변경할 수 있습니다.

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이미 루트가 아닌 이상 허용하지 않는 것이 좋습니다.

관련 정보