4 Идентификация и аутентификация

4.1 Введение

Средства идентификации и аутентификации предоставляют возможности идентификации объектов доступа, идентификации и проверки подлинности субъектов доступа при входе в систему и при доступе к защищаемым объектам, управления идентификаторами, в том числе их создания, присвоения и уничтожения, управления аутентификационными данными, в том числе их инициализации, защищенного хранения, блокирования и разблокирования, проверки соответствия аутентификационной информации заданной метрике качества, защиты обратной связи при вводе аутентификационной информации, а также другие возможности.

4.2 Добавление нового пользователя

Для добавления нового пользователя используется утилита useradd. Она позволяет добавить учетную запись нового пользователя. Режимы ее работы и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты useradd и их значения

Опция

Значение

-c, --comment

Любая текстовая строка. Используется как поле для имени и фамилии пользователя, длина этого поля не должна превосходить 128 символов.

-b, --base-dir

Базовый системный каталог по умолчанию, если не указан другой каталог. Базовый каталог объединяется с именем учётной записи для определения домашнего каталога.

-d, --home

Для создаваемого пользователя в качестве начального каталога будет использован базовый каталог. По умолчанию это значение получается объединением имени пользователя с базовым каталогом и используется как имя домашнего каталога.

-d, --home-dir

Задать домашний каталог нового пользователя. Если данная опция не используется, то в качестве домашнего каталога выбирается каталог типа /базовый_системный_каталог/имя_пользователя.

-D, --defaults

Вывести значения стандартных опций.

-e, --expiredate

Дата окончания срока действия учётной записи пользователя. Задаётся в формате ГГГГ-ММ-ДД.

--f, --inactive

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

-g, --gid

Название группы нового пользователя или её идентификационный номер. Указываемое название группы или её номер должны существовать в системе.

-G, --groups

Список дополнительных групп, в которых числится пользователь. Перечисление групп осуществляется через запятую без пробелов. На указанные группы действуют те же ограничения, что и для группы, указанной в опции -g.

-m, --create-home

Создает начальный домашний каталог нового пользователя, если он ещё не существует. Если каталог уже существует, добавляемый пользователь должен иметь права на доступ к указанному каталогу.

-M, --no-create-home

Позволяет не создавать домашний каталог нового пользователя.

-K, --key

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

-N, --no-user-group

Позволяет добавить нового пользователя в группу, указанную в опции -g или заданную по умолчанию в конфигурационном файле /etc/default/useradd, не создавая группу, название которой совпадает с именем нового пользователя. Если опции -g, -N, -U не указаны, то настройки групп по умолчанию определяются в конфигурационном файле /etc/login.defs.

-o, --non-unique

Позволяет создать учётную запись с уже имеющимся, не уникальным идентификатором.

-p, --password

Позволяет задать новый пароль для учётной записи.

-r, --system

Позволяет создать системную учётную запись. По умолчанию для данной категории учетных записей домашний каталог не создаётся вне зависимости от значения соответствующего параметра конфигурационного файла /etc/login.defs. Для создания домашнего каталога системного пользователя необходимо вместе с опцией -r задать опцию -m.

-s, --shell

Полный путь к программе, используемой в качестве начального командного интерпретатора для пользователя сразу после регистрации. Длина этого поля не должна превосходить 256 символов. Если задать пустое значение, то будет использоваться оболочка по умолчанию.

-u, --uid

Позволяет задать идентификационный номер (численное неотрицательное значение идентификатора) пользователя. Это значение должно быть уникальным, если не задействована опция -o.

U, --user-group

Позволяет создать группу, название которой совпадает с именем пользователя, присоединив данного пользователя к этой группе.

-h, --help

Показать краткую справку об утилите.

Пример: создадим пользователя с именем user и зададим для него основную группу users и две дополнительные группы ftp и developers, к которым он будет приписан.

Для этого выполним следующую команду:

$ sudo useradd -g users -G ftp,developers user

4.3 Изменение уже имеющихся пользовательских записей

Для изменения уже имеющихся пользовательских записей используется утилита usermod. Она позволяет изменить данные существующей учётной записи пользователя. Режимы ее работы и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты usermod и их значения

Опция

Значение

-a, --append

Добавить пользователя в дополнительную группу. Следует использовать только вместе с параметром -G.

-c, --comment

Новое значение поля комментария.

d, --home

Новый домашний каталог учётной записи. Если указан параметр -m, то содержимое текущего домашнего каталога будет перемещено в новый домашний каталог, который будет создан, если он ещё не существует.

-e, --expiredate

Установить дату окончания срока действия учётной записи в формате ГГГГ-ММ-ДД.

-f, --inactive

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

-g, --gid

Принудительно назначить первичную группу.

-G, --groups

Список дополнительных групп.

-l, --login

Новое значение учётной записи.

-L, --lock

Заблокировать пароль пользователя. Это делается помещением символа ! в начало шифрованного пароля, что приводит к его блокировке. Не следует использовать этот параметр вместе с -p или -U.

-m, --move-home

Переместить содержимое домашнего каталога пользователя в новое место. Если новый домашний каталог не существует, то он создаётся автоматически. Данная опция используется только вместе с опцией -d.

