部署

官方的 Neo4j Kerberos 附加组件可用于为 Neo4j 添加 Kerberos 身份验证。该组件提供身份验证,且应配合其他提供程序(如 LDAP)用于授权。可在 Neo4j 下载站点 下载。

Neo4j Kerberos 附加组件 v4.0.0 与所有 Neo4j v4 和 Neo4j v5 版本兼容。

下面我们将逐步演示 Kerberos 附加组件的部署。整个过程包含若干步骤。

  • 为 Kerberos 配置 Neo4j

  • 生成 Kerberos keytab 文件

  • 配置 Kerberos 附加组件

有关文件位置,请参阅 操作手册 → 文件位置。本文档中的所有相对路径均相对于 neo4j-home 目录解析。

在示例中,我们使用 Windows 上的 Kerberos。假设使用 LDAP 进行授权,当前域(Windows 域)为 WINDOMAIN.LOCAL

为 Kerberos 配置 Neo4j

kerberos-add-on.jar 文件放入 plugins/ 目录。编辑 neo4j.conf 以将 Kerberos 附加组件启用为身份验证提供者。

示例 1. 配置 neo4j.conf
#For authentication with kerberos-add-on
dbms.security.authentication_providers=plugin-Neo4j-Kerberos
dbms.security.authorization_providers=ldap

#For authorization with LDAP
dbms.security.ldap.host=ad.windomain.local
dbms.security.ldap.authorization.use_system_account=true
dbms.security.ldap.authorization.system_username=CN=neo4jservice,OU=IT-Services,DC=windomain,DC=local
dbms.security.ldap.authorization.system_password=PASSWORD
dbms.security.ldap.authorization.user_search_base=CN=Users,DC=windomain,DC=local
dbms.security.ldap.authorization.user_search_filter=(&(objectClass=*)(SamAccountName={0}))
dbms.security.ldap.authorization.group_membership_attributes=memberOf
dbms.security.ldap.authorization.group_to_role_mapping= \
  "CN=Neo4j Read Only,CN=Users,DC=windomain,DC=local"      = reader; \
  "CN=Neo4j Read-Write,CN=Users,DC=windomain,DC=local"     = publisher; \
  "CN=Neo4j Schema Manager,CN=Users,DC=windomain,DC=local" = architect; \
  "CN=Neo4j Administrator,CN=Users,DC=windomain,DC=local"  = admin; \
  "CN=Neo4j Procedures,CN=Users,DC=windomain,DC=local"     = allowed_role

生成 Kerberos keytab 文件

在 KDC 中为 Neo4j 服务器创建一个服务用户。确保为该 Neo4j 服务用户生成 keytab 并放置在 conf 目录下。本示例中,我们将其命名为 neo4j.ktabkeytab 将被 Neo4j 使用。

配置 Kerberos 附加组件

如果你已经通过 Heimdal 或 MIT 工具 kinit 使用 Kerberos,则已有包含 KDC 访问信息的 krb5.conf 文件。若没有此文件或不想使用它,请在 conf 目录下创建新的 krb5.conf 文件。

示例 2. 配置 krb5.conf

本示例中,使用的 Realm 为 WINDOMAIN.LOCAL,KDC 和管理员服务器的 IP 地址为 192.168.38.2

请将其替换为实际的 Realm,以及 KDC 和管理员服务器的实际 IP 地址或域名。

[libdefaults]
	default_realm = WINDOMAIN.LOCAL

	default_tgs_enctypes = rc4-hmac rc4-hmac-exp aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96 des3-hmac-sha1
	default_tkt_enctypes = rc4-hmac rc4-hmac-exp aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96 des3-hmac-sha1
	permitted_enctypes = rc4-hmac rc4-hmac-exp aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96 des3-hmac-sha1

[realms]
	WINDOMAIN.LOCAL = {
		kdc = 192.168.38.2
		admin_server = 192.168.38.2
	}

[domain_realm]
	.windomain.local = WINDOMAIN.LOCAL
	windomain.local = WINDOMAIN.LOCAL

某些加密算法并非 Java 原生支持。使用更高级的加密算法(例如 ASE-256)时,请确保运行 Neo4j 的 Java 已启用 Java Cryptography Extension(JCE)扩展。

现在在 conf 目录下创建第二个文件 kerberos.confkeytab 设置指向上面创建的 keytab 文件;service.principal 设置为该 keytab 中的 principal;krb5.conf 设置指向 krb5.conf 文件(该文件已存在于现有 Kerberos 安装中,或在上一步创建)。再次请根据你的环境使用正确的值替换。

再次请根据你的环境使用正确的值替换。

示例 3. 配置 kerberos.conf
realm=WINDOMAIN.LOCAL
keytab=conf/neo4j.ktab
service.principal=neo4j/neo4j.windomain.local@WINDOMAIN.LOCAL
krb5.conf=conf/krb5.conf