Команда realm не работает корректно при использовании в скрипте (CentOS 7)

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

Я пытаюсь автоматизировать аутентификацию на хостах CentOS 7 через мой Active Directory с помощью команд realm.

Это полностью работает, когда я сам выполняю следующие команды.

$ yum -y install realmd oddjob oddjob-mkhomedir sssd samba-common
$ realm join -U admin domain.com
$ realm permit -g [email protected]

Кроме того, я заменяю следующие строки в /etc/sssd/sssd.conf и перезапускаю службу sssd.

use_fully_qualified_names = False
fallback_homedir = /home/%d/%u

$systemctl restart sssd

После этих шагов я могу войти на конкретный хост CentOS с любым разрешенным пользователем из моего Active Directory.

Теперь проблема:

Если я запускаю следующий скрипт на хосте CentOS от имени root, кажется, что все сработало.

 yum -y install realmd oddjob oddjob-mkhomedir sssd samba-common
 echo "Пароль" | realm join -U admin domain.com
 realm permit -g [email protected]
 sed -i -e 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf
 sed -i -e 's#fallback_homedir = /home/%u@%d#fallback_homedir = /home/%d/%u#g' /etc/sssd/sssd.conf
 systemctl restart sssd

Когда я пытаюсь войти как разрешенный пользователь AD, появляется сообщение доступ запрещен.

Я проверил /etc/sssd/sssd.conf на наличие возможных проблем, связанных с sed, но все выглядит нормально. Также выполнение команды realm list не показывает никаких проблем.

# realm list
domain.com
type: kerberos
realm-name: DOMAIN.COM
domain-name: domain.com
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common
login-formats: %U
login-policy: allow-permitted-logins
permitted-logins:
permitted-groups: [email protected]

Вывод этой команды точно такой же, как и при ручном выполнении команд.

Кто-нибудь знает, как с этим справиться?

У меня была такая же проблема, и я заметил, что ldap_id_mapping = True было моим решением. Это находится в /etc/sssd/sssd.conf.

Вам, возможно, стоит включить подробный вывод команды realm join. То, как вы используете echo, чтобы передать пароль команде realm, является правильным способом сценария.
Вот что я использую:

echo $passwd | realm join --verbose --membership-software=adcli  --user=administrator MYDOMAIN.COM

Я также разрешил группы, используя другой формат. Вот способ, который работает для меня.

realm permit --groups "mydomain.com\\group-name"

В моем sssd.conf у меня есть

[domain/mydomain.com]
ad_domain = mydomain.com
krb5_realm = MYDOMAIN.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
ad_maximum_machine_account_password_age = 0
ldap_sasl_mech = GSS-SPNEGO
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = simple
simple_allow_groups = mydomain.com\group-name

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

Проблема с автоматизированным подключением к Active Directory на CentOS 7 с использованием команд realm может быть вызвана несколькими факторами. Ниже представлено решение, охватывающее основные аспекты, которые могут помочь устранить эту проблему.

Обзор проблемы

Вы упомянули, что команда realm работает в интерактивном режиме, но вызывает проблемы в скрипте. При выполнении скрипта, даже если утилиты и настройки выглядят корректными, доступ к учетным записям Active Directory может быть заблокирован с ошибкой "permission denied".

Возможные причины и решения

  1. Проблемы с правами доступа:
    Проверьте, что группа, которой вы предоставляете доступ, указана корректно. Используйте формат:

    realm permit --groups "mydomain.com\\group-name"

    Это может помочь указать нужную группу.

  2. Флаг ldap_id_mapping:
    Убедитесь, что в файле /etc/sssd/sssd.conf у вас установлен флаг ldap_id_mapping = True. Это позволит корректно связывать учетные записи AD с локальными. Например:

    [domain/mydomain.com]
    ldap_id_mapping = True
  3. Используйте режим Verbose для диагностики:
    Подключение к домену через realm join с включенной подробной информацией может помочь вам понять, в чем именно проблема. Используйте:

    echo "Password" | realm join --verbose --membership-software=adcli -U admin domain.com
  4. Проверка файла конфигурации SSSD:
    Убедитесь, что ваш файл /etc/sssd/sssd.conf не содержит ошибок. Корректная конфигурация может выглядеть следующим образом:

    [domain/mydomain.com]
    id_provider = ad
    access_provider = simple
    ad_domain = mydomain.com
    krb5_realm = MYDOMAIN.COM
    ldap_id_mapping = True
    use_fully_qualified_names = False
    fallback_homedir = /home/%d/%u
  5. Перезапуск SSSD:
    После внесения изменений в конфигурацию необходимо перезапустить службу SSSD:

    systemctl restart sssd

Пример скрипта

Вот пример полного скрипта, учитывающего вышеперечисленные моменты:

#!/bin/bash

# Установка необходимых пакетов
yum -y install realmd oddjob oddjob-mkhomedir sssd samba-common

# Подключение к домену с использованием пароля
echo "Password" | realm join --verbose -U admin domain.com

# Разрешение доступа для группы
realm permit --groups "mydomain.com\\group-name"

# Настройка sssd.conf
sed -i -e 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf
sed -i -e 's#fallback_homedir = /home/%u@%d#fallback_homedir = /home/%d/%u#g' /etc/sssd/sssd.conf
echo "ldap_id_mapping = True" >> /etc/sssd/sssd.conf

# Перезапуск SSSD
systemctl restart sssd

Заключение

Если, после выполнения всех шагов, проблема все еще остается, рекомедуется проверить логи SSSD для получения более детальной информации о возможных ошибках:

journalctl -u sssd

Также убедитесь, что ваш сервер может корректно связываться с контроллером домена и что в системе корректно настроены DNS.

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

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