命令扩展

命令扩展提供了一种额外的功能来配置 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 实例,并保存在运行实例的内存中。

您还可以使用curlhttps://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

  • WRITE_ACL

  • DELETE

  • DELETE_CHILD

  • WRITE_OWNER

  • SYNCHRONIZE

日志记录

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

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

错误处理

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

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

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

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