-o, --non-unique.

При использовании с параметром -u этот параметр позволяет указывать не уникальный числовой идентификатор пользователя.

-p, --password

Задать новый пароль для учётной записи.

-s, --shell

Задать новую оболочку для учётной записи.

-u, --uid

Новый идентификационный номер для учётной записи.

-U, --unlock

Разблокировать учетную запись.

Пример: изменим срок действия учётной записи пользователя с идентификатором user6.

Для этого выполним следующую команду:

$ sudo usermod -e 2020-05-01 user6

где 2020-05-01 — дата истечения срока действия учётной записи в формате ГГГГ-ММ-ДД.

Пример: изменим идентификатор (значение учётной записи) пользователя с user6 на user7.

Для этого выполним следующую команду:

$ sudo usermod -l user7 user6

4.4 Удаление пользователей

Для удаления пользователей используется утилита userdel. Она позволяет удалить существующую учетную запись пользователя. Режимы ее работы и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты userdel и их значения

Опция

Значение

-f, --force

С этой опцией учётная запись будет удалена, даже если пользователь в этот момент работает в системе. Она также заставляет утилиту удалить домашний каталог пользователя и почтовый ящик, даже если другой пользователь использует тот же домашний каталог или если почтовый ящик не принадлежит данному пользователю. Внимание! Перед использованием этого параметра убедитесь в необходимости этого действия! Этот параметр может привести систему в нерабочее состояние!

-r, --remove

Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним каталогом и почтовым ящиком. Пользовательские файлы, расположенные в других файловых системах, нужно искать и удалять вручную.

-n

Задает, сколько месяцев идентификатор пользователя должен устаревать перед повторным использованием. Задайте -1, чтобы указать, что идентификатор пользователя никогда не должен использоваться повторно. Задайте 0, чтобы указать, что идентификатор пользователя можно немедленно использовать повторно. Если опция -n не задана, то идентификатор будет устаревать стандартное количество месяцев перед повторным использованием.

-h, --help

Показать краткую справку.

Пример: удалим пользователя с идентификатором user7.

Для этого выполним следующую команду:

$ sudo userdel -r user7

4.5 Добавление группы пользователей

Для добавления группы пользователей используется утилита groupadd. Режимы ее работы и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты groupadd и их значения

Опция

Значение

-f

Вернуть статус успешного выполнения, если группа уже существует. Если используется вместе с параметром -g и указанный идентификатор группы уже существует, то выбирается другой уникальный идентификатор группы, то есть параметр -g игнорируется.

-g

Числовое значение идентификатора группы. Значение должно быть уникальным, если не задан параметр -o. Значение должно быть не отрицательным. По умолчанию берётся значение больше 999 и больше идентификатора любой другой группы. Значения от 0 и до 999 обычно зарезервированы под системные группы.

-K

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

-o

Разрешить добавление группы с не уникальным идентификатором.

-r, --system

Создать системную группу.

-h, --help

Показать краткую справку.

Пример: создадим группу group2 с числовым значением идентификатора 8285.

Для этого выполним следующую команду:

$ sudo groupadd group2 -g 8285

4.6 Изменение существующей группы пользователей

Для изменения существующей группы пользователей используется утилита groupmod. Режимы ее работы и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты groupmod и их значения

Опция

Значение

-g, --gid

Изменить идентификатор группы.

-n, --new-name

Изменить имя группы.

-o, --non-unique

Позволяет использовать не уникальный идентификатор группы.

-p, --password

Изменить пароль.

-h, --help

Показать краткую справку.

Пример: изменим идентификатор группы пользователей users на ftp.

Для этого выполним следующую команду:

$ sudo groupmod -g ftp users

4.7 Удаление существующей группы пользователей

Для удаления существующей группы пользователей используется утилита groupdel. Утилита позволяет удалить определение группы из системы путем удаления записи о соответствующей группе из файла /etc/group. Однако она не удаляет идентификатор группы из файла паролей. Удаленный идентификатор действует для всех файлов и каталогов, которые его имели.

Пример: удалим группу с именем group3.

Для этого выполним следующую команду:

$ sudo groupdel group3

4.8 Создание и изменение пароля пользователя

Для создания и изменения пароля пользователя (в том числе для блокировки учётной записи пользователя) используется утилита passwd. Обычный пользователь может изменить пароль только своей учётной записи, суперпользователь root может изменить пароль любой учётной записи.

При изменении пароля проверяется информация об устаревании пароля, чтобы убедиться, что пользователю разрешено изменять пароль в настоящий момент. Если выяснится, что не разрешено, то утилита не производит изменение пароля и завершает работу.

При изменении пароля пользователь должен будет сначала ввести старый пароль, если он был. Введенное пользователем значение старого пароля зашифровывается и сравнивается со значением зашифрованного текущего пароля. Затем пользователю необходимо будет дважды ввести новый пароль. Значение второго ввода сравнивается с первым, и они должны совпасть. После этого пароль тестируется на сложность подбора, т.е. его значение не должно быть легко угадываемым.

Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты passwd и их значения

Опция

Значение

