Была необходимость ввести в домен Windows машину с Ubuntu. Для этих целей обычно используют Samba и Winbind. Но возможен альтернативный вариант с sssd, краткое руководство по нему ниже.

Для примера будем использовать:

Домен = contoso.com
Контроллер домена = dc.contoso.com

Запускаем терминал Ubuntu:

1. Переключаемся под рута

sudo -i

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

apt install sssd heimdal-clients msktutil

3. Редактируем /etc/krb5.conf, в качестве отступов используется табуляция

[libdefaults]
	default_realm = CONTOSO.COM

[realms]
	CONTOSO.COM = {
		kdc = DC 
		admin_server = dc.contoso.com
		default_domain = contoso.com
	}

[login]
	krb4_convert = true
	krb4_get_tickets = false
	
[domain_realm]
        .contoso.com = CONTOSO.COM
        contoso.com = CONTOSO.COM

4. Редактируем файл /etc/hosts, указываем FQDN для данного хоста:

127.0.0.1       localhost
127.0.1.1       <hostname>.contoso.com  <hostname>

5. Пробуем получить Kerberos ticket от имени администратора домена:

root@ubuntu:~# kinit YourDomainAdmin
YourDomainAdmin@CONTOSO.COM's Password:

Проверяем:

root@ubuntu:~# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: YourDomainAdmin@CONTOSO.COM

  Issued                Expires               Principal
Dec  1 15:08:27 2018  Dec  2 01:08:22 2018  krbtgt/CONTOSO.COM@CONTOSO.COM

Если тикет получен успешно, то теперь можно сгенерировать Kerberos principals для данного хоста, регистр важен:

msktutil -c -b 'CN=YourComputersOU' -s HOST/HOSTNAME.contoso.com -k /etc/sssd/HOSTNAME.keytab --computer-name HOSTNAME --upn HOSTNAME$ --server dc.contoso.com —user-creds-only

msktutil -c -b 'CN=YourComputersOU' -s HOST/HOSTNAME -k /etc/sssd/HOSTNAME.keytab --computer-name HOSTNAME --upn HOSTNAME$ --server dc.contoso.com --user-creds-only

Сейчас наш хост должен отобразиться в списке компьютеров в каталоге. Если все так — удаляем полученный Kerberos ticket:

kdestroy

6. Создаем файл /etc/sssd/sssd.conf со следующим содержимым:

[sssd]

services = nss, pam
config_file_version = 2
domains = contoso.com


[nss]

entry_negative_timeout = 0
debug_level = 3


[pam]

debug_level = 3


[domain/contoso.com]

debug_level = 3

ad_domain = contoso.com
ad_server = dc.contoso.com
enumerate = false

id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = simple
simple_allow_groups = users #каким группам разрешено логиниться, через запятую. Есть ограничение — названия групп должны быть с маленькой буквы.
ldap_schema = ad
ldap_id_mapping = true
fallback_homedir = /home/%u
default_shell = /bin/bash
ldap_sasl_mech = gssapi
ldap_sasl_authid = <HOSTNAME>$
ldap_krb5_init_creds = true
krb5_keytab = /etc/sssd/<HOSTNAME>.keytab

Описание параметров конфигфайла sssd можно посмотреть тут

Устанавливаем права доступа для файла sssd.conf:

chmod 600 /etc/sssd/sssd.conf

Перезапускаем SSSD service

service sssd restart

7. Редактируем настройки PAM

Плохое решение:

редактируем файл /etc/pam.d/common-session, после строки

session required        pam_unix.so

добавляем строку

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

Хорошее решение:

переопределить параметры через системные настройки PAM, вызываем

pam-auth-update

и отмечаем пункты sss auth и makehomdir. Это автоматически добавит
строчку выше в common-session и она не будет перезатерта при обновлении системы.

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

P.S.: Можно дать права на использование sudo доменным группам. Используя visudo, редактируем файл /etc/sudoers, или лучше, как рекомендует maxzhurkin и iluvar, создаем новый файл в /etc/sudoers.d/ и редактируем его

visudo -f /etc/sudoers.d/ваш_файл

