Ввод Debian 10 Buster в домен Windows с помощью Kerberos, Samba, Winbind

Ниже опишу как ввести linux систему Debian 10 в домен Windows с помощью Kerberos, Samba, Winbind.

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

  • Контроллер домена (DC1) на Windows Server 2019, домен SYSOS.LOCAL
  • Linux система (datastore1) на Debian 10 Buster

Подготовка системы

Перед началом выполнения ниже описанных действий обновляем систему до актуального состояния:

apt-get update && apt-get upgrade -y

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле (/etc/hostname):

datastore1.sysos.local

Так же файл (/etc/hosts) приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP:

127.0.0.1	localhost
127.0.1.1	datastore1.sysos.local datastore1

 

Настройка синхронизации времени

Если разница будет более 5 минут, то будет не возможно получить билет от Kerberos. Настраиваем синхронизацию времени с контроллером домена, выполняем установку NTP:

apt-get install ntp ntpdate

В файле конфигурации /etc/ntp.conf, добавляем в него информацию о вашем сервере времени (в моем случае указываю контролер домена):

# You do need to talk to an NTP server or two (or three).
server dc1.sysos.local

Перезапускаем службу времени:

/etc/init.d/ntp restart

 

Для единовременной синхронизации можно воспользоваться командой:

ntpdate dc1.sysos.local
Рекомендую ознакомится подробней о синхронизации времени на Linux системах можно почитать в этой статье и выполнить его настройку.

 

Настройка Kerberos

Установка пакетов для поддержки аутентификации Kerberos:

apt-get install krb5-user
В ходе установки может появится запрос указать область по-умолчанию для Kerberos, область необходимо его указать в заглавном виде (прим. SYSOS.LOCAL)

Файл конфигурации Kerberos (/etc/krb5.conf), приводим к виду:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = SYSOS.LOCAL
 dns_lookup_kdc = false
 dns_lookup_realm = false
 forwardable = true
 ticket_lifetime = 24h

[realms]
 SYSOS.LOCAL = {
 kdc = dc1.sysos.local
 default_domain = SYSOS.LOCAL
 admin_server = dc1.sysos.local
 }

[domain_realm]
 .sysos.local = SYSOS.LOCAL
 sysos.local = SYSOS.LOCAL
Соответственно подставляем название своего домена вместо sysos.local/SYSOS.LOCAL

Проверка работы Kerberos, выполним авторизацию в Active Directory (kinit jakonda@SYSOS.LOCAL):

kinit jakonda@SYSOS.LOCAL
Password for jakonda@SYSOS.LOCAL:
Обращаю внимание на строгость соблюдения синтаксиса команды, имя пользователя нужно указывать именно так — jakonda@SYSOS.LOCAL

Проверить можно получен ли билет или нет, можно командой (klist):

klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: jakonda@SYSOS.LOCAL

Valid starting     Expires            Service principal
10/27/21 11:24:00  10/27/21 21:24:00  krbtgt/SYSOS.LOCAL@SYSOS.LOCAL
        renew until 10/28/21 11:23:56

Все отлично, можно удалить полученный билет:

kdestroy

 

Установка\настройка Samba и вход в домен

Устанавливаем необходимые пакеты:

apt-get install samba cifs-utils winbind libnss-winbind libpam-winbind -y

Конфигурационный файл Samba (/etc/samba/smb.conf) приводим к виду:

[global]
#       ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ
        realm = SYSOS.LOCAL
        workgroup = SYSOS

        security = ads
        encrypt passwords = yes

        netbios name = datastore1
        server string = %h server

        domain master = no
        local master = no
        preferred master = no
        os level = 0
        domain logons = no

        dns proxy = no

        socket options = TCP_NODELAY

        unix charset = UTF-8
        dos charset = 866

#       Конфигурация для домена SYSOS.LOCAL и его пользователей и групп
        idmap config * :              backend = tdb
        idmap config * :              range   = 3000-7999
        idmap config SYSOS : backend = rid
        idmap config SYSOS : range   = 10000-999999

#       ПАРАМЕТРЫ WINBIND
        winbind enum users = yes
        winbind enum groups = yes
        winbind refresh tickets = yes
        winbind use default domain = yes
        winbind offline logon = yes
        winbind cache time = 300
        template shell = /bin/bash

#       ОТКЛЮЧЕНИЕ ПОДДЕРЖКИ СЕТЕВЫХ ПРИНТЕРОВ
        load printers = no
        show add printer wizard = no
        printcap name = /dev/null
        disable spoolss = yes

