📌 背景与现象
某天突然注意到 Synology NAS 的 CPU 占用率高居不下,系统响应变得极为迟钝。通过群晖 Container Manager 的资源监控查看,发现 CPU 占用率持续在 140% - 150% 左右拉满,终端频繁抛出内存不足(OOM)和进程被强制杀掉的错误日志:
signal: Killed
进一步检查容器状态和系统日志发现:
git 子进程死循环解析 three-way merge 和 /diffpatch API。root 账号的高频暴力破解。很明显,开放了公网访问的自建服务已经被互联网上的自动化黑客扫描引擎(Bot / PoC 工具)标记并入侵/攻击了。
经过一步步溯源,我们将整个“病因链”梳理清晰:
[email protected]、gitea_exp 等)。针对上述问题,我们采取了“彻底清理 -> 关闭漏洞 -> 外部防线加固”的组合拳。
在容器中使用 Gitea 内置的 CLI 工具,可以直接物理粉碎恶意账号及其名下的所有仓库与数据库记录(加上 --purge 参数)。
打开 Gitea 容器终端(切换至 git 运行用户),运行以下 Shell 自动化脚本,一键粉碎除管理员(root)外的所有垃圾账号:
Bash
# 自动提取除了 root 以外的所有用户名,并执行彻底清理 (--purge)
for user in $(gitea admin user list --config /data/gitea/conf/app.ini | awk '{print $2}' | grep -v -E "^(root|Username)$"); do
echo "=========================================="
echo "正在彻底粉碎垃圾用户及其所有仓库: $user"
gitea admin user delete --username "$user" --purge --config /data/gitea/conf/app.ini
done
效果:一键清空数百个垃圾账户,NAS 磁盘与数据库占用瞬间恢复清爽,CPU 负载断崖式下跌至 0.3%。
app.ini)找到 Gitea 挂载目录下的配置文件 app.ini,重点修改以下三处:
Ini, TOML
[service]
; 1. 彻底禁用自主注册
DISABLE_REGISTRATION = true
; 2. 强制要求登录后才能查看任何内容(对公网未授权访问隐身)
REQUIRE_SIGNIN_VIEW = true
[openid]
; 3. 禁用 OpenID 注册/登录(防止攻击者绕过普通注册入口)
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false
修改完成后,重启容器使配置生效:
Bash
docker restart gitea-copy
针对 SSH 爆破与端口裸奔,实施以下三项加固:
38291)。cloudflared 容器,通过 Cloudflare Tunnel 暴露 Gitea 服务。对于个人或小团队自建私有云服务(Self-hosted),安全往往是最容易被忽略的环节。“暴露公网”不等于“开放给全世界”,切记遵循以下原则:
DISABLE_REGISTRATION = true),需要新账号时通过管理员后台手动添加。做完这套组合拳后,服务不仅运行得更加平稳,也彻底告别了公网黑客工具的无休止打扰!