WechatOnCloud/docker/woc-ptrace-init.sh

36 lines
1.3 KiB
Bash
Raw Normal View History

#!/usr/bin/with-contenv bash
# 设置 ptrace_scope=0允许 bridge 进程读取微信进程内存
# 用于 SQLCipher 密钥自动提取key_extractor.py 读 /proc/<pid>/mem
PTRACE_SCOPE="/proc/sys/kernel/yama/ptrace_scope"
# 检查容器是否拥有 SYS_PTRACE capability
# 通过 /proc/self/status 中的 CapEff 判断 bit 12 (CAP_SYS_PTRACE)
has_sys_ptrace() {
local cap_eff
cap_eff=$(awk '/^CapEff:/{print $2}' /proc/self/status 2>/dev/null)
if [ -z "$cap_eff" ]; then
return 1
fi
# CAP_SYS_PTRACE = 12掩码 0x1000
local mask
mask=$((0x${cap_eff} & 0x1000))
[ "$mask" -ne 0 ]
}
if [ -e "$PTRACE_SCOPE" ]; then
# 文件存在:尝试写入 0
if echo 0 > "$PTRACE_SCOPE" 2>/dev/null; then
echo "woc-ptrace: ptrace_scope 已设置为 0" >&2
else
echo "woc-ptrace: 无法写入 ptrace_scope可能需要 --privileged 或 SYS_PTRACE capability" >&2
fi
else
# 文件不存在YAMA 模块未加载(常见于 Docker Desktop WSL2 精简内核)
if has_sys_ptrace; then
echo "woc-ptrace: 宿主机未启用 YAMA$PTRACE_SCOPE 不存在),但容器已持有 SYS_PTRACEkey 提取仍可尝试" >&2
else
echo "woc-ptrace: 宿主机未启用 YAMA$PTRACE_SCOPE 不存在),且容器未持有 SYS_PTRACE自动 key 提取可能不可用" >&2
fi
fi