-а, --аll

Эту опцию можно использовать только вместе с -S для вывода статуса всех пользователей.

-d, --delete

Удалить пароль пользователя (сделать его пустым). Это быстрый способ заблокировать пароль учётной записи.

-e, --expire

Немедленно сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему.

-i, --inactive

Эта опция используется для блокировки учётной записи по прошествии заданного числа дней после устаревания пароля. То есть если пароль устарел и прошло больше дней, чем указано, то пользователь больше не сможет использовать свою учётную запись.

-l, --lock

Заблокировать указанную учётную запись. Эта опция блокирует учётную запись путем изменения значения пароля на такое, которое не может быть ранее указанным зашифрованным паролем.

-m, --mindays

Задать минимальное количество дней между сменой пароля. Нулевое значение этого поля указывает на то, что пользователь может менять свой пароль тогда, когда захочет.

-S, --status

Показать состояние учётной записи. Информация о состоянии содержит семь полей. Первое поле содержит имя учётной записи. Второе поле указывает, заблокирована ли учётная запись, она без пароля или у неё есть рабочий пароль. Третье поле хранит дату последнего изменения пароля. В следующих четырёх полях хранятся минимальный срок, максимальный срок, период выдачи предупреждения и период неактивности пароля. Все эти сроки измеряются в днях.

-u, --unlock

Разблокировать указанную учётную запись. Этот параметр активирует учётную запись путем изменения пароля на прежнее значение, которое было перед использованием параметра -l.

-w, --warndays

Установить число дней выдачи предупреждения, перед тем как потребуется смена пароля.

-x, --maxdays

Установить максимальное количество дней, в течение которых пароль остаётся рабочим, после чего его надо будет изменить.

-h, --help

Показать краткую справку.

Пример: зададим пароль пользователю user4. Работа команды passwd:

$ sudo passwd user4
Изменяется пароль пользователя user4.
Новый пароль :
Повторите ввод нового пароля :
passwd: все данные аутентификации успешно обновлены.

Пример: посмотрим состояние учётной записи user4. Работа команды passwd:

$ sudo passwd -S user4
user4 PS 2023-07-04 0 99999 7 -1 (Пароль задан, шифр SHA512.)

Где:

  • user4 — имя пользователя.

  • PS — статус пароля.

  • 2023-07-04 — отображает время последнего изменения пароля.

  • 0 и 99999 — минимальный и максимальный срок действия пароля.

  • 7 — срок вывода предупреждения.

  • -1 — срок деактивации пароля.

4.9 Изменение срока действия учётной записи и пароля пользователя

Утилита chage позволяет установить дату завершения срока действия учётной записи пользователя, минимальный и максимальный срок действия пароля, дату завершения срока действия пароля, а также количество дней, в течение которых пользователю будут выводиться предупреждения о приближении завершения срока действия пароля.

Командой сhage может пользоваться только суперпользователь, за исключением использования её с параметром -l, который позволяет непривилегированным пользователям определить время, когда истекает их личный пароль или учетная запись.

Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты chage и их значения

Опция

Значение

-m

Меняет значение mindays на минимальное число дней между сменой пароля. Значение 0 в этом поле обозначает, что пользователь может изменять свой пароль когда угодно.

-M

Меняет значение maxdays на максимальное число дней, в течение которых пароль будет действителен. Когда сумма maxdays и lastday меньше, чем текущий день, у пользователя будет запрошен новый пароль до начала работы в системе.

-d

Меняет значение lastday на день, когда пароль был изменен последний раз (число дней с 1 января 1970). Дата также может быть указана в формате ГГГГ-ММ-ДД.

-E

Используется для задания даты, с которой учетная запись пользователя станет недоступной. Дата также может быть указана в формате ГГГГ-ММ-ДД.

-I

Используется для задания количества дней «неактивности», то есть дней, когда пользователь вообще не входил в систему, после которых его учетная запись будет заблокирована. Значение 0 отключает этот режим.

-W

Используется для задания числа дней, когда пользователю начнет выводиться предупреждение об истечении срока действия его пароля и необходимости его изменения.

-l

Просмотреть текущую информацию о дате истечения срока действия пароля для пользователя.

Пример: просмотрим текущую информацию о дате истечения срока действия пароля для пользователя user4. Работа команды chage:

$ sudo chage -l user4
Последний раз пароль был изменён: мар 12, 2023
Срок действия пароля истекает: никогда
Пароль будет деактивирован через: никогда
Срок действия учётной записи истекает: никогда
Минимальное количество дней между сменой пароля: 0
Максимальное количество дней между сменой пароля: 99999
Количество дней с предупреждением перед деактивацией пароля: 7

4.10 Управление политиками паролей

В данном разделе описана процедура управления политиками паролей на локальной системе, не подключённой к LDAP-каталогу пользователей (FreeIPA, Microsoft Active Directory и т.д.). В случае использования LDAP-каталога обратитесь к соответствующему руководству по администрированию.

Для управления политиками паролей в МСВСфера ОС используется системная утилита authselect, которая оперирует профилями аутентификации. В первую очередь необходимо убедиться, что выбран профиль аутентификации. Вы можете это сделать с помощью команды authselect current:

