安全检查清单

以下检查清单重点列出了 Neo4j 中需要额外关注的具体领域,以确保 Neo4j 部署后您的应用程序具备适当的安全级别。

  1. 将 Neo4j 部署在安全网络的服务器上

    1. 使用子网和防火墙来划分网络。

      flat vs segmented network

    2. 仅开放所需的端口。有关相关端口列表,请参阅 端口

      特别是,请确保无法从外部访问由设置 server.backup.listen_address 指定的端口。未能保护此端口可能会留下安全漏洞,未经授权的用户可以通过该漏洞将数据库复制到其他机器上。

  2. 保护静态数据(Data-at-rest)

    1. 使用卷加密(例如 Bitlocker)。

    2. 管理对数据库转储文件和备份文件的访问权限。有关更多信息,请参阅 备份离线数据库 以及 备份在线数据库

    3. 通过确保 Neo4j 文件具备正确的文件权限,来管理对配置文件、数据文件和事务日志的访问权限。有关权限级别的说明,请参阅 默认文件位置

    4. 如果目录存储了敏感数据,则绝不能对其进行“对所有人可读”或“对所有人可执行”的设置。即使内部文件受到限制,一个“对所有人可执行”的目录也可能泄露结构信息。

      • 在 Linux 上,请遵循以下建议

        场景 推荐模式

        仅所有者可访问

        700

        所有者和特定组可以访问

        750

        确保创建目录的进程使用严格的 umask(例如 077),以防止出现过于宽松的默认设置。

      • 在 Windows 上,仅允许所有者账户(或服务账户)和 Administrators 访问。移除 UsersAuthenticated UsersEveryone 的访问权限。
        在移除广泛的权限之前,请禁用目录的继承功能,否则这些权限可能会从父目录中被重新引入。

        在创建备份文件目录时,请考虑上述安全建议。

  3. 保护传输中的数据(Data-in-transit)

    1. 对于 Neo4j 数据库的远程访问,请仅使用加密的 Bolt 或 HTTPS。

    2. 使用由受信任的证书颁发机构(CA)颁发的 SSL 证书。

    3. 有关配置您的 Neo4j 安装以使用加密通信的信息,请参阅 SSL 框架

    4. 如果使用集群,请配置并使用集群内通信加密。有关详情,请参阅 集群内加密

    5. 如果使用集群,请配置并使用加密进行备份。这可以确保只有拥有指定 SSL 策略和 SSL 证书的服务器才能访问服务器并执行备份。

    6. 有关配置 Bolt 和 HTTPS 连接器的信息,请参阅 配置网络连接器

    7. 如果使用 LDAP,请通过 StartTLS 配置您的 LDAP 系统以进行加密。有关更多信息,请参阅 通过 StartTLS 使用加密的 LDAP

  4. 加强自定义扩展的安全性

    1. 验证您部署的任何自定义代码(过程和非托管扩展),并确保它们不会无意中暴露产品或数据的任何部分。

    2. 核查 dbms.security.procedures.unrestricteddbms.security.procedures.allowlist 设置,确保它们仅包含有意暴露的扩展。

  5. 确保您拥有 Neo4j 文件的 默认文件位置

  6. 通过限制对 binlibplugins 目录的访问,防止执行未经授权的扩展。只有运行 Neo4j 的操作系统用户才应拥有这些文件的权限。有关权限级别的说明,请参阅 默认文件位置

  7. 启用 LOAD CSV 后,请确保它不允许未经授权的用户导入数据。如何配置 LOAD CSV 的说明在 Cypher 手册 → LOAD CSV 中有描述。

  8. 使用 Neo4j 身份验证。设置 dbms.security.auth_enabled 用于控制本地身份验证。默认值为 true

  9. 核查 neo4j.conf 文件中与 JVM 特定配置设置 相关的端口,特别是涉及已弃用功能的端口,例如远程 JMX(由参数设置 server.jvm.additional=-Dcom.sun.management.jmxremote.port=3637 控制)。

  10. 查看 浏览器凭据处理,以确定 Neo4j Browser 中的默认凭据处理是否符合您的安全法规。如有必要,请按照说明进行配置。

  11. 使用最新版本的 Neo4j 补丁,并建立在发布安全公告时进行更新的流程。