知识库

在 Windows 上使用命令扩展的示例

命令扩展功能是在Neo4j 4.2中引入的安全功能,用于避免在neo4j.conf文件中以纯文本形式写入配置参数。

这些命令在子进程中由拥有并执行 Neo4j 服务器的用户执行。因此,根据定义,只有运行 Neo4j 进程/服务的用户才能使用此功能。

命令扩展对分配给neo4j.conf文件的权限非常敏感。如果权限设置不当,则 Neo4j 无法启动并显示类似以下的错误消息

Exception in thread "main" java.lang.IllegalArgumentException:
<NEO4J_HOME>/conf/neo4j.conf does not have the correct file permissions to evaluate commands.
Has [OWNER_READ, OWNER_WRITE, OTHERS_READ, GROUP_READ], requires at most [OWNER_READ, OWNER_WRITE].
        at org.neo4j.configuration.Config$Builder.validateFilePermissionForCommandExpansion(Config.java:314)
        at org.neo4j.configuration.Config$Builder.build(Config.java:287)
        at org.neo4j.server.NeoBootstrapper.start(NeoBootstrapper.java:110)
        at org.neo4j.server.NeoBootstrapper.start(NeoBootstrapper.java:90)
        at com.neo4j.server.enterprise.EnterpriseEntryPoint.main(EnterpriseEntryPoint.java:25)
2021-03-03 16:56:23.880+0000 INFO  [c.n.s.e.EnterpriseBootstrapper] Neo4j Server shutdown initiated by request
2021-03-03 16:56:23.891+0000 INFO  [c.n.s.e.EnterpriseBootstrapper] Stopped.

这就是本文存在的必要性!

此外,Neo4j 文档提供了基于 Linux 的安装示例,因此这里有一个在 Windows 上使用命令扩展的有趣示例(分步)

  • neo4j.conf文件更改为包含以下设置

dbms.max_databases=$(my_setting.bat)
  • 创建一个环境变量

MAX_DATABASES=16
  • 创建一个简单的批处理文件my_setting.bat

@ECHO OFF
ECHO %MAX_DATABASES%
  • neo4j.conf文件的权限更改为读取。除了拥有并执行 Neo4j 服务器的用户之外,请删除所有用户组和用户名。请参考下图

CorrectFilePermissions

在 Linux 世界中,这相当于r-- --- ---,可以通过以下命令实现

$chmod 400 neo4j.conf
  • 使用以下命令启动 Neo4j -

C:\neo4j-enterprise-4.2.3-windows\neo4j-enterprise-4.2.3\bin>neo4j console --expand-commands

启动期间,控制台将显示以下 INFO 消息

2021-03-04 03:17:40.575+0000 INFO  Command expansion is explicitly enabled for configuration
2021-03-04 03:17:40.577+0000 INFO  Executing external script to retrieve value of setting dbms.max_databases
2021-03-04 03:17:40.579+0000 INFO  Starting...
2021-03-04 03:17:43.311+0000 INFO  ======== Neo4j 4.2.3 ========
2021-03-04 03:17:45.825+0000 INFO  Sending metrics to CSV file at C:\neo4j-enterprise-4.2.3-windows\neo4j-enterprise-4.2.3\metrics
2021-03-04 03:17:45.860+0000 INFO  Bolt enabled on 0.0.0.0:7617.
2021-03-04 03:17:46.818+0000 INFO  Remote interface available at http://localhost:7414/
2021-03-04 03:17:46.819+0000 INFO  Started.
  • 要确认dbms.max_databases属性是否已设置为16,请在 Neo4j 浏览器中执行以下命令

CALL dbms.listConfig() YIELD name, value WHERE name = 'dbms.max_databases' RETURN value

结果将为16

注意,默认情况下,neo4j.conf的文件权限将如下所示。

IncorrectFilePermissions

所有用户,例如已认证用户SYSTEM管理员用户等,都需要被删除。