This commit is contained in:
parent
e642eacf17
commit
4376bfd954
Binary file not shown.
18
install.sh
18
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
|
||||
|
|
|
|||
13
prepare.sh
13
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/"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 "重新登录终端后环境变量将被清除。"
|
||||
|
|
|
|||
Loading…
Reference in New Issue