Как интегрировать Linux-машину в среду домена Windows AD

Исходные данные

Домен: iac.local
IP DNS-сервера: 10.46.148.112

Подготовка

  1. Установка пакетов
    Copy
    sudo apt -y install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit sudo apt -y install heimdal-clients mskutil
  2. Настройка DNS

В файле /etc/hosts

Copy
127.0.1.1 s3-emul.iac.local s3-emul
В /etc/resolv.conf

Copy
domain iac.local search iac.local nameserver 10.46.148.112
После этого перезагрузить сервер.

Присоединение к домену

В первую очередь требуется обнаружить домен:

Copy
realm discover iac.local

Пример успешного ответа:

Copy
iac.local type: kerberos realm-name: IAC.LOCAL domain-name: iac.local configured: kerberos-member server-software: active-directory client-software: sssd required-package: sssd-tools required-package: sssd required-package: libnss-sss required-package: libpam-sss required-package: adcli required-package: samba-common-bin login-formats: %U login-policy: allow-realm-logins

Это означает, что настройки сети верны и машина получила ответ от домена. Если нет, вам необходимо проверить настройки сети, домен и работоспособность DNS.

Затем присоединитесь к домену AD. Замените admin1 на имя администратора и укажите пароль.

Copy
# Вариант 1 (основной) adcli join -H $(uname -n) -U ILSanko -O "OU=infrastructure,OU=Servers,OU=IAC_Infrastructure,DC=iac,DC=local" IAC.LOCAL # Вариант 2 realm join -U admin1 iac.local
После этого появится таблица Kerberos-ключа в файле /etc/krb5.keytab и можно перестартовать sssd-службу.

Проверьте, возможен ли прием информации о пользователе AD. Замените user1 на имя пользователя вашего домена.

Copy
id aizaro@iac.local uid=687821651(aizaro@iac.local) gid=687800512(aizaro@iac.local) groups=687800512(domain users@iac.local)

Настройки авторизации

Необходимо произвести настройку, чтобы в будущем каждый раз не добавлять имя домена к имени пользователя.

В файле /etc/sssd/sssd.conf Измените значение use_fully_qualified_names на False. Перезагрузите и проверьте:

Copy
sudo systemctl restart sssd id aizaro uid=687821651(aizaro@iac.local) gid=687800512(aizaro@iac.local) groups=687800512(domain users@iac.local)

Автосоздание домашних каталогов

Теперь нужно настроить создание домашних каталогов для пользователей AD при входе в систему.

Copy
vi /etc/pam.d/common-session #add this line in the end of filesession optional session required pam_mkhomedir.so skel=/etc/skel umask=077
Для проверки - войдите в систему как пользователь AD.

Copy
su – user Password: Creating directory '/home/aizaro@iac.local'. aizaro@ubuntu-server:~$

Это означает, что вы успешно вошли в систему как пользователь AD.

Осторожно!
При ошибочном вводе этого параметра может быть заблокирован вход по ssh от имени любого пользователя!!
Не отлогинивайтесь, иначе потеряете контроль над этой машиной.

Тюнинг прав

Также вы можете разрешить авторизацию для некоторых пользователей и групп AD или же ограничить других. В приведенном ниже примере настроен запрет для всех пользователей, кроме user0, aizaro и группы Main Admins.

Copy
sudo realm deny –allsudo realm permit user0@iac.local aizaro@iac.localsudo realm permit -g 'Main Admins'

Настройка пользователей AD для получения root-прав такая же, как и для локальных, но выполняется в другом файле.

Copy
vi /etc/sudoers.d/ad_windows

Добавьте к нему нужные строки. Например:

Copy
aizaro ALL=(ALL) ALL %IAC_ServerAdministrators ALL=(ALL) ALL

Файл /etc/krb5.conf

