一台麒麟桌面,金仓 V8R6 被前人在 user账号下裸起过,没建 kingbaseOS 用户、没注册 systemd 服务、root.sh反复 fail、KYSEC 拦 su、polkit 鉴权不过......最后推倒重装,新建专用 OS 用户 progoo,走标准姿势。下面把过程和踩的点记下来,省得下次再绕。
一、先判断旧库"到底啥情况"
# 服务层
systemctl status kingbase8d.service # Unit not found,根本没注册
# 进程层
ps aux | grep kingbase | grep -v grep
# → 主进程属主是 user,data 目录 ls -ld 也是 user:user
# 说明是 user 裸跑 sys_ctl start 拉起来的,没走 systemd
# 连一下试试默认超户
/opt/Kingbase/ES/V8/Server/bin/ksql -U system -d test -p 54321
# FATAL: 角色 "system" 不存在 → 安装时改了默认超户
扒真超户(hba 里 local 是 trust,OS 用户=user,裸连):
./ksql -p 54321 -d test
test=# \du
角色列表
角色名称 | 属性 | 成员属于
------------+--------------------------------------------+----------
kcluster | 无法登录 | {}
sao | 没有继承, 建立角色 | {}
sso | 没有继承, 建立角色 | {}
user | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
这台旧库的真相 :user就是 DBA,超户不是 system/SA/kingbase/admin任一默认,装的时候向导里"数据库管理员"那栏被人改过。库能跑,但 OS 侧一塌糊涂------user还进了 conda((base)提示符),导致后面 root.sh里 su - user -c ...在无 tty 下 segfault。
二、决定推倒重来
旧库没业务数据,直接清。
# 停库
/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data
# 反注册(装过 root.sh 才会有,没跑过可跳过)
sudo /opt/Kingbase/ES/V8/install/script/rootuninstall.sh
# 清安装目录 + 老服务
sudo rm -rf /opt/Kingbase/ES /opt/Kingbase/ES/V8
sudo rm -f /etc/init.d/kingbased
sudo rm -f /etc/systemd/system/kingbased.service
sudo systemctl daemon-reload
三、新建金仓专用 OS 用户(避开 conda 那坑)
sudo useradd -m -s /bin/bash progoo
echo 'progoo:p123456789' | sudo chpasswd
麒麟 V10 默认 pwquality 开着,纯数字密码可能不让过。卡住就临时松一下:
sudo sed -i 's/^password.*pam_pwquality.so.*/password required pam_pwquality.so minlen=6 dcredit=0 ucredit=0 lcredit=0 ocredit=0/' /etc/pam.d/common-password
把 progoo放进 sudoers(后面清目录 / 起服务要用):
sudo visudo
# 末尾加
progoo ALL=(ALL:ALL) NOPASSWD:ALL
验证:su - progoo→ sudo whoami返回 root。
四、挂 ISO 装 V8R6
sudo mkdir -p /mnt/kingbase_iso
sudo mount -o loop /opt/Kingbase/KingbaseES_V008R006C009B0014_Lin64_install.iso /mnt/kingbase_iso
mount: write-protected, mounted read-only正常,ISO 本来就只读。
sudo chown progoo:progoo /opt/Kingbase # 安装目录 progoo 要能写
su - progoo
cd /mnt/kingbase_iso
./setup.sh -i console # SSH 无 GUI 必加 -i console
向导关键项(这几个别手滑)
| 步骤 | 选什么 | 原因 |
|---|---|---|
| 安装集 | 1 完全安装 | 服务端 + 工具全要 |
| 授权文件 | 回车(试用) | 后面再换正式 lic |
| 安装目录 | /opt/Kingbase/ES/V8(默认) |
回车 |
| 初始化数据库 | Y | 让安装程序顺手 initdb |
| 端口 | 54321 | 金仓默认,别改 |
| 数据库管理员 | system(默认) | 上一轮改成 user 就是连环坑起点 |
| 密码 | 自己设一个 | 记住 |
| 字符集 | UTF8 | 默认 |
| 区域 | zh_CN.UTF-8 | 默认 |
| 兼容模式 | 3 MySQL | 按源库定,这里是 MySQL |
| 大小写敏感 | 2 NO | MySQL 模式必须选 NO,选 YES 向导会拦 |
| 存储块 | 8k | 默认 |
| 身份认证 | scram-sha-256 | 默认 |
| 自定义参数 | 回车空 | 后面再调 |
装完最后一句提示:
如需注册为系统服务,请运行 /opt/Kingbase/ES/V8/install/script/root.sh
五、root.sh 又 fail 了(老剧本重演)
sudo /opt/Kingbase/ES/V8/install/script/root.sh
# Job for kingbased.service failed ...
systemctl status kingbased
# Loaded: loaded (/etc/init.d/kingbased; generated) ← 还在走 sysv 老脚本
journalctl看真凶:
-
su - progoo -c "LD_LIBRARY_PATH=... PATH=..."被 KYSEC AVC denied execute 拦(麒麟 LSM) -
手动
systemctl start还会走 polkit 交互鉴权,progoo不在 polkit 信任里 → "鉴定故障 / Access denied"
这次 progoo 是干净用户没 conda 了,但 KYSEC + polkit + init.d 这套组合还是让 root.sh 起不来。不治了,直接换 native systemd unit。
六、清老渣,写 native unit
# progoo 下先确认库没在跑
/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data 2>/dev/null
# 切 user(有 sudo 那个)
exit
sudo systemctl stop kingbased 2>/dev/null
sudo systemctl disable kingbased 2>/dev/null
sudo rm -f /etc/init.d/kingbased
sudo rm -f /etc/systemd/system/kingbased.service
sudo systemctl daemon-reload
写 unit(User=progoo直接拉,不走 su,绕开 KYSEC + polkit):
sudo tee /etc/systemd/system/kingbased.service > /dev/null << 'EOF'
[Unit]
Description=KingbaseES V8R6
After=network.target
[Service]
Type=forking
User=progoo
Group=progoo
Environment="LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/Server/lib"
Environment="PATH=/opt/Kingbase/ES/V8/Server/bin:/usr/local/bin:/usr/bin"
ExecStart=/opt/Kingbase/ES/V8/Server/bin/sys_ctl start -D /opt/Kingbase/ES/V8/data
ExecStop=/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data
ExecReload=/opt/Kingbase/ES/V8/Server/bin/sys_ctl reload -D /opt/Kingbase/ES/V8/data
TimeoutStartSec=120
[Install]
WantedBy=multi-user.target
EOF
起:
sudo systemctl daemon-reload
sudo systemctl start kingbased
systemctl status kingbased
预期:
Loaded: loaded (/etc/systemd/system/kingbased.service)
Active: active (running)
不带 generated,不走 init.d,KYSEC 那条 AVC denied /etc/init.d/kingbased也不会再跳。
七、手动起库时还踩到一个 /tmp lock 权限坑
如果上面 unit 没起、改用手动 sys_ctl start调试,可能撞:
FATAL: could not open lock file "/tmp/.s.KINGBASE.54321.lock": Permission denied
原因:上轮 user起的库在 /tmp留了 lock/socket,属主 user:user,这轮 progoo起要去写同一个 54321 → 没权限。
sudo rm -f /tmp/.s.KINGBASE.54321.lock /tmp/.s.KINGBASE.54321
sudo rm -f /tmp/.s.PGSQL.54321.lock /tmp/.s.PGSQL.54321
清完再起就过。
八、验证 + 确认兼容模式
su - progoo
/opt/Kingbase/ES/V8/Server/bin/ksql -U system -d test -p 54321
-- 兼容模式(安装时选的 3 = MySQL)
show database_mode; -- 应返回 mysql
-- 大小写敏感(MySQL 模式必须 NO)
show case_sensitive; -- 应返回 on(on=不敏感,off=敏感,命名反直觉)
-- 字符集
show server_encoding; -- UTF8
-- 顺手给 system 设个密码,后面 hba 切 md5 用
ALTER USER system PASSWORD 'Kb#2024v8';
hba 从 trust 切 md5:
vim /opt/Kingbase/ES/V8/data/sys_hba.conf
# local all all trust → md5
/opt/Kingbase/ES/V8/Server/bin/sys_ctl reload -D /opt/Kingbase/ES/V8/data
progoo 的 ~/.bashrc把 PATH 写死,以后少敲:
echo 'export KINGBASE_HOME=/opt/Kingbase/ES/V8' >> ~/.bashrc
echo 'export PATH=$KINGBASE_HOME/Server/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$KINGBASE_HOME/Server/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
九、收工状态
| 项 | 结果 |
|---|---|
| OS 用户 | progoo/ p123456789,干净无 conda |
| 金仓版本 | V8R6 C009B0014 |
| 安装目录 | /opt/Kingbase/ES/V8 |
| 超户 | system |
| 兼容模式 | MySQL |
| 大小写 | 不敏感(on) |
| 端口 | 54321 |
| 服务 | native kingbased.service,systemctl start可起,reboot 自启 |
| hba | md5 |
这次踩到的几个"麒麟 + 金仓"专属坑,下次直接避
-
别用现有桌面用户装金仓 ,conda / 自定义 bashrc 会让
su - xxx -c在 systemd 无 tty 下 segfault。专用 OS 用户最稳。 -
root.sh注册的服务在麒麟下容易翻车 (KYSEC 拦 init.d 的su+ polkit 交互鉴权),直接写 native systemd unit 走User=progoo,一劳永逸。 -
MySQL 兼容模式 + 大小写敏感 是互斥组合,向导会拦,但 silent 装 / 改 conf 有可能绕过去,后期
show case_sensitive一定验一下。 -
/tmp/.s.KINGBASE.54321.lock属主 换 OS 用户起库前清掉,不然 Permission denied 报得很隐晦。 -
麒麟密码策略
pam_pwquality默认开着,纯数字密码chpasswd静默失败,visudo前先确认progoo能sudo。
环境:麒麟 V10 桌面 / 人大金仓 KingbaseES V8R6 C009B0014 / ISO 安装。不同小版本向导 wording 可能略有差异,思路通用。