Linux 비밀번호 수정과 동시에 만료

Linux 비밀번호 수정과 동시에 만료

Linux bash 스크립팅을 배우고 있는데 예고 없이 오류가 발생했습니다. 왜 비밀번호를 변경하고 동시에 만료할 수 없는지 궁금합니다. 또한 내가 뭔가 잘못하고 있다는 오류나 알림도 없습니다. 보자:

# assuming root
USERNAME=foo
PASSWORD=bar
useradd -m $USERNAME
echo "$PASSWORD" | passwd -e --stdin $USERNAME

산출:

Expiring password for user turing.
passwd: Success

하지만 비밀번호 "bar"를 사용하려고 하면 su - foo로그인할 수 없습니다. 이것만이 정확합니다:

# assuming root
USERNAME=foo
PASSWORD=bar
useradd -m $USERNAME
echo "$PASSWORD" | passwd --stdin $USERNAME
passwd -e $USERNAME

이유를 설명해 주실 수 있나요?

답변1

passwd의 소스 코드에 따르면 두 개의 개별 명령을 실행해야 하는 이유는 다음과 같습니다.

https://pagure.io/passwd/blob/master/f/passwd.c

비밀번호 만료는 항상 --stdin 플래그 이전에 확인되며 기본 기능이 반환됩니다. 이는 본질적으로 이 경우 프로그램이 종료됨을 의미합니다.

if (passwd_flags & PASSWD_EXPIRE) {
        printf(_("Expiring password for user %s.\n"), username);
        retval = pwdb_update_aging(username, -2, -2, -2, -2, 0);
        printf("%s: %s\n", progname,
               retval ==
               0 ? _("Success") : _("Error"));
        audit_log_acct_message(audit_fd, AUDIT_USER_MGMT,
            NULL, "expired-password", NULL, pwd->pw_uid,
            NULL, NULL, NULL, retval == 0);
        return retval;
    }

명령줄 옵션의 실제 구문 분석은 이 지점 이전에 발생하므로 순서는 중요하지 않으며 만료된 플래그는 항상 이 버전의 passwd에서 --stdin 플래그보다 먼저 고려됩니다.

이는 동일한 명령 구문에서 만료 및 비밀번호 변경을 모두 수행하는 것이 논리적으로 불가능하기 때문에 항상 passwd -e <username>및 별도의 명령을 실행 해야 함을 의미합니다 .passwd <username>

관련 정보