跳到主要内容

安全最佳实践

Open Terminal 赋予了 AI 运行命令和管理文件的实际能力。以下是确保安全使用此能力的最佳指南。


使用 Docker

始终使用 Docker,除非您特别需要直接访问您的物理机器。Docker 将 Open Terminal 隔离在专属的容器中:它拥有自己独立的文件系统和进程,除非您明确允许,否则无法访问您的宿主计算机。

docker run -d --name open-terminal -p 8000:8000 \
  --memory 2g --cpus 2 \
  -v open-terminal:/home/user \
  -e OPEN_TERMINAL_API_KEY=your-secret-key \
  ghcr.io/open-webui/open-terminal

--memory 2g--cpus 2 参数可防止异常进程消耗您宿主机的所有资源。

运行在非 Docker 环境(裸机)下

如果不使用 Docker(裸机模式),AI 可以以您系统用户的权限运行任何命令 —— 包括删除文件、安装软件或访问您账户可访问的任何内容。请仅在您个人的机器上用于个人项目时使用裸机模式。


始终设置密码

如果没有设置 API 密钥,任何能够访问该端口的人都将拥有完整权限 —— 他们可以运行命令、读取文件并控制终端。

-e OPEN_TERMINAL_API_KEY=a-strong-password-here

对于生产环境,请使用 配置文件Docker 凭据,避免直接在命令行中暴露密钥。


使用管理员连接(而非用户连接)

在连接到 Open WebUI 时,推荐采用管理员配置的方式:

管理员配置用户配置
API 密钥可见性在服务器端隐藏存储在用户的浏览器中
请求发起途径通过 Open WebUI 的后端直接从浏览器发起
需要终端网络访问的设备仅限 Open WebUI 服务器每个用户的电脑

管理员配置的连接可防止 API 密钥泄露到用户的浏览器中,并使您能够控制具体的访问权限。


限制资源

防止失控的脚本消耗所有可用的 CPU 和内存:

deploy:
  resources:
    limits:
      memory: 2G
      cpus: "2.0"

如果进程超出这些限制,Docker 会限制其 CPU 使用率或将其强行中止(内存超出)。这可以确保您的服务器保持健康状态。


网络隔离

为了实现最安全的设置,请将 Open Terminal 放置在仅 Open WebUI 可以访问的私有 Docker 网络中:

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:latest
    ports:
      - "3000:8080"
    networks:
      - public
      - internal

  open-terminal:
    image: ghcr.io/open-webui/open-terminal
    # 注意:不对外暴露任何端口
    networks:
      - internal

networks:
  public:
  internal:
    internal: true   # 禁止从该网络访问互联网

这意味着:

  • Open WebUI 可以在 http://open-terminal:8000 访问 Open Terminal
  • 无法从互联网访问 Open Terminal
  • Open Terminal 无法发起出站的互联网请求

出口过滤

如果 Open Terminal 需要部分互联网访问(例如安装软件包),您可以将其限制在特定的域名中:

-e OPEN_TERMINAL_ALLOWED_DOMAINS="pypi.org,github.com,*.npmjs.org"

只有这些域名是可达的,其他所有请求都将被拦截。这可以防止:

  • 未授权的数据离开容器
  • 下载未预期的软件
  • 访问您无意公开的内部服务

Docker 套接字警告

Docker 容器可以选用性地访问您主机的 Docker(以便 AI 构建镜像、运行容器等):

-v /var/run/docker.sock:/var/run/docker.sock
仅限可信环境使用

挂载 Docker 套接字(socket)会赋予容器对主机 Docker 的完全控制权。这实际上等同于获得了主机的 root 访问权限。拥有终端访问权限的任何人都可以:

  • 运行挂载了您完整文件系统的容器
  • 访问主机的网络
  • 管理您机器上的每一个容器

请仅在您完全信任能访问该终端的所有人员时才进行此操作。


安全清单

建议
使用 Docker,而非裸机直接运行
设置强 API 密钥
使用管理员配置的连接
设置内存和 CPU 限制
使用网络隔离(内部 Docker 网络)
如果不需要完全开放的互联网访问,启用出口过滤
除非必要,否则不要挂载 Docker 套接字(socket)
如果不需要运行时安装软件包,使用 slimalpine 镜像
This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.