SSO-подключение к серверу Ubuntu Server 14.04 LTS по протоколу SSH с помощью PuTTY с компьютера на базе Windows в домене Active Directory

imageПродолжая тему интеграции систем на базе Linux в доменную инфраструктуру Active Directory (AD), в этой заметке мы рассмотрим вопрос настройки Single sign-on (SSO) при подключении к Linux-серверу на базе Ubuntu Server 14.04 LTS по протоколу SSH с клиентских компьютеров под управлением Windows. Начнём с настроек на стороне Linux-сервера, который будет выступать в качестве сервера SSH на базе пакета OpenSSH (описание установки и базовой настройки рассмотрено ранее).

Для начала включим поддержку GSSAPI для службы сервера OpenSSH и пропишем ограничение по группам доступа:

sudo nano -Y sh /etc/ssh/sshd_config

Фрагмент изменённых и добавленных строк конфигурационного файла:

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

# User groups access contol
AllowGroups adm kom-srv-linux-administrators

Разрешённые группы нужно указывать через пробел. В списке могут фигурировать как локальные (для локальных пользователей) так и доменные (для доменных пользователей) группы доступа, при этом их названия должны быть указаны в нижнем регистре, так как их возвращает команда groups для текущего пользователя.

Для вступления изменений в силу перезапускаем службу сервера SSH:

sudo service ssh restart

***

Теперь нам нужно реализовать возможность для Kerberos-подсистемы представляться разным службам от имени принципала (SPN) HOST/{ServerFQDN}@{DomainFQDN}.
Посмотрим что возвращает команда:

sudo net ads keytab list
Warning: "kerberos method" must be set to a keytab method to use keytab functions.
Vno  Type                                     Principal
  3  des-cbc-crc                              HTTP/kom-ad01-squid.holding.com@HOLDING.COM
  3  des-cbc-md5                              HTTP/kom-ad01-squid.holding.com@HOLDING.COM
  3  arcfour-hmac-md5                         HTTP/kom-ad01-squid.holding.com@HOLDING.COM
  3  aes256-cts-hmac-sha1-96                  HTTP/kom-ad01-squid.holding.com@HOLDING.COM
  3  aes128-cts-hmac-sha1-96                  HTTP/kom-ad01-squid.holding.com@HOLDING.COM

Как видно, мы получаем список ключей, которые хранятся в keytab-файле указанном в параметре default_keytab_name конфигурационного файла /etc/krb5.conf, который мы задали ранее конфигурируя систему для Squid. Однако в силу того, что дополнительно мы создавали файл /etc/default/squid3 где прописали путь к keytab-файлу необходимому для Squid, мы смело можем отключить параметр default_keytab_name конфигурационного файла /etc/krb5.conf,
чтобы в системе по умолчанию использовался файл /etc/krb5.keytab. Итак, отредактируем файл krb5.conf:

sudo nano -Y sh /etc/krb5.conf

Закомментируем в нём ранее записанную нами строку:

#    default_keytab_name = /etc/squid3/PROXY.keytab

***

