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

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

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

Подготовка

  1. Установка пакетов
    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

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

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

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

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

realm discover iac.local

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

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 на имя администратора и укажите пароль.

# Вариант 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 на имя пользователя вашего домена.

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. Перезагрузите и проверьте:

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

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

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

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.

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

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

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

Тюнинг прав

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

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

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

vi /etc/sudoers.d/ad_windows

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

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

Файл /etc/krb5.conf

[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

[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

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

#!/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

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

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