web-dev-qa-db-ja.com

LDAPディレクトリからKerberosレルムを決定する方法は?

認証できる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を個別に指定できる限り、単一のレルムソリューションでも問題ない可能性があります。

2
tstm

最善のアプローチは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を構成します(ただし、既に取得しています)。

3
pfo

探している設定は/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
       }  
1
Flash

pam_ldap
sshパスワード/チャレンジレスポンスLDAPの例のエントリはすでに十分です。
/etc/pam.dライブラリを使用するようにpam_ldap内の適切なファイルを変更します。
セットアップ SASLパススルー認証 OpenLDAPサーバー上。
RHEL(CentOS):nss_ldap
Debian:libpam-ldap
Ubuntu:ldap-auth-client

krb5.conf
auth_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ページから引用されているように機能しないはずです。

1
84104

さまざまなドメインに対して認証する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の前に呼び出すことはできません。

0
chutz