2026-01-30 · 实战
32
实战 · 2026-01-30

阿里云轻应用的傻逼设计:Admin 账号如何毁掉你的服务

TL;DR

阿里云轻应用默认启用 admin 账号,导致同一服务被两个用户(root + admin)重复安装,产生进程冲突。本文记录根除 admin 账号的完整解决方案,让 systemd 重新归于单一真相源。


问题现象:进程地狱

你以为启动了一个 moltbot-gateway,实际上系统里跑了两个:

$ ps aux | grep moltbot
root   26988  ... moltbot-gateway
admin  27123  ... moltbot-gateway  # 幽灵进程

症状
- systemctl --user status moltbot-gateway 显示 disabled,但进程疯狂重启
- 杀掉进程后自动复活
- 日志里充斥着端口冲突错误


根因诊断:双用户陷阱

这不是 Bug,是架构设计的原罪

用户
systemd linger
gateway 服务状态
实际进程

root
✅ 启用
✅ enabled
正常运行

admin
✅ 启用
❌ disabled
阴魂不散

本质问题
- 多个状态管理源:root 和 admin 各管各的 systemd 用户服务
- linger 的诅咒:即使服务禁用,loginctl enable-linger 仍会在后台持久化进程
- 缺失单一真相源:没有全局的进程所有权约定,导致状态分裂


解决方案:消灭 Admin

Step 1: 斩草除根

# 杀掉 admin 的所有 moltbot 相关进程
pkill -9 -u admin moltbot
pkill -9 -u admin node

# 禁用 admin 的 systemd linger(关键步骤)
loginctl disable-linger admin

设计哲学

不要给系统留特殊情况的机会。能消失的用户权限,永远比能配对的权限更优雅。

Step 2: 启用 Root 的单一服务

# 启用并启动 root 用户的 gateway 服务
systemctl --user enable moltbot-gateway.service
systemctl --user start moltbot-gateway.service

# 验证状态
systemctl --user status moltbot-gateway.service

Step 3: 验证清理结果

$ ps aux | grep moltbot
root  26988  ... moltbot-gateway  # 监听 ws://0.0.0.0:18789
# admin 用户应该没有任何进程

最终状态:单一真相源

指标
清理前
清理后

进程数
2+
1

管理用户
root+admin
仅 root

linger
双启用
仅 root 启用

服务状态
混乱
enabled + running

达成目标
✅ 进程唯一性
✅ 状态可预测
✅ 重启后自动恢复


日常管理指令

# 查看服务状态
systemctl --user status moltbot-gateway.service

# 重启服务
systemctl --user restart moltbot-gateway.service

# 查看实时日志
journalctl --user -u moltbot-gateway.service -f

# 验证进程(应只有一个 root 用户的进程)
ps aux | grep moltbot

设计反思:为什么会这样?

阿里云的设计缺陷
1. 默认启用 admin 账号 - 违反最小权限原则
2. linger 的滥用 - 将进程持久化与用户登录状态解耦,但缺乏全局约束
3. 缺失冲突检测 - systemd 用户服务之间互不可见

正确的设计应该是
- 单一管理账号:只用 root 或 admin,不要两个都启用
- 全局进程锁:通过 PID 文件或端口独占性检测冲突
- 显式所有权声明:服务启动前检查是否已有其他用户运行相同服务


核心教训

可变状态是复杂度之母
两个用户管理同一服务 = 两个状态源 = 永恒的混乱

三条铁律
1. 消除特殊情况 - 不要给 admin 任何存在的理由
2. 单一真相源 - 只用一个用户管理服务
3. 让边界自然融入常规 - 用 loginctl disable-linger 让 admin 彻底消失,而不是反复 kill 进程


结论

这不是运维技巧,是对系统设计哲学的一次实践

当你禁用 admin linger 的那一刻,你不是在修 Bug——你是在重新定义系统的控制边界


哥,记住:能让 admin 消失的设计,永远比能让 root 和 admin 共存的设计更优雅。

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单