auth required pam_pwdb.so
auth required pam_nologin.so
#auth required pam_dialup.so
auth optional pam_mail.so
account required pam_pwdb.so
session required pam_pwdb.so
session optional pam_lastlog.so
password required pam_pwdb.so
Как видно из листинга, файл конфигурации состоит из трех столбцов. Строки, начинающиеся с символа решетки (#), игнорируются. Стало быть, модуль pam_dialup (четвертая строка листинга 1.6.) будет пропущен. В файле есть строки с одинаковым третьим полем — pam_pwd.so, и первым — auth. Использование нескольких строк с одинаковым первым полем называется накоплением (stacking) модулей и позволяет получать многошаговую авторизацию (стек модулей), включающую несколько различных процедур авторизации.
Первый столбец является столбцом типа. Тип определяется одной из четырех символьных меток: auth, account, session и password. Содержимое всех столбцов рассматривается без учета регистра.
- Тип auth (authentication — аутентификация) используется для выяснения, является ли пользователь тем, за кого он себя выдает. Как правило, это достигается сравнением введенного и хранимого паролей, но возможны и другие варианты.
- Тип account (учетная запись) проверяет дозволено ли использовать службу данному пользователю, на каких условиях, не устарел ли пароль и т. д.
- Тип password (пароль) используется для обновления маркеров авторизации.
- Тип session (сеанс) выполняет определенные действия при входе пользователя в систему и при выходе пользователя из системы.
Управляющие флаги
Второй столбец является полем управляющего флага, определяющим, что делать после возврата из модуля, то есть реакцию РАМ на значения УСПЕХ (SUCCESS), ИГНОРИРОВАТЬ (IGNORE) и НЕУДАЧА (FAILURE). Разрешенные значения: requisite, required, sufficient и optional. От значения в этом поле зависит, будут ли обработаны остальные строки файла.
- Флаг requisite (обязательный) задает наиболее жесткое поведение. Обработка любой строки с флагом requisite, модуль которой вернул значение НЕУДАЧА (FAILURE), будет прекращена и вызвавшей ее службе будет возвращен статус НЕУДАЧА (FAILURE). Никакие другие строки рассматриваться не будут. Этот флаг используется достаточно редко. Дело в том, что если помеченный им модуль выполняется самым первым, то следующие за ним модули могут и не выполниться, в том числе и отвечающие за протоколирование, поэтому вместо него обычно применяется флаг required (необходимый).
- Флаг required (необходимый) не прерывает выполнение модулей. Каков бы ни был результат выполнения помеченного им модуля: УСПЕХ (SUCCESS), ИГНОРИРОВАТЬ (IGNORE) или НЕУДАЧА (FAILURE), РАМ всегда переходит к обработке следующего модуля. Это наиболее часто используемый флаг, так как результат выполнения модуля не возвращается до тех пор, пока не отработают все остальные модули, а значит, модули, отвечающие за протоколирование, обязательно выполнятся.
- Флаг sufficient (достаточный) приводит к немедленному завершению обработки строки и возврату значения УСПЕХ (SUCCESS) при условии, что помеченный им модуль вернул значение УСПЕХ (SUCCESS) и ранее не встречалось модуля с флагом required, вернувшего статус НЕУДАЧА (FAILURE). Если такой модуль встречался, то флаг sufficient игнорируется. Если помеченный этим флагом модуль возвратил значение ИГНОРИРОВАТЬ (IGNORE) или НЕУДАЧА (FAILURE), то флаг sufficient рассматривается аналогично флагу optional.
- Результат выполнения модуля с флагом optional (необязательный) принимается во внимание лишь тогда, когда он является единственным модулем в стеке, вернувшим значение УСПЕХ (SUCCESS). В противном случае результат его выполнения игнорируется. Таким образом, неуспешное выполнение помеченного им модуля не влечет за собой неуспех всего процесса авторизации.
Чтобы пользователь смог получить доступ к системе, модули, помеченные флагами requisite и required, не должны возвращать значения НЕУДАЧА (FAILURE). Результат выполнения модуля с флагом optional принимается в рассмотрение, лишь если он является единственным модулем в стеке, вернувшим УСПЕХ (SUCCESS).
Модули РАМ
Третий столбец содержит полное имя файла модуля, связанного с данной строкой. В принципе, модули могут располагаться где угодно, однако если они размещены в предопределенном каталоге для модулей, то можно указывать одно лишь имя, в противном случае нужен еще и путь. В МСВС предопределенным каталогом является /lib/security.
Четвертый столбец предназначен для передачи в модуль дополнительных параметров. Не у всех модулей есть параметры, а если есть, то они могут и не использоваться. Передача параметра модулю позволяет изменить его поведение тем или иным образом.
Листинг 1.7 содержит список модулей РАМ, входящих в состав МСВС.
Листинг 1.7. Список модулей РАМ, входящих в состав МСВС
pam_access.so
pam_cracklib.so
pam_deny.so
pam_dialup.so
pam_env.so
pam_ftp.so
pam_group.so
pam_lastlog.so
pam_limits.so
pam_listfile.so
pam_mail.so
pam_nologin.so
pam_permit.so
pam_pwdb.so
pam_radius.so
pam_rhosts_auth.so
pam_rootok.so
pam_securetty.so
pam_shells.so
pam_stress.so
pam_tally.so
pam_time.so
pam_unix_acct.so
pam_unix_auth.so
pam_unix_passwd.so
pam_unix_session.so
pam_warn.so
pam_wheel.so
О модулях подробнее
Модуль pam_access.so используется для предоставления/запрещения доступа на основании файла /etc/security/access.conf. Строки этого файла имеют следующий формат:
права: пользователи: откуда
Где:
- права — либо + (разрешить), либо - (запретить)
- пользователи — ALL, имя пользователя или пользователь@узел, где узел соответствует имени локальной машины, иначе запись игнорируется.
- откуда — одно или несколько имен файлов терминалов (без префикса /dev/), имена узлов, доменные имена (начинающиеся с точки), IP адреса, ALL или LOCAL.
Модуль pam_cracklib.so проверяет пароли по словарю. Он предназначен для проверки нового пароля и позволяет предотвратить использование в системе легко взламываемых паролей, каковыми считаются общеупотребительные слова, пароли, содержащие повторяющиеся символы, и слишком короткие пароли. Есть необязательные параметры: debug, type= и retry=. Параметр debug включает занесение отладочной информации в файл журнала. Параметр type, за которым следует строка, меняет в выводимом по умолчанию приглашении NewUnixpassword: слово Unix на указанную строку. Параметр retry задает число попыток, предоставляемых пользователю для ввода пароля, по исчерпании которых возвращается ошибка (по умолчанию дается одна попытка).
Рассмотрим листинг 1.8. В нем показано содержимое файла /etc/ pam.d/other. В этом файле содержится конфигурация, используемая механизмом РАМ в отношении служб, не имеющих своих собственных конфигурационных файлов в каталоге /etc/pam.d. Иными словами, этот файл применяется в отношении всех служб, неизвестных системе РАМ. В нем представлены все четыре типа авторизации, auth, account, password и session, каждая из которых вызывает помеченный флагом required модуль pam_deny.so. Таким образом, выполнение неизвестной службы запрещается.
Листинг 1.8. Файл /etc/pam.d/other
auth required pam_deny.so
auth required pam_warn.so
account required pam_deny.so
password required pam_deny.so
password required pam_warn.so
session required pam_deny.so
Модуль pam_dialup.so проверяет, нужно ли указывать пароль для доступа к удаленному терминалу или терминалам, для чего используется файл /etc/security/ ttys.dialup. Модуль применим не только к ttyS, а вообще к любому tty-терминалу. Когда пароль нужен, он сверяется с прописанным в файле /etc/ security/passwd.dialup. Изменения файла passwd.dialup осуществляются программой dpasswd.
Модуль pam_group.so занимается проверками в соответствии с содержимым файла /etc/security/group.conf. В этом файле указываются группы, членом которых может стать указанный в файле пользователь при выполнении определенных условий.
Модуль pam_lastlog.so заносит в файл lastlog сведения о том, когда и откуда пользователь вошел в систему. Обычно этот модуль помечается типом session и флагом optional.
Модуль pam_limits.so позволяет накладывать различные ограничения на пользователей, вошедших в систему. Эти ограничения не распространяются на пользователя root (или любого другого пользователя с нулевым идентификатором). Ограничения устанавливаются на уровне входа в систему и не являются глобальными или постоянными, действуя только в пределах одного входа.
Модуль pam_lastfile.so принимает некоторую запись (item), сравнивает ее со списком в файле и на основании результатов сравнения возвращает УСПЕХ (SUCCESS) или НЕУДАЧА (FAILURE). Параметры этого модуля следующие:
- item=[терминал пользователь | удаленный_узел | удаленный_пользователь | группа| оболочка]
- sense=[allow|deny] (статус для возврата; когда запись найдена в списке, в противном случае возвращается статус, противоположный указанному)
filе=/полный/путь/и/имя_файла - onerr=[succeed|fail] (какой статус возвращать в случае возникновения ошибки)
- арр1у=[пользователь|@группа] (задает пользователя или группу, в отношении которой применяются ограничения. Имеет смысл только для записей вида item=[терминал | удаленный_узел | оболочка], для записей вида item=[пользователь | удаленный_пользователь | группа] игнорируется)
Модуль pam_nologin.so используется при авторизации типа auth с флагом required. Этот модуль проверяет, существует ли файл /etc/nologin, и если нет, то возвращает значение УСПЕХ (SUCCESS), иначе содержимое файла показывается пользователю и возвращается значение НЕУДАЧА (FAILURE). Этот модуль обычно используется в тех случаях, когда система еще не до конца введена в строй или временно закрыта для обслуживания, но не отсоединена от сети.
Модуль pam_permit.so является дополнительным к модулю pam_deny.so. Он всегда возвращает значение УСПЕХ (SUCCESS). Любые переданные параметры модулем игнорируются.
Модуль pam_pwdb.so предоставляет интерфейс к файлам passwd и shadow. Возможны следующие параметры:
- debug — запись отладочной информации в файл журнала;
- audit — дополнительная отладочная информация для тех, кому недостаточно обычной отладочной информации;
- use_first_pass — никогда не запрашивать пароль у пользователя, а брать его у предыдущих модулей стека;
- try_first_pass — попробовать получить пароль у предыдущих модулей, в случае неудачи запросить у пользователя;
- use_authtok — возвратить значение НЕУДАЧА (FAILURE) в случае, если pam_authtok не был установлен, не запрашивать пароль у пользователя, а брать его у предыдущих модулей стека (только для стека модулей типа password);