使用 kerberos 的 Ubuntu SSH 無密碼登錄
這讓我發瘋。我正在嘗試設置一個集成了 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 的設置步驟:
- 安裝軟體包:
apt install realmd oddjob oddjob-mkhomedir sssd sssd-tools adcli samba-common krb5-user chrony packagekit libpam-krb5
- 編輯
chrony.conf
以使用 AD DC。- 設置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
- 加入域:
realm join -vU domainuser realdomain.tld
- 允許登錄:
realm permit -R realdomain.tld -g linuxadmins
- 特定於 Ubuntu - 設置 pam 以在登錄時創建主目錄:`vim /etc/pam.d/common-session'
session optional pam_mkhomedir.so umask=0077
- 特定於 Ubuntu - 在 OpenSSH 中啟用 GSSAPI 身份驗證:
vim /etc/ssh/sshd_config
GSSAPIAuthentiction yes GSSAPICleanupCredentials no
- 使用域帳戶登錄並確保一切正常。此時一切正常,減去通過 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
命令重新加入解決了該問題,並且在最後一天一切都穩定了。對於這兩種方法之間的差異,我沒有確切的根本原因,但這需要更多的研究,並且是另一天的鬥爭。