(如果我的术语有误,请原谅,我对 LDAP 还很陌生)
我正在设置具有以下结构的本地 LDAP 服务器(Apache 目录服务器):
o={my organization name} [objectClass=organization]
ou=groups [objectClass=organizationalUnit]
cn=someGroup [objectClass=groupOfUniqueNames]
cn=otherGroup [objectClass=groupOfUniqueNames]
...
ou=users [objectClass=organizationalUnit]
cn=user1 [objectClass=inetOrgPerson]
cn=user2 [objectClass=inetOrgPerson]
cn=user3 [objectClass=inetOrgPerson]
...
我还设置了一些根据手册进行基本授权。
一切运行良好。
现在我有一个问题。我有另一台运行 Atlassian Crowd 的服务器需要访问此 LDAP,我想为该服务提供自己的 LDAP 授权条目,以划分访问权限。但这不是用户, 它是服务。
什么 objectClass 用于服务身份?
(作为 LDAP 新手,您如何发现 groupOfUniqueNames 用于组,inetOrgPerson 用于用户条目?这似乎是常态。)
答案1
什么 objectClass 用于服务身份?
真的,随你便吧。为了让 Crowd(或其他任何东西)进行身份验证,你需要在树中的某个地方有一个可分辨的名称,并且它需要有一个userPassword
属性。
如果您查看您的模式(如果您使用 OpenLDAP,通常是
/etc/openldap/schema
),您可以找到符合此条件的对象类。
最简单的可能是person
对象类,其定义如下所示:
objectclass ( 2.5.6.6 NAME 'person'
DESC 'RFC2256: a person'
SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
这表明它需要sn
和cn
属性,并且可能有一个userPassword
属性(以及其他一些属性)。因此,也许你会添加这样的条目:
dn: cn=crowd,ou=serviceAccounts, o=myOrganization
objectClass: person
cn: crowd
sn: Service Account
description: Service account for Crowd access to LDAP
userPassword: {SSHA}MZO/eoDUg/nFJDAZBvawCRYIxSeQUm3U
这假定您有一个serviceAccounts
OU,您将在其中放置此类东西,这可能是一个好主意(因为这将服务帐户与用户帐户明确分开)。
Crowd 将以 的身份进行身份验证
cn=crowd,ou=serviceAccountrs,o=myOrganization
,您需要配置 LDAP 目录以授予此 DN 适当的访问权限。
答案2
RFC 2256 / RFC 4519objectClass: applicationProcess
对此类事情提出建议:
“applicationProcess”对象类定义是表示在计算机系统中执行的应用程序的条目的基础。
相关属性:cn
(必需)、、、、seeAlso
和(ou
可选)。l
description
使用cn
而不是uid
RDN 的一个优点是,如果您使用类似ldap_filter: (uid=%U)
用户查找查询的内容,服务帐户就不会被错误地匹配为用户帐户。
答案3
我对服务帐户使用对象类account
(结构) 和simpleSecurityObject
(辅助)。这样,服务帐户就有uid
和userPassword
,在进行身份验证和授权时,这两个都是很好的。
dn: uid=kerberos,ou=services,dc=example,dc=com
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: kerberos
userPassword: {SSHA}xxxxxxxxxx