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

Аутентификация Linux через ADS - разрешение только определенных групп в PAM

Я использую маршрут samba / winbind / PAM для аутентификации пользователей на наших серверах Linux из нашего домена Active Directory.

Все работает, но я хочу ограничить разрешенные для аутентификации группы AD. Winbind / PAM в настоящее время разрешает любую включенную учетную запись пользователя в активном каталоге, а pam_winbind.so, похоже, не принимает во внимание require_membership_of=MYDOMAIN\\mygroup параметр. Неважно, если я установил его в /etc/pam.d/system-auth или /etc/security/pam_winbind.conf файлы.

Как я могу заставить winbind соблюдать require_membership_of установка? Использование CentOS 5.5 с актуальными пакетами.

Обновить: оказывается, что PAM всегда позволяет root проходить через auth в силу того, что это root. Итак, пока существует учетная запись, root будет передавать auth. На любую другую учетную запись распространяются ограничения аутентификации.

Обновление 2: require_membership_of похоже, работает, за исключением случаев, когда запрашивающий пользователь имеет корневой uid. В этом случае вход будет успешным независимо от require_membership_of настройка. Это не проблема для других учетных записей. Как я могу настроить PAM, чтобы require_membership_of проверить, даже когда текущий пользователь root?

Текущая конфигурация PAM ниже:

auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so

account sufficient pam_winbind.so
account sufficient pam_localuser.so
account required pam_unix.so broken_shadow

password ..... (excluded for brevity)

session required pam_winbind.so
session required pam_mkhomedir.so skel=/etc/skel umask=0077
session required pam_limits.so
session required pam_unix.so

require_memebership_of в настоящее время установлен в /etc/security/pam_winbind.conf файл и работает (за исключением корневого случая, описанного выше).

Отказ от ответственности: Тебе, наверное, не стоит пытаться require_membership_of для root. Есть ли когда-нибудь случай, когда root не должно быть возможности войти в систему? Вы рискуете не отремонтировать этот компьютер без перезагрузки в одиночном режиме, если что-то пойдет не так (например, его сеть выйдет из строя).

Я все равно отвечу.

TL; DR: если вы хотите обеспечить членство даже для локальных пользователей (включая root), замените первый sufficient с requisite.


require_membership_of используется только в pam_winbind.c в pam_sm_chauthtok (участвует в группе управления password) и pam_sm_authenticate (участвует в группе управления auth).

Поэтому, если у пользователя нет необходимого вам членства, шаг PAM, который завершится ошибкой, будет выглядеть так:

auth [...] pam_winbind.so [...]

У вас есть, но он помечен как sufficient:

auth sufficient pam_winbind.so

Так что, если он потерпит неудачу, PAM продолжит свою цепочку. Следующая остановка:

auth sufficient pam_unix.so nullok try_first_pass

У этого получится, если getent passwd root возвращает действительного пользователя, getent shadow root (запускался как root) возвращает действительный зашифрованный пароль, и пароль, введенный пользователем, совпадает.

Я не буду проводить вас через все остальное, но ничто другое не помешает root от входа в систему.

Я бы направил вас к pam.d(5) для получения дополнительной информации об общем механизме конфигурации PAM, pam_unix(8) & co для различных модулей.

Можете ли вы использовать порт глобального каталога вашего сервера AD? говорит по протоколу LDAP, вероятно, через порт 3268 (или 3269 для зашифрованных LDAP).

Я считаю, что проще, быстрее и надежнее использовать модули ldap auth & nsswitch, чем winbind, а также (как было предложено Handyman5 выше) использовать pam_access и отредактировать /etc/security/access.conf, чтобы контролировать, кому разрешено авторизоваться.

В этой ситуации я обманул и использовал pam_access вместо того, чтобы дальше биться головой о pam_winbind.

В нашей настройке это ограничено следующей строкой в ​​файле /etc/security/pam_lwidentity.conf:

require_membership_of = OURDOMAIN\domain^admins

Возможно, вам повезет, если вы обратитесь к группе по SID.

Найдите SID для группы:

wbinfo -n "mygroup"

Затем установите require_membership_of, используя SID (определяется из wbinfo)

require_membership_of=S-1-5-21-1757981276-1399067357-839522115-75638