Selaa lähdekoodia

refactor: 去除sudo密码输入&添加删除目录安全检查逻辑

HeWang 9 kuukautta sitten
vanhempi
commit
8a9aa11fc0
1 muutettua tiedostoa jossa 53 lisäystä ja 9 poistoa
  1. 53 9
      map_update/run_map_update.sh

+ 53 - 9
map_update/run_map_update.sh

@@ -1,31 +1,75 @@
 #!/bin/bash
+# 检查到未定义的变量则停止执行并报错
+set -u
 
 # 检查参数数量
-if [ "$#" -ne 3 ]; then
+if [ "$#" -ne 2 ]; then
   echo "Error: Incorrect number of arguments"
-  echo "Usage: $0 arg1 arg2 arg3"
+  echo "Usage: $0 arg1 arg2"
   exit 1
 fi
 
-SUDO_PASSWORD=$1
-CONTAINER_NAME=$2
-DOWNLOAD_FILE_PATH=$3
+CONTAINER_NAME=$1
+DOWNLOAD_FILE_PATH=$2
 UPDATE_DATA_PATH="/home/cicv/work/pji_desktop/map_update/data"
 CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master"
 
+SENSITIVE_DIRS=(
+  "/"
+  "/bin"
+  "/boot"
+  "/dev"
+  "/etc"
+  "/home"
+  "/lib"
+  "/lib64"
+  "/opt"
+  "/proc"
+  "/root"
+  "/sbin"
+  "/sys"
+  "/tmp"
+  "/usr"
+  "/var"
+  "/home/cicv"
+)
+
+is_sensitive_directory() {
+  local dir="$1"
+
+  for sensitive_dir in "${SENSITIVE_DIRS[@]}"; do
+    if [[ "$dir" == "$sensitive_dir" ]]; then
+      return 0 # 敏感目录
+    fi
+  done
+
+  return 1 # 非敏感目录
+}
+
 # 清除历史文件
-echo "$SUDO_PASSWORD" | sudo -S rm -rf $UPDATE_DATA_PATH/*
+# 检查要删除的目录是否为空
+if [[ -z "$UPDATE_DATA_PATH" ]]; then
+  echo "Error: Variable UPDATE_DATA_PATH is not set or empty"
+  exit 1
+fi
+# 检查要删除的目录是否为敏感目录
+if is_sensitive_directory "$UPDATE_DATA_PATH"; then
+    echo "Error: '$UPDATE_DATA_PATH' is a sensitive directory and can not be deleted!"
+    exit 1
+fi
+# 删除对应目录
+sudo rm -rf "$UPDATE_DATA_PATH"
 
 # 解压地图更新对应的压缩包
 unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH"
 
 # 检查容器启动状态
-if [ "$(echo "$SUDO_PASSWORD" | sudo -S docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
+if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
   echo "Container $CONTAINER_NAME is already running."
 else
   echo "Starting container $CONTAINER_NAME..."
-  echo "$SUDO_PASSWORD" | sudo -S docker start "$CONTAINER_NAME"
+  docker start "$CONTAINER_NAME"
 fi
 
 # 容器内执行地图更新脚本
-echo "$SUDO_PASSWORD" | sudo -S docker exec "$CONTAINER_NAME" /bin/bash -c "source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"
+docker exec "$CONTAINER_NAME" /bin/bash -c "source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"