chage
Сроки действия пароля и учётной записи — chage -l, -M, -m, -W, -I, -E, -d 0 и поля /etc/shadow
chage (change age) управляет «возрастом» пароля: через сколько дней его нужно сменить, за сколько дней предупреждать, когда учётная запись перестанет работать совсем. Все эти значения хранятся в /etc/shadow, chage просто правит нужные поля. Менять может только root; обычный пользователь может лишь посмотреть свои сроки через chage -l.
Синтаксис
chage -l пользователь # посмотреть
chage [опции] пользователь # изменить
Без опций (кроме имени) chage спрашивает все значения интерактивно.
Опции
| Опция | Поле shadow | Что задаёт |
|---|---|---|
-l | — | показать текущие сроки |
-i | — | с -l: даты в формате ГГГГ-ММ-ДД вместо Oct 13, 2026 |
-M дни | 5 | максимальный срок жизни пароля; после него пароль надо сменить. -M -1 — снять ограничение |
-m дни | 4 | минимум дней между сменами пароля; 0 — менять можно когда угодно |
-W дни | 6 | за сколько дней до истечения пароля предупреждать при входе |
-I дни | 7 | сколько дней после истечения пароля ещё можно войти (сменив пароль); потом вход закрыт. -I -1 — снять |
-E дата | 8 | дата, с которой учётная запись отключена целиком. -E -1 — без срока, -E 0 — отключить сразу |
-d дата | 3 | дата последней смены пароля; -d 0 — заставить сменить пароль при следующем входе |
-R каталог | — | работать с /etc/shadow внутри другого корня (chroot) |
Даты пиши как ГГГГ-ММ-ДД; число трактуется как номер дня от 1 января 1970.
Поля /etc/shadow
alice:$y$j9T$…:20739:7:90:14:5:20849:
1 2 3 4 5 6 7 8 9
| № | Поле | Пример | Смысл |
|---|---|---|---|
| 1 | имя | alice | |
| 2 | хеш пароля | $y$… | ! или * — пароль не задан или заблокирован |
| 3 | последняя смена | 20739 | дни от 1970-01-01; 0 — сменить при входе; пусто — сроки не действуют |
| 4 | минимум | 7 | -m |
| 5 | максимум | 90 | -M; 99999 — фактически никогда |
| 6 | предупреждение | 14 | -W |
| 7 | неактивность | 5 | -I |
| 8 | срок учётной записи | 20849 | -E, номер дня |
| 9 | резерв | не используется |
Перевести номер дня в дату: date -d @$((20849*86400)) +%F.
Вывод chage -l
Last password change : Oct 13, 2026
Password expires : Jan 11, 2027
Password inactive : Jan 16, 2027
Account expires : Jan 31, 2027
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires: 14
Password expires = последняя смена + максимум, Password inactive = истечение + -I. После -d 0 в первых трёх строках стоит password must be changed.
Примеры
# посмотреть сроки, даты в ISO-формате
chage -l -i alice
# политика: менять раз в 90 дней, не чаще раза в неделю, предупреждать за 14
chage -M 90 -m 7 -W 14 alice
# временный сотрудник: учётная запись работает до конца месяца
chage -E 2027-01-31 alice
# выдать временный пароль и заставить сменить его при входе
echo 'alice:Temp-Passw0rd' | chpasswd
chage -d 0 alice
# заблокировать вход прямо сейчас и вернуть обратно
chage -E 0 alice
chage -E -1 alice
# снять все сроки
chage -M -1 -I -1 -E -1 alice
# то же при создании пользователя: -e — срок учётной записи, -f — неактивность
useradd -m -e 2027-12-31 -f 10 bob
# поля shadow напрямую
getent shadow alice
Подводные камни
- Неверная дата не вызывает ошибку.
chage -E 2026-13-45молча превратится в2027-02-14,2026-02-30— в2026-03-02. Всегда проверяй результат черезchage -l -i. Формат31.01.2027хотя бы отвергается. -Eи-M— разные вещи.-Mограничивает срок жизни пароля (пользователя попросят его сменить),-Eотключает учётную запись целиком, независимо от пароля.- Сроки действуют и для
suот root. После-Eв прошломsu aliceпишет «Your account has expired», после-d 0— требует новый пароль. Вход по SSH-ключу тоже проверяет срок учётной записи. -E 0— это 1 января 1970, то есть «уже истекла», а не «без срока». Без срока —-E -1.- Значения по умолчанию для новых пользователей берутся из
PASS_MAX_DAYS,PASS_MIN_DAYS,PASS_WARN_AGEв/etc/login.defs. Уже существующих пользователей правка этого файла не меняет. passwd -S aliceпоказывает те же сроки одной строкой; там-1означает «не задано».