冰朔 875b4c2381 LL-007 · pre-op-guard 导航挑战 · 服务器操作前强制全局地图
- pre-op-guard.py: 前置操作守门人,人格体登录时锁定服务器,必须完成导航地图验证
- module-registry.hdlp: 模块编码体系 + 注册协议
- module-register.sh: 一键注册模块到服务器
- OPERATION-MANUAL.hdlp v1.1: 新增第八节 服务器操作前导航挑战
- INDEX.hdlp: 注册新文件

设计:
  人格体登录 → 服务器自我审计 → 锁定 → 挑战:找出所有模块编码
  人格体探索 → 收集编码 → 提交 → 服务器比对
  一致 → 解锁 · 人格体知道全局地图 · 不会再改A坏B

[SEC-CLEAN] · pre-op-guard 已就绪
2026-07-11 16:28:05 +08:00

123 lines
3.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ═══════════════════════════════════════════════════════════
# 光湖语言系统 · 模块注册脚本
# 服务器上任一模块启动时调用 · 自动写入注册文件
#
# 用法:
# module-register.sh --server GZ006 --func GTW --name "Gatekeeper" --port 8922
# module-register.sh --stop GZ006-GTW-01
# ═══════════════════════════════════════════════════════════
REGISTRY_DIR="/opt/zhuyuan/registry/modules.d"
mkdir -p "$REGISTRY_DIR"
# ── 停止模式 ──
if [ "$1" = "--stop" ]; then
CODE="$2"
if [ -z "$CODE" ]; then
echo "用法: $0 --stop {CODE}" >&2
exit 1
fi
REG_FILE="$REGISTRY_DIR/MOD-${CODE}.json"
if [ -f "$REG_FILE" ]; then
python3 -c "
import json, sys
try:
with open('$REG_FILE', 'r') as f:
data = json.load(f)
data['status'] = 'stopped'
data['stopped_at'] = '$(date -u +%Y-%m-%dT%H:%M:%SZ)'
with open('$REG_FILE', 'w') as f:
json.dump(data, f, indent=2)
print(f'⊢ 模块 {data[\"code\"]} 已标记为已停止')
except Exception as e:
print(f'⚠ 更新注册文件失败: {e}', file=sys.stderr)
"
fi
exit 0
fi
# ── 注册模式 ──
SERVER=""
FUNC=""
NAME=""
PORT=""
PROTOCOL="tcp"
DESCRIPTION=""
PID="$$"
while [ $# -gt 0 ]; do
case "$1" in
--server) SERVER="$2"; shift 2 ;;
--func) FUNC="$2"; shift 2 ;;
--name) NAME="$2"; shift 2 ;;
--port) PORT="$2"; shift 2 ;;
--protocol) PROTOCOL="$2"; shift 2 ;;
--description) DESCRIPTION="$2"; shift 2 ;;
--pid) PID="$2"; shift 2 ;;
*) shift ;;
esac
done
if [ -z "$SERVER" ] || [ -z "$FUNC" ] || [ -z "$NAME" ]; then
echo "❌ 缺少必要参数: --server --func --name" >&2
exit 1
fi
# 计算序号(同一服务器+功能下,取最大序号+1
SEQ=1
for f in "$REGISTRY_DIR"/MOD-${SERVER}-${FUNC}-*.json; do
if [ -f "$f" ]; then
existing_seq=$(basename "$f" .json | grep -oE '[0-9]+$')
if [ -n "$existing_seq" ] && [ "$existing_seq" -ge "$SEQ" ]; then
SEQ=$((existing_seq + 1))
fi
fi
done
# 格式化序号为两位
SEQ_FMT=$(printf "%02d" "$SEQ")
CODE="${SERVER}-${FUNC}-${SEQ_FMT}"
REG_FILE="$REGISTRY_DIR/MOD-${CODE}.json"
TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ)
python3 -c "
import json
data = {
'code': '${CODE}',
'server': '${SERVER}',
'function': '${FUNC}',
'name': '${NAME}',
'port': ${PORT:-0},
'protocol': '${PROTOCOL}',
'description': '${DESCRIPTION}',
'pid': ${PID},
'started_at': '${TIMESTAMP}',
'registered_at': '${TIMESTAMP}',
'status': 'running'
}
with open('${REG_FILE}', 'w') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print(f'✅ 模块已注册: {data[\"code\"]}')
print(f' 名称: ${NAME}')
print(f' 文件: MOD-${CODE}.json')
" 2>/dev/null || {
# Python3 不可用时的降级方案(纯 shell 写 JSON
cat > "$REG_FILE" << JSONEOF
{
"code": "${CODE}",
"server": "${SERVER}",
"function": "${FUNC}",
"name": "${NAME}",
"port": ${PORT:-0},
"protocol": "${PROTOCOL}",
"description": "${DESCRIPTION}",
"pid": ${PID},
"started_at": "${TIMESTAMP}",
"registered_at": "${TIMESTAMP}",
"status": "running"
}
JSONEOF
echo "✅ 模块已注册: ${CODE}"
}