bash_agant_install/install.sh

95 lines
2.6 KiB
Bash
Executable File
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
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