4、KMS安装与初始化:安装步骤,初始化配置
好,到了动手的环节了。安装和初始化,说起来就是几步,但我在项目中见过不少人倒在这一关。说白了,这几步决定了后面所有事情能不能跑起来。我们一步步来,别急。
4.1 安装前的环境检查
先别急着装包,检查一下环境。我习惯列个清单,一项一项过。
| 检查项 | 最低要求 | 我建议的值 |
|---|---|---|
| 操作系统 | Linux Kernel 4.15+ | Ubuntu 20.04 / CentOS 7.9+ |
| CPU | 2 核 | 4 核(业务量大时 8 核) |
| 内存 | 4 GB | 8 GB(有缓存场景 16 GB) |
| 磁盘 | 20 GB 可用 | SSD + 100 GB(日志保留 30 天) |
| 依赖库 | OpenSSL 1.1.1+、Python 3.8+ | OpenSSL 3.0、Python 3.10 |
为什么要强调这个?我记得有一次部署,忽略了 OpenSSL 版本,结果初始化的时候报各种签名错误。查了半天才发现是系统自带的 1.0.2 太老。
可以用 openssl version 和 python3 --version 快速确认。
4.2 安装步骤 —— 从包到服务
安装其实不复杂,但顺序别搞混。我个人喜欢用二进制包,避免编译依赖带来的意外。
4.2.1 下载并解压
# 以 KMS v2.5.0 为例
wget https://example.com/kms-2.5.0-linux-amd64.tar.gz
tar -xzf kms-2.5.0-linux-amd64.tar.gz -C /opt/kms
cd /opt/kms
下载前务必校验 SHA256 哈希!我遇到过有人下载到被篡改的包,解压后里面藏着挖矿脚本。用 sha256sum 对比官方值,别偷懒。
4.2.2 运行安装脚本
./install.sh --prefix /usr/local/kms
脚本会创建用户、目录、注册 systemd 服务。你想想看,如果安装路径包含中文或空格,后期脚本解析容易出问题。老老实实用英文路径。
4.2.3 验证安装
kms --version
输出版本号就对了。如果报错 command not found,检查 PATH 是否包含 /usr/local/kms/bin。
4.3 初始化配置 —— 让 KMS 知道它能做什么
安装完只是骨架,初始化才是灵魂。我习惯分三步走:配置文件 → 数据库 → 密钥。
4.3.1 生成默认配置文件
kms init --config /etc/kms/kms.conf
执行后会在指定路径生成一个模板。打开看看,核心参数就那么几个:
- listen:监听地址,默认
0.0.0.0:8080,生产环境我建议改成内网 IP 加端口,避免暴露到公网。 - db_path:数据库路径,默认
/var/lib/kms/kms.db。如果有多个 KMS 节点共享同一个数据库,改成指向postgres://...的连接串。 - log_level:日志级别,初始化阶段调成
debug,等稳定了再改回info。 - master_key:主密钥路径,初始为空,后续生成。
切记:listen 不要写 0.0.0.0 加默认端口,否则谁都能扫到你的 KMS 端口。我在一个金融项目里就因为忘记改,被安全扫描亮红灯,整改了一周。
4.3.2 初始化数据库
kms db-init --config /etc/kms/kms.conf
这个命令会创建表结构。如果用的是 SQLite,一句就够了。如果是 PostgreSQL,需要先手动建库和用户:
CREATE DATABASE kms;
CREATE USER kms_user WITH PASSWORD 'your_pwd';
GRANT ALL PRIVILEGES ON DATABASE kms TO kms_user;
然后再执行上面的 db-init。为什么强调顺序?我见过有人忘记授予权限,结果 db-init 跑一半报 permission denied,回滚又麻烦。
4.3.3 生成主密钥
kms gen-key --output /etc/kms/master.key
主密钥是 KMS 的根,所有加密操作都依赖它。生成后立即备份到离线位置,比如加密 U 盘。别问我为什么 —— 我不止一次看到有人把主密钥放在服务器上,然后磁盘故障一起丢了。
生成主密钥时可以用 --algorithm AES-256-GCM 指定算法,默认是 AES-256-GCM。如果你的业务有合规要求(比如政府项目),可能需要 SM4,那就在编译时启用国密支持。
4.4 一条龙:完整的初始化流程
把上面串起来,我一般写成一个脚本,避免少步骤。下面是个精简版:
#!/bin/bash
CONF=/etc/kms/kms.conf
MASTER_KEY=/etc/kms/master.key
# 1. 生成配置
kms init --config $CONF
# 2. 修改监听地址(假设内网 eth0 地址是 192.168.1.100)
sed -i 's/listen = "0.0.0.0:8080"/listen = "192.168.1.100:8080"/' $CONF
# 3. 初始化数据库
kms db-init --config $CONF
# 4. 生成主密钥
kms gen-key --output $MASTER_KEY
# 5. 将主密钥路径写入配置
echo "master_key = \"$MASTER_KEY\"" >> $CONF
# 6. 启动服务
systemctl start kms
systemctl enable kms
等等,脚本里没有检查上一步是否成功。实际生产中我还会在每一行后面加 || exit 1,防止出错后继续往下跑。
4.5 初期验证
服务启动后,用 curl 测试一下:
curl -s -o /dev/null -w "%{http_code}" http://192.168.1.100:8080/health
返回 200 就算通。我习惯再看一眼日志:
journalctl -u kms -n 20 --no-pager
如果看到 listening on 192.168.1.100:8080 和 database initialized,基本稳了。万一报 cannot open database,检查 db_path 目录权限,KMS 运行用户要有写权限。
4.6 别忘了清理临时文件
安装包解压后的目录、下载的 tar.gz、安装日志,里面可能包含临时密钥或敏感信息。我每次做完初始化都会执行:
rm -rf /tmp/kms_install_*
安全审计的时候,这个习惯帮我避过两次麻烦。你想想看,如果 /tmp 下躺着 master.key 的中间副本……
不要在初始化阶段打开远程调试端口!默认 --debug 模式下可能会暴露内部状态。生产环境一定要用 --release 模式启动。
4.7 常见开机自启问题
systemd 注册后,可以用 systemctl enable kms 确保开机启动。如果你发现重启后 KMS 没跑,多半是:
- 依赖的 PostgreSQL/Redis 启动顺序晚于 KMS → 加
After=postgresql.service - 磁盘挂载路径没到位 → 确认
/var/lib/kms在 fstab 里 - 主密钥文件权限是 777 → 改成 600,且属主为 kms 用户
嗯,到这里安装和初始化基本就稳了。下一环节我们会讲讲底层的加密引擎配置,这可是性能调优的关键节点。