Samba4 в ролі AD + файловий сервер


1. Підготовка

 - server - 192.168.1.100, OS Debian stretch

 - client - 192.168.1.22, OS LinuxMint sylvia

 

2. Інсталяція необхідного ПО

 Перед інсталяцією бажано обновитись (сервер/клієнт):

  sudo aptitude update

  sudo aptitude upgrade

 

 - на сервер apt install samba krb5-config krb5-user nfs-kernel-server libpam-krb5 libpam-winbind libnss-winbind

 - на клієнті apt install samba krb5-config krb5-user nfs-common rpcbind winbind libpam-krb5 libpam-winbind libnss-winbind

 

 

3. Налаштування серверу

3.1. Налаштування автоматизації через протокол Kerberos. Необхідно буде відредактувати файл /etc/krb5.conf. Нижче приведений результат правок:

[libdefaults]

        default_realm = EXAMPLE.COM

        dns_lookup_realm = false

        dns_lookup_kdc = true

 

3.2. Далі приступаємо до налаштування Samba, нижче кінцевий варіант конфігураційного файлу etc/samba/smb.conf:

[global]

        # встановлюємо імена

        netbios name = NFS1

        realm = EXAMPLE.COM

        workgroup = EXAMPLE

       

        dns forwarder = 192.168.1.1

       

        # робимо сервер КД

        server role = active directory domain controller

       

        # встановлюємо мапинг користувачів з сервера

        idmap_ldb:use rfc2307 = yes

        idmap config * : backend = rid

        idmap config * : range = 10000 - 90000

        idmap config * : base_rid = 0

 

        vfs objects = acl_xattr

        map acl inherit = yes

        store dos attributes = yes

 

        domain logons = yes

        domain master = Yes

        os level = 255

        preferred master = yes

        security = user

        wins support = yes

 

[netlogon]

        path = /var/lib/samba/sysvol/skymaster.loc/scripts

        read only = No

 

[sysvol]

        path = /var/lib/samba/sysvol

        read only = No

 

3.3 Зразу налаштовуємо шаринг необхідних директорій, в нашому випадку будемо їх роздавати через NFS сервер, проводимо конфігурацію до наступного вигляду, правимо /etc/exports:

 

/media/SHAREHOME         192.168.1.0/24(rw,async,fsid=1,no_subtree_check,no_root_squash)

 

3.4 Досить важлива частина це DNS

правим файл /etc/resolv.conf:

 

search example.com

nameserver 127.0.0.1

 

і після перезапускаємо необхідні сервіси

 

/etc/init.d/samba restart

/etc/init.d/nfs-kernel-server restart

 

 

4. Client

4.1. Налаштування клієнта почнемо з DNS:

правим файл /etc/resolv.conf:

 

search example.com

nameserver 192.168.1.00

 

4.2. Налаштування авторизації через Kerberos

Почнемо з налаштування авторизації в домені через протокол Kerberos. Вам буде необхідно замінити файл /etc/krb5.conf. У загальному випадку він виглядає так:

 

[libdefaults]

        default_realm = nfs1

        krb4_config = /etc/krb.conf

        krb4_realms = /etc/krb.realms

        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]

        nfs1 = {

                kdc = nfs1

                admin_server = nfs1

        }

 

[domain_realm]

        .nfs1 = NFS1

        nfs1 = NFS1

 

[login]

        krb4_convert = true

        krb4_get_tickets = false

 

Вам, звичайно, необхідно змінити example.com на ваш домен и nfs1 на ваш доменконтроллер. Доречі, можливо вам знадобиться написати повне ім'я доменконтроллера nfs.example.com. Оскільки у мене прописаний домен пошуку в DNS, то мені це робити не потрібно.

 

Тепер настав час перевірити, що ми можемо авторизуватись в домені. Для цього виконайте команду

kinit username@EXAMPLE.COM

 

 Якщо ви не отримали ніяких помилок – означає що ви налаштували все вірно і домен відддає вам білет Kerberos. Доречі, деякі поширені помилки перераховані трохи нижче.

 

Переконатися в тому, що квиток отриманий, можна виконавши команду

klist

 

Видалити всі квитки (вони вам взагалі кажучи не потрібні) можна командою

kdestroy

 

Отже, будемо вважати, що авторизацію ви налаштували, пора налаштувати безпосередньо вхід в домен, про це після списку поширених помилок kinit.

Поширені помилки kinit

 

kinit(v5): Clock skew too great while getting initial credentials

Це означає, що у вашого компютера не синхронізований час з доменконтроллером (см. вище).

 

kinit(v5): Preauthentication failed while getting initial credentials

Ви ввели невірний пароль.

 

kinit(v5): KDC reply did not match expectations while getting initial credentials

Найдивніша помилка. Переконайтеся, що ім'я realm в krb5.conf, а так же домен в команді kinit введені великими літерами:

 

