SFTP (SSH File Transfer Protocol) 是一种安全的文件传输协议,基于SSH协议实现。以下是配置SFTP服务器的详细步骤:
大多数Linux发行版默认包含OpenSSH服务器,如果没有安装:
# Ubuntu/Debian
sudo apt update
sudo apt install openssh-server
# CentOS/RHEL
sudo yum install openssh-server
编辑SSH配置文件 /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
确保以下配置项:
# 启用SFTP子系统
Subsystem sftp internal-sftp
# 禁用root登录(推荐)
PermitRootLogin no
# 允许密码认证(如果使用密钥认证可设为no)
PasswordAuthentication yes
# 创建SFTP用户组
sudo groupadd sftpusers
# 创建SFTP用户
sudo useradd -G sftpusers -s /bin/false sftpuser
sudo passwd sftpuser # 设置密码
# 创建SFTP根目录
sudo mkdir -p /var/sftp/uploads
# 设置目录所有权
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
# 为用户创建专用目录
sudo mkdir -p /var/sftp/uploads/sftpuser
sudo chown sftpuser:sftpusers /var/sftp/uploads/sftpuser
sudo chmod 700 /var/sftp/uploads/sftpuser
在 /etc/ssh/sshd_config
文件末尾添加:
Match Group sftpusers
ChrootDirectory /var/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/RHEL
sudo systemctl restart sshd
使用SFTP客户端连接测试:
sftp sftpuser@your_server_ip
生成密钥对(在客户端)
ssh-keygen -t rsa
将公钥上传到服务器
ssh-copy-id sftpuser@your_server_ip
在 /etc/ssh/sshd_config
中设置:
PasswordAuthentication no
PubkeyAuthentication yes
在 /etc/ssh/sshd_config
中添加:
Match Group sftpusers
# 限制带宽为100KB/s
ForceCommand internal-sftp -l 100
启用详细日志记录:
Subsystem sftp internal-sftp -l INFO -f AUTH
确保防火墙允许SSH端口(默认22):
# UFW (Ubuntu)
sudo ufw allow 22/tcp
# Firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
/var/log/auth.log
或 /var/log/secure
通过以上步骤,您应该已经成功配置了一个安全的SFTP服务器。根据您的具体需求,可以进一步调整配置参数。