• Категории
  • Подписка
  • Разместить статью
08/07/10 5 3629 Модули аутентификации PAM
-

Краткое описание некоторых аутентификационных модулей Linux-PAM

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

pam_permit
В любом режиме всегда возвращает успех.

pam_deny
В любом режиме всегда возвращает ошибку.

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

Реализует базовую функциональность Unix-систем в этом отношении.

В режиме аутентификации

проверяет действительность пользователя по предоставленному паролю. Информацию о пароле пользователя ищет в соответствии с алгоритмом, заданным в конфигурационном файле /etc/nssswitch.conf (в файлах /etc/passwd, /etc/shadow и/или в базе данных NIS-домена).
Некоторые из возможных опций:
—    nullok: разрешать аутентификацию пользователей с пустым паролем (по умолчанию использование пустых паролей не разрешается).

В режиме управления учетными записями

проверяет состояние учетной записи и пароль, анализируя содержание файла /etc/shadow. Если срок действия пароля истек, может предложить (или выдвинуть требование) пользователю изменить пароль.

В режиме управления паролями

разрешает изменить пароль пользователя. Пароли при этом может искать/сохранять в файлах /etc/passwd, /etc/shadow или в базе данных NIS-домена – в зависимости от опций (по умолчанию использует файл /etc/passwd). Может использовать для шифрования паролей традиционный для UNIX-систем алгоритм (базируется на стандарте 3DES, доступный через функцию crypt(3), является алгоритмом по умолчанию), расширенную версию традиционного алгоритма (разрешает шифровать более чем 8 первых символов пароля; применяется, если pam_unix вызывается с опцией bigcrypt), алгоритм MD5 (применяется, если pam_unix вызывается с опцией md5). Может запоминать заданное количество (зашифрованных по алгоритму MD5) паролей каждого пользователя (в файле /etc/security/opasswd; количество паролей для запоминания задается опцией remember (по умолчанию это количество равняется 0)). Последняя возможность используется такими модулями, как pam_cracklib, для проверки степени новизны паролей, которые вводятся пользователем.

Некоторые из возможных опций:

  • nullok: разрешать принимать в качестве новых паролей пустые строки;
  • use_authtok: принуждает модуль pam_unix принять в качестве нового пароля пароль, полученный от предыдущего модуля;
  • md5: использовать для шифрования паролей алгоритм MD5;
  • shadow: искать/сохранять пароли в файле /etc/shadow.

В режиме управления сеансами

перед началом и завершением пользовательской сессии регистрирует через функцию syslog(3) имя пользователя и наименование службы.

pam_stack
Используется в любом режиме. Разрешает из стека одной службы “вызвать” стек другой службы. Благодаря этому можно избежать дублирования записей в конфигурационном файле. Служба, стек которой необходимо вызвать, определяется через аргумент service.

Пример использования:

/etc/pam.d/imap:
auth required pam_stack.so service=system-auth
auth required pam_shells.so
/etc/pam.d/system-auth:
auth sufficient pam_krb5.so
auth sufficient pam_unix.so shadow nullok
auth required   pam_deny.so

pam_rootok
Используется только в режиме аутентификации пользователей. Предназначенный для использования в ситуациях, когда суперпользователь желает получать доступ к службе без введения пароля. Аутентификация проходит успешно, если и только если UID пользователя равняется 0.
Этот модуль не следует использовать для аутентификации пользователей серверами, которые запускаются суперпользователем или во время инициализации системы.

Пример использования:

Программа su традиционно разрешает суперпользователю изменять идентичность без введения пароля. Чтобы смоделировать это поведение с помощью Linux-PAM, нужно в соответствующее место конфигурационного файла добавить следующие два строки:
#
# su authentication. Root is granted access by default.
#
su auth sufficient pam_rootok.so
su auth required pam_unix_auth.so

pam_wheel
Используется только в режиме аутентификации пользователей. Дает возможность получать полномочия суперпользователя только членам группы wheel (GID = 0).

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

