Вопрос или проблема
Я пытаюсь автоматизировать аутентификацию на хостах 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".
Возможные причины и решения
-
Проблемы с правами доступа:
Проверьте, что группа, которой вы предоставляете доступ, указана корректно. Используйте формат:realm permit --groups "mydomain.com\\group-name"
Это может помочь указать нужную группу.
-
Флаг
ldap_id_mapping
:
Убедитесь, что в файле/etc/sssd/sssd.conf
у вас установлен флагldap_id_mapping = True
. Это позволит корректно связывать учетные записи AD с локальными. Например:[domain/mydomain.com] ldap_id_mapping = True
-
Используйте режим Verbose для диагностики:
Подключение к домену черезrealm join
с включенной подробной информацией может помочь вам понять, в чем именно проблема. Используйте:echo "Password" | realm join --verbose --membership-software=adcli -U admin domain.com
-
Проверка файла конфигурации 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
-
Перезапуск 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.