命令扩展

命令扩展提供了一项额外的 Neo4j 配置功能,允许您指定脚本来设置源自外部文件的值。这在以下场景中特别有用:

  • 避免在 neo4j.conf 文件中以明文形式设置敏感信息,例如用户名、密码、密钥等。

  • 处理文件系统不可访问的环境中运行的实例的配置设置。

工作原理

脚本在 neo4j.conf 文件中通过 $ 前缀指定,并在括号 () 内包含要执行的脚本,例如 dbms.setting=$(script_to_execute)
该配置接受任何可由拥有并执行 Neo4j 服务器的用户在子进程中执行的命令。这也意味着,如果 Neo4j 设置为服务运行,这些命令将在服务内部执行。

一个通用的示例如下:

neo4j.configuration.example=$(/bin/bash echo "expanded value")

当在服务器启动并启用命令扩展的情况下在 neo4j.conf 文件中提供此类配置时,Neo4j 会在实例化自身之前评估脚本并检索配置设置的值。这些值随后会被传递给正在启动的 Neo4j 实例,并保存在运行中实例的内存中。

您还可以使用 curl (https://curl.se/docs/manpage.html) 命令来获取配置设置的令牌或值。例如,您可以通过将 neo4j.conf 文件中的任何敏感信息替换为某种提供程序的安全引用,从而应用更高级别的安全性。

脚本由 Neo4j 进程运行,并预期在合理时间内以代码 0 退出。脚本的输出应为设置所需的有效类型。否则,Neo4j 将无法启动。

不同操作系统下的脚本及其语法有所不同。

启用

要启用命令扩展,必须将 --expand-commands 参数添加到 Neo4j 启动脚本或 neo4j.service 文件中。

启用命令扩展启动 Neo4j

要通过启用命令扩展来启动 Neo4j,可以使用以下命令:

bin/neo4j start --expand-commands

在作为服务的 Neo4j 中启用命令扩展

如果您将 Neo4j 作为服务使用,可以通过将 --expand-commands 参数添加到 /etc/systemd/system/neo4j.service 文件来启用命令扩展。否则,配置文件中的命令将被视为无效设置。

您还必须在 /etc/systemd/system/neo4j.service[Service] 部分下添加 Type=forking,以允许命令扩展。

[Service]
Type=forking

安全检查

Neo4j 会对 neo4j.conf 文件执行以下基本安全检查。如果检查失败,Neo4j 将不会评估 neo4j.conf 中的脚本命令,且 Neo4j 进程不会启动。

在 Unix 上(包括 Linux 和 Mac OS)
  • neo4j.confneo4j-admin.conf 文件最多只能由其所有者读取或写入,并可由所有者所属的用户组读取。neo4j-admin.conf 是与 neo4j.conf 位于同一目录下的配置文件。您可以使用 neo4j-admin.conf 文件来提供特定于管理任务的设置。

  • Neo4j 进程必须以 neo4j.conf 文件的所有者身份,或以拥有 neo4j.conf 文件的用户组中的用户身份运行。

允许的最宽松权限的 Linux 权限位掩码是 640。也允许更严格的 Linux 权限。例如,neo4j.conf 文件可以没有任何组权限,仅能由其所有者读取(位掩码 400)。

在 Windows 上
  • neo4j.confneo4j-admin.conf 文件必须仅能由所有者读取/修改,但不能执行。

所有者可能拥有来自访问控制列表 (ACL) 的以下权限:

  • READ_DATA

  • WRITE_DATA

  • APPEND_DATA

  • READ_ATTRIBUTES

  • WRITE_ATTRIBUTES

  • READ_NAMED_ATTRS

  • WRITE_NAMED_ATTRS

  • READ_ACL

  • WRITE_ACL

  • DELETE

  • DELETE_CHILD

  • WRITE_OWNER

  • SYNCHRONIZE

日志记录

脚本的执行会记录在 neo4j.log 中。对于每个需要执行外部命令的设置,Neo4j 都会向日志文件中添加一条包含相关信息的条目,例如:

… Executing the external script to retrieve the value of <setting>...

错误处理

脚本执行可能会产生两种类型的错误:

  • 执行期间的错误 —— 这些错误会在 debug.log 中报告,并附带外部执行返回的代码。在这种情况下,执行停止,服务器无法启动。

  • 值不正确的错误 —— 返回的值不是该设置所期望的值。在这种情况下,服务器无法启动。

有关更多信息,请参阅 退出代码