Mengotentikasi Apache HTTPd terhadap beberapa server LDAP dengan akun yang kedaluwarsa

8

Kami menggunakan mod_authnz_ldap dan mod_authn_alias di Apache 2.2.9 (sebagaimana dikirimkan dalam Debian 5.0, 2.2.9-10 + lenny7) untuk mengautentikasi terhadap beberapa domain Direktori Aktif untuk hosting repositori Subversion. Konfigurasi kami saat ini adalah:

# Turn up logging
LogLevel debug

# Define authentication providers
<AuthnProviderAlias ldap alpha>
  AuthLDAPBindDN "CN=Subversion,OU=Service Accounts,O=Alpha"
  AuthLDAPBindPassword [[REDACTED]]
  AuthLDAPURL ldap://dc01.alpha:3268/?sAMAccountName?sub?
</AuthnProviderAlias>

<AuthnProviderAlias ldap beta>
  AuthLDAPBindDN "CN=LDAPAuth,OU=Service Accounts,O=Beta"
  AuthLDAPBindPassword [[REDACTED]]
  AuthLDAPURL ldap://ldap.beta:3268/?sAMAccountName?sub?
</AuthnProviderAlias>

# Subversion Repository
<Location /svn>
  DAV svn
  SVNPath /opt/svn/repo
  AuthName "Subversion"
  AuthType Basic
  AuthBasicProvider alpha beta
  AuthzLDAPAuthoritative off
  AuthzSVNAccessFile /opt/svn/authz
  require valid-user
</Location>

Kami menghadapi masalah dengan pengguna yang memiliki akun di Alpha dan Beta, terutama ketika akun mereka di Alpha sudah kadaluwarsa (tetapi masih ada; kebijakan perusahaan adalah bahwa akun akan hidup minimal 1 tahun). Misalnya, ketika pengguna x (yang memiliki akun kadaluarsa di Alpha, dan akun yang valid dalam Beta), log kesalahan Apache melaporkan yang berikut ini:

[Tue May 11 13:42:07 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14817] auth_ldap authenticate: using URL ldap://dc01.alpha:3268/?sAMAccountName?sub?
[Tue May 11 13:42:08 2010] [warn] [client 10.1.1.104] [14817] auth_ldap authenticate: user x authentication failed; URI /svn/ [ldap_simple_bind_s() to check user credentials failed][Invalid credentials]
[Tue May 11 13:42:08 2010] [error] [client 10.1.1.104] user x: authentication failure for "/svn/": Password Mismatch
[Tue May 11 13:42:08 2010] [debug] mod_deflate.c(615): [client 10.1.1.104] Zlib: Compressed 527 to 359 : URL /svn/

Mencoba untuk mengautentikasi sebagai pengguna yang tidak ada (nobodycool) menghasilkan perilaku yang benar dalam menanyakan kedua server LDAP:

[Tue May 11 13:42:40 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14815] auth_ldap authenticate: using URL ldap://dc01.alpha:3268/?sAMAccountName?sub?
[Tue May 11 13:42:40 2010] [warn] [client 10.1.1.104] [14815] auth_ldap authenticate: user nobodycool authentication failed; URI /svn/ [User not found][No such object]
[Tue May 11 13:42:40 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14815] auth_ldap authenticate: using URL ldap://ldap.beta:3268/?sAMAccountName?sub?
[Tue May 11 13:42:44 2010] [warn] [client 10.1.1.104] [14815] auth_ldap authenticate: user nobodycool authentication failed; URI /svn/ [User not found][No such object]
[Tue May 11 13:42:44 2010] [error] [client 10.1.1.104] user nobodycool not found: /svn/
[Tue May 11 13:42:44 2010] [debug] mod_deflate.c(615): [client 10.1.1.104] Zlib: Compressed 527 to 359 : URL /svn/

Bagaimana cara mengkonfigurasi Apache untuk meminta Beta dengan benar jika menemukan akun yang sudah kadaluwarsa di Alpha?

Brian Bassett
sumber

Jawaban:

4

The AuthzLDAPAuthoritative offdirektif akan membiarkan otentikasi jatuh melalui ke modul berikutnya hanya jika pengguna tidak dapat dicocokkan dengan DN dalam query. Saat ini meskipun pengguna kedaluwarsa, tampaknya akun mereka masih akan dikembalikan sebagai hasil ketika kueri LDAP dilakukan.

Saya tidak cukup tahu tentang skema ActiveDirectory LDAP untuk memberikan jawaban yang pasti di sini, tetapi jika Anda bisa menambahkan filter ke AuthLDAPURLarahan Anda yang memfilter keluar akun kadaluwarsa, itu akan mengakibatkan nama pengguna tidak cocok dengan DN mana pun dalam kueri. Ini akan menghasilkan otentikasi jatuh ke modul berikutnya.

Kamil Kisiel
sumber
1
Menambahkan filter berhasil. TI cukup baik untuk menempatkan string yang konsisten di bidang deskripsi pengguna yang dipindahkan dari Alpha ke Beta (inilah sebabnya akun-akun itu kedaluwarsa). URL berikut berfungsi dengan benar: AuthLDAPURL ldap: //dc01.alpha: 3268 /? SAMAccountName? Sub? (& (ObjectClass = pengguna) (! (Deskripsi = * pindah ke Beta *)))
Brian Bassett