diff --git a/dist/intercept.so b/dist/intercept.so index ce28bf3..de011b8 100755 Binary files a/dist/intercept.so and b/dist/intercept.so differ diff --git a/dist/main b/dist/main index de111ab..6e098c3 100755 Binary files a/dist/main and b/dist/main differ diff --git a/install.sh b/install.sh index 6f0fccc..53e9bb5 100755 --- a/install.sh +++ b/install.sh @@ -8,6 +8,15 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi +# === 执行 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 + INSTALL_DIR="/etc/exec_hook" rm -rf "$INSTALL_DIR" @@ -83,12 +92,3 @@ 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 diff --git a/prepare.sh b/prepare.sh index 7def5f7..c8237aa 100755 --- a/prepare.sh +++ b/prepare.sh @@ -6,7 +6,8 @@ set -e SOURCE_MAIN="../bash_go_service/main" SOURCE_CONFIG="../bash_go_service/config/config.yaml" SOURCE_INSTALL_SCRIPT="../bash_go_service/install_product_id_generator.sh" -SOURCE_UNINSTALL_SCRIPT="../bash_go_service/install_product_id_generator.sh" +SOURCE_UNINSTALL_SCRIPT="../bash_go_service/uninstall_product_id_generator.sh" +SOURCE_REG_SCRIPT="../bash_go_service/generate_bash_product_id.sh" SOURCE_INTERCEPT_SO="../execve_hook/build/intercept.so" DEST_DIST="./dist" @@ -15,6 +16,7 @@ DEST_CONFIG="$DEST_DIST/config" DEST_SCRIPT="./script" DEST_INSTALL_SCRIPT="$DEST_SCRIPT/install_product_id_generator.sh" DEST_UNINSTALL_SCRIPT="$DEST_SCRIPT/uninstall_product_id_generator.sh" +DEST_REG_SCRIPT="$DEST_SCRIPT/generate_bash_product_id.sh" # 检查 main 是否存在且为可执行文件 if [[ ! -x "$SOURCE_MAIN" ]]; then @@ -69,6 +71,15 @@ else exit 1 fi +# 拷贝 generate_bash_product_id.sh(强制覆盖) +if [[ -r "$SOURCE_REG_SCRIPT" ]]; then + cp -f "$SOURCE_REG_SCRIPT" "$DEST_REG_SCRIPT" + echo "已复制 generate_bash_product_id.sh 到 $DEST_SCRIPT/" +else + echo "错误:$SOURCE_REG_SCRIPT 不可读取或不存在" + exit 1 +fi + # 拷贝 intercept.so if [[ -r "$SOURCE_INTERCEPT_SO" ]]; then cp "$SOURCE_INTERCEPT_SO" "$DEST_DIST/" diff --git a/script/generate_bash_product_id.sh b/script/generate_bash_product_id.sh new file mode 100644 index 0000000..b026c41 --- /dev/null +++ b/script/generate_bash_product_id.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +UUID_FILE="/etc/bash_product/BASH_PRODUCT_ID" +REGISTER_SERVER_URL="https://bash-backend.zustmyy.top/endpoint/register" + +# 如果 UUID 文件不存在,就生成 +if [ ! -f "$UUID_FILE" ]; then + UUID=$(cat /proc/sys/kernel/random/uuid) + echo "$UUID" > "$UUID_FILE" + chmod 644 "$UUID_FILE" + + # 收集硬件信息 + CPU_MODEL=$(lscpu | grep "Model name" | awk -F: '{print $2}' | sed 's/^ *//') + ARCHITECTURE=$(uname -m) + PCIE_DEVICES_RAW=$(timeout 3s lspci || true) + + if [ -z "$CPU_MODEL" ] || [ -z "$ARCHITECTURE" ]; then + echo "❌ 无法收集到CPU或系统架构信息,注册终止" + exit 1 + fi + + if [ -z "$PCIE_DEVICES_RAW" ]; then + PCIE_DEVICES_JSON="[]" + else + PCIE_DEVICES_JSON="[" + while IFS= read -r line; do + ESCAPED_LINE=$(echo "$line" | sed 's/"/\\"/g') + PCIE_DEVICES_JSON+="\"$ESCAPED_LINE\"," + done <<< "$PCIE_DEVICES_RAW" + PCIE_DEVICES_JSON="${PCIE_DEVICES_JSON%,}]" + fi + + # 发送注册 + JSON_PAYLOAD=$(cat < "$SYSTEMD_SERVICE_FILE" < "$SYSTEMD_SERVICE_FILE" < "\$UUID_FILE"; \ - chmod 644 "\$UUID_FILE"; \ - fi' +ExecStart=$TARGET_SCRIPT [Install] WantedBy=multi-user.target EOL - echo "✅ systemd 服务文件已创建。" -fi +echo "✅ 写入 systemd 服务文件 $SYSTEMD_SERVICE_FILE" -# 1. 配置PAM环境变量 -echo "配置 PAM 环境变量..." +# 配置 PAM 环境变量 if ! grep -q "BASH_PRODUCT_ID" /etc/security/pam_env.conf; then echo 'BASH_PRODUCT_ID DEFAULT="unset" OVERRIDE=`cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset"`' >> /etc/security/pam_env.conf + echo "✅ 配置 PAM 环境变量 (/etc/security/pam_env.conf)" fi -# 2. 配置全局环境变量 -echo "配置 /etc/environment..." +# 配置 /etc/environment grep -v "BASH_PRODUCT_ID" /etc/environment > /etc/environment.tmp || true echo 'BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset")' >> /etc/environment.tmp mv /etc/environment.tmp /etc/environment +echo "✅ 配置 /etc/environment" -# 3. 配置profile.d脚本 -echo "配置 profile.d 脚本..." +# 配置 /etc/profile.d 脚本 cat > /etc/profile.d/bash-product-id.sh <<'EOL' #!/bin/bash if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then @@ -64,9 +69,9 @@ else fi EOL chmod +x /etc/profile.d/bash-product-id.sh +echo "✅ 配置 /etc/profile.d/bash-product-id.sh" -# 4. 配置bash.bashrc -echo "配置 /etc/bash.bashrc..." +# 配置 bash.bashrc BASHRC_CONFIG=' # BASH_PRODUCT_ID environment variable if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then @@ -74,27 +79,26 @@ if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then else export BASH_PRODUCT_ID="unset" fi' - if ! grep -q "BASH_PRODUCT_ID" /etc/bash.bashrc; then echo "$BASHRC_CONFIG" >> /etc/bash.bashrc + echo "✅ 配置 /etc/bash.bashrc" fi -# 重新加载 systemd 配置并启用服务 +# 重载 systemd & 启用服务 systemctl daemon-reload systemctl enable "$SERVICE_NAME" systemctl start "$SERVICE_NAME" +echo "✅ systemd 服务已启用并启动" + +# 应用环境变量 +source /etc/profile.d/bash-product-id.sh echo "" -echo "✅ 配置完成!" -echo "当前设置:" +echo "🎉 安装完成!当前 BASH_PRODUCT_ID 设置:" if [ -f "$UUID_FILE" ]; then - echo "BASH_PRODUCT_ID=$(cat $UUID_FILE)" -else + BASH_PRODUCT_ID=$(cat "$UUID_FILE") + echo "BASH_PRODUCT_ID=$BASH_PRODUCT_ID" +else echo "BASH_PRODUCT_ID=unset" fi echo "" -echo "重新登录终端后环境变量将自动加载。" -echo "立即生效请执行以下任一命令:" -echo "source /etc/bash.bashrc" -echo "source /etc/profile.d/bash-product-id.sh" -echo "source /etc/environment" diff --git a/script/uninstall_product_id_generator.sh b/script/uninstall_product_id_generator.sh index 8dd34f5..a4bf18f 100755 --- a/script/uninstall_product_id_generator.sh +++ b/script/uninstall_product_id_generator.sh @@ -9,92 +9,59 @@ if [ "$(id -u)" -ne 0 ]; then fi SERVICE_NAME="bash-product-id.service" -UUID_DIR="/etc/bash_product" +UUID_DIR="/etc/bash_product" UUID_FILE="$UUID_DIR/BASH_PRODUCT_ID" SYSTEMD_SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME" -echo "🔧 配置 BASH_PRODUCT_ID 服务..." +echo "🔧 开始卸载 BASH_PRODUCT_ID 服务..." -# 创建必要的目录 -mkdir -p "$UUID_DIR" - -# 创建 systemd 服务文件 -if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then - cat > "$SYSTEMD_SERVICE_FILE" < "\$UUID_FILE"; \ - chmod 644 "\$UUID_FILE"; \ - fi' - -[Install] -WantedBy=multi-user.target -EOL - echo "✅ systemd 服务文件已创建。" +# 停止并禁用 systemd 服务 +if systemctl is-active "$SERVICE_NAME" &>/dev/null; then + echo "停止 systemd 服务..." + systemctl stop "$SERVICE_NAME" fi -# 1. 配置PAM环境变量 -echo "配置 PAM 环境变量..." -if ! grep -q "BASH_PRODUCT_ID" /etc/security/pam_env.conf; then - echo 'BASH_PRODUCT_ID DEFAULT="unset" OVERRIDE=`cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset"`' >> /etc/security/pam_env.conf +if systemctl is-enabled "$SERVICE_NAME" &>/dev/null; then + echo "禁用 systemd 服务..." + systemctl disable "$SERVICE_NAME" fi -# 2. 配置全局环境变量 -echo "配置 /etc/environment..." -grep -v "BASH_PRODUCT_ID" /etc/environment > /etc/environment.tmp || true -echo 'BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset")' >> /etc/environment.tmp -mv /etc/environment.tmp /etc/environment - -# 3. 配置profile.d脚本 -echo "配置 profile.d 脚本..." -cat > /etc/profile.d/bash-product-id.sh <<'EOL' -#!/bin/bash -if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then - export BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID) -else - export BASH_PRODUCT_ID="unset" -fi -EOL -chmod +x /etc/profile.d/bash-product-id.sh - -# 4. 配置bash.bashrc -echo "配置 /etc/bash.bashrc..." -BASHRC_CONFIG=' -# BASH_PRODUCT_ID environment variable -if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then - export BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID) -else - export BASH_PRODUCT_ID="unset" -fi' - -if ! grep -q "BASH_PRODUCT_ID" /etc/bash.bashrc; then - echo "$BASHRC_CONFIG" >> /etc/bash.bashrc +# 删除 systemd 服务文件 +if [ -f "$SYSTEMD_SERVICE_FILE" ]; then + echo "删除 systemd 服务文件..." + rm -f "$SYSTEMD_SERVICE_FILE" fi -# 重新加载 systemd 配置并启用服务 +# 删除 UUID 目录及文件 +if [ -d "$UUID_DIR" ]; then + echo "删除 UUID 目录及文件..." + rm -rf "$UUID_DIR" +fi + +# 清理 PAM 环境变量配置 +echo "清理 PAM 环境变量配置..." +sed -i '/BASH_PRODUCT_ID/d' /etc/security/pam_env.conf + +# 清理全局环境变量配置 +echo "清理全局环境变量配置..." +sed -i '/BASH_PRODUCT_ID/d' /etc/environment + +# 删除 profile.d 脚本 +if [ -f "/etc/profile.d/bash-product-id.sh" ]; then + echo "删除 profile.d 脚本..." + rm -f "/etc/profile.d/bash-product-id.sh" +fi + +# 清理 bash.bashrc 配置 +echo "清理 bash.bashrc 配置..." +# 删除包含 BASH_PRODUCT_ID 的行及其前后的空行 +sed -i '/# BASH_PRODUCT_ID/,/^fi$/d' /etc/bash.bashrc +sed -i '/^$/N;/^\n$/D' /etc/bash.bashrc + +# 重新加载 systemd 配置 systemctl daemon-reload -systemctl enable "$SERVICE_NAME" -systemctl start "$SERVICE_NAME" echo "" -echo "✅ 配置完成!" -echo "当前设置:" -if [ -f "$UUID_FILE" ]; then - echo "BASH_PRODUCT_ID=$(cat $UUID_FILE)" -else - echo "BASH_PRODUCT_ID=unset" -fi -echo "" -echo "重新登录终端后环境变量将自动加载。" -echo "立即生效请执行以下任一命令:" -echo "source /etc/bash.bashrc" -echo "source /etc/profile.d/bash-product-id.sh" -echo "source /etc/environment" +echo "✅ 卸载完成!" +echo "所有 BASH_PRODUCT_ID 相关配置已移除。" +echo "重新登录终端后环境变量将被清除。" diff --git a/uninstall.sh b/uninstall.sh old mode 100644 new mode 100755