Назад | Перейти на главную страницу

Беспарольный вход в Ubuntu SSH с использованием Kerberos

Это сводит меня с ума. Я пытаюсь настроить интегрированный в AD сервер Ubuntu 16.04 для приема билетов Kerberos при входе в систему через SSH. У меня есть сервер CentOS 7, который без проблем принимает билеты после присоединения к домену AD, но я не получил правильную конфигурацию на сервере Ubuntu.

Вот установка:

Все было подключено к AD через realm, и это работает без проблем. Все также получают билеты Kerberos при входе в систему или через kinit. SSHing с wksf25 на sc7 работает нормально, и я могу войти в систему через SSH, используя билет kerberos, который я получаю при входе в wkfs25.

Вот шаги настройки для Ubuntu:

  1. Установите пакеты:

    apt install realmd oddjob oddjob-mkhomedir sssd sssd-tools adcli samba-common krb5-user chrony packagekit libpam-krb5
    
  2. редактировать chrony.conf использовать AD DC.
  3. Настройте realmd.conf: vim /etc/realmd.conf

    [users]
    default-home = /home/%D/%U
    
    [realdomain.tld]
    fully-qualified-names = no
    manage-system = no
    automatic-id-mapping = yes
    
  4. Присоединяйтесь к домену: realm join -vU domainuser realdomain.tld

  5. Разрешить вход: realm permit -R realdomain.tld -g linuxadmins
  6. Специфика Ubuntu - настройка pam для создания домашнего каталога при входе в систему: `vim /etc/pam.d/common-session '

    session optional        pam_mkhomedir.so umask=0077
    
  7. Только для Ubuntu - включите аутентификацию GSSAPI в OpenSSH: vim /etc/ssh/sshd_config

    GSSAPIAuthentiction yes
    GSSAPICleanupCredentials no
    
  8. Войдите в систему с учетной записью домена и убедитесь, что все работает. На данный момент все работает, за исключением входа по SSH без пароля через билеты Kerberos на сервере Ubuntu.

Вот что я получаю от realm list:

realdomain.tld
  type: kerberos
  realm-name: REALDOMAIN.TLD
  domain-name: realdomain.tld
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
  login-formats: %U
  login-policy: allow-permitted-logins
  permitted-logins: 
  permitted-groups: linuxusers

sssd.conf:

[sssd]
domains = realdomain.tld
config_file_version = 2
services = nss, pam

[domain/realdomain.tld]
ad_domain = realdomain.tld
krb5_realm = REALDOAMIN.TLD
realmd_tags = joined-with-adcli 
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
access_provider = simple
simple_allow_groups = linuxusers

krb5.conf:

[libdefaults]
    dns_lookup_realm = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    default_ccache_name = KEYRING:persistent:%{uid}

    default_realm = REALDOMAIN.TLD

[realms]
    REALDOMAIN.TLD = {
    }

[domain_realm]
    realdomain.org = REALDOMAIN.TLD
    .realdomain.org = REALDOMAIN.TLD

Что мне не хватает?

Исправлена. realm join -vU domainuser --membership-software=samba --client-software=sssd realdomain.tld присоединиться к домену AD в Ubuntu, а не позволять realm используйте значения по умолчанию.

В конфигурациях SSSD было одно небольшое отличие, которое я не считал уместным, но оказалось, что оно имело место.

Ubuntu: realmd_tags = joined-with-adcli

CentOS: realmd_tags = joined-with-samba

Чтобы по-другому взглянуть на проблему, я создал виртуальную машину OpenSUSE и начал исследовать, как SUSE интегрирует их с AD. Пока я выяснял, как работает SUSE, я наткнулся на сообщение, в котором предлагалось использовать Samba для присоединения к Windows Server 2012+ AD вместо adcli.1 Добавьте это к разнице в конфигурациях выше, и это будет ключом к разгадке происходящего.

Выход из домена и повторное присоединение с обновленным realm команда исправила проблему, и в последний день все было стабильно.

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

У нас возникла аналогичная ситуация, совпадающая с добавлением сертификата SSL для поддержки LDAPS (хотя я никогда не отменял это изменение, чтобы определить, было ли оно причинным). Я не уверен, есть ли причина предпочесть adcli, но я нашел два исправленных варианта realm join пока все еще использую adcli (в Ubuntu 14.04 и 16.04):

Решение 1 (Ubuntu 16.04 или 14.04)

Добавьте две настройки в наш krb5.conf (ни один не помог):

[libdefaults]
    ...
    canonicalize = true
    rdns = false

Решение 2 (только Ubuntu 14.04)

Впоследствии я наткнулся на этот Проблема с git, предложившая другой вариант, который (сам по себе) также работает для нас 14.04:

[libdefaults]
    ...
    dns_canonicalize_hostname = false

FWIW

Фактически мы полностью контролируем наш DNS и не смогли найти никаких проблем в наших существующих записях - или каких-либо изменений, которые устраняли необходимость в них.