对于客户端设备上的 Kerberos 身份验证和 SASL/GSSAPI 授权,我需要在 Raspberry Pi 上运行 Debian/Raspbian Buster 的 OpenLDAP 服务器上进行代理授权。我尝试按照 OpenLDAP Software 2.4 管理员指南中的描述进行操作SASL 代理授权但无法使其工作。身份验证失败或未找到代理用户,授权失败。使用原始用户的身份验证没有问题:
ldap-server ~$ kinit ingo
Password for [email protected]:
ldap-server ~$ ldapwhoami
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 256
SASL data security layer installed.
dn:uid=ingo,ou=people,ou=home,dc=hoeft-online,dc=de
但是在设置代理授权时,我对源规则和目标规则以及放置属性的位置authzTo
以及authzFrom
启用代理授权的位置感到困惑。
有人可以给出一个简短的示例来说明如何使用 SASL/GSSAPI 身份验证在 LDAP 服务器上定义代理授权吗?
答案1
我在网上找不到关于此问题的示例,花了好几天才找到详细的信息。下面是我将其组合在一起的方法,以便其他人可以找到示例。
为了使用 SASL/GSSAPI 进行正确的代理授权(需要 Kerberos 身份验证),我们必须指定用作代理用户的 Kerberos 主体。然后,对于 ldap 服务器上的 SASL 身份验证,我们需要从 SASL 身份验证 dn 到 ldap 帐户的常规用户映射。现在我们可以设置代理授权。
创建 Kerberos 主体
我创造任何用户将其身份验证用作任何用户的代理。我需要它在客户端设备上进行 GSSAPI 身份验证。
~$ kadmin -p somebody/admin addprinc -policy user anyuser
身份验证映射
这是常见的专有名称 (dn) 映射,如 OpenLDAP 软件 2.4 管理员指南中所述映射身份验证身份。
~$ 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: [email protected]
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 服务器上启用它。我只想使用授权属性。有关可能的设置,请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
现在我创建一个任何用户posix 帐户用作代理。要设置authzTo
属性,请查看映射身份验证身份。
~$ 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: [email protected]
SASL SSF: 256
SASL data security layer installed.
dn:uid=ingo,ou=people,ou=home,dc=hoeft-online,dc=de
另请注意代理授权规则:
源规则非常强大。如果普通用户有权在自己的条目中写入 authzTo 属性,那么他们就可以编写允许他们以任何其他人的身份进行授权的规则。因此,在使用源规则时,应使用 ACL 保护 authzTo 属性,仅允许特权用户设置其值。