介绍
SFTP(SSH File Transfer Protocol)即 SSH 文件传输协议。它是一种基于 SSH(Secure Shell)协议的安全文件传输协议,用于在网络中的不同主机之间安全地传输文件。SSH 协议提供了加密和身份验证功能,SFTP 利用这些功能来确保文件传输过程中的数据安全。
详细配置步骤
1、创建sftp用户
创建一个sftptest的测试用户,并设置密码
2、定义并创建sftp的数据接受目录
假设sftp接受文件的根目录是:/data/sftp/sftptest/,接受文件的目录是/data/sftp/sftptest/sftprecive
注意:/data/sftp/sftptest/的根目录的所属用户和所属组设置成root:root,接受文件的目录设置成sftptest:sftptest,不然会无法上传文件;
3、修改配置文件
vi /etc/ssh/sshd_config
添加下面配置:
PermitRootLogin yes
Subsystem sftp internal-sftp
Match User sftptest
ChrootDirectory /data/sftp/sftptest/
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
注意事项:
> ChrootDirectory 绑定的目录的权限都是root:root,需要接收的文件的所属所组设置成sftptest:sftptest
> 如果需要修改修改sftp的默认端口:vi /etc/ssh/sshd_config
Port 2222
注意:修改sftp的默认端口也会修改ssh的连接端口
4、重启sshd
systemctl restart sshd
5、测试上传文件
上传文件成功,sftp配置完成
> 如果修改了默认端口,使用命令 sftp -P 2222 sftptest@192.168.216.105 进行连接
配置项详细解析
Subsystem sftp
定义 SFTP 子系统的启动命令。默认情况下,它可能是Subsystem sftp /usr/lib/ssh/sftp - server,这是调用外部的 SFTP 服务器程序来处理 SFTP 请求。如果要使用内部的 SFTP 子系统并限制用户目录(Chroot Jail),可以修改为Subsystem sftp internal-sftp -d <用户起始目录>
Match User
这个配置块允许针对特定用户进行配置。例如,Match User sftpuser表示下面的配置项将仅应用于sftpuser这个用户。
ChrootDirectory
设置用户的根目录(Chroot Jail)。例如,ChrootDirectory /home/sftpuser会将用户sftpuser限制在/home/sftpuser目录及其子目录中进行操作。需要注意的是,这个目录的所有者应该是root,并且权限应该是严格限制的(如755),以防止安全漏洞。
ForceCommand
强制用户执行特定的命令。例如,ForceCommand internal-sftp会强制用户使用内部 SFTP 子系统进行文件传输,而不能执行其他可能有安全风险的命令,如bash或其他 shell 命令。
AllowTCPForwarding
用于控制是否允许用户通过 SSH 隧道进行 TCP 转发。设置为no,如AllowTCPForwarding no,会禁止用户进行 TCP 转发。TCP 转发可能会被恶意利用来绕过安全限制。
X11Forwarding
X11Forwarding配置项用于控制是否允许将服务器端的 X11 图形应用程序的显示内容转发到本地客户端。它使得用户能够在本地机器上查看和操作远程服务器上运行的 X11 应用程序,同时利用 SSH 的安全机制来保障数据传输的安全性。
QA
This service allows sftp connections only
ssh登录账户跟sftp账户是同一个账户,ssh登录报错
解决方案:
vi /etc/ssh/sshd_config
注释掉sftp的其他配置,使用默认的配置,并限制sftp的默认目录,这个可以避免sftp登录后遍历一些敏感目录(比如:/etc/passwd)
测试:
sftp sftptest@192.168.216.105
ssh sftptest@192.168.216.105