Динамическая авторизация LDAP PAM с группами

На данный момент мой PAM интегрирован через LDAP с настраиваемым стеком аутентификации в /etc/pam.d/systhem-auth :

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth required pam_listfile.so onerr=fail item=group sense=allow file=/etc/login.netgroup.allowed
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass retry=3
password    sufficient    pam_unix.so sha512 nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_mkhomedir.so skel=/etc/skel umask=077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

Как вы можете см. авторизация выполняется путем поиска в файле /etc/login.netgroup.allow , который содержит список групп LDAP. Так,пользователь может войти в систему на этом сервере или нет, если он принадлежит хотя бы к одной или нескольким группам.

Эта проверка выполняется статически. Я имею в виду, что файл login.netgroup.allow неизменяем и содержит только список групп. Есть ли способ или какое-либо предложение для динамической проверки с помощью проверки LDAP? Я имею в виду, предположим, что у меня есть ветка LDAP, которая содержит запись с именем хоста моего сервера и многозначный атрибут, содержащий список групп, связанных с этим сервером. Можно ли сделать проверку не в файл, а непосредственно в LDAP?

ИНФОРМАЦИЯ: ОС: Red Hat 6.4 Клиент LDAP: nslcd

РЕДАКТИРОВАТЬ: На данный момент я заставил его работать с помощью специального скрипта:

Это system-auth моего hostname1 сервера:

auth        sufficient    pam_unix.so nullok try_first_pass
auth            required        pam_exec.so /usr/sbin/netgroupCheck
auth            required        pam_listfile.so onerr=fail item=group sense=allow file=/etc/login.netgroup.allowed

Я проверяю разрешенную группу непосредственно на LDAP с помощью сценария / usr / sbin / netgroupCheck :

#!/usr/bin/env bash

#Allowed Netgroup File
file=/etc/login.netgroup.allowed

#LDAP Client
uri=$(cat /etc/nslcd.conf | grep uri | grep "^[^#;]" | sed 's/[^ ]* //')
oud_user=$( cat /etc/nslcd.conf | grep binddn | grep "^[^#;]" | sed 's/[^ ]* //')
oud_password=$( cat /etc/nslcd.conf | grep bindpw | grep "^[^#;]" | sed 's/[^ ]* //')
hostname=$(hostname)

#Refresh Allowed Netgroup File from LDAP
ldapsearch -LLL -D $oud_user -H $uri -w $oud_password -b "dc=base,dc=it" "(cn=$hostname)" Allowednetgroup | grep -i Allowednetgroup | sed 's/[^ ]* //' > $file

И это запись в LDAP:

dc: cn=hostname1,ou=servers,dc=base,dc=it
objectClass: host
objectClass: ipHost
objectClass: top
cn: hostname1
ipHostNumber: 10.10.10.10
Allowednetgroup: GROUP1
Allowednetgroup: GROUP2
Allowednetgroup: GROUP3

Таким образом, я могу редактировать разрешенные сетевые группы прямо на LDAP, не редактируя их на сервере .

2
задан 25 September 2019 в 18:26
2 ответа

Проблема

Если я правильно вас понял, вы используете файл для проверки аутентификации, прежде чем достигнете подключаемого модуля LDAP. И этот файл подключается к LDAP, который проверяет (как минимум) 2 группы и позволяет пользователям, принадлежащим (любой из) этих двух групп, пройти аутентификацию.

Если это так, вы можете просто делегировать это pam_ldap и сконфигурируйте его для фильтрации аутентификации на этом этапе.

В любом случае, если вы используете LDAP, у вас уже есть динамические группы. Что вам нужно, так это скормить эти группы клиентам. Возможно, мне что-то не хватает, но вот несколько вариантов, которые я могу придумать:

PAM LDAP

Отдельная группа

Вы можете сделать это с помощью параметра конфигурации PAM_LDAP pam_groupdn , если у вас есть возможность создания новой группы, слияние между GROUP1 и GROUP2, и добавление каждого пользователя из GROUP1 и GROUP2 в эту группу, например. назовем его GROUP3 .

Затем вам следует добавить следующую строку в /etc/ldap.conf :

pam_groupdn cn=GROUP3,ou=groups,dc=foo,dc=bar

Перезапустить службы по мере необходимости.

Насколько я понимаю, знайте, pam_groupdn не позволяет использовать более одной группы. Если вы не можете объединить GROUP1 и GROUP2 в третью группу GROUP3, другим вариантом будет использование SSSD.

Несколько групп

Вам необходимо установить SSSD. Я не знаю, какой дистрибутив вы используете, но обычно пакет имеет то же имя sssd .

Добавьте следующую строку в /etc/sssd/sssd.conf под разделом [домен]:

access_provider = ldap
ldap_access_filter = (|(memberOf=cn=GROUP1,ou=groups,dc=foo,dc=bar)(memberOf=cn=GROUP2,ou=groups,dc=foo,dc=bar))

При необходимости перезапустите службы.

0
ответ дан 3 December 2019 в 12:29

Конечно, это делается с помощью директивы filter passwd файла nslcd.conf, что-то вроде этого:

 filter passwd (memberOf=cn=myLoginGroup,ou=groups,dc=foo,dc=bar)

Так как filter passwd ссылается на LDAP-фильтр, это может быть так сложно, как вам угодно, включая множественные групповые ограничения в логическом выражении.

.
1
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы