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

14

Я надеялся, что некоторые гуру PAM / LDAP могут помочь мне здесь. Недавно я установил каталог LDAP на Ubuntu Server для хранения учетных записей как для моих клиентов (для использования с веб-системами), так и для персонала (который должен будет входить через 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, хотя мне удалось заставить работать модуль «автоматически создавать домашние каталоги» :-)

Большое спасибо, Энди

Энди Шеллам
источник

Ответы:

11

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 использовать этот файл. Это работает удовольствие :-)

Энди Шеллам
источник
Стоит отметить, что вам может понадобиться поместить pam_access.so в самом начале файла вашей учетной записи PAM, чтобы он вступил в силу.
CRB
5

Я бы просто использовал

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

разрешить только определенные группы (как для локальных, так и для групп LDAP). Таким образом, вам не нужно ничего указывать в ldap.conf.

Если вы хотите сохранить авторизацию по своему усмотрению, вам не следует фильтровать пользователей по проходу «аккаунт». Я полагаю, что вы должны сделать это на «аутентификационном» проходе. Во-вторых, как вы можете видеть, pam_unix обрабатывает как локальные, так и LDAP-аккаунты (по крайней мере, на этапе «account»), поэтому, похоже, pam_ldap вообще не нужен.

РЕДАКТИРОВАТЬ: В-третьих, если вы настаиваете на наличии материала на проход "account" (который, я считаю, могут иметь странные побочные эффекты), ваша последовательность должна заканчиваться: ..., "достаточный pam_ldap", "required pam_localuser", "required pam_unix" , Я имею в виду, если у вас есть какие-либо другие модули, переместите их перед pam_ldap - в противном случае они будут проигнорированы для учетных записей LDAP из-за условия «достаточного».

kubanczyk
источник
Я думаю, что pam_unix использует вызовы getent для получения информации об учетной записи - которая использует LDAP как в /etc/nsswitch.conf. Эти строки были добавлены в файлы конфигурации PAM установщиком пакета libpam-ldap. Действие по умолчанию pam_groupdn ничего не делало, и во время поиска ответов кто-то сказал, что оно не вступит в силу, если модуль pam_ldap.so не будет использован во время прохода «account». Если возможно, я бы предпочел сохранить настройки в ldap.conf, так как он связан именно с LDAP.
Энди Шеллам
(1) Вы правы насчет pam_unix. (2) Я обновляю свой ответ советом pam_localuser.
kubanczyk
Все, что я читаю о PAM, указывает на то, что учетная запись является правильным разделом для этого. auth - Идентифицирует пользователя и аутентифицирует учетную запись. - Проверяет характеристики учетной записи пользователя, такие как устаревание пароля, ограничения по времени входа в систему и ограничения удаленного входа. Это не проблема аутентификации - потому что имя пользователя / пароль верны, и пользователь может определены. Это ограничение учетной записи, потому что я не хочу, чтобы некоторые учетные записи могли входить в систему.
Энди Шеллам
0

Просто добавьте к @ 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
моток
источник