passwd 명령어 사용법

사용자 계정의 비밀번호와 잠금 상태를 관리하는 명령어입니다.

사용자·그룹/인증연결 실습 문제 1개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

passwd [옵션] [사용자명]

passwd는 사용자 계정의 비밀번호를 설정·변경하고, 계정의 잠금(lock)과 해제(unlock), 비밀번호 만료 정보 등을 관리하는 명령어입니다. 일반 사용자가 인자 없이 실행하면 자신의 비밀번호를 변경하고, root가 사용자명을 인자로 주면 해당 계정의 비밀번호를 변경합니다.

비밀번호는 /etc/shadow의 두 번째 필드에 해시 형태로 저장됩니다. 계정을 잠그면 이 필드 앞에 느낌표(!)가 붙어 비밀번호 인증이 실패합니다. 계정 생성 직후처럼 원래 필드가 '!!'로 시작하던 경우에는 잠금 후에도 느낌표가 두 개로 보일 수 있습니다.

잠금은 비밀번호 인증만 막습니다. SSH 공개키 인증이나 root의 su - 같은 다른 경로는 막히지 않으므로, 로그인 자체를 막으려면 셸을 /sbin/nologin으로 바꾸는 방법을 함께 씁니다.

시험에서는 usermod -L/-U 대신 passwd -l, passwd -u로 잠금과 해제를 처리하거나, passwd -S로 상태를 확인하는 문제가 자주 나옵니다. 비밀번호 만료 정책은 chage와 함께 다루어집니다.

자주 쓰는 옵션

옵션의미
-l계정 비밀번호를 잠금(shadow 암호 필드 앞에 ! 추가)passwd -l demo_user
-u잠긴 계정의 비밀번호를 잠금 해제passwd -u demo_user
-S계정의 비밀번호 상태를 한 줄로 출력passwd -S demo_user
-a-S와 함께 쓸 때만 유효하며 모든 계정의 상태를 출력(-Sa처럼 붙여 쓰면 unknown option 오류가 발생하므로 -S -a로 분리해 입력)passwd -S -a
-d비밀번호를 삭제해 빈 암호 상태(NP)로 만듦passwd -d demo_user
-e비밀번호를 즉시 만료시켜 다음 로그인 시 변경을 강제passwd -e demo_user
-n 일수비밀번호 변경 후 다시 변경 가능하기까지의 최소 일수passwd -n 1 demo_user
-x 일수비밀번호 최대 사용 일수(만료 주기) 설정passwd -x 90 demo_user
-w 일수만료 전 경고를 시작할 일수 설정passwd -w 7 demo_user
-i 일수비밀번호 만료 후 계정이 비활성화되기까지의 유예 일수passwd -i 10 demo_user
--stdin표준 입력으로 받은 문자열을 비밀번호로 설정(RHEL 계열 전용)echo 'Passw0rd!' | passwd --stdin demo_user

실무 예시

계정 비밀번호 상태 확인

준비: useradd demo_user; echo 'Passw0rd!' | passwd --stdin demo_user

$ passwd -S demo_user
Changing password for user demo_user.
passwd: all authentication tokens updated successfully.
demo_user PS 2026-09-16 0 99999 7 -1 (Password set, SHA512 crypt.)

두 번째 필드가 PS이면 비밀번호가 설정된 상태입니다. LK는 잠김, NP는 비밀번호 없음을 뜻합니다. 뒤의 숫자는 순서대로 최소 일수, 최대 일수, 경고 일수, 비활성화 일수입니다.

계정 잠그기

준비: useradd demo_user2; echo 'Passw0rd!' | passwd --stdin demo_user2

$ passwd -l demo_user2 && passwd -S demo_user2
Changing password for user demo_user2.
passwd: all authentication tokens updated successfully.
Locking password for user demo_user2.
passwd: Success
demo_user2 LK 2026-09-16 0 99999 7 -1 (Password locked.)

passwd -l로 계정을 잠근 뒤 상태가 LK로 바뀌는지 확인합니다. usermod -L 대신 passwd만으로도 잠금이 가능합니다.

잠금 시 shadow 파일 변화 확인

준비: useradd demo_user3; echo 'Passw0rd!' | passwd --stdin demo_user3