# вывод для систем, подключённых к каталогу пользователей FreeIPA
$ sudo authselect current
Profile ID: sssd
Enabled features:
- with-mkhomedir
- with-sudo

# вывод для систем, использующих профиль "minimal"
$ sudo authselect current
Profile ID: minimal
Enabled features: None

# вывод для систем, не использующих профиль authselect
$ sudo authselect current
Конфигурация не обнаружена. / No existing configuration detected.

Если система не настроена на использование профиля аутентификации, то необходимо выбрать его, чтобы получить возможность настраивать политики паролей.

Просмотреть список доступных профилей authselect вы можете следующим образом:

$ sudo authselect list
- minimal              Local users only for minimal installations
- sssd                 Enable SSSD for system authentication (also for local users only)
- winbind              Enable winbind for system authentication
- custom/minimal_gost  Local users only for minimal installations and gost support
- custom/sssd_gost     Enable SSSD with GOST support for system authentication (also for local users only)

Выбрать профиль вы можете с помощью команды authselect select. Для локальной системы рекомендуется использовать профиль minimal:

$ sudo authselect select minimal --force
[error] File [/etc/authselect/system-auth] is still present
[error] File [/etc/authselect/password-auth] is still present
[error] File [/etc/authselect/fingerprint-auth] is still present
[error] File [/etc/authselect/smartcard-auth] is still present
[error] File [/etc/authselect/postlogin] is still present
[error] File [/etc/authselect/nsswitch.conf] is still present
[error] File [/etc/authselect/dconf-db] is still present
[error] File [/etc/authselect/dconf-locks] is still present
[error] Link [/etc/pam.d/system-auth] points to [/etc/authselect/system-auth]
[error] Symbolic link [/etc/pam.d/system-auth] to [/etc/authselect/system-auth] still exists!
[error] Link [/etc/pam.d/password-auth] points to [/etc/authselect/password-auth]
[error] Symbolic link [/etc/pam.d/password-auth] to [/etc/authselect/password-auth] still exists!
[error] Link [/etc/pam.d/fingerprint-auth] points to [/etc/authselect/fingerprint-auth]
[error] Symbolic link [/etc/pam.d/fingerprint-auth] to [/etc/authselect/fingerprint-auth] still exists!
[error] Link [/etc/pam.d/smartcard-auth] points to [/etc/authselect/smartcard-auth]
[error] Symbolic link [/etc/pam.d/smartcard-auth] to [/etc/authselect/smartcard-auth] still exists!
[error] Link [/etc/pam.d/postlogin] points to [/etc/authselect/postlogin]
[error] Symbolic link [/etc/pam.d/postlogin] to [/etc/authselect/postlogin] still exists!
[error] Link [/etc/nsswitch.conf] points to [/etc/authselect/nsswitch.conf]
[error] Symbolic link [/etc/nsswitch.conf] to [/etc/authselect/nsswitch.conf] still exists!
[error] Link [/etc/dconf/db/distro.d/20-authselect] points to [/etc/authselect/dconf-db]
[error] Symbolic link [/etc/dconf/db/distro.d/20-authselect] to [/etc/authselect/dconf-db] still exists!
[error] Link [/etc/dconf/db/distro.d/locks/20-authselect] points to [/etc/authselect/dconf-locks]
[error] Symbolic link [/etc/dconf/db/distro.d/locks/20-authselect] to [/etc/authselect/dconf-locks] still exists!
Backup stored at /var/lib/authselect/backups/2024-10-08-16-28-25.N8QZyv
Profile "minimal" was selected.
The following nsswitch maps are overwritten by the profile:
- aliases
- automount
- ethers
- group
- hosts
- initgroups
- netgroup
- networks
- passwd
- protocols
- publickey
- rpc
- services
- shadow

Проверить корректность применения профиля вы можете следующим образом:

$ sudo authselect current
Profile ID: minimal
Enabled features: None

$ sudo authselect check
Current configuration is valid.

4.10.1 Управление требованиями к качеству паролей

По умолчанию МСВСфера ОС предъявляет следующие требования к качеству паролей пользователя:

  • пароль должен иметь длину как минимум 8 символов;

  • пароль должен отсутствовать в словаре известных паролей программы cracklib.

За проверку качества паролей отвечает PAM-модуль pam_pwquality, который включён по умолчанию для всех профилей аутентификации.

Модуль настраивается через конфигурационный файл /etc/security/pwquality.conf, который по умолчанию имеет следующий вид (для переменных указаны значения по умолчанию, описание параметров переведено на русский язык и добавлены комментарии):

# Количество символов в новом пароле, которые не должны присутствовать в старом
# пароле. Значение 0 полностью отключает проверку на пересечение символов, за
# исключением попытки использования идентичного пароля.
# difok = 1

# Минимально допустимое количество символов в новом пароле (плюс один, если
# использование кредитов не отключено, что является поведением по умолчанию).
# Пароль не может быть короче 6 символов.
# minlen = 8

# Максимальное количество кредитов, начисляемое за наличие цифр в новом пароле.
# Если значение меньше 0, то это минимальное количество цифр в новом пароле.
# dcredit = 0

