После завершения этого раздела вы сможете настроить политику управления паролями для пользователей, а также вручную заблокировать и разблокировать учетные записи пользователей.
Когда-то зашифрованные пароли хранились в файле /etc/passwd, который мог прочитать любой пользователь. Такой подход считался безопасным, пока не стали распространены атаки с подбором паролей. Тогда зашифрованные пароли были перемещены в отдельный файл /etc/shadow, доступный для чтения только учетной записи root. Этот новый файл позволял реализовать функции ограничения срока действия паролей.
/etc/passwd
/etc/shadow
root
Как и в случае файла /etc/passwd, у каждого пользователя есть строка в файле /etc/shadow. Ниже приведен пример строки из файла /etc/shadow с девятью полями, разделенными двоеточием.
user03:$6$CSsX...output omitted...:17933:0:99999:7:2:18113:
Имя пользователя учетной записи, которой принадлежит этот пароль.
Зашифрованный пароль пользователя. Формат зашифрованных паролей рассматривается позже в этом разделе.
День последнего изменения пароля. Он задается в днях с 01.01.1970 и рассчитывается в часовом поясе UTC.
Минимальное количество дней, которое должно пройти с момента последнего изменения пароля, прежде чем пользователь сможет изменить его снова.
Максимальное количество дней, которое может пройти без смены пароля до окончания срока его действия. Пустое поле означает, что срок действия не заканчивается и не зависит от времени последнего изменения.
Период предупреждения. Пользователь будет предупрежден об окончании срока действия пароля при входе в систему за это количество дней до окончания срока.
Период бездействия. После окончания срока действия пароля он все еще будет приниматься для входа в систему в течение этого количества дней. По окончании этого периода учетная запись будет заблокирована.
День, когда заканчивается срок действия учетной записи. Он задается в днях с 01.01.1970 и рассчитывается в часовом поясе UTC. Пустое поле означает, что срок действия не заканчивается в определенную дату.
Последнее поле обычно пустое и зарезервировано для будущего использования.
Формат зашифрованного пароля
В поле зашифрованного пароля содержатся три элемента информации: используемый алгоритм хеширования, модификатор (соль) и зашифрованный хеш. Каждая часть информации отделяется знаком $.
$
$6$CSsXcYG1L/4ZfHr/$2W6evvJahUfzfHpc9X.45Jc6H30E...output omitted...
Алгоритм хеширования, используемый для этого пароля. Число 6 указывает, что это хеш SHA-512, который по умолчанию используется в Red Hat Enterprise Linux 8. Значение 1 означает MD5, а 5 — SHA-256.
6
1
5
Модификатор (соль), используемый для шифрования пароля. Изначально он выбирался случайным образом.
Зашифрованный хеш пароля пользователя. «Соль» и незашифрованный пароль объединяются и шифруются для получения этого зашифрованного хеша пароля.
Основная причина объединения «соли» с паролем — защита от атак с использованием предварительно рассчитанных списков хешей паролей. Добавление «соли» изменяет результирующие хеши и делает предварительно рассчитанный список бесполезным. Если злоумышленник сможет получить копию файла /etc/shadow, использующего «соль», ему придется взламывать пароль, что потребует больше времени и усилий.
Проверка пароля
Когда пользователь пытается войти в систему, система ищет запись для пользователя в файле /etc/shadow, объединяет «соль» с введенным незашифрованным паролем, а затем шифрует их, используя заданный алгоритм хеширования. Если результат совпадает с зашифрованным хешем, считается, что пользователь ввел правильный пароль. Если результат не совпадает, значит, пользователь ввел неправильный пароль и попытка входа завершится ошибкой. Это позволяет системе определить правильность пароля, не сохраняя этого пароля в форме, подходящей для входа.
На следующей диаграмме представлены параметры срока действия пароля, которые можно настроить с помощью команды chage для реализации политики срока действия паролей.
[user01@host ~]$ sudo chage -m 0 -M 90 -W 7 -I 14 user03
[user01@host ~]$
sudo chage -m 0 -M 90 -W 7 -I 14 user03
0
90
7
14
user03
Предыдущая команда chage использует опции -m, -M, -W и -I для установки минимального срока действия, максимального срока действия, периода предупреждения и периода неактивности пароля пользователя соответственно.
-m
-M
-W
-I
Команда chage -d 0 user03 заставляет пользователя user03 обновить пароль при следующем входе в систему.
Команда chage -l user03 отображает сведения о сроке действия пароля для пользователя user03.
Команда chage -E 2019-08-05 user03 задает для учетной записи пользователя user03 срок действия до 2019-08-05 (в формате ГГГГ-ММ-ДД).
С помощью команды date можно вычислить дату в будущем. Опция -u сообщает время в формате UTC.
-u
[user01@host ~]$ date -d "+45 days" -u Thu May 23 17:01:20 UTC 2019
date -d "+45 days" -u
45
Отредактируйте элементы настройки срока действия пароля в файле /etc/login.defs, чтобы задать политики срока действия пароля по умолчанию. PASS_MAX_DAYS задает максимальный срок действия пароля по умолчанию. PASS_MIN_DAYS задает минимальный срок действия пароля по умолчанию. PASS_WARN_AGE задает период предупреждения пароля по умолчанию. Любые изменения в политиках срока действия пароля по умолчанию применяются только для новых пользователей. Существующие пользователи будут продолжать использовать старые настройки срока действия пароля, а не новые.
/etc/login.defs
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_WARN_AGE
Используйте команду chage, чтобы задать дату окончания действия учетной записи. После наступления этой даты пользователь не сможет интерактивно войти в систему. Команда usermod с опцией -L может заблокировать учетную запись.
-L
[user01@host ~]$ sudo usermod -L user03 [user01@host ~]$ su - user03 Password: redhat su: Authentication failure
sudo usermod -L user03
su - user03
Password:
redhat
Если пользователь увольняется из компании, администратор может заблокировать и отключить его учетную запись одной командой usermod. Дата указывается в виде количества дней после 01.01.1970 или в формате ГГГГ-ММ-ДД.
ГГГГ-ММ-ДД
[user01@host ~]$ sudo usermod -L -e 2019-10-05 user03
sudo usermod -L -e 2019-10-05 user03
2019-10-05
Предыдущая команда usermod использует опцию -e, чтобы задать дату окончания срока действия для данной учетной записи пользователя. Опция -L блокирует пароль пользователя.
-e
Блокировка учетной записи не позволяет пользователю войти в систему даже при указании правильного пароля. Это рекомендуемый метод отключения доступа к учетной записи для сотрудника, который покинул компанию. Если же сотрудник вернется, учетную запись можно разблокировать с помощью команды usermod -U. Если срок действия учетной записи закончился, не забудьте изменить дату окончания срока действия.
Оболочка nologin
Оболочка nologin выступает в качестве сменной оболочки для учетных записей пользователей, не предназначенных для интерактивного входа в систему. С точки зрения безопасности будет разумно отключить вход в систему для учетной записи, если он ей не требуется. Например, почтовому серверу может потребоваться учетная запись для хранения адреса электронной почты и пароля, чтобы пользователь мог пройти аутентификацию в почтовом клиенте для получения почты. Этому пользователю не требуется напрямую входить в систему.
Распространенное решение в такой ситуации — установить для регистрационной оболочки пользователя значение /sbin/nologin. Если пользователь пытается войти в систему напрямую, оболочка nologin закроет подключение.
/sbin/nologin
[user01@host ~]$ usermod -s /sbin/nologin user03 [user01@host ~]$ su - user03 Last login: Wed Feb 6 17:03:06 IST 2019 on pts/0 This account is currently not available.
usermod -s /sbin/nologin user03
Оболочка nologin предотвращает интерактивное использование системы, но не отключает все разрешения на доступ. Пользователи могут проходить аутентификацию, а также отправлять и получать файлы через приложения, например веб-приложения, программы передачи файлов и почтовые клиенты, если они используют пароль пользователя для аутентификации.
Man-страницы chage(1), usermod(8), shadow(5), crypt(3)