SFTP与FTPS对比及SFTP是否需FTP服务器?Ubuntu实例问题咨询
先直接给你明确的答案,再逐个拆解你的疑问:
SFTP 是否需要 FTP 服务器?
完全不需要!SFTP(SSH File Transfer Protocol)和传统FTP是完全独立的协议——它是基于SSH协议实现的文件传输功能,只要你的Ubuntu实例上运行着SSH服务(也就是sshd,Ubuntu 16.04默认会安装openssh-server包,端口22就是SSH的默认端口),就自带了SFTP能力,不需要额外安装任何FTP服务器软件。你现在用WinSCP通过端口22连接,本质就是通过SSH会话进行文件传输,这也是为什么没装FTP服务器却能下载的原因。
FTPS 是否也是如此?
不是的。FTPS(FTP over SSL/TLS)本质还是FTP协议的安全扩展,它依赖传统的FTP服务器软件(比如vsftpd、proftpd)来支持,需要单独安装并配置FTP服务器,还需要开放对应的端口(隐式FTPS默认用990端口,显式FTPS用21端口+被动模式端口段)。你现在只开放了22和443端口,而且没装FTP服务器,所以FTPS是用不了的。
能下载但无法上传的常见原因及解决方法
你遇到的下载正常但上传失败的问题,大概率是权限或SSH配置限制导致的,给你几个排查方向:
目标目录权限不足:
你登录SFTP的用户账号,对要上传的目标目录没有写入权限。比如你要上传到/var/www/html,但这个目录的属主是root,普通用户没有写权限。
可以先登录到Ubuntu实例,用命令查看目录权限:ls -ld /path/to/your/upload-directory如果权限里没有
w(比如显示drwxr-xr-x),可以修改目录权限给当前用户写权限:# 给目录所有者添加写权限 chmod u+w /path/to/your/upload-directory # 或者把目录属主改成你的用户账号 sudo chown your-username:your-username /path/to/your/upload-directorySSH配置限制了SFTP写入:
检查/etc/ssh/sshd_config文件里的SFTP相关配置,比如如果设置了ChrootDirectory,这个目录必须是root用户所有且不能有写权限(这是SSH的安全要求),但你需要在这个目录下创建一个子目录,给你的用户写权限来上传文件。
另外,如果配置了ForceCommand internal-sftp,也要确保没有额外的只读限制,修改配置后记得重启SSH服务:sudo systemctl restart sshAppArmor 安全策略限制:
Ubuntu 16.04默认启用了AppArmor,可能会限制SSH服务的文件写入操作。可以查看AppArmor的状态:sudo apparmor_status如果看到sshd相关的策略有拒绝日志,可以暂时关闭对应策略测试:
sudo aa-complain /etc/apparmor.d/usr.sbin.sshd测试正常后再调整策略规则。
内容的提问来源于stack exchange,提问作者user454218