Добавляем в дефолтный keytab-файл (/etc/krb5.keytab) записи типа HOST/* с помощью команды: 

sudo net ads keytab add HOST/{ServerFQDN>}@{DomainFQDN} -U {domain_admin_login}

что в нашем случае будет выглядеть как: 

sudo net ads keytab add HOST/kom-ad01-gw10.holding.com@HOLDING.COM –U vasya-a

***

Отредактируем конфигурационный файл Samba4: 

sudo nano -Y sh /etc/samba/smb.conf

Добавим в него строчку: 

kerberos method  = secrets and keytab

***

Снова выполним команду вывода списка доступных SPN и убедимся в том, что выводятся данные файла /etc/krb5.keytab и в них есть записи вида HOST/{ServerFQDN}@{DomainFQDN} 

sudo net ads keytab list
Vno  Type                                      Principal
100014  des-cbc-crc                            HOST/kom-ad01-gw10.holding.com@HOLDING.COM
100014  des-cbc-md5                            HOST/kom-ad01-gw10.holding.com@HOLDING.COM
100014  aes256-cts-hmac-sha1-96                HOST/kom-ad01-gw10.holding.com@HOLDING.COM
100014  aes128-cts-hmac-sha1-96                HOST/kom-ad01-GW10.holding.com@HOLDING.COM
100014  arcfour-hmac-md5                       HOST/kom-ad01-GW10.holding.com@HOLDING.COM
100014  des-cbc-crc                            HOST/KOM-AD01-GW10@HOLDING.COM
100014  des-cbc-md5                            HOST/KOM-AD01-GW10@HOLDING.COM
100014  aes128-cts-hmac-sha1-96                HOST/KOM-AD01-GW10@HOLDING.COM
100014  aes256-cts-hmac-sha1-96                HOST/KOM-AD01-GW10@HOLDING.COM
100014  arcfour-hmac-md5                       HOST/KOM-AD01-GW10@HOLDING.COM

***

Переходим на компьютер под управлением Windows и настраиваем SSH-клиента PuTTY. В категории настроек Session в поле Host Name указываем FQDN имя Linux-сервера, так как оно зарегистрировано в DNS (то же имя, которое мы использовали при добавлении в keytab-файл).

image

В категории настроек Connection > Data включаем опцию Use system username, чтобы использовалось имя текущего пользователя Windows (будет указано в скобках):

image

В категории настроек Connection > Auth > GSSAPI включаем опции Attempt GSSAPI… и Allow GSSAPI

image

Пробуем выполнить подключение кнопкой Open.

Подключение должно пройти прозрачно без запроса ввода пароля в контексте пользователя, из под которого в данный момент запущен SSH-клиент PuTTY.

image

Как видим на скриншоте, пользователь Петя Резинкин (доменный логин petya), включенный в доменную группу безопасности KOM-SRV-Linux-Administrators успешно вошёл в систему без ввода пароля. В процессе первого входа для пользователя был успешно создан домашний каталог. Пользователь смог выполнить команду с повышением прав через sudo.

***

В случае если подключиться через SSН с помощью PuTTY без явного указания пароля не получается (выходит предложение ввести пароль) включаем расширенное логирование в конфигурационном файле sshd_config

sudo nano -Y sh /etc/ssh/sshd_config

Фрагмент файла отвечающий за функции логирования: 

# Logging
SyslogFacility AUTH
#LogLevel INFO
LogLevel DEBUG3

После сохранения файла перезапускаем службу сервера SSH и запускаем наблюдение за системным логом аутентификации: 

sudo service ssh restart
sudo tail -f /var/log/auth.log

***

Дополнительные источники информации:

Manual Pages OpenSSH - sshd_config

Всего комментариев: 3 Комментировать

  1. Александр /

    Спасибо за информацию.
    Все работает как и написано. За одним исключением. Клиенты SSH используя putty могут попадать на линукс-сервер используя GSSAPI, используя полученный билет kerberos при входе в домен. После установки соединения по SSH и вводе:
    klist
    выдается
    klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_16777216).
    Т.е. тикеты не форвардятся.
    Приходится использовать kinit.

    Если же авторизовываться вручную, используя доменные учетные данные, то klist отрабатывает:
    Ticket cache: FILE:/tmp/krb5cc_16777216_jKNXRw2313
    Default principalL user@ABC.DOMAIN.LOC

    Подскажите, в чем проблема? Необходимо чтобы пользователь нигде не вводил свой пароль, только единожды, при входе в домен на клиенте Windows.

  2. Александр /

    Разобрался. Для форварда тикетов необходимо на контроллере домена в свойствах учетной записи linux-компьютера включить галку "доверять компьютеру делегирование". После чего те windows-машины, которые уже имели билеты kerberos, должны выйти завершив сеанс и авторизоваться вновь. Теперь тикеты пробрасываются.

  3. Обратная ссылка: Подключение Debian GNU/Linux 8.6 к домену Active Directory с помощью SSSD и realmd | Блог IT-KB /

Добавить комментарий