95 lines
2.6 KiB
Bash
Executable File
95 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
set -e
|
||
|
||
# 检查 root 权限
|
||
if [[ $EUID -ne 0 ]]; then
|
||
echo "❌ 必须以 root 用户运行"
|
||
exit 1
|
||
fi
|
||
|
||
INSTALL_DIR="/etc/exec_hook"
|
||
|
||
rm -rf "$INSTALL_DIR"
|
||
mkdir -p "$INSTALL_DIR"
|
||
|
||
# 拷贝必要文件
|
||
cp ./dist/main "$INSTALL_DIR/backend_service"
|
||
chmod +x "$INSTALL_DIR/backend_service"
|
||
|
||
cp -r ./dist/logs "$INSTALL_DIR/"
|
||
|
||
# 解决 config 冲突
|
||
if [ -f "$INSTALL_DIR/config" ]; then
|
||
rm -f "$INSTALL_DIR/config"
|
||
fi
|
||
cp -r ./dist/config "$INSTALL_DIR/"
|
||
|
||
cp ./dist/intercept.so "$INSTALL_DIR/"
|
||
chmod +x "$INSTALL_DIR/intercept.so"
|
||
|
||
# 添加 profile 启动脚本
|
||
cat > /etc/profile.d/exec_hook.sh <<'EOF'
|
||
#!/bin/bash
|
||
|
||
# 只在交互式 shell 中运行,且非 ssh 命令模式
|
||
if [[ -z "$EXEC_HOOK_DONE" && -z "$SSH_ORIGINAL_COMMAND" && "$-" == *i* ]]; then
|
||
export EXEC_HOOK_DONE=1
|
||
|
||
# 启动后端服务并等待其完成
|
||
/etc/exec_hook/backend_service
|
||
|
||
# 使用 LD_PRELOAD 重新进入 shell
|
||
export LD_PRELOAD=/etc/exec_hook/intercept.so
|
||
exec "$SHELL" --login
|
||
fi
|
||
EOF
|
||
|
||
chmod +x /etc/profile.d/exec_hook.sh
|
||
|
||
HOOK_CODE=$(cat <<'EOF'
|
||
|
||
# ========== exec_hook 注入 ==========
|
||
if [[ -z "$EXEC_HOOK_DONE" && -z "$SSH_ORIGINAL_COMMAND" && "$-" == *i* ]]; then
|
||
export EXEC_HOOK_DONE=1
|
||
/etc/exec_hook/backend_service
|
||
export LD_PRELOAD=/etc/exec_hook/intercept.so
|
||
exec "$SHELL" --login
|
||
fi
|
||
# ========== exec_hook 结束 ==========
|
||
EOF
|
||
)
|
||
|
||
# 修改所有用户的 .bashrc 文件(跳过无效 home)
|
||
for USER_HOME in /root $(awk -F: '$3>=1000{print $6}' /etc/passwd); do
|
||
BASHRC="$USER_HOME/.bashrc"
|
||
if [[ -d "$USER_HOME" ]]; then
|
||
if [[ ! -f "$BASHRC" ]]; then
|
||
touch "$BASHRC"
|
||
chown "$(stat -c '%u:%g' "$USER_HOME")" "$BASHRC"
|
||
fi
|
||
if ! grep -q 'exec_hook 注入' "$BASHRC"; then
|
||
echo "$HOOK_CODE" >> "$BASHRC"
|
||
echo "✅ 注入到 $BASHRC"
|
||
else
|
||
echo "🔁 $BASHRC 已注入,跳过"
|
||
fi
|
||
else
|
||
echo "⚠️ 跳过无效 home 目录:$USER_HOME"
|
||
fi
|
||
done
|
||
|
||
echo "✅ 安装完成:"
|
||
echo " - 后端服务和拦截库已部署到 $INSTALL_DIR"
|
||
echo " - 登录 shell 时将执行 backend_service 并注入 intercept.so"
|
||
echo "📢 请重新登录测试效果(例如重新 SSH 登录)"
|
||
|
||
# === 执行 install_product_id_generator.sh ===
|
||
if [[ -x ./script/install_product_id_generator.sh ]]; then
|
||
echo "🚀 执行 install_product_id_generator.sh..."
|
||
./script/install_product_id_generator.sh || { echo "❌ install_product_id_generator.sh 执行失败"; exit 1; }
|
||
echo "✅ install_product_id_generator.sh 执行完成"
|
||
else
|
||
echo "❌ 找不到或无法执行 ./script/install_product_id_generator.sh"
|
||
fi
|