本文目录导读:

- 文件/目录权限检查 (Linux/Unix)
- 用户/组权限检查 (Linux/Unix)
- Web应用权限检查 (Nginx/Apache)
- 数据库权限检查 (MySQL示例)
- 综合实战脚本:启动前权限检查
- 使用建议
权限检查脚本的写法取决于你要检查什么类型的“权限”(文件系统权限、用户权限、数据库权限、Web应用权限等),以下从最常用的场景出发,提供几个典型脚本。
文件/目录权限检查 (Linux/Unix)
基础案例:检查脚本是否可执行
#!/bin/bash
# 需要检查的脚本路径
SCRIPT_PATH="/path/to/your_script.sh"
if [ -x "$SCRIPT_PATH" ]; then
echo "✅ 文件可执行"
else
echo "❌ 文件不可执行,请运行: chmod +x $SCRIPT_PATH"
fi
进阶案例:检查读写执行权限
#!/bin/bash
file="/path/to/somefile"
if [ -r "$file" ]; then
echo "可读"
fi
if [ -w "$file" ]; then
echo "可写"
fi
if [ -x "$file" ]; then
echo "可执行"
fi
用户/组权限检查 (Linux/Unix)
检查是否为root用户
#!/bin/bash
if [ "$(id -u)" -eq 0 ]; then
echo "✅ 当前是root用户"
else
echo "❌ 需要root权限,请使用sudo执行"
exit 1
fi
检查用户是否在某个组中
#!/bin/bash
required_group="docker"
current_user=$(whoami)
# 检查当前用户是否在所需组中
if groups "$current_user" | grep -q "\b$required_group\b"; then
echo "✅ $current_user 在组 $required_group 中"
else
echo "❌ 请将 $current_user 添加到 $required_group 组,然后重新登录"
fi
Web应用权限检查 (Nginx/Apache)
检查目录权限是否能被Web服务器写入
#!/bin/bash
web_user="www-data"
# 检查上传目录是否可写
upload_dir="/var/www/html/uploads"
if sudo -u "$web_user" touch "$upload_dir/test_write_permission" 2>/dev/null; then
echo "✅ $web_user 可以写入 $upload_dir"
rm -f "$upload_dir/test_write_permission"
else
echo "❌ $web_user 无法写入 $upload_dir"
fi
数据库权限检查 (MySQL示例)
检查MySQL用户是否有特定数据库权限
#!/bin/bash
DB_USER="your_user"
DB_PASS="your_password"
DB_NAME="your_database"
# 检查SELECT权限
result=$(mysql -u "$DB_USER" -p"$DB_PASS" -e "SHOW GRANTS FOR CURRENT_USER()" 2>/dev/null | grep -c "SELECT ON \`$DB_NAME\`")
if [ "$result" -gt 0 ]; then
echo "✅ 用户拥有 $DB_NAME 的SELECT权限"
else
echo "❌ 用户缺少 $DB_NAME 的SELECT权限,请执行: GRANT SELECT ON $DB_NAME.* TO '$DB_USER'@'host';"
fi
综合实战脚本:启动前权限检查
这是一个实际项目中常用的启动检查脚本模板:
#!/bin/bash
# ===== 配置区 =====
REQUIRED_DIRS=("/var/log/myapp" "/var/data/myapp")
REQUIRED_FILES=("/etc/myapp/config.ini")
REQUIRED_USER="myapp"
REQUIRED_GROUP="myapp"
# ==================
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
check_and_exit() {
local status=$1
local message=$2
if [ "$status" -ne 0 ]; then
echo -e "${RED}[FAIL]${NC} $message"
exit 1
fi
}
echo "开始权限检查..."
echo "------------------------"
# 1. 检查是否为期望用户运行
CURRENT_USER=$(whoami)
if [ "$CURRENT_USER" != "$REQUIRED_USER" ]; then
echo -e "${YELLOW}[WARN]${NC} 当前用户: $CURRENT_USER, 期望用户: $REQUIRED_USER"
fi
# 2. 检查目录是否存在且可写
for dir in "${REQUIRED_DIRS[@]}"; do
if [ ! -d "$dir" ]; then
echo -e "${RED}[FAIL]${NC} 目录不存在: $dir"
exit 1
fi
if [ ! -w "$dir" ]; then
echo -e "${RED}[FAIL]${NC} 目录不可写: $dir"
exit 1
fi
echo -e "${GREEN}[OK]${NC} 目录 $dir"
done
# 3. 检查文件是否存在且可读
for file in "${REQUIRED_FILES[@]}"; do
if [ ! -f "$file" ]; then
echo -e "${RED}[FAIL]${NC} 文件不存在: $file"
exit 1
fi
if [ ! -r "$file" ]; then
echo -e "${RED}[FAIL]${NC} 文件不可读: $file"
exit 1
fi
echo -e "${GREEN}[OK]${NC} 文件 $file"
done
# 4. 检查当前用户是否在指定组中
if ! groups "$CURRENT_USER" | grep -q "$REQUIRED_GROUP"; then
echo -e "${YELLOW}[WARN]${NC} $CURRENT_USER 不在组 $REQUIRED_GROUP 中"
fi
echo "------------------------"
echo -e "${GREEN}权限检查通过!${NC}"
使用建议
- 根据场景选择:文件系统权限用
-r/-w/-x检查,用户权限用id/groups检查 - 错误处理:关键权限检查失败时应终止脚本执行(
exit 1) - 日志记录:生产环境建议将检查结果写入日志文件
- 最小权限原则:只检查必要的权限,不要过度授权
需要针对特定场景(如Windows权限、特定应用权限)的脚本吗?可以告诉我你的具体使用环境。