# Максимальное количество кредитов, начисляемое за наличие прописных букв в
# новом пароле. Если значение меньше 0, то это минимальное количество прописных
# букв в новом пароле.
# ucredit = 0

# Максимальное количество кредитов, начисляемое за наличие строчных букв в
# новом пароле. Если значение меньше 0, то это минимальное количество строчных
# букв в новом пароле.
# lcredit = 0

# Максимальное количество кредитов, начисляемое за наличие других символов в
# новом пароле. Если значение меньше нуля, то это минимальное количество других
# символов в новом пароле.
# ocredit = 0

# Минимальное количество требуемых классов символов в новом пароле
# (цифры, буквы в нижнем регистре, буквы в верхнем регистре, другие символы).
# minclass = 0

# Максимальное количество разрешённых повторяющихся символов в новом пароле.
# Проверка отключается, если значение равно 0.
# maxrepeat = 0

# Максимальное количество повторяющихся символов из одного класса, разрешённое
# в новом пароле. Проверка отключается, если значение равно 0.
# maxclassrepeat = 0

# Проверять, есть ли слова из поля GECOS пользователя в новом пароле. Проверка
# отключается, если значение равно 0.
# gecoscheck = 0

# Проверять наличие пароля в словаре cracklib, если значение не равно 0.
# dictcheck = 1

# Проверять наличие имени пользователя в новом пароле. Проверка отключается,
# если значение равно 0.
# usercheck = 1

# Длина подстрок из имени пользователя, которую нужно проверить на наличие
# в новом пароле. Эта проверка выполняется, если значение больше 0 и значение
# usercheck равно 1.
# usersubstr = 0

# Включить принудительную проверку нового пароля пользователя, новый пароль,
# не соответствующий требованиям, будет отклонён, если значение не равно 0.
# enforcing = 1

# Путь к словарям cracklib. Если не задан, будет использован стандартный
# словарь cracklib.
# dictpath =

# Сколько раз запрашивать новый пароль пользователя прежде чем выводить ошибку.
# Значение по умолчанию - 1.
# retry = 3

# Применять требования к качеству пароля пользователя root, если опция
# раскомментирована.
# enforce_for_root

# Применять требования к качеству пароля только для локальных пользователей,
# присутсвующих в файле /etc/passwd, если эта опция раскомментирована.
# local_users_only

Кредиты в параметрах dcredit, ucredit, lcredit и ocredit определяют сколько баллов может быть начислено за определённый тип символов, используемый в новом пароле. Если значение параметра больше 0, то за каждый такой символ к общей длине пароля добавляется определённое количество кредитов.

Пример: если все четыре параметра имеют значение 1 и минимально допустимая длина пароля составляет 7 символов, то при использовании всех 4 типов символов потребуется ввести пароль всего лишь из 7 символов. За каждый неиспользованный тип символа к требуемой длине пароля добавляется штраф, указанный в соответствующем параметре. Так, если не использовать цифры и строчные буквы, то минимальная длина пароля уже составит 9 символов.

Использование механизма кредитов позволяет ослабить требования к длине пароля за счёт использования символов из разных групп.

После внесения правок в конфигурационный файл /etc/security/pwquality.conf перезапуск каких-либо сервисов не требуется — PAM применит изменения автоматически и новые настройки будут использованы при следующем изменении пароля.

Дополнительную информацию по использованию модуля pam_pwquality вы можете найти в соответствующих руководствах:

  • man pam_pwquality;

  • man pwquality.conf.

4.10.2 Ограничение на повторное использование паролей

В конфигурации по умолчанию операционная система не позволяет повторно использовать только текущий пароль пользователя. Это поведение можно изменить с помощью PAM-модуля pam_pwhistory, который позволяет хранить историю паролей для каждого пользователя.

Для включения модуля pam_pwhistory выполните следующую команду:

$ sudo authselect enable-feature with-pwhistory

После этого свойство with-pwhistory должно появиться в свойствах текущего профиля аутентификации:

$ sudo authselect current
Profile ID: minimal
Enabled features:
- with-faillock
- with-pwhistory

Модуль настраивается через конфигурационный файл /etc/security/pwhistory.conf, который по умолчанию имеет следующий вид (для переменных указаны значения по умолчанию, описание параметров переведено на русский язык и добавлены комментарии):

# Раскомментирование этой опции включает вывод отладочной информации.
# debug

# Так же сохранять предыдущие пароли пользователя root, если эта опция
# раскомментирована.
# enforce_for_root

# Количество сохраняемых паролей для каждого пользователя.
# remember = 10

# Сколько раз запрашивать новый пароль пользователя прежде чем выводить ошибку.
# retry = 1

# Каталог, в котором будут храниться предыдущие пароли пользователей.
# file = /etc/security/opasswd

Исходя из описания выше, после включения модуля pam_pwhistory, система будет хранить последние 10 паролей для каждого пользователя и выдавать ошибку при попытке использовать сохранённый пароль в качестве нового при смене пароля.

Пример ошибки:

