Ubuntu

使用 kerberos 的 Ubuntu SSH 無密碼登錄

  • April 14, 2017

這讓我發瘋。我正在嘗試設置一個集成了 AD 的 Ubuntu 16.04 伺服器,以便在通過 SSH 登錄時接受 Kerberos 票證。我有一個 CentOS 7 伺服器,在加入 AD 域後可以毫無問題地接受票證,但我在 Ubuntu 伺服器上的配置並不正確。

這是設置:

  • Windows 2012 AD 域 (realdomain.tld)
  • Fedora 25 工作站 (wksf25.realdomain.tld)
  • CentOS 7 伺服器 (sc7.realdomain.tld)
  • Ubuntu 16.04 伺服器 (su16.realdomain.tld)

一切都通過領域加入了 AD,並且沒有問題。一切都可以在登錄或通過 kinit 時獲得 Kerberos 票證。從 wksf25 到 sc7 的 SSH 工作正常,我可以使用登錄 wkfs25 時獲得的 kerberos 票證通過 SSH 登錄。

以下是 Ubuntu 的設置步驟:

  1. 安裝軟體包:
apt install realmd oddjob oddjob-mkhomedir sssd sssd-tools adcli samba-common krb5-user chrony packagekit libpam-krb5
  1. 編輯chrony.conf以使用 AD DC。
  2. 設置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
  1. 加入域:realm join -vU domainuser realdomain.tld
  2. 允許登錄:realm permit -R realdomain.tld -g linuxadmins
  3. 特定於 Ubuntu - 設置 pam 以在登錄時創建主目錄:`vim /etc/pam.d/common-session'
session optional        pam_mkhomedir.so umask=0077
  1. 特定於 Ubuntu - 在 OpenSSH 中啟用 GSSAPI 身份驗證:vim /etc/ssh/sshd_config
GSSAPIAuthentiction yes
GSSAPICleanupCredentials no
  1. 使用域帳戶登錄並確保一切正常。此時一切正常,減去通過 Ubuntu 伺服器上的 Kerberos 票證進行的無密碼 SSH 登錄。

這是我從中得到的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加入 Ubuntu 上的 AD 域,而不是讓realm使用預設值。

SSSD 配置有一點我認為不相關的差異,但事實證明確實如此。

Ubuntu:realmd_tags = joined-with-adcli

中央作業系統:realmd_tags = joined-with-samba

為了從不同的角度來看待這個問題,我啟動了一個 OpenSUSE VM 並開始研究 SUSE 如何進行 AD 集成。當我在弄清楚 SUSE 是如何做事的時候,我遇到了一篇文章,它建議應該使用 Samba 加入 Windows Server 2012+ AD 而不是adcli. 1將其添加到上述配置的差異中,這就是發生了什麼的線索。

離開域並使用更新的realm命令重新加入解決了該問題,並且在最後一天一切都穩定了。

對於這兩種方法之間的差異,我沒有確切的根本原因,但這需要更多的研究,並且是另一天的鬥爭。

引用自:https://serverfault.com/questions/829996