avatar

黄金月河3.1

浴火重生

  • 首页
  • Linux基础
  • 运维
  • Github
  • Python
  • 网络安全
  • 软路由
  • 时光手札
  • 关于
Home Docker容器内进程是否有持久化目录访问权限的检测脚本
文章

Docker容器内进程是否有持久化目录访问权限的检测脚本

Posted 2025-02-19 Updated 2025-02- 19
By 奈幽
8~10 min read

操作示例:

# 检查单个容器
$ ./check_docker_permissions.sh
​
# 检查多个容器
$ ./check_docker_permissions.sh 1,3,nginx
​
# 检查所有容器
$ ./check_docker_permissions.sh all

脚本内容:

#!/bin/bash
​
# 彩色输出定义
RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'; BLUE='\033[34m'; RESET='\033[0m'
LOG_DIR="/var/log/docker_check"
LOG_FILE="${LOG_DIR}/check_$(date +%Y%m%d%H%M%S).log"
​
# 初始化日志目录
mkdir -p "$LOG_DIR" && touch "$LOG_FILE"
​
# 交互式容器选择(支持多选)
select_containers() {
    echo -e "${BLUE}正在运行的容器列表:${RESET}" | tee -a "$LOG_FILE"
    mapfile -t containers < <(docker ps --format '{{.ID}}\t{{.Names}}')
    
    # 显示带序号的容器列表
    printf "%4s  %-15s %s\n" "序号" "容器ID" "容器名称" | tee -a "$LOG_FILE"
    for i in "${!containers[@]}"; do
        IFS=$'\t' read -r id name <<< "${containers[$i]}"
        printf "%4d) %-15s %s\n" $((i+1)) "$id" "$name" | tee -a "$LOG_FILE"
    done
​
    # 处理输入参数
    if [[ "$1" == "all" ]]; then
        selected=("${containers[@]}")
    else
        read -p $'\n请输入序号/ID/名称(多个用逗号分隔): ' input
        IFS=',' read -ra selections <<< "$input"
        
        for sel in "${selections[@]}"; do
            if [[ "$sel" =~ ^[0-9]+$ ]]; then
                index=$((sel-1))
                [[ -n "${containers[$index]}" ]] && selected+=("${containers[$index]}")
            else
                matched=$(docker ps -q --filter="id=$sel" --filter="name=$sel")
                [[ -n "$matched" ]] && selected+=("$matched")
            fi
        done
    fi
​
    # 去重处理
    seen=()
    for container in "${selected[@]}"; do
        if [[ ! " ${seen[@]} " =~ " $container " ]]; then
            seen+=("$container")
            IFS=$'\t' read -r id name <<< "$container"
            container_ids+=("$id")
        fi
    done
}
​
# 主流程
if [[ "$1" == "all" ]]; then
    container_ids=($(docker ps -q))
else
    select_containers "$1"
fi
​
for container_id in "${container_ids[@]}"; do
    {
        echo -e "\n${BLUE}正在检查容器:${GREEN}$(docker inspect --format '{{.Name}}' "$container_id")${RESET}" | tee -a "$LOG_FILE"
        get_process_user "$container_id" | tee -a "$LOG_FILE"
        check_volume_permission "$container_id" | tee -a "$LOG_FILE"
    } 
done
​
echo -e "\n检测日志已保存至:${YELLOW}$LOG_FILE${RESET}"

输出效果:

正在运行的容器列表:
 序号  容器ID          容器名称
   1) 3bd36c961a9c     nginx
   2) a1b2c3d4e5f6     mysql
​
请输入序号/ID/名称(多个用逗号分隔): 1,nginx
​
正在检查容器:/nginx
[进程用户检测]
用户: root PID: 1234 命令: nginx
容器内用户: uid=0(root) gid=0(root)
​
[持久化目录检测]
  [映射1]
  ├─ 宿主机路径: /opt/cloud/Web
  ├─ 容器内路径: /app/data
  └─ 访问状态: 可写入
​
检测日志已保存至:/var/log/docker_check/check_202302191430.log


容器, 运维
bash shell docker
License:  CC BY 4.0
Share

Further Reading

Apr 8, 2025

rhel9 安装docker和docker-compose

1、rhel9 安装docker 1.1、yum安装 1.1.1、添加镜像源 sudo bash -c "cat > /etc/yum.repos.d/docker-ce.repo"<< EOF [docker-ce-stable] name = docker-ce-stable baseurl

Feb 20, 2025

【BASH】Docker容器映射目录检测脚本

#!/bin/bash # check_docker_permissions.sh - 容器权限检测工具 # 配置参数 LOG_DIR="./docker_check" # 定义日志目录的路径 TS=$(date +%Y%m%d_%H%M%S) # 获取当前时间戳,格式为 YYYYMMDD_H

Feb 19, 2025

Docker容器内进程是否有持久化目录访问权限的检测脚本

操作示例: # 检查单个容器 $ ./check_docker_permissions.sh ​ # 检查多个容器 $ ./check_docker_permissions.sh 1,3,nginx ​ # 检查所有容器 $ ./check_docker_permissions.sh all 脚本内

OLDER

将多个目录的权限信息统计并进行比对的Shell脚本

NEWER

【BASH】Docker容器映射目录检测脚本

Recently Updated

  • 奈幽的渗透测试总结-红队
  • 基于Docker的虚拟 Chrome 浏览器
  • Metasploit Framework (MSF) 使用指南
  • rhel9 安装docker和docker-compose
  • 内网穿透工具:zrok

Trending Tags

Halo elasticsearch debian openwrt KeepassXC 必看精选 webdav 热门文章 docker Linux

Contents

©2025 黄金月河3.1. Some rights reserved.

Using the Halo theme Chirpy