добавляем требуемую группу — например, Domain Admins (если в названии группы есть пробелы — их необходимо экранировать):

%Domain\ Admins ALL=(ALL) ALL

Комментарии (17)


  1. leschenko
    26.01.2019 21:55

    Скажите, а с какой практической целью вы добавляете Linux машины в AD?
    Групповых политик нет — т.е. управлять данной машиной на ровне с Windows не получится.
    Аутентификация на самой машине — ну Ok. Можете ли вы прозрачно аутентифицироваться на других машинах (на самом деле не знаю и хочу узнать)? Имеете ли доступ к DFS?


    1. bordakovsky
      26.01.2019 10:47

      На других… Если вы имеете в виду Linux машины которые в домене, то да. Можно ходить прозрачно, но надо покрутить параметр GSSAPI.


    1. WicRus
      26.01.2019 11:02

      У нас на работе применяют для того, чтобы не вводить пароль для расшаренных папок. Ссылки вида smb://filesrap при наличии у пользователя необходимых прав открываются сразу.


    1. splinehip Автор
      26.01.2019 11:56

      Да, основная цель — аутентификация пользователей на машине. При логине пользователя, в отличии от Windows, для него не генерируется Kerberos tiket, и я не знаю, есть ли дополнительный механизм для этого, поэтому у пользователя прозрачного доступа к общим файловым ресурсам домена не будет. Возможно, такой доступ можно реализовать с помощью дополнительной настройки, но так как задачи такой не было, я данным вопросом не занимался.
      PS Проще прощения, не обновил страницу — не видел, что выше уже ответили.


  1. MinamotoSoft
    26.01.2019 01:29
    -1

    Как все интуитивно-понятно и это при том, что в SUSE — ввод машины в домен существует «исскаропки» уже лет 10-15.
    (у вас в начале текста contoso.com потом contoso.domain)


    1. splinehip Автор
      26.01.2019 12:03

      (у вас в начале текста contoso.com потом contoso.domain)

      Спасибо, исправил.


  1. bordakovsky
    26.01.2019 10:39

    Для того что бы sudo работало корректно нужно добавить
    [sssd]
    services = nss, pam, sudo

    у меня на CentOS так


    1. splinehip Автор
      26.01.2019 12:02

      Про CentOS не могу комментировать — не знаю, но в Ubuntu c 16.04 и выше корректно работает без указания sudo.


  1. Mantikor
    26.01.2019 10:41

    Название не совсем корректное. Для rhel based дистрибутивов все делается куда проще, через authconfig.


    1. splinehip Автор
      26.01.2019 12:00

      Не имел опыта работы с rhel based дистрибутивами, не могу ничего сказать. Исходя из того, что sssd — это продукт red hat, то вполне логично, что у них есть дополнительный инструмент для настройки.


  1. iluvar
    26.01.2019 12:18

    Редактируем файл /etc/sudoers


    Лучше добавить — «используя visudo»


    1. splinehip Автор
      26.01.2019 18:19
      +1

      Согласен, добавил.


    1. maxzhurkin
      27.01.2019 21:49

      А еще лучше создать новый файл в /etc/sudoers.d/ и ничего не править кроме этого файла


      1. iluvar
        27.01.2019 21:54

        Файлы в /etc/sudoers.d/ правятся по тем же правилам, что и /etc/sudoers:

        visudo -f /etc/sudoers.d/ваш_файл


        Просто так править файлы в /etc/sudoers.d/ не стоит


        1. maxzhurkin
          27.01.2019 21:58

          А я и не говорил о правке существующих файлов — только о создании новых


  1. sub31
    27.01.2019 11:53

    Спасибо за интересное описание.
    Меня сейчас интересует авторизация с использованием AD учетных данных в CentOS 6.10. Так как там пока отсутствует realmd.
    Возможна ли замена heimdal-client на пакет krb5-workstation?


    1. splinehip Автор
      27.01.2019 22:47

      Точно не могу сказать, не работал с CentOS. Судя по описанию krb5-workstation, основной функционал в нем реализован (kinit, klist, kdestroy, kpasswd), так что возможно будет работать — нужно пробовать.