Назад | Перейти на главную страницу

Ограничение входа в учетную запись с помощью LDAP и PAM

Я надеялся, что некоторые гуру 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