centos创建用户并仅授权访问某目录

#!/bin/bash

# 检查是否以 root 用户运行
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用 root 用户或 sudo 权限运行此脚本。"
    exit 1
fi

# 检查输入参数
if [ "$#" -ne 3 ]; then
    echo "用法: $0 <用户名> <密码> <授权目录>"
    exit 1
fi

# 用户输入部分
SFTP_USER="$1"
SFTP_PASSWORD="$2"
TARGET_DIR="$3"

# 创建新用户,并设置默认 shell 为 bash
echo "创建用户: $SFTP_USER"
useradd -m -s /bin/bash "$SFTP_USER"

# 设置用户密码
echo "设置用户密码..."
echo "$SFTP_USER:$SFTP_PASSWORD" | chpasswd

# 确保目标目录存在
if [ ! -d "$TARGET_DIR" ]; then
    echo "创建目录: $TARGET_DIR"
    mkdir -p "$TARGET_DIR"
fi

# 设置用户对目标目录的权限
echo "设置目标目录权限: $TARGET_DIR"
chown "$SFTP_USER:$SFTP_USER" "$TARGET_DIR"
chmod 755 "$TARGET_DIR"

# 限制用户仅能访问目标目录(通过更改用户的 home 目录)
echo "限制用户只读写指定目录..."
usermod -d "$TARGET_DIR" "$SFTP_USER"

# 配置文件权限,确保用户只能访问该目录及其子目录
echo "为用户设置写权限的上传目录..."
UPLOAD_DIR="$TARGET_DIR"
if [ ! -d "$UPLOAD_DIR" ]; then
    mkdir -p "$UPLOAD_DIR"
fi
chown "$SFTP_USER:$SFTP_USER" "$UPLOAD_DIR"
chmod 755 "$UPLOAD_DIR"

# 使用 ACL(访问控制列表)进一步限制对其他目录的访问
echo "通过 ACL 限制用户对其他目录的访问..."
setfacl -m u:"$SFTP_USER":rwx "$UPLOAD_DIR"
setfacl -R -m u:"$SFTP_USER":r-- "$TARGET_DIR"  # 限制对父目录的访问,但允许对子目录的读写

# 输出完成信息
echo "用户 $SFTP_USER 创建完成,限制其只能对 $UPLOAD_DIR 目录进行读写。"
echo "请记住更改密码为更安全的密码。"

exit 0
posted @ 2024-10-17 14:37  郭小睿  阅读(107)  评论(0编辑  收藏  举报