主题
🔒 数据安全存储
模型可以再训,数据丢泄露了就回不来了——安全不是选修课
数据安全的三座大山
AI 算力中心面临的核心安全风险:
- 训练数据泄露——合同、病历、用户对话被人偷走
- 模型被逆向——攻击者通过反复调用推理出训练数据
- API 被滥用——没有鉴权的推理接口被挖矿/滥用
存储加密
静态数据加密(放在硬盘上的数据)
bash
# LUKS 全盘加密(推荐)
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 data_encrypted
sudo mkfs.ext4 /dev/mapper/data_encrypted
sudo mount /dev/mapper/data_encrypted /data
# 每次开机需输入密码解锁
# 数据盘即使被物理偷走也读不出来文件级加密
bash
# GPG 加密单文件
gpg -c --cipher-algo AES256 training_data.json
# 输入密码 → 生成 training_data.json.gpg
# 解密
gpg -d training_data.json.gpg > training_data.json应用层加密
python
from cryptography.fernet import Fernet
# 生成密钥(存环境变量,别写代码里)
key = Fernet.generate_key()
cipher = Fernet(key)
# 加密数据再存数据库
sample = "合同内容:甲方承担..."
encrypted = cipher.encrypt(sample.encode())
# 存 encrypted
# 读取时解密
decrypted = cipher.decrypt(encrypted).decode()传输安全
API 必须走 HTTPS
nginx
# nginx 强制 HTTPS
server {
listen 80;
server_name api.your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
# ... 证书配置
}API Key 管理
bash
# 密钥从不写死在代码里,用环境变量
export API_KEY="sk-***"
export HF_TOKEN="hf_***"
export DB_PASSWORD="***"
# Docker 里注入
docker run -e API_KEY=$API_KEY ollamapython
# 代码里读取
import os
api_key = ***"API_KEY")
if not api_key:
raise ValueError("API_KEY 未设置")推理服务防数据泄露
日志脱敏
python
# 不要记录用户原始输入
@app.middleware("http")
async def log_requests(request, call_next):
# ❌ 坏做法:记录完整请求(可能含合同原文)
# logger.info(f"Request: {await request.body()}")
# ✅ 好做法:只记录元数据
logger.info(f"Request from {request.client.host}, "
f"tokens: ~{len(str(await request.body()))//4}")
return await call_next(request)输出过滤
防止模型输出训练数据片段:
python
# 推理后检查输出是否包含训练数据
def check_leakage(output, training_samples):
for sample in training_samples:
if sample in output and len(sample) > 50:
logger.warning("可能的训练数据泄露!")
return "[输出已拦截:检测到疑似训练数据]"
return output数据库安全
MongoDB/云数据库安全规则
javascript
// 只允许管理员读写,API 服务用服务端密钥访问
{
"rules": {
".read": false,
".write": false,
"models": {
".read": "auth != null && auth.role == 'admin'"
}
}
}备份加密
bash
# 备份时加密
mysqldump mydb | gpg -c --cipher-algo AES256 > backup.sql.gpg
# 恢复
gpg -d backup.sql.gpg | mysql mydb访问控制
SSH 加固
bash
# /etc/ssh/sshd_config
PermitRootLogin prohibit-password # 禁止密码登录 root
PasswordAuthentication no # 只允许密钥登录
Port 2222 # 改掉默认 22 端口
AllowUsers youruser # 只允许指定用户最小权限原则
bash
# 推理服务用专用用户,不给 sudo
sudo useradd -r -s /bin/false inference
sudo chown -R inference:inference /opt/models
# Docker 容器用非 root 用户
docker run --user 1000:1000 ollama安全检查清单
| 检查项 | 命令/方法 |
|---|---|
| 开放端口 | ss -tlnp,只开 443 和必要端口 |
| 防火墙规则 | sudo ufw status verbose |
| SSH 配置 | `grep -E 'PasswordAuth |
| API 是否需鉴权 | curl http://localhost:8000/v1/models 不带 key试试 |
| 日志是否含敏感信息 | tail -50 /var/log/nginx/access.log |
| 磁盘加密状态 | sudo blkid | grep LUKS |
🎯 本章要点
- 数据安全三层:存储加密(LUKS/GPG)、传输加密(HTTPS)、访问控制(密钥+防火墙)
- API Key 永远环境变量注入,不写死代码,不提交 Git
- 日志脱敏:不记录用户输入原文,只记元数据
- SSH 禁用密码登录、改端口、只允许指定用户
- 最小权限:推理服务用专用非 root 用户跑
加载练习题中...