#!/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
标签:TARGET,centos,用户,echo,USER,授权,SFTP,目录,DIR
From: https://www.cnblogs.com/guowenrui/p/18472261