$ passwd -l demo_user3; grep '^demo_user3:' /etc/shadow | cut -d: -f1,2 | cut -c1-30
Changing password for user demo_user3.
passwd: all authentication tokens updated successfully.
Locking password for user demo_user3.
passwd: Success
demo_user3:!!$6$kul3l38jY/A3CG

잠금 후 암호 해시 앞에 느낌표가 붙는 것을 확인할 수 있습니다. 실행 결과에서는 '!!$6$...'처럼 느낌표가 두 개로 나타났는데, 계정 생성 시점의 '!!' 표시가 남아 있기 때문입니다. /etc/shadow는 읽기만 하고 직접 편집하지 마세요.

잠금 해제

준비: useradd demo_user4; echo 'Passw0rd!' | passwd --stdin demo_user4; passwd -l demo_user4

$ passwd -u demo_user4 && passwd -S demo_user4
Changing password for user demo_user4.
passwd: all authentication tokens updated successfully.
Locking password for user demo_user4.
passwd: Success
Unlocking password for user demo_user4.
passwd: Success
demo_user4 PS 2026-09-16 0 99999 7 -1 (Password set, SHA512 crypt.)

passwd -u로 암호 필드 앞의 느낌표가 제거되어 상태가 다시 PS로 돌아옵니다.

비밀번호 만료 주기 설정

준비: useradd demo_user5; echo 'Passw0rd!' | passwd --stdin demo_user5

$ passwd -n 1 -x 30 -w 5 demo_user5 && passwd -S demo_user5
Changing password for user demo_user5.
passwd: all authentication tokens updated successfully.
Adjusting aging data for user demo_user5.
passwd: Success
demo_user5 PS 2026-09-16 1 30 5 -1 (Password set, SHA512 crypt.)

최소 1일, 최대 30일, 경고 5일로 정책을 설정하고 -S 출력의 숫자 필드에서 결과를 확인합니다. 같은 설정을 chage로도 할 수 있습니다.

모든 계정 상태 중 잠긴 계정만 추출

준비: useradd demo_user6; echo 'Passw0rd!' | passwd --stdin demo_user6; passwd -l demo_user6

$ passwd -S -a | grep ' LK ' | head -5
Changing password for user demo_user6.
passwd: all authentication tokens updated successfully.
Locking password for user demo_user6.
passwd: Success
passwd: bad argument -a: unknown option

-S와 -a를 함께 써서 전체 계정 상태를 출력한 뒤 LK 표시가 있는 잠긴 계정만 골라냅니다. 초안의 -Sa는 Rocky 8의 shadow-utils에서 'bad argument -Sa: unknown option' 오류가 나므로 옵션을 분리해야 합니다. 시스템 계정 대부분은 기본적으로 LK 상태입니다.

비밀번호 즉시 만료

준비: useradd demo_user7; echo 'Passw0rd!' | passwd --stdin demo_user7

$ passwd -e demo_user7 && passwd -S demo_user7
Changing password for user demo_user7.
passwd: all authentication tokens updated successfully.
Expiring password for user demo_user7.
passwd: Success
demo_user7 PS 1970-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)

마지막 변경일이 초기화되어 다음 로그인 시 비밀번호 변경을 강제합니다. 상태 출력의 날짜 필드가 1970-01-01로 표시됩니다.

주의할 점

  • passwd -l은 비밀번호 인증만 막습니다. SSH 공개키 인증이나 root의 su는 여전히 가능하므로, 로그인 자체를 막으려면 usermod -s /sbin/nologin 등으로 셸을 함께 변경하세요.
  • passwd -d는 비밀번호를 지워 빈 암호 상태(NP)로 만듭니다. 잠금이 아니라 오히려 보안이 약해지므로 -l과 혼동하지 마세요.
  • 상태를 모두 보려면 passwd -S -a처럼 옵션을 분리해야 합니다. -Sa로 붙여 쓰면 unknown option 오류가 발생합니다.
  • --stdin은 RHEL 계열 전용 옵션입니다. Debian/Ubuntu에는 없으므로 chpasswd를 사용합니다. 또한 명령을 그대로 쓰면 비밀번호가 셸 히스토리에 남습니다.
  • /etc/shadow는 vi 등으로 직접 편집하지 말고 passwd, chage, usermod 명령으로 변경하세요. 부득이하게 편집해야 한다면 vipw -s를 사용합니다.
  • 일반 사용자는 자신의 비밀번호만 변경할 수 있고, 다른 계정 조작이나 잠금은 root 권한이 필요합니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.