4 Идентификация и аутентификация
4.1 Введение
Средства идентификации и аутентификации предоставляют возможности идентификации объектов доступа, идентификации и проверки подлинности субъектов доступа при входе в систему и при доступе к защищаемым объектам, управления идентификаторами, в том числе их создания, присвоения и уничтожения, управления аутентификационными данными, в том числе их инициализации, защищенного хранения, блокирования и разблокирования, проверки соответствия аутентификационной информации заданной метрике качества, защиты обратной связи при вводе аутентификационной информации, а также другие возможности.
4.2 Добавление нового пользователя
Для добавления нового пользователя используется утилита useradd
. Она позволяет добавить учетную запись нового пользователя. Режимы ее
работы и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Любая текстовая строка. Используется как поле для имени и фамилии пользователя, длина этого поля не должна превосходить 128 символов. |
|
Базовый системный каталог по умолчанию, если не указан другой каталог. Базовый каталог объединяется с именем учётной записи для определения домашнего каталога. |
|
Для создаваемого пользователя в качестве начального каталога будет использован базовый каталог. По умолчанию это значение получается объединением имени пользователя с базовым каталогом и используется как имя домашнего каталога. |
|
Задать домашний каталог нового пользователя.
Если данная опция не используется, то в качестве домашнего каталога выбирается каталог типа |
|
Вывести значения стандартных опций. |
|
Дата окончания срока действия учётной записи пользователя. Задаётся в формате |
|
Число дней, которые должны пройти после окончания срока действия пароля, чтобы учётная запись заблокировалась.
Если указано значение |
|
Название группы нового пользователя или её идентификационный номер. Указываемое название группы или её номер должны существовать в системе. |
|
Список дополнительных групп, в которых числится пользователь.
Перечисление групп осуществляется через запятую без пробелов.
На указанные группы действуют те же ограничения, что и для группы, указанной в опции |
|
Создает начальный домашний каталог нового пользователя, если он ещё не существует. Если каталог уже существует, добавляемый пользователь должен иметь права на доступ к указанному каталогу. |
|
Позволяет не создавать домашний каталог нового пользователя. |
|
Используется для изменения значений по умолчанию для параметров, хранимых в конфигурационном файле |
|
Позволяет добавить нового пользователя в группу, указанную в опции |
|
Позволяет создать учётную запись с уже имеющимся, не уникальным идентификатором. |
|
Позволяет задать новый пароль для учетной записи. |
|
Позволяет создать системную учётную запись.
По умолчанию для данной категории учетных записей домашний каталог не создаётся вне зависимости от значения соответствующего параметра конфигурационного файла |
|
Полный путь к программе, используемой в качестве начального командного интерпретатора для пользователя сразу после регистрации. Длина этого поля не должна превосходить 256 символов. Если задать пустое значение, то будет использоваться оболочка по умолчанию. |
|
Позволяет задать идентификационный номер (численное неотрицательное значение идентификатора) пользователя.
Это значение должно быть уникальным, если не задействована опция |
|
Позволяет создать группу, название которой совпадает с именем пользователя, присоединив данного пользователя к этой группе. |
|
Показать краткую справку об утилите. |
Пример: создадим пользователя с именем user
и зададим для него основную группу users
и
две дополнительные группы ftp
и developers
, к которым он будет приписан.
Для этого выполним следующую команду:
useradd -g users -G ftp,developers user
4.3 Изменение уже имеющихся пользовательских записей
Для изменения уже имеющихся пользовательских записей используется утилита usermod
. Она позволяет изменить данные существующей учетной записи пользователя. Режимы ее
работы и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Добавить пользователя в дополнительную группу. Следует использовать только вместе с параметром |
|
Новое значение поля комментария. |
|
Новый домашний каталог учетной записи. Если указан параметр |
|
Установить дату окончания срока действия учетной записи в формате |
|
Установить пароль после окончания срока действия учетной записи в |
|
Принудительно назначить первичную группу. |
|
Список дополнительных групп. |
|
Новое значение учетной записи. |
|
Заблокировать пароль пользователя. Это делается помещением символа |
|
Переместить содержимое домашнего каталога пользователя в новое место. Если новый домашний каталог не существует, то он создаётся автоматически.
Данная опция используется только вместе с опцией |
|
При использовании с параметром |
|
Задать новый пароль для учетной записи. |
|
Задать новую оболочку для учетной записи. |
|
Новый идентификационный номер для учетной записи. |
|
Разблокировать учетную запись. |
Пример: изменим срок действия учетной записи пользователя с идентификатором user6
.
Для этого выполним следующую команду:
usermod -e 2020-05-01 user6
где 2020-05-01 — дата истечения срока действия учетной записи в формате ГГГГ-ММ-ДД
.
Пример: изменим идентификатор (значение учётной записи) пользователя с user6
на user7
.
Для этого выполним следующую команду:
usermod -l user7 user6
4.4 Удаление пользователей
Для удаления пользователей используется утилита userdel
. Она позволяет удалить существующую учетную запись пользователя. Режимы ее
работы и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
С этой опцией учётная запись будет удалена, даже если пользователь в этот момент работает в системе. Она также заставляет утилиту удалить домашний каталог пользователя и почтовый ящик, даже если другой пользователь использует тот же домашний каталог или если почтовый ящик не принадлежит данному пользователю. Внимание! Перед использованием этого параметра убедитесь в необходимости этого действия! Этот параметр может привести систему в нерабочее состояние! |
|
Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним каталогом и почтовым ящиком. Пользовательские файлы, расположенные в других файловых системах, нужно искать и удалять вручную. |
|
Задает, сколько месяцев идентификатор пользователя должен устаревать перед повторным использованием. Задайте |
|
Показать краткую справку. |
Пример: удалим пользователя с идентификатором user7
.
Для этого выполним следующую команду:
userdel -r user7
4.5 Добавление группы пользователей
Для добавления группы пользователей используется утилита groupadd
. Режимы ее
работы и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Вернуть статус успешного выполнения, если группа уже существует.
Если используется вместе с параметром |
|
Числовое значение идентификатора группы. Значение должно быть уникальным, если не задан параметр |
|
Изменить значения по умолчанию для параметров, которые хранятся в конфигурационном файле |
|
Разрешить добавление группы с не уникальным идентификатором. |
|
Создать системную группу. |
|
Показать краткую справку. |
Пример: создадим группу group2
с числовым значением идентификатора 8285
.
Для этого выполним следующую команду:
groupadd group2 -g 8285
4.6 Изменение существующей группы пользователей
Для изменения существующей группы пользователей используется утилита groupmod
. Режимы ее
работы и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Изменить идентификатор группы. |
|
Изменить имя группы. |
|
Позволяет использовать не уникальный идентификатор группы. |
|
Изменить пароль. |
|
Показать краткую справку. |
Пример: изменим идентификатор группы пользователей users
на ftp
.
Для этого выполним следующую команду:
groupmod -g ftp users
4.7 Удаление существующей группы пользователей
Для удаления существующей группы пользователей используется утилита groupdel
. Утилита позволяет удалить определение группы из системы
путем удаления записи о соответствующей группе из файла /etc/group
.
Однако она не удаляет идентификатор группы из файла паролей.
Удаленный идентификатор действует для всех файлов и каталогов, которые его имели.
Пример: удалим группу с именем group3
.
Для этого выполним следующую команду:
groupdel group3
4.8 Создание и изменение пароля пользователя
Для создания и изменения пароля пользователя (в том числе для блокировки учетной записи пользователя) используется утилита passwd
.
Обычный пользователь может изменить пароль только своей учётной записи,
суперпользователь root
может изменить пароль любой учётной записи.
При изменении пароля проверяется информация об устаревании пароля, чтобы убедиться, что пользователю разрешено изменять пароль в настоящий момент. Если выяснится, что не разрешено, то утилита не производит изменение пароля и завершает работу.
При изменении пароля пользователь должен будет сначала ввести старый пароль, если он был. Введенное пользователем значение старого пароля зашифровывается и сравнивается со значением зашифрованного текущего пароля. Затем пользователю необходимо будет дважды ввести новый пароль. Значение второго ввода сравнивается с первым, и они должны совпасть. После этого пароль тестируется на сложность подбора, т.е. его значение не должно быть легко угадываемым.
Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Эту опцию можно использовать только вместе с |
|
Удалить пароль пользователя (сделать его пустым). Это быстрый способ заблокировать пароль учётной записи. |
|
Немедленно сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему. |
|
Эта опция используется для блокировки учётной записи по прошествии заданного числа дней после устаревания пароля. То есть если пароль устарел и прошло больше дней, чем указано, то пользователь больше не сможет использовать свою учётную запись. |
|
Заблокировать указанную учётную запись. Эта опция блокирует учётную запись путем изменения значения пароля на такое, которое не может быть ранее указанным зашифрованным паролем. |
|
Задать минимальное количество дней между сменой пароля. Нулевое значение этого поля указывает на то, что пользователь может менять свой пароль тогда, когда захочет. |
|
Показать состояние учётной записи. Информация о состоянии содержит семь полей. Первое поле содержит имя учётной записи. Второе поле указывает, заблокирована ли учётная запись, она без пароля или у неё есть рабочий пароль. Третье поле хранит дату последнего изменения пароля. В следующих четырёх полях хранятся минимальный срок, максимальный срок, период выдачи предупреждения и период неактивности пароля. Все эти сроки измеряются в днях. |
|
Разблокировать указанную учётную запись. Этот параметр активирует учётную запись путем изменения пароля на прежнее значение, которое было перед
использованием параметра |
|
Установить число дней выдачи предупреждения, перед тем как потребуется смена пароля. |
|
Установить максимальное количество дней, в течение которых пароль остаётся рабочим, после чего его надо будет изменить. |
|
Показать краткую справку. |
Пример: зададим пароль пользователю user4
. Работа команды passwd
:
[root@msvsphere ~]# passwd user4
Изменяется пароль пользователя user4.
Новый пароль :
Повторите ввод нового пароля :
passwd: все данные аутентификации успешно обновлены.
[root@msvsphere ~]#
Пример: посмотрим состояние учетной записи user4
. Работа команды passwd
:
[root@msvsphere /]# passwd -S user4
user4 PS 2023-07-04 0 99999 7 -1 (Пароль задан, шифр SHA512.)
[root@msvsphere /]#
Где:
user4
— имя пользователя.PS
— статус пароля.2023-07-04
— отображает время последнего изменения пароля.0
и99999
— минимальный и максимальный срок действия пароля.7
— срок вывода предупреждения.-1
— срок деактивации пароля.
4.9 Изменение срока действия учётной записи и пароля пользователя
Утилита chage
позволяет установить дату завершения срока действия учетной записи
пользователя, минимальный и максимальный срок действия пароля, дату завершения срока
действия пароля, а также количество дней, в течение которых пользователю будут
выводиться предупреждения о приближении завершения срока действия пароля.
Командой сhage
может пользоваться только суперпользователь, за исключением использования её с
параметром -l
, который позволяет непривилегированным пользователям определить время,
когда истекает их личный пароль или учетная запись.
Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Меняет значение |
|
Меняет значение |
|
Меняет значение |
|
Используется для задания даты, с которой учетная запись пользователя станет недоступной. Дата также может быть указана в формате |
|
Используется для задания количества дней «неактивности», то есть дней, когда пользователь вообще не входил в систему, после которых его учетная запись будет
заблокирована. Значение |
|
Используется для задания числа дней, когда пользователю начнет выводиться предупреждение об истечении срока действия его пароля и необходимости его изменения. |
|
Просмотреть текущую информацию о дате истечения срока действия пароля для пользователя. |
Пример: просмотрим текущую информацию о дате истечения срока действия пароля для пользователя user4
. Работа команды chage
:
[root@msvsphere ~]# chage -l user4
Последний раз пароль был изменён: мар 12, 2023
Срок действия пароля истекает: никогда
Пароль будет деактивирован через: никогда
Срок действия учётной записи истекает: никогда
Минимальное количество дней между сменой пароля: 0
Максимальное количество дней между сменой пароля: 99999
Количество дней с предупреждением перед деактивацией пароля: 7
[root@msvsphere ~]#
4.10 Получение сведений о пользователе
Утилита id
позволяет получить сведения об указанном пользователе или о текущем
пользователе, запустившем данную утилиту, если он не указал явно имя пользователя.
По умолчанию выводятся числовые идентификаторы пользователя и группы, действующие идентификаторы пользователя и группы, а также идентификаторы других групп, в которых состоит пользователь.
Режимы работы утилиты и выполняемые функции задаются набором опций, перечисленных в таблице:
Опция |
Значение |
---|---|
|
Выводит только подлинный числовой идентификатор групп. |
|
Выводит все подлинные числовые идентификаторы групп, в которых состоит пользователь. |
|
Выводит действующие имена пользователей или групп. |
|
Выводит подлинные числовые идентификаторы пользователей или групп. |
|
Выводит только подлинный числовой идентификатор пользователя. |
|
Выводит информацию о версии утилиты и завершает работу. |
|
Выводит справку по этой утилите и завершает работу. |
Пример: выведем сведения о текущем пользователе user
. Работа команды id
:
[user@msvsphere ~]$ id
uid=1000(user) gid=1000(user) группы=1000(user),100(users) контекст=user_u:user_r:user_t:s0
4.11 Конфигурационный файл /etc/login.defs
Конфигурационный файл /etc/login.defs
позволяет задавать параметры, определяющие
использование пользователями своих паролей.
Параметры перечислены в таблице:
Параметр |
Описание |
---|---|
|
Определяет максимальный срок действия пароля, т.е. максимальное число дней, в течение которых действие пароля сохраняется.
По истечении этого срока запускается процесс принудительной смены пароля. Если значение параметра не задано,
то есть параметр закомментирован символом |
|
определяет минимальный срок между изменениями пароля, т.е.
минимальное число дней между двумя последовательными изменениями пароля. Если значение параметра не задано, то есть параметр закомментирован символом |
|
Определяет минимальную допустимую длину задаваемого пароля. |
|
Определяет, за сколько дней до истечения срока действия пароля начнётся вывод предупреждения о необходимости его смены.
Если значение параметра не задано, то есть параметр закомментирован символом |
Пример: зададим максимальное количество дней действия пароля, равное 30 суткам:
[root@msvsphere ~]# cat /etc/login.defs | grep PASS_MAX_DAYS
# PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 30
[root@msvsphere ~]#
4.12 Конфигурационный файл /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
следующие изменения:
Сначала допишем в секцию
auth
строкуauth required pam_tally2.so deny=2 onerr=fail
, т.е. подключим модульpam_tally2
и установим блокировку пользователя после двух (значение параметраdeny
) неудачных попыток входа.Затем в секции
account
добавим строкуaccount required pam_tally2.so
и закомментируем строки видаauth requisite pam_succeed_if.so uid >= 1000 quiet
иauth required pam_deny.so
.Потом строку
auth sufficient pam_unix.so nullok try_first_pass
заменим наauth required pam_unix.so nullok try_first_pass
.
После этого пользователь, допустивший подряд две неверных попытки входа, на третьей получит сообщение о том, что его учетная запись заблокирована. И даже если четвертой попыткой он введет верный пароль, то все равно не получит доступ к системе.
[user@msvsphere ~]$ su user2
Пароль:
su Сбой при проверке подлинности
[user@msvsphere ~]$ su user2
Пароль:
su Сбой при проверке подлинности
[user@msvsphere ~]$ su user2
Пароль:
Учетная запись заблокирована как следствие неудачных попыток входа (всего 3)
su Сбой при проверке подлинности
[user@msvsphere ~]$ su user2
Пароль:
Учетная запись заблокирована как следствие неудачных попыток входа (всего 4)
su Сбой при проверке подлинности
[user@msvsphere ~]$
Пример: В качестве другого примера настроим проверку паролей на сложность подбора через pam_cracklib
.
Для этого добавим или изменим следующую строку:
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
).
Удалим или закомментируем следующую строку:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
Результат
Выполним команду
passwd
для смены пароля пользователяuser2
.Зададим пароль из трех символов и увидим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком короткий».
Зададим пароль из четырех символов, система выдаст сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: короткий».
Зададим пароль из шести символов (букв и цифр), в результате чего получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой».
После трех неуспешных попыток модуль вернет ошибку.
[user2@msvsphere user]$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой
passwd: Использовано максимальное число попыток, заданное для службы
Зададим пароль достаточной длины из одних цифр и получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: не содержит достаточное число РАЗЛИЧНЫХ символов».
Зададим пароль достаточной длины, содержащий все указанные требования, кроме включения в него отличных от алфавита и цифр символов. Например,
2QyfMOb4
. Получим сообщение «НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой».
[user2@msvsphere user]$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: не содержит достаточное число РАЗЛИЧНЫХ символов
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: короткий
Новый пароль:
НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой
passwd: Использовано максимальное число попыток, заданное для службы
Зададим пароль, соблюдая все установленные требования. Например,
2QyfM*Ob4
. Пароль будет успешно задан (см. листинг).
[user2@msvsphere user]$ passwd
Изменяется пароль пользователя user2.
Смена пароля для user2.
(текущий) пароль Unix:
Новый пароль:
Повторите ввод нового пароля:
passwd: Все данные аутентификации успешно обновлены.
4.13 Конфигурационный файл /etc/issue
Конфигурационный файл /etc/issue
позволяет задать текстовое содержание уведомления пользователю перед началом его идентификации и аутентификации для входа в
систему. Например, с предупреждением о том, что в ней реализованы меры защиты
информации и о необходимости соблюдения соответствующих правил обработки данных.
Традиционно в конфигурационном файле присутствуют опции выдачи сведений об
операционной системе и ядре. Дополнительно можно добавить опции выдачи текущих даты
и времени, количества работающих пользователей и некоторых других сведений.
4.14 Конфигурационный файл /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
стоит символ *
либо
последовательность из двух символов !!
, то это означает, что попытки входа в систему от
имени данного пользователя заблокированы.