ldapsearch – Получить всех членов CN (nisNetgroupTriple)

Вопрос или проблема

Я немного новичок в использовании LDAP, особенно в не-AD LDAP. Мы используем RedHat Directory Server и пытался выполнить LDAP-запрос (конкретно фильтр), который бы извлекал всех пользователей (и их атрибуты) из cn, который использует атрибут nisNetgroupTriple с определенными именами пользователей. Это то, как мы управляем “суперпользователями”, а потом все остальные попадают в конкретный cn, исходя из их потребностей. Итак, мой вопрос: как вы ищете и фильтруете, используя ldapsearch, чтобы получить пользователей И атрибуты (uid, sn, givenName, mail) из cn? Вот пример вывода из ldapsearch, который я сделал в качестве теста:

# ldapsearch -xLLL -h server-p 389 -D "cn=Directory Manager" -b "cn=linux,dc=example,dc=org" \* + -W
Введите LDAP-пароль:
dn: cn=linux,dc=example,dc=org
nisNetgroupTriple: (,user1,)
nisNetgroupTriple: (,user2,)
nisNetgroupTriple: (,user3,)
cn: linux
objectClass: top
objectClass: nisNetgroup
memberNisNetgroup: linux
description: Linux

Что мне нужно сделать, так это получить атрибуты для каждого пользователя: user1, user2, user3, такие как:

# ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "dc=example,dc=org" -x '(&(objectClass=posixAccount)(uid=user1))' -W
Введите LDAP-пароль:
dn: uid=user1,ou=People,dc=example,dc=org
userPassword:: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
givenName: User
sn: One
loginShell: /bin/false
gidNumber: 1000
uidNumber: 10054
mail: user1@localhost
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: posixAccount
uid: user1
cn: User One
homeDirectory: /home/user1

Не могу найти ничего, что бы имело смысл в интернете по поводу того, как это сделать (если это возможно). Кроме того, у меня может не быть полного понимания этой части LDAP, что может быть причиной того, что 1) я не могу найти ничего и 2) я не знаю, как разобраться с этим самостоятельно.

Буду признателен за любую помощь.

Следующая команда поможет в поиске имени пользователя в зависимости от конфигурации.

ldapsearch -h localhost -D "cn=Directory Manager" -b "dc=example,dc=org" -W -x "(&(objectClass=nisnetgroup)(nisNetgroupTriple=\(,user1,\)))" cn | grep dn

Она отобразит только cn. Вы можете сделать быстрый grep, и вывод будет коротким и точным. Будет полезнее добавить/изменить эту группу.

Пожалуйста, попробуйте этот LDAP-запрос и дайте знать, если у вас возникнут какие-либо проблемы.

Ответ или решение

Чтобы извлечь все атрибуты пользователей, указанных в атрибутах nisNetgroupTriple группы, вы можете воспользоваться командой ldapsearch. В общем случае вам нужно выполнить следующие шаги:

Пример запроса LDAP для извлечения членов группы

  1. Сначала получите DN группы. Для этого выполните следующий запрос, чтобы найти CN (например, linux), в который включены ваши пользователи:

    ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "cn=linux,dc=example,dc=org" "(&(objectClass=nisNetgroup)(cn=linux))" nisNetgroupTriple

    Этот запрос вернет nisNetgroupTriple, в котором будут указаны пользователи.

  2. Извлеките пользователей из nisNetgroupTriple. В результате выполнения предыдущего запроса вы получите что-то вроде:

    nisNetgroupTriple: (,user1,)
    nisNetgroupTriple: (,user2,)
    nisNetgroupTriple: (,user3,)
  3. Соберите DN для каждого пользователя. Для каждого пользователя вам нужно будет выполнить отдельный поиск, чтобы получить полные атрибуты. Формат DN для пользователей обычно следующий: uid=username,ou=People,dc=example,dc=org. Например:

    ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "dc=example,dc=org" "(&(objectClass=posixAccount)(uid=user1))"

    Вы можете адаптировать этот запрос для всех пользователей, полученных из предыдущего поиска:

    for user in user1 user2 user3; do
       ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "dc=example,dc=org" "(&(objectClass=posixAccount)(uid=${user}))"
    done

Полный пример

Объединяя все вышесказанное, у вас может получиться скрипт на bash, который будет автоматически извлекать данные для всех пользователей:

# Получить nisNetgroupTriple
results=$(ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "cn=linux,dc=example,dc=org" "(&(objectClass=nisNetgroup)(cn=linux))" nisNetgroupTriple)

# Извлечь имена пользователей
users=()
while IFS= read -r line; do
    if [[ $line =~ nisNetgroupTriple:\ \(,(.+),\) ]]; then
        users+=("${BASH_REMATCH[1]}")
    fi
done <<< "$results"

# Извлечь атрибуты для каждого пользователя
for user in "${users[@]}"; do
    ldapsearch -xLLL -h server -p 389 -D "cn=Directory Manager" -b "dc=example,dc=org" "(&(objectClass=posixAccount)(uid=${user}))"
done

Заключение

Этот метод позволяет вам динамически получать членов группы nisNetgroupTriple и извлекать их атрибуты. Убедитесь, что у вас есть необходимые разрешения для выполнения этих запросов на вашем сервере LDAP.

Если у вас возникнут дополнительные вопросы о работе с LDAP в RedHat Directory Server, пожалуйста, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...