Copy
[libdefaults] default_realm = iac.local kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true fcc-mit-ticketflags = true [realms] IAC.LOCAL = { kdc = IAC-DC01 admin_server = IAC-DC01.IAC.LOCAL default_domain = IAC.LOCAL } [login] krb4_convert = true krb4_get_tickets = false [domain_realm] .iac.local = IAC.LOCAL iac.local = IAC.LOCAL

Файл /etc/realmd.conf

Copy
[users] default-home = /home/%U default-shell = /bin/bash [active-directory] default-client = sssd #default-client = winbind os-name = Debian GNU/Linux os-version = 10 (Buster) [service] automatic-install = no [iac.local] computer-ou = OU=infrastructure,OU=Servers,OU=IAC_Infrastructure,DC=iac,DC=local computer-name = s3-emul user-principal = yes automatic-join = yes automatic-id-mapping = no manage-system = no fully-qualified-names = no

Скрипт автоустановки

Copy
#!/bin/bash apt update apt -y install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit apt -y install heimdal-clients mskutil apt -y install krb5-user libpam-krb5 libpam-ccreds sed -i 's/techpark.local/iac.local/g' /etc/hosts cat /etc/hosts sed -i 's/techpark.local/iac.local/g' /etc/resolv.conf sed -i 's/nameserver 10.50.56.200/nameserver 10.46.148.112/g' /etc/resolv.conf cat > /etc/realmd.conf <<-EOF [users] default-home = /home/%U default-shell = /bin/bash [active-directory] default-client = sssd #default-client = winbind os-name = Debian GNU/Linux os-version = 10 (Buster) [service] automatic-install = no [iac.local] computer-ou = OU=infrastructure,OU=Servers,OU=IAC_Infrastructure,DC=iac,DC=local computer-name = $(uname -n) user-principal = yes automatic-join = yes automatic-id-mapping = no manage-system = no fully-qualified-names = no #-------------------------- EOF cat > /etc/sssd/sssd.conf <<-EOF [sssd] domains = iac.local config_file_version = 2 services = nss, pam [domain/iac.local] ad_domain = iac.local krb5_realm = IAC.LOCAL 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 use_fully_qualified_names = False fallback_homedir = /home/%u@%d access_provider = ad #-------------------------- EOF chmod 600 /etc/sssd/sssd.conf systemctl restart realmd realm discover iac.local sleep 5 adcli join -H $(uname -n) -U ILSanko -O "OU=infrastructure,OU=Servers,OU=IAC_Infrastructure,DC=iac,DC=local" IAC.LOCAL #realm join --verbose --user=ILSanko --computer-ou="OU=infrastructure,OU=Servers,OU=IAC_Infrastructure,DC=iac,DC=local" iac.local id ILSanko@iac.local systemctl start sssd echo -e "session required\tpam_mkhomedir.so\tskel=/etc/skel\tumask=077" >> /etc/pam.d/common-session echo -e "%IAC_ServerAdministrators ALL=(ALL) ALL" >> /etc/sudoers.d/ad_windows

Инструкция для Centos

Эту инструкцию прислали коллеги

Copy
yum -y install adcli sssd authconfig pam_krb5 samba-common adcli info COMPANY-X.LOCAL adcli join -H NTC-LS13 -U user_name COMPANY-X.LOCAL vi /etc/sssd/sssd.conf chmod 600 /etc/sssd/sssd.conf vi /etc/pam.d/system-auth session optional pam_mkhomedir.so skel=/etc/skel umask=077 vi /etc/pam.d/sshd # first session session optional pam_mkhomedir.so skel=/etc/skel umask=077 /etc/rc.d/init.d/sssd start chkconfig sssd on id user_name authconfig --enablesssd --enablesssdauth --disableldap --disableldapauth --disablekrb5 --update visudo %SPB-NTC-SERVERADMINS ALL=(ALL) ALL

Источники

  1. https://serverspace.ru/support/help/linux-active-directory/
  2. https://www.freedesktop.org/software/realmd/docs/realmd-conf.html

Проверил и доработал aizaro@mail.ru