Как я писал ранее все пароли пользователей, зашифрованные лежат в файле /etc/shadow
. Доступ к этому фалу имеет только root
.
sudo ls -la /etc/shadow
----------. 1 root root 943 Nov 2 15:36 /etc/shadow
/etc/shadow
Рассмотрим подробнее строку из этого файла.
- Имя пользователя
- Зашифрованный пароль
- День, когда пароль последний раз был изменён. Для того чтобы перевести в наши дни надо добавить эти дни к дате 01.01.1970
- Минимальное время в днях которое должно пройти от последней смены пароля для возможности очередной смены пароля
- Срок действия пароля
- Период уведомлений о необходимости смены пароля. Отнимается от даты смена пароля
- Период неактивности пользователя, по истечении которого пользователь будет заблокирован
- Период в днях после которого аккаунт заблокируется. Отсчет идёт опять-таки от 01.01.1970
- Пустое поле для будущих изысканий RedHat
Формат зашифрованного пароля
Зашифрованный пароль, разбитый на части:
$6
$6q63QkCry59G3VG5
$s.O.Lmx5c.ynqHkuWAqiWfCXnvluw85NKkVjJUeQfTP8M8wecl.wTixpCqqoGoIJfA7lgF2fpDkGjVECgAPr90
Получается, что строка состоит из 3 частей, разделённых знаком $
.
- Обозначает какой алгоритм хэширования применен. Номер 6 означает что это SHA-512, который используется по умолчанию в RHEL 8. Номер 1 означает MD5, а 5 - SHA-256.
- Соль (sault), которая используется для декодирования пароля. Генерируется рандомно.
- Хэш пароля пользователя. Хэш и незашифрованный пароль объединяются для создания хэша пароля.
Суть объединения соли с паролем пользователя заключается в защите хэша от всяких переборов пароля по хэшу. Т.е. если у вас пароль 123456
то хэш этого пароля легко найти в интернете, но если у вас добавляется еще моль к этому паролю то найти его уже гораздо сложнее.
Верификация пароля
Когда пользователь пытается залогиниться система проверяет наличие записи для него в файле /etc/shadow
, потом объединяет соль с паролем, который ввёл пользователь и шифрует его используя установленный алгоритм. И если полученный результат аналогичен хэшу в файле значит пользователь ввёл правильный пароль и может авторизоваться в ОС. Этот метод позволяет определить, что пользователь вводит правильный или не правильный пароль без хранения пароля в открытом виде.
Устаревание пароля
Мы уже косвенно затрагивали эту тему в ранних статьях и теперь рассмотрим это подробнее. Управление временем жизни пароля осуществляется через команду chage
. На картинке ниже рассмотрим весь цикл жизни пароля с опциями для chage
.
Например, мы хотим, чтобы пароль пользователя был активен 60 дней, при этом уведомление о смене должно выводиться за 7 дней до истечения пароля, и также выставим время неактивности после окончания срока действия пароля для блокировки неактивного пользователя в 30 дней.
sudo chage -m 0 -M 60 -W 7 -I 30 user20
sudo chage -l user20
Last password change : Nov 02, 2021
Password expires : Jan 01, 2022
Password inactive : Jan 31, 2022
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 60
Number of days of warning before password expires : 7
Мы видим тут дату последней смены пароля от которой и отчитывается срок действия пароля. И если мы хотим, чтобы пользователь при следующем входе в систему сменил пароль то нужно выставить это значение в 0.
sudo chage -d 0 user20
sudo chage -l user20
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Для того чтобы установить время жизни пользователя используем опцию -E
, которая принимает значение даты в будущем.
date -d '+20 days' +%F
sudo chage -E 2021-11-23 user20
sudo chage -l user20
Account expires : Nov 23, 2021
Глобальные настройки пароля
Конечно если у вас по 20-30 пользователей очень проблематично каждому выставлять руками политику паролей. Поэтому существует файл /etc/login.defs
в котором вы можете задать политику паролей для всех пользователей в ОС. Важное замечание политику будут подхватывать только пользователи, созданные после редактирования этого файла. Старым пользователям придётся менять руками командой chage
.
- PASS_MAX_DAYS - максимальное время жизни пароля
- PASS_MIN_DAYS - минимальное время жизни пароля
- PASS_MIN_LEN - минимальное количество символов в пароле
- PASS_WARN_AGE - время уведомления перед истечением пароля
Блокировка пользователя
Для того чтобы заблокировать пользователя можно воспользоваться командой usermod
о которой мы уже говорили тут. Для блокировки используется опция -L
, а для разблокировки - -U
.
sudo usermod -L user20
sudo usermod -U user20
Комментарии