EXAMPLE.COM = {

# ...

 

kinit username@EXAMPLE.COM

 

kinit(v5): Client not found in Kerberos database while getting initial credentials

Вказаного користувача не існує в домені.

 

4.3. Налаштування Samba и вхід в домен

Для того, щоб увійти в домен, необхідно прописати правильні настройки в файлі

/etc/samba/smb.conf.

 

На даному етапі вас повинні цікавити тільки деякі опції з секції [global]. Нижче - приклад частини файлу конфігурації Samba з коментарями з приводу значення важливих параметрів:

 

[global]

   # Ці дві опції потрібно писати саме в заголовному регістрі, причому workgroup без

   # останньої секції після точки, а realm - повне ім'я домену

   workgroup = EXAMPLE

   realm = EXAMPLE.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

 

   # мапинг користувачів з AD

   idmap config * : backend = rid

   idmap config * : range = 10000 - 90000

   idmap config * : base_rid = 0

 

   winbind enum groups = yes

   winbind enum users = yes

 

   winbind use default domain = yes

   winbind nested groups = yes

 

   template shell = /bin/bash

   winbind refresh tickets = yes

 

Після того як вивідредактуєте smb.conf виконайте команду

testparm

 

Вона перевірить вашу конфігурацію на помилки і видасть сумарну зведення про нього:

 

# 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

 

Як видно ми задали правильні параметри для того, щоб наш комп'ютер став членом домену. Тепер пора спробувати безпосередньо увійти в домен. Для цього введіть команду:

net ads join -U Administrator -D EXAMPLE.COM

 

І в разі успіху ви побачите щось схоже на:

 

# net ads join -U Administrator -D EXAMPLE.COM

Enter username's password:

Using short domain name -- EXAMPLE.COM

Joined 'client120' to realm 'example.com'

 

Тепер перезапустіть демон Winbind і Samba в наступному порядку:

sudo /etc/init.d/winbind stop

sudo smbd restart

sudo /etc/init.d/winbind start

 

Після перезапуску перевірте, что Winbind встановив довірчі відносини з AD командою

# wbinfo -t

 

а також, що Winbind побачив користувачів і групи з AD, командами

wbinfo -u

wbinfo -g

 

 

Для того, щоб ваш клієнт прозоро працював з користувачами домену, зокрема, щоб ви могли призначати користувачів домену власниками папок і файлів, необхідно вказати клієнту використовувати Winbind як додаткове джерело інформації про користувачів і групи.

 

Для цього змініть два рядки у файлі  /etc/nsswitch.conf:

passwd:         compat

group:          compat

 

додавши до них в кінець winbind:

passwd:         compat winbind

group:          compat winbind

 

Тепер перевірте, що клієнт запитує у Winbind інформацію про користувачів і групи, виконавши

getent passwd

getent group

 

Перша команда повинна вам повернути весь вміст вашого файлу / etc / passwd, тобто ваших локальних користувачів, плюс користувачів домену з ID із заданого вами в smb.conf діапазону. Друга повинна зробити те ж саме для груп.

Тепер ви можете взяти будь-якого користувача домену та зробити його, наприклад, власником якого-небудь файлу.

 

4.4 Авторизація в клієнта через користувачів домену

Незважаючи на те, що всі користувачі домену фактично стали повноцінними користувачами системи (в чому можна переконатися, виконавши останні дві команди з попереднього розділу), зайти ні під ким з них в систему все ще не можна. Для включення можливості авторизації користувачів домену на комп'ютері з клієнта необхідно налаштувати PAM на роботу з Winbind.

 

cat /etc/pam.d/common-account

 

account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so

account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so

account requisite                       pam_deny.so

account required                        pam_permit.so

account required                        pam_krb5.so minimum_uid=1000

 

cat /etc/pam.d/common-auth

 

auth    [success=3 default=ignore]      pam_krb5.so minimum_uid=1000

auth    [success=2 default=ignore]      pam_unix.so nullok_secure try_first_pass

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

auth    requisite                       pam_deny.so

auth    required                        pam_permit.so

auth    optional        pam_mount.so

auth    optional        pam_ecryptfs.so unwrap

auth    optional                        pam_cap.so

 

cat /etc/pam.d/common-password

 

password        [success=3 default=ignore]      pam_krb5.so minimum_uid=1000

password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512

password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass

password        requisite                       pam_deny.so

password        required                        pam_permit.so

password        optional        pam_gnome_keyring.so

password        optional        pam_ecryptfs.so

 

cat /etc/pam.d/common-session

 

session [default=1]                     pam_permit.so

session requisite                       pam_deny.so

session required                        pam_permit.so

session optional                        pam_umask.so

session optional                        pam_krb5.so minimum_uid=1000

session required        pam_unix.so

session optional                        pam_winbind.so

session optional        pam_mount.so

session optional        pam_systemd.so

session optional        pam_ecryptfs.so unwrap

session optional                        pam_ck_connector.so nox11

session optional pam_mkhomedir.so skel=/etc/skel umask=077

 

4.5 Підключаємо розшарену папку для учоток, для цього в файл /etc/fstab додаємо рядок

192.168.1.100:/media/SHAREHOME /home/SHAREHOME nfs rw,rsize=32768,wsize=32768,hard,intr,ac,async,fsc,noatime,nolock,vers=3   0