#       ПАРАМЕНТЫ ЛОГИРОВАНИЯ
        log level = 0 vfs:1
Обращаю внимание что в параметрах realm, workgroup указываем название своего домена. Подробное описание используемых параметров можно по этой ссылке. А так же в параметрах idmap config в место SYSOS, указываем свой домен.

Так как в Linux по-умолчанию установлен лимит на 1024 одновременно открытых файлов, а в Windows он 16384, поэтому увеличим лимит в Debian до значения 16384.

В файле (/etc/security/limits.conf) дописываем в самый конец строки:

*               -       nofile          16384
root            -       nofile          16384

Перезагружаем систему для применения изменений!.

Выполним проверку конфигурации на ошибки, командой:

testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

Проверка заданной конфигурации Samba правильная, ошибок и предупреждений нет, а поэтому можно вводить систему в домен, выполняем команду:

net ads join -U jakonda@sysos.local

Вывод об успешном присоединении к домену:

Enter jakonda@sysos.local's password:
Using short domain name -- SYSOS
Joined 'DATASTORE1' to dns domain 'sysos.local'

 

Настройка Winbind

Теперь чтобы мы могли видеть и использовать в системе Linux доменных пользователей и группы, то нам необходимо настроить winbind в файле (/etc/nsswitch.conf). К параметрам passwd, group добавляем параметр winbind:

# 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:         files winbind
group:          files winbind
shadow:         files
gshadow:        files

hosts:          files dns
networks:       files

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

netgroup:       nis

 

Перезапускаем службы Samba и Winbind для применения изменений:

/etc/init.d/smbd restart
/etc/init.d/winbind restart

 

Проверим, что Winbind установил доверительные отношения с Active Directory, выполним команду:

wbinfo -t

checking the trust secret for domain SYSOS via RPC calls succeeded

Для проверки видит ли Winbind пользователей и группы из Active Directory, выполним команды:

wbinfo -u
wbinfo -g

Если в ходе выполнения данных команд в консоль были выведены пользователи и группы из Active Directory, то это значит что Winbind работает правильно.

 

Авторизация в системе через пользователей домена

После проделанных выше операций, возможность входа в систему под доменной учетной записью будет возможна, но для того чтобы при входе в систему создавался домашний каталог для пользователя, необходимо в файле /etc/pam.d/common-session после строки session optional pam_systemd.so добавляем следующую строку:

session required        pam_mkhomedir.so umask=0022 skel=/etc/skel

В итоге файл должен получится следующий (без вывода комментариев):

session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required        pam_unix.so
session optional                        pam_winbind.so
session optional        pam_systemd.so
session required        pam_mkhomedir.so umask=0022 skel=/etc/skel

 

Для проверки что все правильно указали в файле можно выполнив команду — pam-auth-update и результат должен быть такой:

pam-auth-update: Local modifications to /etc/pam.d/common-*, not updating.
pam-auth-update: Run pam-auth-update --force to override.

В противном случае если что то не правильно указали, то вывод результата будет следующий. В этом случае еще раз проверяем файл /etc/pam.d/common-session на правильность его.

 

Для централизованного назначения определенным доменным пользователями возможность выполнения sudo (Административных действий в Linux-системе), создадим отдельный файл в котором укажем доменную группу безопасности в которую уже будут входить нужные пользователи.

Создаем файл /etc/sudoers.d/admins со следующим содержанием:

%ServerAdmins ALL=(ALL) ALL
ИНФОРМАЦИЯ: Обращая внимание что вместо ServerAdmins, указываем соответственно свою существующую группу безопасности.

Так же хочу заместить если ваша группа безопасности содержит пробелы, например — Domain admins, то указывать ее нужно в формате — %Domain\ admins

 

Если есть желание разрешить доступ к авторизации в систему только определенным доменным пользователям, то можно указать возможность авторизации на основе членства доменной группе безопасности. Для этого в файле конфигурации  /etc/pam.d/common-auth в строку описывающую вызов pam_winbind.so добавляем дополнительный параметр require_membership_of, в котором указываем имя доменной группы безопасности в формате SYSOS\ServerAdmins

auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=SYSOS\ServerAdmins

В итоге файл должен получится следующий (без вывода комментариев):

auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=SYSOS\ServerAdmins
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

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

16 + 2 =