命令扩展

命令扩展提供了一种额外的能力来配置 Neo4j,它允许您指定从外部文件获取值的脚本。这对于以下情况尤其有用:

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

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

工作原理

脚本在 neo4j.conf 文件中指定,前缀为 $,并在括号中包含要执行的脚本,即 dbms.setting=$(script_to_execute)
配置接受 Neo4j 服务器所有者和执行者可以在子进程中执行的任何命令。这也意味着,在 Neo4j 设置为服务的情况下,命令在服务内部执行。

一个通用示例如下:

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

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

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

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

脚本及其语法因操作系统而异。

启用

Neo4j 启动脚本和 neo4j 服务可以使用参数 --expand-commands 来扩展和执行外部命令。

bin/neo4j start --expand-commands

如果启动脚本没有收到 --expand-commands 参数,则配置文件中的命令将被视为无效设置。

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 (读取 ACL)

  • WRITE_ACL (写入 ACL)

  • DELETE (删除)

  • DELETE_CHILD (删除子项)

  • WRITE_OWNER (写入所有者)

  • SYNCHRONIZE (同步)

日志记录

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

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

错误处理

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

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

  • 值不正确的错误——返回的值与设置的预期值不符。在这种情况下,服务器不会启动。

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

© . All rights reserved.