認証できるKerberosレルムが2つあります。そのうちの1つは私が制御でき、もう1つは私の観点からは外部にあります。 LDAPに内部ユーザーデータベースもあります。レルムがINTERNAL.COMとEXTERNAL.COMであるとしましょう。 LDAPには、次のようなユーザーエントリがあります。
1054 uid=testuser,ou=People,dc=tml,dc=hut,dc=fi
shadowFlag: 0
shadowMin: -1
loginShell: /bin/bash
shadowInactive: -1
displayName: User Test
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uidNumber: 1059
shadowWarning: 14
uid: testuser
shadowMax: 99999
gidNumber: 1024
gecos: User Test
sn: Test
homeDirectory: /home/testuser
mail: [email protected]
givenName: User
shadowLastChange: 15504
shadowExpire: 15522
cn: User.Test
userPassword: {SASL}[email protected]
どういうわけか、私がやりたいのは、ユーザーが認証される認証サーバー/レルムのユーザーごとの基準を指定することです。複数のレルムを処理するようにKerberosを構成するのは簡単です。
しかし、一部のユーザーがINTERNAL.COMからのものであり、一部のユーザーがEXTERNAL.COMからのものであるという事実を処理するために、PAMなどの他のインスタンスを構成するにはどうすればよいですか?レルムと認証名がフェッチされる何らかのLDAPルックアップが必要であり、次に実際の認証自体が必要です。
この情報をLDAPに追加する、または検索するための標準化された方法はありますか?マルチレルムユーザーベースの他の回避策はありますか?ユーザーのユーザー名--realm-combinationを個別に指定できる限り、単一のレルムソリューションでも問題ない可能性があります。
最善のアプローチはsssd
を使用することだと思います。 sssdはドメインと呼ばれるものをサポートしているため、これにより最も柔軟性が高まります。新しいディストリビューションはすでにsssdを使用していることに注意してください。それは夢の実現であり、libpam_krb5.soとlibpam_ldap.soまたはそれらのいずれかを使用する言い訳はありません。
最も簡単なアプローチは、次のようなtgtsで移動する必要のあるレルムを選択するためにLDAPフィルターを使用することです。
最初に、適切なkdcに到達できるようにするために、外部レルムと内部レルムのメンバーを含む2つのセキュリティグループを作成します。
Sssdをセットアップし、そのドキュメントを確認します。このスニペットは、2つのドメインをセットアップする方法のスケッチです。
[domain/internal.com]
access_provider = ldap
id_provider = ldap
ldap_access_filter = memberOf=cn=allowedusersinternal,ou=Groups,dc=internal,dc=com
auth_provider = krb5
[domain/external.com]
access_provider = ldap
ldap_access_filter = memberOf=cn=allowedusersexternal,ou=Groups,dc=internal,dc=com
id_provider = ldap
auth_provider = krb5
次に、必要に応じて2つのレルムのKerberosを構成します(ただし、既に取得しています)。
探している設定は/etc/krb5.confにあり、[realms]タグの下に複数のレルムを格納できます。各レルムは独自のLDAPサーバーを指します。
[realms]
INTERNAL.COM = {
kdc = some.server.internal.com:88
admin_server = some.server.internal.com:749
default_domain = internal.com
}
EXTERNAL.COM = {
kdc = some.server.external.com:88
admin_server = some.server.external.com:749
default_domain = external.com
}
pam_ldap
sshパスワード/チャレンジレスポンスLDAPの例のエントリはすでに十分です。/etc/pam.d
ライブラリを使用するようにpam_ldap
内の適切なファイルを変更します。
セットアップ SASLパススルー認証 OpenLDAPサーバー上。
RHEL(CentOS):nss_ldap
Debian:libpam-ldap
Ubuntu:ldap-auth-client
krb5.confauth_to_local
はGSSAPIベースの認証で機能するはずです。
[レルム]
$ LOCALREALM = {
auth_to_local =ルール:[1:$ 1]
auth_to_local = DEFAULT
}
これは寛容すぎるかもしれません。
!pam_krb5alt_auth_map
は、OpenSSH will reject usernames that don't match local accounts
の前のman
ページから引用されているように機能しないはずです。
さまざまなドメインに対して認証するWindowsの方法は、ログイン名に加えてドメインを指定することです。それで、あなたが同じようなことをして、人々に[email protected]または[email protected]としてログインさせることは容認できますか?また、「user3」を使用するだけで、デフォルトのドメインにログインできます。
Pam_krb5(5)によると、これは可能です。
PAMに提供されたユーザー名に「@」が含まれ、Kerberosがユーザー名をプリンシパルとして扱い、ローカルアカウント名にマップできる場合、pam_authenticate()はPAMユーザーをそのローカルアカウント名に変更します。これにより、ユーザーはKerberosプリンシパルを使用してログインし、Kerberosにアカウントへのマッピングを実行させることができます。
残念ながら、それは続きます:
ただし、この機能はOpenSSHでは使用できないことに注意してください。 OpenSSHは、この再マッピングを実行する前に、ローカルアカウントと一致しないユーザー名を拒否し、無効なパスワードをPAMモジュールに渡します。また、pam_securettyなどの他のいくつかの一般的なPAMモジュールは、getpwnam()でユーザーを検索できることを期待しており、この機能が使用されている場合、pam_krb5の前に呼び出すことはできません。