Я надеялся, что некоторые гуру PAM / LDAP смогут мне здесь помочь. Недавно я создал каталог LDAP на сервере Ubuntu для хранения учетных записей как для моих клиентов (для использования с веб-системами), так и для сотрудников (которым необходимо будет входить в систему через SSH).
Аутентификация LDAP работает отлично. Однако я не могу заставить работать ограничения учетной записи: учетные записи сотрудников будут иметь идентификаторы между 2001
и 2999
и будет членом ssh-users
группа, чтобы разрешить им входить на серверы.
Рассматриваемые ограничения находятся в /etc/ldap.conf
, и являются pam_min_uid
, pam_max_uid
и pam_groupdn
.
pam_groupdn
содержит полное DN моего ssh-users
группа. pam_min_uid
знак равно 2000
и pam_max_uid
знак равно 2999
.
Теперь мне удалось заставить их работать, добавив:
account [success=1 default=ignore] pam_ldap.so
выше pam_unix.so
линия в /etc/pam.d/common-account
. Однако локальные учетные записи Unix НЕ могут входить в систему: сервер SSH прерывает соединение, как только они пытаются.
Я установил pam_ldap.so
модуль к sufficient
в приведенном выше файле, но затем недействительные пользователи получают сообщение о том, что они не могут войти в систему, но он все равно регистрирует их.
Итак, как я могу установить эти ограничения учетной записи для пользователей LDAP, при этом позволяя пользователям UNIX входить в систему?
Как вы, наверное, догадались, я новичок в PAM, хотя мне удалось заставить работать модуль "автоматически создавать домашние каталоги" :-)
Большое спасибо, Энди
PAM имеет возможность ограничивать доступ на основе списка управления доступом (по крайней мере, в Ubuntu), который, как и ответ kubanskamac (+1), рассматривает группы как группы posix, независимо от того, хранятся ли они в LDAP, /etc/group
или NIS.
/etc/security/access.conf
это файл списка доступа. В своем файле я поставил в конце:
-:ALL EXCEPT root sysadmin (ssh-users):ALL
Это запрещает всем, кроме root, sysadmin и в группе ssh-users (которая находится в LDAP), откуда бы они ни входили в систему (второй ALL
).
Затем в моем файле учетной записи PAM (это модуль учетной записи) я добавляю в самом конце:
account required pam_access.so
который сообщает PAM использовать этот файл. Это работает :-)
Я бы просто использовал
auth required pam_listfile.so sense=accept item=group file=/etc/groups.allow onerr=fail
чтобы разрешить только определенные группы (как для локальных, так и для LDAP-групп). Таким образом, вам не нужно ничего указывать в ldap.conf
.
Если вы хотите сохранить авторизацию по-своему, вам не следует фильтровать пользователей по проходу "аккаунт". Я считаю, что вам лучше сделать это на проходе "auth". Во-вторых, как вы сами видите, pam_unix обрабатывает как локальные, так и LDAP-аккаунты (по крайней мере, на этапе "account"), поэтому, похоже, в pam_ldap нет необходимости.
РЕДАКТИРОВАТЬ: В-третьих, если вы настаиваете на том, чтобы на проходе "account" были какие-то вещи (которые, как я полагаю, могут иметь странные побочные эффекты), ваша последовательность должна заканчиваться на: ..., "достаточно pam_ldap", "required pam_localuser", "required pam_unix" . Я имею в виду, что если у вас есть другие модули, переместите их перед pam_ldap - в противном случае они будут проигнорированы для учетных записей LDAP из-за предложения «достаточно».
Просто чтобы добавить к @andy-shellam, вот мой common-account
файл:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_access.so
account required pam_permit.so