기본 문법
chage [옵션] 사용자명
chage는 /etc/shadow에 기록된 비밀번호 관련 날짜 정보를 다루는 명령어입니다. 비밀번호를 마지막으로 바꾼 날, 최소·최대 사용일, 만료 경고일, 비활성 유예일, 계정 만료일을 읽고 수정할 수 있습니다. 값 변경에는 root 권한이 필요하며, 일반 사용자는 -l 옵션으로 자기 계정의 정책만 확인할 수 있습니다.
보안 기준에 맞춰 비밀번호를 주기적으로 변경하도록 강제하거나, 퇴사·계약 종료가 예정된 계정에 만료일을 미리 지정할 때 사용합니다. 신규 계정에 -d 0을 지정해 첫 로그인 시 비밀번호를 변경하도록 만드는 방식도 자주 쓰입니다.
리눅스마스터·RHCSA·LPIC 등의 시험에서는 특정 사용자의 최소/최대 사용일과 경고일을 지정하거나, 계정 만료일을 YYYY-MM-DD 형식으로 설정하는 문제로 출제됩니다. 관련 실습으로 #201(chage로 비밀번호 정책 적용하기), #176(사용자 비밀번호 최소 사용기간과 만료일 설정)이 있습니다. 설정 후에는 chage -l로 값이 반영됐는지 확인하는 것이 좋습니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-l | 해당 사용자의 비밀번호 정책 정보를 조회 | chage -l opsuser |
-m | 비밀번호 최소 사용일(이 기간이 지나기 전에는 변경 불가, 0이면 제한 없음) | chage -m 7 opsuser |
-M | 비밀번호 최대 사용일(이 기간이 지나면 변경 요구) | chage -M 90 opsuser |
-W | 비밀번호 만료 며칠 전부터 경고 메시지를 표시할지 지정 | chage -W 14 opsuser |
-E | 계정 만료일 지정(YYYY-MM-DD 또는 1970-01-01 이후의 일수, -1이면 만료 없음) | chage -E 2026-12-31 rhuser |
-I | 비밀번호 만료 후 계정이 잠기기까지의 비활성 유예일 | chage -I 30 opsuser |
-d | 마지막 비밀번호 변경일 지정, 0을 주면 다음 로그인 시 변경을 강제 | chage -d 0 opsuser |
-R | 지정한 디렉터리를 루트로 삼아 적용(chroot 환경용) | chage -R /mnt/sysroot -M 90 opsuser |
실무 예시
정책 조회하기
준비: useradd demo_ops
$ chage -l demo_ops
Last password change : Sep 16, 2026
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
계정의 현재 비밀번호 정책과 만료 관련 날짜를 확인합니다. 새 계정의 기본값은 /etc/login.defs 설정을 따릅니다.
최소·최대 사용일 설정
준비: useradd demo_ops2
$ chage -m 7 -M 90 demo_ops2 && chage -l demo_ops2 | head -n 6
Last password change : Sep 16, 2026
Password expires : Dec 15, 2026
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
최소 7일, 최대 90일 정책을 적용하고 결과를 바로 확인합니다. 여러 옵션을 한 번에 지정할 수 있습니다. 마지막 변경일이 2026-09-16이므로 만료일은 90일 뒤인 2026-12-15로 계산됩니다.
경고일까지 포함한 정책 적용
준비: useradd demo_policy
$ chage -m 7 -M 90 -W 14 demo_policy && chage -l demo_policy | grep -i warning
Number of days of warning before password expires : 14
실습 #201과 같은 형태입니다. 비밀번호 만료 14일 전부터 경고가 표시되도록 설정한 뒤 해당 항목만 확인합니다.
계정 만료일 지정
준비: useradd demo_temp
$ chage -E 2026-12-31 demo_temp && chage -l demo_temp | grep -i 'Account expires'
Account expires : Dec 31, 2026
지정한 날짜가 지나면 해당 계정으로 로그인할 수 없습니다. 계약직·임시 계정에 사용합니다.
다음 로그인 시 비밀번호 변경 강제
준비: useradd demo_first
$ chage -d 0 demo_first && chage -l demo_first | grep -i 'Last password change'
Last password change : password must be changed
마지막 변경일을 0으로 지정하면 다음 로그인 때 비밀번호를 변경해야 합니다. /etc/shadow의 세 번째 필드가 0이 되며, chage -l에서는 'password must be changed'로 표시됩니다. shadow 파일은 직접 편집하지 말고 chage로 변경하세요.
주의할 점
- -m(최소)과 -M(최대)은 대소문자로 의미가 갈립니다. 소문자 -m을 최댓값으로 착각하는 실수가 잦습니다.
- -E의 날짜는 YYYY-MM-DD 형식이어야 합니다. 2026/12/31 같은 형식은 인식되지 않습니다.
- 최소 사용일이 최대 사용일보다 크면 사용자가 비밀번호를 변경할 수 없게 됩니다.
- 값 변경에는 root 권한이 필요하며, 일반 사용자는 자기 계정의 -l 조회만 가능합니다.
- /etc/shadow를 편집기로 직접 수정하면 형식이 깨져 로그인이 불가능해질 수 있습니다. 확인은 chage -l로, 변경은 chage나 passwd로 하십시오.
- chage -l 출력의 'Password expires'는 마지막 변경일에 최대 사용일을 더해 계산된 값이므로, -M만 바꿔도 만료일이 함께 바뀝니다.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