pam_listfile
Используется только в режиме аутентификации пользователей.
Выполняет аутентификацию пользователя, базируясь на содержании произвольно заданного (текстового) файла.
Возможные опции:

  • item=user|tty|rhost|ruser|group|shell: указывает, какую величину нужно сверить с содержанием файла (user указывает на имя пользователя, от лица которого поступил запрос (PAM_USER), tty указывает на имя терминала, с которого поступил запрос (PAM_TTY), rhost указывает на имя узла, с которого поступил запрос (PAM_RHOST), ruser указывает на имя пользователя, который послал запрос (имя, под которым он выступает на том узле, с которого поступил запрос) (PAM_RUSER), group указывает на имя группы, к которой принадлежит пользователь, от лица которого поступил запрос, shell указывает на командный интерпретатор пользователя, от лица которого поступил запрос);
  • file=filename: указывает имя файла, в котором нужно выполнять поиск;
  • sense=allow|deny: определяет поведение модуля в случае, когда заданная опцией item величина найдена или не найдена в файле (сообщить об успехе аутентификации, когда величина найдена, и sense=allow, или когда величина не найдена, и sense=deny, в других случаях сообщить о неуспехе);
  • |fail: определяет поведение модуля в случае ошибки открытия файла и т.п. (succeed — сообщить об успехе, fail — об ошибке);
  • apply=user|@group: разрешает сузить применение ограничений к отдельному пользователю или группе (имеет смысл только вместе с item, что равняется tty, rhost или shell).
Пример использования:

Следующая строка в конфигурационном файле /etc/pam.conf моделирует традиционное для службы ftp применение файла /etc/ftpusers:
#
# deny ftp-access to users listed in the /etc/ftpusers file
#
ftp auth required pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ftpusers

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

#
# permit login to users listed in /etc/loginusers
#
login auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/loginusers

pam_shells
Используется только в режиме аутентификации пользователей.
Аутентификация проходит успешно, если и только если командный интерпретатор пользователя обозначен в файле /etc/shells.

pam_securetty
Используется только в режиме аутентификации пользователей.
Сообщает об успехе аутентификации суперпользователя, только если он посылает запрос с «безопасного» терминала (список таких терминалов берется с файла /etc/securetty).

pam_rhosts_auth
Используется только в режиме аутентификации пользователей.
Аутентификация проходит успешно, если и только если узел, с которого присылается запрос, присутствует в перечне, который содержится в файле /etc/hosts.equiv, или пара «отдаленное имя пользователя — отдаленный узел» обозначена в файле ~/.rhosts.
Это традиционный элемент работы таких служб, как rlogin, rsh.

pam_timestamp
Используется только в режимах аутентификации пользователей и управления сеансами.

В режиме аутентификации пользователей

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

В режиме управления сеансами

создает в своему кеше соответствующий файл.
Основные опции:

  • timestampdir=name: указывает каталог для размещения кеша (по умолчанию — /var/run/sudo);
  • timestamp_timeout=number: указывает интервал времени (в секундах), на протяжении которого файлы в кеше остаются действительными после их создания (значение по умолчанию: 600).
Пример использования:

/etc/pam.d/some-config-tool:
auth        sufficient pam_timestamp.so
auth        required   pam_unix.so
session     required   pam_permit.so
session     optional   pam_timestamp.so

pam_console
Используется только в режимах аутентификации пользователей и управления сеансами.

В режиме аутентификации пользователей

возвращает успех только и если только запрос поступает из локальной консоли.

В режиме управления сеансами

дает возможность предоставлять пользователям, которые начинают локальный сеанс работы, дополнительные полномочия (а по завершению сеанса их забирать). Дополнительные полномочия формулируются как дополнительные права доступа к файлам и описываются в конфигурационном файле (/etc/security/console.perm по умолчанию) (на практике дело касается переопределения владельцев и списков контроля доступа к отдельным  файлам устройств (таких, как /dev/cdrom, /dev/fd0)).

pam_env

Используется только в режиме аутентификации пользователей (и реагирует только на вызов pam_setcred(3) (который выполняется, по обыкновению, после успешной аутентификации пользователя)).

Выполняет инициализацию/деинициализацию отдельных переменных окружения. Перечень этих переменных и их значения задаются через конфигурационные файлы (по умолчанию, /etc/security/pam_env.conf и /etc/environment).