# на английском языке
$ passwd
Changing password for user test.
Current password:
New password:
Retype new password:
Password has been already used. Choose another.
passwd: Have exhausted maximum number of retries for service

# на русском языке
$ passwd
Изменение пароля пользователя test.
Текущий пароль:
Новый пароль:
Повторите ввод нового пароля:
Этот пароль уже был использован. Выберите другой.

Дополнительную информацию по использованию модуля pam_pwhistory вы можете найти в соответствующих руководствах:

  • man pam_pwhistory;

  • man pwhistory.conf.

4.10.3 Ограничение количества неуспешных попыток аутентификации

В конфигурации по умолчанию операционная система не ограничивает количество неуспешных попыток аутентификации пользователя. Однако, реализация такого ограничения возможна с помощью PAM-модуля pam_faillock.

Для включения модуля pam_faillock выполните следующую команду:

$ sudo authselect enable-feature with-faillock

После этого свойство with-faillock должно появиться в свойствах текущего профиля аутентификации:

$ sudo authselect current
Profile ID: minimal
Enabled features:
- with-faillock

Модуль настраивается через конфигурационный файл /etc/security/faillock.conf, который по умолчанию имеет следующий вид (для переменных указаны значения по умолчанию, описание параметров переведено на русский язык и добавлены комментарии):

# Каталог, в котором хранятся файлы с записями об ошибках аутентификации
# пользователей.
# Внимание: в случае изменения этого пути потребуется дополнительно
# перенастроить правила SELinux.
# dir = /var/run/faillock

# Раскомментирование этой опции включает логирование имён несуществующих
# пользователей в системный журнал.
# audit

# Раскомментирование этой опции отключает вывод информационных сообщений на
# консоль.
# silent

# Раскомментирование этой опции отключает вывод информационных сообщений в
# системный журнал.
# no_log_info

# Раскомментирование этой опции включает отслеживание неудачных попыток
# аутентификации только для локальных пользователей, указанных в файле
# /etc/passwd. В таком случае пользователи из LDAP-каталога будут
# игнорироваться PAM-модулем "faillock". Включение данного параметра позволяет
# избежать ситуаций с двойной блокировкой, когда пользователь будет заблокирован
# и локально, и на уровне каталога пользователей.
# local_users_only

# Блокировать доступ пользователю, если количество последовальных ошибок
# аутентификации за последний промежуток времени превышает N попыток.
# deny = 3

# Временной интервал в секундах, в течении которого ошибки аутентификации
# пользователя считаются последовательными и приводят к блокировке его учётной
# записи. Значение по умолчанию — 15 минут.
# fail_interval = 900

# Автоматически восстановить доступ к заблокированной учётной записи спустя N
# секунд после блокировки. Для перманентной блокировки учётной записи задайте
# значение 0 — в таком случае восстановление доступа будет возможно только
# вручную через команду "faillock". Значение по умолчанию — 10 минут.
# unlock_time = 600

# Раскомментирование этой опции также приведёт к блокировке пользователя
# root в случае неудачных попыток аутентификации. По умолчанию блокируются
# только обычные пользователи.
# even_deny_root

# Автоматически восстанавливать доступ к заблокированной учётной записи
# пользователя root спустя N секунд после блокировки. Если значение не
# определено, модуль "faillock" будет использовать значение параметра "unlock_time".
# root_unlock_time = 900

# Имя группы системных администраторов. Если задано, то для участников этой
# группы будут применяться те же правила, что и для пользователя root
# (к ним будут применяться параметры "even_deny_root" и "root_unlock_time").
# admin_group = <admin_group_name>

Исходя из описания выше, при включении PAM-модуля pam_faillock будет автоматически применена следующая конфигурация: локальные пользователи и пользователи из LDAP-каталога будут блокироваться после трёх неудачных попытках входа в течении 15 минут на срок в 10 минут. Пользователь root блокироваться не будет.

После внесения правок в конфигурационный файл /etc/security/faillock.conf перезапуск каких-либо сервисов не требуется — PAM применит изменения автоматически при обработке следующего запроса на аутентификацию.

Функциональность модуля pam_faillock распространяется как на локальную (через графическую или текстовую консоль), так и на сетевую (с помощью SSH) аутентификацию пользователей.

Для просмотра истории неудачных попыток аутентификации пользователя за учётный период fail_interval вы можете использовать следующую команду (замените «USERNAME» на имя реального пользователя из вашей системы):

$ sudo faillock --user USERNAME
When                Type  Source                                           Valid
2024-10-08 21:12:20 RHOST 192.168.1.4                                          V
2024-10-08 21:12:25 RHOST 192.168.1.4                                          V
2024-10-08 21:12:28 RHOST 192.168.1.4                                          V

Для снятия блокировки учётной записи пользователя вы можете использовать следуюзую команду:

$ sudo faillock --user USERNAME --reset

Дополнительную информацию по использованию модуля pam_faillock вы можете найти в соответствующих руководствах:

  • man pam_faillock;

  • man faillock;

  • man faillock.conf.

4.11 Получение сведений о пользователе

Утилита id позволяет получить сведения об указанном пользователе или о текущем пользователе, запустившем данную утилиту, если он не указал явно имя пользователя.

