Linux, парольная политика

Материал из sysadm
Перейти к навигации Перейти к поиску

Файл /etc/login.defs определяет значения по умолчанию, которые используются при создании новых учетных записей.

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_MIN_LEN    9
PASS_WARN_AGE   7

Период не активности пароля - это количество дней, через которое пароль будет заблокирован после устаревания. Значение 0 означает немедленную блокировку после устаревания. Значение -1 означает, что блокировка после устаревания отключена.


Команда passwd

# определение текущих параметров парольной политики для учетной записи
passwd -S testuser

# формат вывода: <1> <2> <3> <4> <5> <6> <7> <8>
#   <1> - имя учетной записи
#   <2> - статус пароля
#     PS - password set (пароль задан)
#     NP - no password (пароль не задан)
#     LK - password locked (пароль заблокирован)
#   <3> дата последнего изменения пароля
#   <4> PASS_MIN_DAYS
#   <5> PASS_MAX_DAYS
#   <6> PASS_WARN_AGE
#   <7> период не активности
#   <8> расширенное описание статуса

# вывод статуса всех учетных записей
for u in `cat /etc/passwd | cut -d: -f1 | sort`; do passwd -S $u; done

# блокировка пароля учетной записи
passwd -l testuser

# снятие блокировки пароля учетной записи
passwd -u testuser

# установка PASS_MIN_DAYS для учетной записи
passwd -n <days> testuser

# установка PASS_MAX_DAYS для учетной записи
passwd -x <days> testuser

# установка PASS_WARN_AGE для учетной записи
passwd -w <days> testuser

# установка периода не активности для учетной записи
passwd -i <days> testuser

Команда usermod

# блокировка учетной записи
usermod -L testuser

# установка периода не активности для учетной записи
usermod -f <days> testuser

# установка даты истечения пароля
usermod -e <дата в формате YYYY-MM-DD> testuser

# отключение устаревания пароля
usermod -e testuser

Команда useradd

# установка периода не активности по умолчанию для новых учетных записей
useradd -D -f <days>

Команда chage

# вывод информации о параметрах учетной записи
chage -l testuser

Последний раз пароль был изменён                                : PASS_CHANGE_DATE
Срок действия пароля истекает                                   : PASS_CHANGE_DATE + PASS_MAX_DAYS
Пароль будет деактивирован через                                : PASS_CHANGE_DATE + PASS_MAX_DAYS + INACTIVE_DAYS
Срок действия учётной записи истекает                           : EXPIRE_DATE
Минимальное количество дней между сменой пароля                 : PASS_MIN_DAYS
Максимальное количество дней между сменой пароля                : PASS_MAX_DAYS
Количество дней с предупреждением перед деактивацией пароля     : PASS_WARN_AGE

# установка PASS_MIN_DAYS
chage -m <num_days> testuser

# установка PASS_MAX_DAYS
# <num_days> = -1 (отключение устаревания пароля)
# <num_days> = 99999 (второй способ отключения устаревания пароля)
chage -M <num_days> testuser

# установка PASS_CHANGE_DATE (дата последней смены пароля)
# <date> = ГГГГ-ММ-ДД, или кол-во дней с 01.01.1970
# <date> = 0 (1.01.1970, установка требования смены пароля)
chage -d <date> testuser

# установка EXPIRE_DATE (дата после которой учетная запись считается заблокированной)
# <date> = ГГГГ-ММ-ДД, или кол-во дней с 01.01.1970
# <date> = -1 (никогда)
# <date> = 0 (1.01.1970, способ блокировки учетной записи)
chage -E <date> testuser

# установка INACTIVE_DAYS (через какое количество дней после истечения пароля блокируется возможность его изменения, т.е. учетная запись считается заблокированной)
# <num_days> = -1 (никогда)
# <num_days> = 0 (учетная запись блокируется сразу после истечения пароля, нет возможности изменить истекший пароль)
chage -I <num_days>

Пример скрипта уведомления об истечении пароля

dexpire=$(chage -l myuser | grep "Password expires" | cut -d ':' -f 2 | sed 's/^ *//')
if [ "$dexpire" = "never" ]; then
  echo Password will never expire
elif [ $(date -d "$dexpire - 7 days" +"%s") -le $(date -d "now" +"%s") ]; then
  echo Password will expire $(date -d "$dexpire" +"%d.%m.%Y")
  echo -e ''
fi

cron

Если у учетной записи истекает пароль, то ее задания cron перестают запускаться.

Сообщение об истечении пароля отправляется пользователю за PASS_WARN_AGE дней в почтовый файл пользователя. Если в профиле пользователя создать файл .forward, то все сообщения данному пользователю будут пересылаться на указанный в нем почтовый сервер и почтовый адрес.

Чтобы cron мог запускать задания под пользователем с истекшим паролем, необходимо внести корректировку в правила PAM. Если вы не уверены, что верно понимаете работу правил PAM, то лучше это не делать.