Ollama使用非root运行,权限最小化安全加固
Ollama 在 Linux 上默认会以当前登录用户运行,如果直接用 root 启动,模型文件和进程都面临较高权限风险。
下面基于当前稳定版 Ollama,带你完成非 root 用户创建、二进制安装、systemd 服务配置和目录权限收紧,最终让 Ollama 以最低权限稳定运行。
本文适合零基础用户,按顺序操作即可,遇到问题可以直接对照常见排错部分处理。
为什么要把 Ollama 从 root 降到普通用户
用 root 运行 Ollama 时,任何模型加载漏洞或路径穿越都可能直接获得整机权限。
普通用户运行的好处非常明确:进程权限有限、文件隔离清晰、审计更方便。
Ollama 官方也推荐让服务以非 root 身份运行,尤其是在多用户服务器或需要暴露 API 的场景下,权限最小化能明显缩小攻击面。
第一步:创建专用系统用户
先创建一个不能登录的专用用户,比如 ollama。
sudo useradd --system --home /usr/local/share/ollama --shell /bin/false ollama
--system 表示创建为系统用户,--shell /bin/false 禁止该用户直接登录。
创建后检查:
id ollama
预期能看到 uid 和 gid,且用户组为 ollama。
这一步做好之后,Ollama 的所有文件都归这个用户管理。
第二步:下载 Ollama 二进制并调整目录属主
官方安装脚本会写入 /usr/local/bin,但为了更精细地控制权限,建议手动下载二进制。
以 x86_64 架构为例:
curl -fsSL https://ollama.com/download/ollama-linux-amd64 -o /usr/local/bin/ollama
chown root:root /usr/local/bin/ollama
chmod 755 /usr/local/bin/ollama
如果是 ARM 设备(如树莓派),请把文件名换成 ollama-linux-arm64。
模型目录默认是 /usr/share/ollama,这里手动创建并收紧权限:
mkdir -p /usr/share/ollama/models
chown -R ollama:ollama /usr/share/ollama
chmod 700 /usr/share/ollama
chmod 700 表示只有 ollama 用户能进入该目录,这是权限最小化的关键操作。
后续所有模型和日志都只在这个目录中读写。
第三步:用 systemd 以非 root 方式启动
创建服务文件 /etc/systemd/system/ollama.service:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
User=ollama
Group=ollama
ExecStart=/usr/local/bin/ollama serve
Restart=always
RestartSec=3
Environment="OLLAMA_MODELS=/usr/share/ollama/models"
Environment="OLLAMA_HOST=127.0.0.1:11434"
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadOnlyPaths=/
[Install]
WantedBy=multi-user.target
几个重要配置项的作用:
User=ollama和Group=ollama明确指定运行身份。OLLAMA_HOST=127.0.0.1:11434让服务只监听本机,避免直接暴露到公网。NoNewPrivileges=true禁止进程获得新的提权能力。ProtectSystem=strict配合ReadOnlyPaths=/,让根文件系统保持只读,模型目录通过OLLAMA_MODELS单独指定后依然可写。
保存文件后,执行以下命令生效:
sudo systemctl daemon-reload
sudo systemctl enable --now ollama
第四步:验证运行状态和权限边界
查看进程是否以 ollama 用户运行:
systemctl status ollama
ps -o user,group,pid,cmd -C ollama
预期在 systemctl 输出中看到 User: ollama,在 ps 结果中第一列为 ollama。
接着验证 API 是否正常:
curl http://127.0.0.1:11434/api/version
返回类似 {"version":"0.x.x"} 的 JSON 就表示服务已正常运行。
常见问题与避坑指南
1. 模型下载报权限不足
检查日志中的 permission denied 提示,然后修正目录属主和权限:
chown -R ollama:ollama /usr/share/ollama
chmod -R 700 /usr/share/ollama
2. 服务启动失败,端口被占用
先查看占用情况:
ss -lntp | grep 11434
找到占用进程后停掉旧服务,再重新启动 Ollama。
3. 如何确认没有以 root 运行
直接查看进程的 UID:
ps -o user,uid,pid,cmd -C ollama
如果 User 不是 root,说明非 root 配置已生效。
还可以用 systemd-analyze security ollama 查看整体安全评分,正常情况下该分数会明显优于 root 启动的方式。
完成以上步骤后,你的 Ollama 服务已经以普通用户身份运行,根文件系统只读、禁止提权、监听地址仅限本机。
这种权限最小化方案能有效降低模型服务被攻破时的提权风险,适合长期部署在生产环境。
如果你的服务器有多个模型目录或需要远程访问,请在此基础上单独调整 OLLAMA_HOST 和防火墙规则,不要直接放开全部端口。