По умолчанию выводятся числовые идентификаторы пользователя и группы, действующие идентификаторы пользователя и группы, а также идентификаторы других групп, в которых состоит пользователь.

Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:

Опции утилиты id и их значения

Опция

Значение

-g, --group

Выводит только подлинный числовой идентификатор групп.

-G, --groups

Выводит все подлинные числовые идентификаторы групп, в которых состоит пользователь.

-n, --name

Выводит действующие имена пользователей или групп.

-r, --real

Выводит подлинные числовые идентификаторы пользователей или групп.

-u, --user

Выводит только подлинный числовой идентификатор пользователя.

--version

Выводит информацию о версии утилиты и завершает работу.

--help

Выводит справку по этой утилите и завершает работу.

Пример: выведем сведения о текущем пользователе user. Работа команды id:

$ id
uid=1000(user) gid=1000(user) группы=1000(user),100(users) контекст=user_u:user_r:user_t:s0

4.12 Конфигурационный файл /etc/login.defs

Конфигурационный файл /etc/login.defs позволяет задавать параметры, определяющие использование пользователями своих паролей.

Фрагмент файла

Фрагмент конфигурационного файла /etc/login.defs

Параметры перечислены в таблице:

Параметры конфигурационного файла /etc/login.defs и их описание

Параметр

Описание

PASS_MAX_DAYS

Определяет максимальный срок действия пароля, т.е. максимальное число дней, в течение которых действие пароля сохраняется. По истечении этого срока запускается процесс принудительной смены пароля. Если значение параметра не задано, то есть параметр закомментирован символом # или ему присвоено значение -1, то данное ограничение не установлено (отменяется).

PASS_MIN_DAYS

определяет минимальный срок между изменениями пароля, т.е. минимальное число дней между двумя последовательными изменениями пароля. Если значение параметра не задано, то есть параметр закомментирован символом # или ему присвоено значение -1, то данное ограничение не установлено (отменяется).

PASS_MIN_LEN

Определяет минимальную допустимую длину задаваемого пароля.

PASS_WARN_AGE

Определяет, за сколько дней до истечения срока действия пароля начнётся вывод предупреждения о необходимости его смены. Если значение параметра не задано, то есть параметр закомментирован символом # или ему присвоено значение -1, то данное ограничение не установлено (отменяется). Если значение параметра 0, то предупреждение о необходимости смены пароля будет выведено в день его устаревания.

Пример: выведем на экран текущее заданное значение максимального количества дней действия пароля:

$ cat /etc/login.defs | grep PASS_MAX_DAYS
# PASS_MAX_DAYS  Maximum number of days a password may be used.
PASS_MAX_DAYS 30

Мы видим, что текущее максимальное количество дней действия пароля — 30 дней.

4.13 Конфигурационный файл /etc/pam.d/system-auth

Конфигурационный файл /etc/pam.d/system-auth позволяет задавать настройки подключаемых модулей аутентификации.

Фрагмент файла

Фрагмент конфигурационного файла /etc/pam.d/system-auth

Каждая строка в нем представляет собой правило, состоящее из трёх обязательных полей и одного опционального. Поля разделены символом пробела. Порядок, в котором указаны правила, определяет очередность их проверки.

Синтаксис правила:

type control module-path [module-arguments]

Поле type задаёт тип вызываемого модуля и может принимать одно из четырех допустимых значений:

  • auth — предназначен для аутентификации пользователя путём запроса и проверки его пароля;

  • account — используется для контроля доступа к сервису/приложению. Например, может быть произведён запрос о том, не истёк ли срок действия аккаунта пользователя, разрешено ли пользователю работать с определённым сервисом в определённое время, хватает ли системных ресурсов для работы;

  • password — применятся для установки/изменения паролей;

  • session — управляет действиями пользователя в рамках активной сессии после его успешной аутентификации в системе.

Поле control задаёт действие, которое нужно выполнить после вызова модуля. Доступно несколько действий:

  • required — модуль должен вернуть положительный ответ. Если он возвращает отрицательный ответ, то пользователь будет уведомлен об этом только после того, как все остальные модули данного типа будут проверены;

  • requisite — требует от модуля положительный ответ. В случае получения отрицательного ответа последовательная проверка выполнения остальных правил моментально прекращается и пользователь получает сообщение об ошибке аутентификации;

  • sufficient — в случае, если ни один из модулей с действием required или sufficient, расположенных перед текущим, не вернул отрицательного ответа, текущий модуль вернёт положительный ответ и все последующие модули будут проигнорированы;

  • optional — результат проверки модуля важен только в том случае, если действие является единственным для данного модуля;

  • include — предназначается для добавления строк заданного типа из других файлов конфигурации из каталога /etc/pam.d/ в файл конфигурации /etc/pam.d/system-auth. Название файла указывается в качестве аргумента действия.

Поле module-path задаёт путь к вызываемому модулю.

Поле module-arguments — дополнительные необязательные параметры модуля, необходимые для определения действий некоторых отдельных модулей в случае успешной авторизации. Так, если в конфигурационном файле найти строку, содержащую pam_pwquality.so, и добавить в нее minlen=8, то будет установлена минимальная длина пароля, равная 8-ми символам.

