вторник, 28 августа 2018 г.

Ведение Debian 9.3 в домен Active Directory

Заметка не претендует на оригинальность, является фактически калькой этой статьи, написана в качестве "записок на память". Так же обращаю внимание, что существует альтернативный способ без использования samba, но в моем случае она мне все равно нужна.

Продолжаю настройку терминального сервера Debian 9.3:

Выполняем в контейнере poweroff, после чего идем во вкладку DNS нашего LXC контейнера и в случае необходимости настраиваем имя, домен и DNS сервера через пробел.

Указанные данные будут использованы при генерации файлов /etc/resolv.conf и /etc/hostname, править файл напрямую нет смысла, так как он перегенерируется при следующем перезапуске контейнера.
Приводим временную зону в соответствие настройкам домена:
dpkg-reconfigure tzdata
Настраиваем синхронизацию времени с контроллерами домена:
mcedit /etc/systemd/timesyncd.conf
Делаем рестарт службы:
systemctl restart systemd-timesyncd
Проверяем статус:
systemctl status systemd-timesyncd
Проверяем состояние синхронизации
timedatectl status
проверяем время:
date
вывод должен совпадать с системным временем в домене.

Добавляем в/etc/hosts строку:
127.0.1.1 srvname.domain.com srvname
Ставим пакеты:
apt install -y krb5-user samba winbind libpam-krb5 libpam-winbind libnss-winbind
правим /etc/krb5.conf
[libdefaults]
 default_realm = DOMAIN.COM

# The following krb5.conf variables are only for MIT Kerberos.
 kdc_timesync = 1
 ccache_type = 4
 forwardable = true
 proxiable = true
 v4_instance_resolve = false
 v4_name_convert = {
     host = {
  rcmd = host
  ftp = ftp
     }
     plain = {
  something = something-else
     }
    }
    fcc-mit-ticketflags = true


[realms]
 DOMAIN.COM = {
  kdc = dc
  admin_server = dc
  default_domain = DOMAIN.COM
 }

[domain_realm]
 .domain.com = DOMAIN.COM
 domain.com = DOMAIN.COM


[login]
    krb4_convert = false
    krb4_get_tickets = false
Обращаю внимание на параметр "admin_server = dc"
Я считаю необходимым создать в DNS А записи с именем DC и указывающие на все ваши контороллеры, таким образом вы обезопасите себя от выхода одного из них их строя, кстати для kdc можно тоже указать одну строку "kdc = dc" пусть DNS server сам разруливает сбои.

Проверяем авторизацию:
kinit domainuser@DOMAIN.COM
вводим запрашиваемый пароль, если нет ошибок проверяем тикет:
klist
должны быть выданы параметры тикета.
Правим /etc/samba/smb.conf
[global]
   # Эти две опции нужно писать именно в заглавном регистре, причём workgroup без
   # последней секции после точки, а realm - полное имя домена 
   workgroup = DOMAIN
   realm = DOMAIN.COM

   # Эти две опции отвечают как раз за авторизацию через AD
   security = ADS
   encrypt passwords = true
   # Просто важные 
   dns proxy = no 
   socket options = TCP_NODELAY

   # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе,
   # или даже стать домен контроллером, то всегда прописывайте эти пять опций именно в таком виде
   domain master = no
   local master = no
   preferred master = no
   os level = 0
   domain logons = no

   # Отключить поддержку принтеров
   load printers = no
   show add printer wizard = no
   printcap name = /dev/null
   disable spoolss = yes
тестим конфиг самбы:
testparm
по нажатию ввода нам выведет секцию [global] конфига.
Пробуем ввести в домен:
net ads join -U username -D DOMAIN
username - админ домена
DOMAIN - наш домен
после запроса пароля должно появиться сообщение об успешном вводе в домен:
Using short domain name -- DOMAIN
Joined 'servername' to dns domain 'DOMAIN.COM'
Проверяем:
net ads testjoin
Join is OK
добавляем в /etc/samba/smb.conf секцию для winbind(итоговый конфиг):
[global]
   # Эти две опции нужно писать именно в заглавном регистре, причём workgroup без
   # последней секции после точки, а realm - полное имя домена 
   workgroup = DOMAIN
   realm = DOMAIN.COM

   # Эти две опции отвечают как раз за авторизацию через AD
   security = ADS
   encrypt passwords = true
   # Просто важные 
   dns proxy = no 
   socket options = TCP_NODELAY

   # Возможность оффлайн-авторизации при недоступности доменконтроллера
   winbind offline logon = yes
   # Период кэширования учетных записей, по умолчанию равен 300 секунд
   winbind cache time = 300
   # Необязательная настройка, но избавляет от нудных пауз, указываем контроллер домена dc, 
   # можно указать и ip, но это является плохим тоном
#   password server = dc

 # Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind.
   # Диапазоны идентификаторов для виртуальных пользователей и групп.
    idmap config * : range = 10000-20000
    idmap config * : backend = tdb
   # Эти опции не стоит выключать.
    winbind enum groups = yes
    winbind enum users = yes
   # Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп
   # будут использоваться с доменом, т.е. вместо username - DOMAIN\username.
   # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. 
    winbind use default domain = yes
   # Если вы хотите разрещить использовать командную строку для пользователей домена, то
   # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false
    template shell = /bin/bash
   # Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку
    winbind refresh tickets = yes

   # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе,
   # или даже стать доменконтроллером, то всегда прописывайте эти пять опций именно в таком виде
   domain master = no
   local master = no
   preferred master = no
   os level = 0
   domain logons = no

   # Отключить поддержку принтеров
   load printers = no
   show add printer wizard = no
   printcap name = /dev/null
   disable spoolss = yes
Останавливаем winbind, рестартим samba, запускаем winbind
/etc/init.d/winbind stop
smbd restart
/etc/init.d/winbind start
Напоминаю, что я работаю с правами root и не создаю в системе других пользователей. Снова тестим конфиг самбы как и выше
testparm
результат должен быть аналогичный.
Проверяем доверительные отношения с AD
wbinfo -t
checking the trust secret for domain DOMAIN via RPC calls succeeded
Комманды
wbinfo -u
wbinfo -g
должны соответственно вывести пользователей и группы домена.

Приводим /etc/nsswitch.conf к виду:
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat
gshadow:        files
files:          files dns
hosts:          mdns4_minimal [NOTFOUND=return] dns files
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
после чего комманды
getent passwd
getent group
должны соответственно вывести локальные+доменные пользователи/группы
Ну и напоследок добавим в /etc/pam.d/common-session строку, которая обеспечит создание домашнего каталога при первом подключении пользователя:
session    optional    pam_mkhomedir.so    skel=/etc/skel/    umask=0077
На всякий случай перезагружаем сервер:
reboot
и выполняем на него вход по ssh доменным пользователем:
ssh "DOMAIN\user@server_ip
если все прошло хорошо, доменная авторизация настроена.

Комментариев нет:

Отправить комментарий