CentOS SFTP权限管理核心技巧
groupadd sftpusers创建专门的用户组,避免与系统用户混淆。usermod -aG sftpusers username将SFTP用户加入组,便于统一管理权限。-s /bin/false(如useradd -m -s /bin/false sftpuser),防止用户通过SSH登录系统,仅允许SFTP访问。/etc/ssh/sshd_config中添加Match Group sftpusers(或Match User username针对单个用户),设置ChrootDirectory %h(用户主目录作为根目录),并禁用端口转发(AllowTcpForwarding no)、X11转发(X11Forwarding no)等非必要功能。/home/username)必须归root:root所有,权限设为755(chown root:root /home/username; chmod 755 /home/username),确保用户无法修改根目录结构。/home/username/uploads),归用户及其所属组所有,权限设为775(chown username:sftpusers /home/username/uploads; chmod 775 /home/username/uploads),允许用户上传文件。755(drwxr-xr-x),确保用户只能访问自己的主目录,无法修改目录权限或删除目录本身。uploads)设为775(drwxrwxr-x),用户拥有读写执行权限,组用户可读可执行,避免其他用户访问。777(完全开放),防止恶意文件上传或篡改系统文件。enforcing模式,运行setsebool -P sftp_home_dir on,允许SFTP用户访问其主目录。semanage fcontext -a -t ssh_home_t "/home/username/uploads(/.*)?"添加安全上下文,再通过restorecon -Rv /home/username/uploads恢复上下文,确保SELinux允许SFTP操作。/etc/ssh/sshd_config中的Subsystem sftp /usr/libexec/openssh/sftp-server替换为Subsystem sftp internal-sftp,提升性能并简化配置。Match指令针对特定用户或组设置权限,例如Match User sftpuser仅限制该用户,Match Group sftpusers限制整个组,避免影响其他SSH用户。systemctl restart sshd使更改生效,确保权限设置生效。#!/bin/bash
USERNAME=$1
GROUPNAME="sftpusers"
# 创建组和用户
groupadd -f $GROUPNAME
useradd -m -s /bin/false -g $GROUPNAME $USERNAME
passwd $USERNAME
# 设置Chroot目录
CHROOT_DIR="/home/$USERNAME"
mkdir -p $CHROOT_DIR/uploads
chown root:root $CHROOT_DIR
chmod 755 $CHROOT_DIR
chown $USERNAME:$GROUPNAME $CHROOT_DIR/uploads
chmod 775 $CHROOT_DIR/uploads
# 配置SSH
sed -i "/Subsystem sftp/a Match Group $GROUPNAME\n ChrootDirectory %h\n ForceCommand internal-sftp\n AllowTcpForwarding no\n X11Forwarding no" /etc/ssh/sshd_config
# 重启SSH
systemctl restart sshd
使用./setup_sftp.sh username即可快速创建SFTP用户。tail -f /var/log/secure(CentOS 7)或journalctl -u sshd(CentOS 8/Stream)实时监控SFTP登录及操作日志,识别异常登录(如频繁失败尝试)或未授权访问。sshd_config中添加LogLevel VERBOSE,记录更详细的SFTP操作信息(如上传/下载的文件名、操作时间),便于后续审计。