SCROLL
Среднее время на прочтение: 4 мин.

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

Samba  — это программное обеспечение для организации обмена файлами и работы с общими ресурсами между компьютерами под управлением Linux/Unix и операционной системой Windows

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

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

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

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

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

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

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

/etc/hostname
datastore1.jakondo.local

Файл /etc/hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP.

/etc/hosts
127.0.0.1	localhost
192.168.1.10	datastore1.jakondo.local datastore1

Синхронизация времени

Для корректной аутентификации по протоколу Kerberos необходимо синхронизировать время сервера и клиента. Если системные часы расходятся более чем на 5 минут, то аутентификация не будет выполнена.

Установим NTP сервер и выполним синхронизацию времени с контроллером домена:

apt-get install ntp ntpdate -y

ntpdate dc1.jakonda.local
Более подробно о синхронизации времени на Debian можно почитать в этой статье

Настройка Kerberos

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

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

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

/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 = JAKONDO.LOCAL
 dns_lookup_kdc = false
 dns_lookup_realm = false
 forwardable = true
 ticket_lifetime = 24h

[realms]
 JAKONDO.LOCAL = {
 kdc = dc1.jakondo.local
 default_domain = JAKONDO.LOCAL
 admin_server = dc1.jakondo.local
 }

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

Проверка работы Kerberos, выполним авторизацию в Active Directory.

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

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

klist

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

Valid starting     Expires            Service principal
10/27/21 11:24:00  10/27/21 21:24:00  krbtgt/JAKONDO.LOCAL@JAKONDO.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 приводим к виду.

/etc/samba/smb.conf
[global]
#   ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ
    realm = JAKONDO.LOCAL
    workgroup = JAKONDO

    security = ads

    netbios name = datastore1
    server string = %h server

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

    dns proxy = no

    socket options = TCP_NODELAY

    unix charset = UTF-8
    dos charset = 866

#   Конфигурация для домена JAKONDO.LOCAL и его пользователей и групп
    idmap config * : backend = tdb
    idmap config * : range   = 3000-7999
    idmap config JAKONDO : backend = rid
    idmap config JAKONDO : 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 в место JAKONDO, указываем свой домен.

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

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@jakondo.local

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

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

Вывод из домена

На случай если нужно вывести машину из домена, то делается это командой:

net ads leave -U jakonda@jakondo.local

Настройка Winbind

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

/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:         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 добавить строку:

/etc/pam.d/common-session
session required        pam_mkhomedir.so umask=0022 skel=/etc/skel

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

/etc/pam.d/common-session
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

Права доступа

Если необходимо разрешить авторизацию в системе только определенным доменным пользователям, то это можно сделать путем ограничения права доступа на основе членства в доменной группе безопасности.

В файле конфигурации /etc/pam.d/common-auth в строке описывающую вызов pam_winbind.so добавляем дополнительный параметр require_membership_of, в котором указываем имя доменной группы безопасности в формате JAKONDO\LinuxAdmins

Так же хочу заместить если ваша группа безопасности содержит пробелы, например — Domain admins, то указывать ее нужно в формате — %Domain\admins
/etc/pam.d/common-auth
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=JAKONDO\LinuxAdmins

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

/etc/pam.d/common-auth
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=JAKONDO\LinuxAdmins
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

Делегирование SUDO

Если необходимо делегирование sudo для какой либо доменной группы безопасности (прим. LinuxAdmins), то необходимо создать файл /etc/sudoers.d/admins (где admins произвольное понятное название) в который прописать следующее:

/etc/sudoers.d/admins
%LinuxAdmins ALL=(ALL) ALL
 

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

Обсуждение

0 комментариев

Нет комментариев.