1. OpenSSH版本要求
确保OpenSSH服务器版本至少为4.8p1,因为较新版本才支持ChrootDirectory等关键安全特性,旧版本可能无法正常配置SFTP限制。
2. 配置文件关键参数设置
编辑/etc/ssh/sshd_config文件,需重点调整以下参数:
Subsystem sftp internal-sftp替代默认的/usr/libexec/openssh/sftp-server,提升性能(internal-sftp在chroot环境下无需额外进程);Match Group sftpusers指定允许使用SFTP的用户组,后续配置仅对该组生效;ChrootDirectory %h,将用户限制在其主目录(%h为用户主目录占位符),防止访问系统其他路径;AllowTcpForwarding no和X11Forwarding no,关闭端口转发和X11图形转发,减少攻击面;PermitRootLogin no,避免root用户通过SFTP直接登录,降低权限滥用风险。3. 用户与组管理规范
groupadd sftpusers创建专门的用户组(如sftpusers),避免与其他用户混淆;useradd -G sftpusers -s /sbin/nologin username),并通过passwd username设置强密码(复杂度包含大小写字母、数字和符号,长度不低于8位);/sbin/nologin,防止用户通过SSH终端登录,仅允许SFTP访问。4. 目录权限严格配置
/home/username)及其所有上级目录的属主必须为root,属组可为root或sftpusers,权限设置为755(drwxr-xr-x),确保用户无法修改目录结构;upload),并设置chown username:sftpusers upload(属主为用户自身,属组为sftpusers)和chmod 755 upload(或775,若需组内用户写入),允许用户上传文件。5. SELinux配置适配
若系统启用SELinux(默认Enforcing模式),需调整策略以允许SFTP访问:
setenforce 0将SELinux设为Permissive模式,验证SFTP是否正常工作;/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive(需重启系统生效);semanage fcontext -a -t sftp_chroot_t "/path/to/chroot(/.*)?"和restorecon -Rv /path/to/chroot设置正确的SELinux上下文。6. 防火墙端口放行
确保防火墙允许SSH(默认端口22)流量通过,执行以下命令:
firewall-cmd --permanent --add-service=ssh(永久添加SSH服务)
firewall-cmd --reload(重新加载防火墙规则)
若使用iptables,需添加-A INPUT -p tcp --dport 22 -j ACCEPT规则。
7. 日志记录与监控
启用详细日志以跟踪SFTP活动,便于安全审计:
/etc/rsyslog.conf文件,添加local0.* /var/log/sftp.log(将SFTP日志定向到单独文件);systemctl restart rsyslog;/var/log/secure(系统认证日志)或/var/log/sftp.log,关注异常登录(如多次失败尝试)或未授权访问。8. 安全增强措施
PasswordAuthentication no),启用公钥认证(PubkeyAuthentication yes),为用户生成SSH密钥对(ssh-keygen -t rsa),将公钥(id_rsa.pub)添加到用户主目录的~/.ssh/authorized_keys文件中,提升认证安全性;yum update openssh-server更新SSH软件包,及时修复安全漏洞;/etc/ssh/sshd_config),防止数据丢失或配置错误导致的不可用。