This commit is contained in:
Pan Qiancheng 2025-04-29 13:12:40 +08:00
parent e642eacf17
commit 4376bfd954
8 changed files with 158 additions and 124 deletions

BIN
dist/intercept.so vendored

Binary file not shown.

BIN
dist/main vendored

Binary file not shown.

View File

@ -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

View File

@ -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/"

View File

@ -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 <<EOF
{
"BASH_UUID": "$UUID",
"cpu_model": "$(echo "$CPU_MODEL" | sed 's/"/\\"/g')",
"architecture": "$ARCHITECTURE",
"pcie_devices": $PCIE_DEVICES_JSON
}
EOF
)
curl -s -o /dev/null -w "%{http_code}" \
--connect-timeout 5 --max-time 10 \
-X POST "$REGISTER_SERVER_URL" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"
fi

View File

@ -2,59 +2,64 @@
set -e
# 必须以 root 运行
SERVICE_NAME="bash-product-id.service"
UUID_DIR="/etc/bash_product"
UUID_FILE="$UUID_DIR/BASH_PRODUCT_ID"
SYSTEMD_SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME"
LOCAL_SCRIPT="./script/generate_bash_product_id.sh"
TARGET_SCRIPT="/usr/local/bin/generate_bash_product_id.sh"
# 必须 root
if [ "$(id -u)" -ne 0 ]; then
echo "❌ 请以 root 用户执行此脚本"
exit 1
fi
SERVICE_NAME="bash-product-id.service"
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 服务..."
# 检查源脚本
if [ ! -f "$LOCAL_SCRIPT" ]; then
echo "❌ 当前目录没有 $LOCAL_SCRIPT,无法继续"
exit 1
fi
# 创建必要的目录
# 拷贝生成脚本
cp "$LOCAL_SCRIPT" "$TARGET_SCRIPT"
chmod +x "$TARGET_SCRIPT"
echo "✅ 复制 $LOCAL_SCRIPT$TARGET_SCRIPT"
# 创建必要目录
mkdir -p "$UUID_DIR"
# 创建 systemd 服务文件
if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
# 写 systemd 服务
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
[Unit]
Description=Generate BASH_PRODUCT_ID if not exists
Description=Generate BASH_PRODUCT_ID if not exists and register
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c 'UUID_FILE=/etc/bash_product/BASH_PRODUCT_ID; \
if [ ! -f "\$UUID_FILE" ]; then \
UUID=\$(cat /proc/sys/kernel/random/uuid); \
echo "\$UUID" > "\$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"

View File

@ -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" <<EOL
[Unit]
Description=Generate BASH_PRODUCT_ID if not exists
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c 'UUID_FILE=/etc/bash_product/BASH_PRODUCT_ID; \
if [ ! -f "\$UUID_FILE" ]; then \
UUID=\$(cat /proc/sys/kernel/random/uuid); \
echo "\$UUID" > "\$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 "重新登录终端后环境变量将被清除。"

0
uninstall.sh Normal file → Executable file
View File