SFTP(SSH File Transfer Protocol)是基于SSH协议的安全文件传输协议,具备以下核心优势:
SFTP依赖OpenSSH服务,大多数Linux系统默认安装,未安装时可通过以下命令完成:
sudo apt update && sudo apt install openssh-server -y
sudo yum install openssh-server -y
sudo dnf install openssh-server -y
安装完成后,启动SSH服务并设置开机自启:
sudo systemctl start sshd && sudo systemctl enable sshd
验证服务状态:
sudo systemctl status sshd # 应显示“active (running)”
编辑/etc/ssh/sshd_config(需root权限),按以下要求调整配置:
sudo nano /etc/ssh/sshd_config
Subsystem sftp行):Subsystem sftp internal-sftp # 使用OpenSSH内置的SFTP模块,性能更优
Match Group sftpusers # 匹配“sftpusers”组的用户
ChrootDirectory %h # 将用户限制在其主目录(%h代表用户家目录)
ForceCommand internal-sftp # 强制使用SFTP,禁止SSH登录
AllowTcpForwarding no # 禁用TCP转发(防止端口转发攻击)
X11Forwarding no # 禁用X11转发(避免图形界面漏洞)
注:若需允许普通SSH登录(非SFTP用户),可将
Match Group改为Match User sftpuser(针对单个用户)。
sudo groupadd sftpusers
sftpuser为例):sudo useradd -m -G sftpusers -s /bin/false sftpuser
参数说明:
-m:自动创建用户家目录(如/home/sftpuser);-G sftpusers:将用户添加到sftpusers组;-s /bin/false:禁止用户通过SSH登录(仅允许SFTP)。sudo passwd sftpuser # 输入两次密码(建议使用强密码)
SFTP的ChrootDirectory要求用户主目录必须由root拥有,且权限为755(防止用户修改目录结构):
sudo chown root:root /home/sftpuser # 主目录所有者为root
sudo chmod 755 /home/sftpuser # 主目录权限为755
sudo mkdir -p /home/sftpuser/uploads # 创建上传子目录
sudo chown sftpuser:sftpusers /home/sftpuser/uploads # 所有权给用户及组
sudo chmod 755 /home/sftpuser/uploads # 权限设为755(允许用户读写)
注:若需多个上传目录,可重复上述步骤(如
/home/sftpuser/downloads)。
修改配置文件后,需重启SSH服务使更改生效:
sudo systemctl restart sshd # Debian/Ubuntu/CentOS/RHEL
或(旧版本系统):
sudo service sshd restart
使用SFTP客户端连接服务器(以sftpuser为例):
sftp sftpuser@your_server_ip
输入密码后,若成功登录,将显示SFTP提示符(sftp>),可执行以下基本命令:
ls # 列出远程目录内容
cd uploads # 切换至上传目录
put local_file.txt # 上传本地文件至远程
get remote_file.txt # 下载远程文件至本地
mkdir test # 创建远程目录
exit # 退出SFTP会话
推荐使用以下工具(需提前安装):
编辑/etc/ssh/sshd_config,设置:
PermitRootLogin no # 禁止root用户直接SSH登录
重启SSH服务:
sudo systemctl restart sshd
ssh-keygen -t rsa -b 4096 # 生成RSA密钥(默认保存在~/.ssh/id_rsa)
ssh-copy-id sftpuser@your_server_ip # 自动将公钥复制到服务器的~/.ssh/authorized_keys
PasswordAuthentication no # 在/etc/ssh/sshd_config中设置
重启SSH服务后,仅能通过密钥登录。
确保防火墙允许SSH(默认端口22)流量:
sudo ufw allow 22/tcp
sudo ufw enable
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
保持系统和软件包最新,修复安全漏洞:
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
sudo yum update -y # CentOS/RHEL