如何在 Debian 上使用 OpenLDAP 伺服器設置 SASL 代理授權
對於 Kerberos 身份驗證以及客戶端設備上的 SASL/GSSAPI 授權,我需要在具有 Debian/Raspbian Buster 的 Raspberry Pi 上執行的 OpenLDAP 伺服器上進行代理授權。我嘗試按照 OpenLDAP Software 2.4 Administrator’s Guide 中有關SASL 代理授權的說明進行操作,但無法使其正常工作。身份驗證失敗或未找到代理使用者且授權失敗。使用原始使用者進行身份驗證沒有問題:
ldap-server ~$ kinit ingo Password for ingo@HOME.HOEFT-ONLINE.DE: ldap-server ~$ ldapwhoami SASL/GSSAPI authentication started SASL username: ingo@HOME.HOEFT-ONLINE.DE SASL SSF: 256 SASL data security layer installed. dn:uid=ingo,ou=people,ou=home,dc=hoeft-online,dc=de
但是在設置代理授權時,我對源規則和目標規則以及放置屬性的位置
authzTo
以及authzFrom
啟用proxyAuth的位置感到困惑。有人可以舉一個簡短的例子,如何使用 SASL/GSSAPI 身份驗證在 LDAP 伺服器上定義代理授權?
我無法在網上找到關於此的範例,我花了幾天時間才了解廣泛的細節。這是我將它組合在一起的方法,以便其他人現在可以找到一個範例。
對於需要 Kerberos 身份驗證的 SASL/GSSAPI 的正確代理授權,我們必須指定用作代理使用者的 Kerberos 主體。然後對於 ldap 伺服器上的 SASL 身份驗證,我們需要從 SASL auth dn 到 ldap 帳戶的常用使用者映射。現在我們可以設置代理授權了。
創建 Kerberos 主體
我創建anyuser以將其身份驗證用作任何使用者的代理。我需要它在客戶端設備上進行 GSSAPI 身份驗證。
~$ kadmin -p somebody/admin addprinc -policy user anyuser
身份驗證映射
這是 OpenLDAP Software 2.4 Administrator’s Guide about Mapping Authentication Identities中描述的常用專有名稱 (dn) 映射。
~$ cat > /tmp/in.ldif <<EOF dn: cn=config changetype: modify add: olcAuthzRegexp olcAuthzRegexp: {0}uid=([^,]*),cn=gssapi,cn=auth uid=\$1,ou=people,ou=home,dc=hoeft-online,dc=de - add: olcAuthzRegexp olcAuthzRegexp: {1}uid=([^,]*),cn=home.hoeft-online.de,cn=gssapi,cn=auth uid=\$1,ou=people,ou=home,dc=hoeft-online,dc=de EOF ~$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/in.ldif
使用以下命令測試映射:
~$ kinit ingo ~$ ldapwhoami -Y GSSAPI -v ldap_initialize( <DEFAULT> ) SASL/GSSAPI authentication started SASL username: ingo@HOME.HOEFT-ONLINE.DE SASL SSF: 256 SASL data security layer installed. dn:uid=ingo,ou=people,ou=home,dc=hoeft-online,dc=de Result: Success (0)
設置SASL 代理授權
預設情況下禁用代理授權。所以首先我們必須在 ldap 伺服器上啟用它。我只想使用authzTo屬性。對於可能的設置,請
man slapd-config
查看olcAuthzPolicy
.~$ cat > /tmp/in.ldif <<EOF dn: cn=config changetype: modify add: olcAuthzPolicy olcAuthzPolicy: to EOF ~$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/in.ldif # For this modify is a restart needed ~$ sudo systemctl restart slapd.service
現在我創建一個用作代理的**anyuser posix 帳戶。**要設置
authzTo
屬性,請查看Mapping Authentication Identities。~$ cat > /tmp/in.ldif <<EOF dn: cn=anyuser,ou=group,ou=home,dc=hoeft-online,dc=de objectClass: top objectClass: posixGroup cn: anyuser gidNumber: 1001 dn: uid=anyuser,ou=people,ou=home,dc=hoeft-online,dc=de objectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount uid: anyuser uidNumber: 1001 gidNumber: 1001 cn: any sn: user loginShell: /usr/sbin/nologin homeDirectory: /nonexistent authzTo: dn.regex:^uid=[^,]*,ou=people,ou=home,dc=hoeft-online,dc=de$ EOF ~$ sudo slapadd -l /tmp/in.ldif
現在您可以使用以下命令測試代理授權:
~$ kinit -p ingo ~$ ldapwhoami -Y GSSAPI -D "uid=anyuser,ou=people,ou=home,dc=hoeft-online,dc=de" SASL/GSSAPI authentication started SASL username: ingo@HOME.HOEFT-ONLINE.DE SASL SSF: 256 SASL data security layer installed. dn:uid=ingo,ou=people,ou=home,dc=hoeft-online,dc=de
另請注意代理授權規則:
源規則非常強大。如果普通使用者有權在他們自己的條目中寫入 authzTo 屬性,那麼他們可以編寫允許他們像其他任何人一樣授權的規則。因此,在使用源規則時,authzTo 屬性應使用僅允許特權使用者設置其值的 ACL 進行保護。