
Kerberos と Ubuntu 20.04 で問題が発生しています。FreeIPA
サーバーを実行していますが、Centos マシンでは動作するため、クライアントの問題だと思います。
大きな目標は、複数のサービスに対して SSO システムを構築することです。ほとんどは意図したとおりに動作しますが、1 つだけうまくいきません。automount
/autofs に Kerberos の設定を受け入れてもらうことです。1 つの大きな問題は、autofs が環境変数を読み取れないことですKRB5CCNAME
。常に libdefault を使用しますが、Ubuntu もそうしていれば問題ありません。しかし、何らかの理由で、Ubuntu はサインオン時に KRB5CCNAME 環境変数を正しく設定せず、常に をデフォルトとしますFILE:/tmp/krb5cc_\<UID>_\<VALUE>
。
キーリングを使用したいので、krb5.conf の libdefaults セクションに記述しましたdefault_ccache_name = KEYRING:persistent:%{uid}
。KRB5CCNAME を手動で設定すると、すべて問題なく、automount は samba ドライブに接続します。
しかし、変数に何を含めるかをシステムに決定させると、常に次の結果になります。FILE:...
私のクライアントの krb5.conf は次のようになります。
includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
rdns = false
dns_canonicalize_hostname = false
ticket_lifetime = 24h
forwardable = true
udp_preference_limit = 0
default_ccache_name = KEYRING:persistent:%{uid}
ccache_type = 4
[realms]
EXAMPLE.COM = {
kdc = ipa.example.com:80
master_kdc = ipa.example.com:88
admin_server = ipa.example.com:749
kpasswd_server = ipa.example.com:464
default_domain = example.com
pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
}
[domain_realm]
.example.com = <EXAMPLE.COM>
example.com = <EXAMPLE.COM>
client.example.com = <EXAMPLE.COM>
SSSD 構成:
[domain/example.com]
debug_level=10
cache_credentials = True
krb5_store_password_if_offline = True
ipa_domain = EXAMPLE.COM
id_provider = ipa
auth_provider = ipa
access_provider = ipa
ipa_hostname = client.example.com
chpass_provider = ipa
ipa_server = _srv_, ipa.example.com
ldap_tls_cacert = /etc/ipa/ca.crt
ldap_search_base = cn=accounts,dc=example,dc=com
krb5_ccname_template = KEYRING:persistent:%U
[sssd]
services = nss, sudo, pam, ssh
config_file_version = 2
domains = example.com
debug_level=10
[nss]
override_shell = /bin/bash
[pam]
offline_credentials_expiration = 60
debug_level=10
[domain/default]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
ldap_access_filter = (objectClass=posixAccount)
debug_level=10
[ssh]
[sudo]
何か案は?
答え1
常にデフォルト
FILE:/tmp/krb5cc_<UID>_<VALUE>
KRB5CCNAMEがランダムなサフィックスを持つキャッシュを指している場合、これは何らかのソフトウェアが明示的に分離されたキャッシュを設定することを決定したことを示します。の代わりにデフォルトを使用します。
(デフォルト値はKRB5CCNAMEにはまったく設定されていません。その目的は、環境変数が欠席ださらに、従来のデフォルト パスを使用した場合、実際にはFILE:/tmp/krb5cc_<UID>
最後に追加のランダム値なしで が取得されます。
リポジトリから freeipa-client パッケージを使用してすべてをインストールしました。pam_krb5 がインストールされ、common-password、-account、-session(-interactive)、-auth で使用されました。sss は common-password、-account、-session、-auth、および一部の .pam-olds で使用されます。
問題は、パスワードが 2 つの独立したモジュールによって Kerberos に対して検証されることです。1 つは pam_sss (SSSD)、もう 1 つは pam_krb5 です。どちらもセッションごとに一意のキャッシュを使用し、どちらも KRB5CCNAME をそのような一時的なファイルベースのキャッシュ パスに設定します。
理想的には、pam_krb5 はまったく使用しないでください。同じタスクは、FreeIPA 統合の一部として SSSD によってすでに実行されています。同じセクションで pam_sss がすでに呼び出されている場合は、すべての PAM 構成で pam_krb5 を無効にすることを検討してください。
それが不可能な場合は、pam_krb5 にはセッションごとのキャッシュ テンプレート用の独自のパラメーターがあり、これを次のように設定できます/etc/krb5.conf
(または PAM 構成内で直接設定できますが、それほど便利ではありません)。
Russ Allbery の pam_krb5 (Debian/Ubuntu/Arch で使用):
[appdefaults] pam = { ccache = KEYRING:persistent:%u }
Fedora の pam_krb5:
[appdefaults] pam = { ccname_template = KEYRING:persistent:%U }
最後に、GSSAPI認証と委任が有効になっているサーバーにssh接続する場合(たとえば、を使用してssh -K
)、sshd自体委任された TGT をセッションごとに一意のキャッシュに保存します。この動作は sshd にハードコードされており、変更できません。