Пример: В качестве примера сделаем блокировку учётной записи пользователя, который совершит определенное количество неудачных попыток входа в систему.

Для этого внесем в файл /etc/pam.d/system-auth следующие изменения:

  1. Сначала допишем в секцию auth строку auth required pam_tally2.so deny=2 onerr=fail, т.е. подключим модуль pam_tally2 и установим блокировку пользователя после двух (значение параметра deny) неудачных попыток входа.

  2. Затем в секции account добавим строку account required pam_tally2.so и закомментируем строки вида auth requisite pam_succeed_if.so uid >= 1000 quiet и auth required pam_deny.so.

  3. Потом строку auth sufficient pam_unix.so nullok try_first_pass заменим на auth required pam_unix.so nullok try_first_pass.

После этого пользователь, допустивший подряд две неверных попытки входа, на третьей получит сообщение о том, что его учетная запись заблокирована. И даже если четвертой попыткой он введет верный пароль, то все равно не получит доступ к системе.

$ sudo user2
Пароль:
sudo Сбой при проверке подлинности

$ sudo user2
Пароль:
sudo Сбой при проверке подлинности

$ sudo user2
Пароль:
Учетная запись заблокирована как следствие неудачных попыток входа (всего 3)
sudo Сбой при проверке подлинности

$ sudo user2
Пароль:
Учетная запись заблокирована как следствие неудачных попыток входа (всего 4)
sudo Сбой при проверке подлинности

Пример: В качестве другого примера настроим проверку паролей на сложность подбора через pam_cracklib.

  1. Для этого добавим или изменим следующую строку:

password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=6 dcredit=-2 ucredit=-3 lcredit=-2 ocredit=-1

Это значит следующее:

  • после трех неуспешных попыток (retry=3) модуль вернет ошибку;

  • минимальная длина для пароля — 6 символов (minlen=6);

  • минимальное количество цифр — 2 (dcredit=-2);

  • минимальное количество символов верхнего регистра — 3 (ucredit=-3);

  • минимальное количество символов нижнего регистра — 2 (lcredit=-2);

  • минимальное количество других символов — 1 (ocredit=-1).

  1. Удалим или закомментируем следующую строку:

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=

Результат

  • Выполним команду passwd для смены пароля пользователя user2.

  • Зададим пароль из трех символов и увидим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком короткий».

  • Зададим пароль из четырех символов, система выдаст сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: короткий».

  • Зададим пароль из шести символов (букв и цифр), в результате чего получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой».

  • После трех неуспешных попыток модуль вернет ошибку.

$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой
passwd: Использовано максимальное число попыток, заданное для службы
  • Зададим пароль достаточной длины из одних цифр и получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: не содержит достаточное число РАЗЛИЧНЫХ символов».

  • Зададим пароль достаточной длины, содержащий все указанные требования, кроме включения в него отличных от алфавита и цифр символов. Например, 2QyfMOb4. Получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой».

$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: не содержит достаточное число РАЗЛИЧНЫХ символов
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой
passwd: Использовано максимальное число попыток, заданное для службы
  • Зададим пароль, соблюдая все установленные требования. Например, 2QyfM*Ob4. Пароль будет успешно задан (см. листинг).

$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
Повторите ввод нового пароля:
passwd: Все данные аутентификации успешно обновлены.

4.14 Конфигурационный файл /etc/issue

Конфигурационный файл /etc/issue позволяет задать текстовое содержание уведомления пользователю перед началом его идентификации и аутентификации для входа в систему. Например, с предупреждением о том, что в ней реализованы меры защиты информации и о необходимости соблюдения соответствующих правил обработки данных. Традиционно в конфигурационном файле присутствуют опции выдачи сведений об операционной системе и ядре. Дополнительно можно добавить опции выдачи текущих даты и времени, количества работающих пользователей и некоторых других сведений.

4.15 Конфигурационный файл /etc/shadow

Конфигурационный файл /etc/shadow содержит сведения об учетных записях и паролях пользователей в виде строк со следующей структурой:

username:id:salt:hashed:lastchanged:min:max:warn:inactive:expire

Структура файла:

  • username — имя пользователя:

  • id — алгоритм шифрования: 1 (алгоритм MD5), 5 (SHA-256), 6 (SHA-512);

  • salt — «соль», добавляемая к паролю строка из 10-20 случайных символов;

  • hashed — зашифрованный пароль;

  • lastchanged — дата последнего изменения пароля;

  • min — минимальное число дней между двумя последовательными сменами паролей;

  • max — срок действия пароля, т.е. максимальное число дней, в течение которых пароль будет активен;

  • warn — за какое количество дней до срока истечения действия пароля пользователь будет уведомлен о том, что его необходимо сменить;

  • inactive — количество дней после истечения срока действия пароля, спустя которое его учётная запись блокируется;

  • expire — число дней, прошедших с момента блокирования учётной записи.

Если после имени пользователя username вместо id:salt:hashed стоит символ * либо последовательность из двух символов !!, то это означает, что попытки входа в систему от имени данного пользователя заблокированы.