Я использую маршрут 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