pam_limits
Используется только в режиме управления сеансами.

Разрешает установить ограничение на использование ресурсов, которые могут быть получены пользователем на протяжении сеанса. Перечень ограничений задается конфигурационным файлом (по умолчанию, /etc/security/limits.conf). На суперпользователя эти ограничения не распространяются.

Могут применяться следующие виды ограничений:

  • максимальный размер core-файла;
  • максимальный размер создаваемых пользователем файлов;
  • максимальное количество открытых пользователем файлов;
  • максимальное количество заблокированных пользователем файлов;
  • максимальный размер адресного пространства, который может быть выделен создаваемым пользователем процессам;
  • максимальный размер сегмента данных создаваемых пользователем процессам;
  • максимальный размер сегмента стека создаваемых пользователем процессам;
  • максимальный размер адресного пространства, заблокированного пользователем в памяти;
  • максимальный размер занятой пользователем физической оперативной памяти;
  • максимальное количество активных процессов;
  • максимальный приоритет процессов, созданных пользователем;
  • максимальное количество полученного на протяжении сеанса процессорного времени;
  • максимальное количество открытых сеансов (как отдельным пользователем, так и вообще в системе).

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

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

Могут выполняться следующие проверки прочности паролей:

  • проверка на соответствие словам из словаря;
  • некоторые проверки на соответствие паролям, которые уже использовались данным пользователем (сохраняются модулем pam_unix в файле /etc/security/opasswd);
  • проверка на достаточную длину;
  • несколько проверок на достаточное разнообразие символов.
Возможные опции (почти все):
  • retry=N: задает максимальное количество попыток выбрать надежный пароль, которые могут быть предоставлены пользователю (по умолчанию предоставляется лишь одна такая попытка);
  • type=XXX: замещает в стандартных приглашениях на введение нового паролю «New UNIX password» и «Retype UNIX password» слово “UNIX” рядком XXX;
  • difok=N: определяет минимально допустимое количество символов, присутствующих в новом и отсутствующих в старом пароле (значение по умолчанию 10) (если хотя бы половина символов в новом пароле не встречается в старом, пароль также будет принят);
  • minlen=N: определяет минимально допустимую длину нового пароля (значение по умолчанию 9) (нужно иметь в виду, что, во-первых, опции dcredit, lcredit, ucredit, ocredit могут фактически увеличивать эту величину, во-вторых, эта величина не может быть меньше 6);
  • dcredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль цифр (N первых цифр не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество цифр в новом пароле;
  • ucredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль букв в верхнем регистре (N первое количество букв в верхнем регистре не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество букв в верхнем регистре в новом пароле;
  • lcredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль букв в нижнем регистре (N первых букв в нижнем регистре не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество букв в нижнем регистре в новом пароле;
  • ocredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового паролю, выделенный на включение в пароль других символов (N первых таких символов не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество других символов в новом пароле (по умолчанию это ограничение не накладывается).

Источники дополнительной информации:

Файл /usr/share/doc/pam-X.XX/txts/README.pam_xxx.


5 комментариев на «“Краткое описание некоторых аутентификационных модулей Linux-PAM”»

  1. 4malazy:

    Хорошо написано, а если учесть что про Линуху, то вообще разжевано «для чайников»
    Сэнкс!

  2. NovPlus:

    Уважаю Linux. Простой и продуманный.

  3. А все таки чуется веение Unix. Хорошая фишка Линухи — все можно с строковом режиме настроить и очень быстро.

  4. Julia:

    подскажите пожалуйсто достоинства и недостатки модуля РАМ pam_abl очень срочно надо

    • Бодя:

      Julia:
      на практике не сталкивался, но слышал, что не плохое средство блокировки ip-адресов.
      при правильной настройке, после ввода команды #pam_abl покажет список заблоченных хостов и неудачных попыток входа. удачное средство против ботов.
      доп. материал (англ.): http : // www . hexten . net/assets/pam_abl_doc/index . html
      http : // linux.die . net/man/1/pam_abl — man

Добавить комментарий

Яндекс.Метрика