实用脚本能自动配置SFTP服务吗?

wen 实用脚本 2

本文目录导读:

实用脚本能自动配置SFTP服务吗?

  1. 使用方法
  2. 脚本功能说明
  3. 手动配置要点(如果你需要自定义)
  4. 验证是否成功

是的,可以编写脚本自动配置SFTP服务,以下是一个适用于Linux系统的Shell脚本示例,能自动完成SFTP服务的安装、用户创建和权限配置:

#!/bin/bash
# SFTP自动配置脚本
# 支持CentOS/RHEL 7+、Ubuntu 18.04+
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查root权限
if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}错误:请使用root权限运行此脚本${NC}"
   exit 1
fi
echo -e "${GREEN}=== SFTP服务自动配置脚本 ===${NC}"
# 变量配置
SFTP_USER="sftpuser"           # SFTP用户
SFTP_GROUP="sftpgroup"         # SFTP组
SFTP_HOME="/data/sftp"         # 根目录
SSH_PORT=22                    # SSH端口
CHROOT_DIR="/data/sftp"        # 限制目录
# 1. 检测系统并安装OpenSSH
echo -e "${YELLOW}[1/6] 检测系统并安装必要组件...${NC}"
if [ -f /etc/redhat-release ]; then
    # CentOS/RHEL
    yum install -y openssh-server openssh-clients
    systemctl enable sshd
elif [ -f /etc/lsb-release ] || [ -f /etc/debian_version ]; then
    # Ubuntu/Debian
    apt-get update
    apt-get install -y openssh-server
    systemctl enable ssh
else
    echo -e "${RED}不支持的Linux发行版${NC}"
    exit 1
fi
# 2. 创建SFTP组和用户
echo -e "${YELLOW}[2/6] 创建SFTP用户和组...${NC}"
# 创建组(如果不存在)
if ! getent group "$SFTP_GROUP" > /dev/null 2>&1; then
    groupadd "$SFTP_GROUP"
    echo -e "${GREEN}已创建组: $SFTP_GROUP${NC}"
fi
# 创建用户(如果不存在)
if ! id "$SFTP_USER" > /dev/null 2>&1; then
    # 创建用户,无登录shell,主目录在根目录下
    useradd -g "$SFTP_GROUP" -d "/$SFTP_USER" -s /sbin/nologin "$SFTP_USER"
    # 设置密码(建议后续手动修改)
    echo "${SFTP_USER}:Chang3Th1s!" | chpasswd
    echo -e "${YELLOW}警告:默认密码为 Chang3Th1s!,建议首次登录后修改${NC}"
    echo -e "${GREEN}已创建用户: $SFTP_USER${NC}"
else
    echo -e "${YELLOW}用户 $SFTP_USER 已存在,跳过创建${NC}"
fi
# 3. 创建SFTP目录结构
echo -e "${YELLOW}[3/6] 创建SFTP目录结构...${NC}"
# 创建根目录
mkdir -p "$SFTP_HOME"
# 创建用户专属上传目录
USER_DIR="$SFTP_HOME/$SFTP_USER/upload"
mkdir -p "$USER_DIR"
# 设置权限(重要!根目录必须属于root)
chown root:root "$SFTP_HOME"
chmod 755 "$SFTP_HOME"
# 用户目录权限
chown "$SFTP_USER:$SFTP_GROUP" "$SFTP_HOME/$SFTP_USER"
chmod 755 "$SFTP_HOME/$SFTP_USER"
# 上传目录权限
chown "$SFTP_USER:$SFTP_GROUP" "$USER_DIR"
chmod 755 "$USER_DIR"
echo -e "${GREEN}目录结构已创建于: $SFTP_HOME${NC}"
echo "├── $SFTP_HOME (root:root)"
echo "│   └── $SFTP_USER ($SFTP_USER:$SFTP_GROUP)"
echo "│       └── upload ($SFTP_USER:$SFTP_GROUP)"
# 4. 配置SSH服务(仅SFTP)
echo -e "${YELLOW}[4/6] 配置SSH服务...${NC}"
# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d_%H%M%S)
# 在文件末尾添加SFTP配置
cat >> /etc/ssh/sshd_config << EOF
# === SFTP 配置开始 ===
# 覆盖Subsystem配置
Subsystem sftp internal-sftp
# 限制SFTP用户组
Match Group $SFTP_GROUP
    ChrootDirectory $CHROOT_DIR/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
    PermitTTY no
    PasswordAuthentication yes
# === SFTP 配置结束 ===
EOF
echo -e "${GREEN}SSH配置已更新${NC}"
# 5. 重启SSH服务
echo -e "${YELLOW}[5/6] 重启SSH服务...${NC}"
if systemctl restart sshd || systemctl restart ssh; then
    echo -e "${GREEN}SSH服务已重启${NC}"
else
    echo -e "${RED}警告:SSH服务重启失败,请手动检查${NC}"
    exit 1
fi
# 6. 显示结果和测试信息
echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN}  SFTP服务配置完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "连接信息:"
echo -e "  主机: $(curl -s ifconfig.me || hostname -I | awk '{print $1}')"
echo -e "  端口: $SSH_PORT"
echo -e "  用户: $SFTP_USER"
echo -e "  密码: Chang3Th1s!"
echo ""
echo -e "目录结构:"
echo -e "  / (仅可查看)"
echo -e "  └── upload/ (可读写)"
echo ""
echo -e "测试命令:"
echo -e "  sftp -oPort=$SSH_PORT ${SFTP_USER}@<服务器IP>"
echo ""
echo -e "${YELLOW}安全建议:${NC}"
echo -e "  1. 使用 ssh-keygen 生成密钥对"
echo -e "  2. 修改密码或禁用密码登录"
echo -e "  3. 修改SSH默认端口(可选)"
echo -e "  4. 查看完整配置: cat /etc/ssh/sshd_config"

使用方法

  1. 保存脚本

    vi configure_sftp.sh
    # 粘贴脚本内容并保存
  2. 赋予执行权限

    chmod +x configure_sftp.sh
  3. 运行脚本

    sudo ./configure_sftp.sh

脚本功能说明

  • 自动检测:支持CentOS/RHEL和Ubuntu/Debian
  • 用户管理:创建专有SFTP用户和组
  • 目录隔离:使用ChrootDirectory限制用户目录
  • 权限正确:自动设置严格的目录权限
  • 安全加固:禁用shell访问,限制端口转发
  • 配置备份:备份原sshd_config文件

手动配置要点(如果你需要自定义)

修改配置文件

编辑 /etc/ssh/sshd_config

# 确保以下行正确
Subsystem sftp internal-sftp
# 用户组限制
Match Group sftpgroup
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
    PermitTTY no

目录权限黄金法则

/data/sftp          -> root:root (755)
/data/sftp/user     -> root:root (755)  # 必须root
/data/sftp/user/upload -> user:sftpgroup (755)

安全强化建议

# 禁用密码登录(仅使用密钥)
PasswordAuthentication no
# 限制IP访问(仅允许特定IP)
Match Address 192.168.1.0/24

验证是否成功

# 测试连接
sftp -oPort=22 sftpuser@localhost
# 检查进程
ps aux | grep sftp
# 查看日志
tail -f /var/log/auth.log  # Debian/Ubuntu
tail -f /var/log/secure    # CentOS/RHEL

这个脚本提供了一个完整的SFTP自动化配置方案,可直接用于生产环境,如果需要更复杂的配置(如多用户、配额限制、日志审计等),可以在此基础上扩展。

抱歉,评论功能暂时关闭!