`

FTP FTPS和SFTP

阅读更多

一、协议知识
FTP
    FTP (File Transfer Protocol,RFC 959)是TCP/IP网络上用于文件传输的标准协议,基于C/S架构,可以上传、下载、删除文件,创建或改变服务器上的目录。在客户端和服务器间要建立分离的控制和数据连接,控制连接用于Session管理,如交换命令和回复、交换用户标识和密码等,数据连接用于传输数据。FTP使用明文登录协议验证用户名和密码,如果服务器允许也可以匿名连接。
    FTP有两种传输模式:主动和被动。主动模式时,客户端创建到服务器的TCP控制连接,发送客户端IP地址和随机的端口号,然后等待服务器初始化数据连接。这种情况下,如果客户端有防火墙,将无法接受进入的TCP连接。被动模式时,客户端使用控制连接向服务器发送PASV命令,然后接收服务器IP地址和端口号,客户端使用随机端口建立到服务器的数据连接。由于控制连接和数据连接都由客户端发起,可以解决防火墙问题。
    多数浏览器和文件管理器都能连接FTP服务器,默认大都使用被动模式。FTP URL语法如下:
    ftp://[<user>[:<password>]@]<host>[:<port>]/<url-path>
    FTP不是一个安全的协议,用户名、密码、命令和数据等都使用明文传输,内容非常容易被截获。在加密机制创立前设计的的网络协议,如SMTP、Telnet、POP、IMAP等都有这个问题。

FTPS
    FTP over SSL,常被称为Secure FTP,它是构建在SSL/TLS(RFC5246,Secure Socket Layer/Transport Layer Security)协议之上的,通过SSL/TLS对信道进行加密传输,它本身还需要FTP服务器的支持,又分为显示和隐式:
    显示FTPS又称为FTPES,是对FTP标准的扩展,客户端必须显示请求(客户端发送"AUTH TLS"命令)对FTP会话加密。如果客户端不要求加密,服务器也允许非加密通讯。服务器可以选择允许或拒绝未请求TLS的连接。这个扩展协议在推荐标准RFC4217中定义。
    隐式FTPS是过期的FTP标准,需要所有客户端都使用SSL或TLS连接。为了保持兼容性,隐式FTPS控制连接使用990端口,数据连接使用989端口。注意,隐式FTPS未在RFC4217中定义。
    FTPS支持如下验证方式:
    1、密码验证
    2、SSL证书验证
 
SFTP
    SFTP(SSH File Transfer Protocol)是SSH 2.0的一项扩展协议,提供安全的文件访问、传输和管理功能。SFTP协议的目标是通过可靠的数据流提供安全的文件传输功能,本身不提供验证和安全机制,需要依赖底层协议。SFTP协议虽然在SSH2协议中描述,但它是通用的,独立于SSH2套件中的其余协议。SFTP常作为SSH2.0实现的一个子系统。
    SFTP功能与FTP相似,有相似的命令集,但与FTP是无关的。与标准FTP不同,SFTP加密命令和数据,以防止在网络上明文传输密码和敏感信息。SFTP由于使用了不同的协议,不能使用标准的FTP客户端与SFTP服务器通讯,也不能使用SFTP客户端与FTP服务器通讯。
    SFTP是二进制协议,所有的命令(请求)都打包成二进制消息后发送到服务器,服务器回复二进制应答包。
    与早期的仅支持文件传输的SCP协议(SSH1.x中的)相比,SFTP协议支持更广泛的远程文件操作。SFTP客户端增加的额外功能包括:恢复中断的传输、目录列表、远程文件删除。SFTP服务器支持大多数平台。SSH 1是过时的,不安全的,不推荐使用。
    SSH服务器提供了如下3种验证方式:
    1、密码验证
    2、密钥验证
    3、密码+密钥验证
    关于验证方式的选择,推荐使用密钥验证,其安全性高于单纯的密码验证。
    目前使用最广泛的SFTP服务器是OpenSSH

FTPS vs. SFTP What to Choose

二、Java客户端API
Apache Commons Net
支持的协议:

  • FTP/FTPS
  • FTP over HTTP (experimental)
  • NNTP
  • SMTP(S)
  • POP3(S)
  • IMAP(S)
  • Telnet
  • TFTP
  • Finger
  • Whois
  • rexec/rcmd/rlogin
  • Time (rdate) and Daytime
  • Echo
  • Discard
  • NTP/SNTP

jsch
    SSH2的纯Java实现(BSD style license),可以连接到sshd服务器,支持端口转发、X11转发、文件传输;支持http代理、SOCKS5代理;支持密码、密钥验证。

三、FTP和SSH客户端
FileZilla
    支持FTP、FTPS、SFTP,支持Windown、Linux、BSD、Mac OS等多种平台,支持多种语言,支持HTTP/1.1、SOCKS5、 FTP代理。


 

WinSCP
    WinSCP是开源的Windows图形化SFTP客户端。支持基于SSH-1、SSH-2的SCP和SFTP协议;支持多语言;支持批处理脚本和命令行方式;内置文本编辑器;集成Putty。


 

Core FTP
    Windows FTP客户端,支持FTP、FTPS、SFTP协议。


 

PuTTY
    SSH、Telnet和Rlogin客户端,适用于Windows和Unix平台,支持X11转发(Windows下需安装Cygwin/X, X-Win32, 或Exceed)、端口转发。

 

四、服务器

OpenSSH

OpenSSH是SSH协议的开源实现,在Unix系统中广泛使用。

OpenSSH包括以下工具:

Installation instructions

 

Apache SSHD

Apache SSHD是支持SSH协议的100%纯Java类库,可用于客户端和服务端。SSHD的目标是为需要SSH服务的Java应用提供支持,而不是为了取代Unix操作系统的SSH客户端和SSH服务。SSHD很容易嵌入到Java应用中。

 

Dropbear SSH

Dropbear是一个开源的SSH服务器和客户端(MIT-style license),特别适用于嵌入型Linux(或其他Unix)系统,如无线路由器。

 

freeSSHd

    Windows平台SSH服务器的免费实现,安装后可快速创建SSH服务。

 

FTP服务器比较:http://en.wikipedia.org/wiki/Comparison_of_FTP_server_software

SSH服务器比较:http://en.wikipedia.org/wiki/Comparison_of_SSH_servers

 

五、使用OpenSSH搭建SFTP服务器
1. 密码验证方式
1) 创建SFTP账户
    groupadd sftp
    useradd -m -d /home/sftp -g sftp -s /sbin/nologin sftp
    设置账户密码:
    passwd sftp

2) 创建SFTP目录
    #创建SFTP用户根目录
    mkdir /sftp
    chown root:root /sftp
    chmod 755 /sftp
    #创建SFTP存储目录
    cd /sftp
    mkdir xxxx
    chown sftp:sftp xxxx
    chmod 755 xxxx

3) SSH配置
    vim /etc/ssh/sshd_config

    #启用密码验证
    PasswordAuthentication yes
    #注释原来的Subsystem设置
    #Subsystem sftp    /usr/libexec/openssh/sftp-server
    #启用internal-sftp
    Subsystem sftp  internal-sftp

    #设置Chroot目录
    Match User sftp
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    ChrootDirectory /sftp

注意:Chroot目录及其所有上级文件夹的权限,owner和group必须是root;权限最大设置是755,否则无法登录。

    如果创建了多个sftp账户,也可根据组进行配置:
    Match Group sftp
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    # %u代表用户名,此处需在/sftp目录下创建用户文件夹(也可使用用户目录%h,这种方式更简单)
    ChrootDirectory /sftp/%u

4) 重启sshd服务和测试
    service sshd restart
    sftp sftp@192.168.1.10

2. 密钥验证方式
    使用密钥验证方式,为了安全由要访问SFTP服务器的用户创建密钥对,然后将公钥发送给SFTP服务器管理员,由其导入到SFTP账户的authorized_keys文件中。
1) 生成密钥对
    ssh-keygen -t rsa -N ‘’ -C comment -f filename
-t 代表key类型(算法),可选值”dsa”, “rsa”, “ecdsa”
-N 指定密码,可以为空
-C comment,会显示在公钥末尾,便于区分公钥,默认为username@host
-f 密钥文件名,默认为~/.ssh/id_dsa,~/.ssh/id_rsa,~/.ssh/id_ecdsa
2) 将公钥导入SFTP账户的~/.ssh/authorized_keys文件中
    cat id_rsa.pub >> .ssh/authorized_keys

    chmod 700 .ssh
    chmod 600 .ssh/authorized_keys
3) 编辑sshd_config
    # 启用密钥验证
    PubkeyAuthentication yes


其他步骤与密码验证方式相同。

也可以使用PuTTYgen工具生成密钥对。

 

3. 解析/etc/passwd sftp用户目录进行批量授权并添加sftp管理员

 

#!/bin/bash

change_own() {
  setfacl -Rb /sftp
  chown root:root /sftp /sftp/*
  chmod -R 755 /sftp
}

set_acl() {
  users=$(grep -E "$1" /etc/passwd)

  IFS_old=$IFS
  for u in $users
  do
    IFS=":"
    uinfo=($u)
    chown -R "${uinfo[0]}":sftp "${uinfo[5]}"/$2
    setfacl -Rm u:manager:rwx "${uinfo[5]}"/$2
    setfacl -Rm d:u:manager:rwx "${uinfo[5]}"/$2
	if [ -d "${uinfo[5]}/.ssh" ]; then
	  chown -R "${uinfo[0]}":sftp "${uinfo[5]}"/.ssh
	fi
  done
  IFS=$IFS_old
}

set_sftp_acl() {
  set_acl "PATH1|PATH2|PATH3" "*"
}

change_own
set_sftp_acl
 

参考文档

sshd_config

File Transfer Protocol

FTPS

SSH File Transfer Protocol

sftp hardening with chrooting and ACL

Amazon EC2 and NFS

  • 大小: 100 KB
  • 大小: 141.8 KB
  • 大小: 98.6 KB
  • 大小: 44.9 KB
分享到:
评论

相关推荐

    node-ftps, FTP FTPS和SFTP客户端 node.js,主要是lftp封装器.zip

    node-ftps, FTP FTPS和SFTP客户端 node.js,主要是lftp封装器 节点 ftps FTP 。FTPS和SFTP客户端 node.js,主要是 lftp 封装器。 要求你需要在计算机上安装可以执行 lftp 。LFTP主页Windows ( Chocolatey )C:&

    FileZilla--支持FTP、FTPS、SFTP等文件传输

    FileZilla 客户端是一个快速可靠的、跨平台的FTP,FTPS和SFTP客户端。具有图形用户界面(GUI)和很多有用的特性。 相比较于其它FTP客户端,FileZilla 包含如下特性: 易于使用 支持FTP, FTP并支持SSL/TLS (FTPS)协议,...

    强大的FTP、FTPS、SFTP服务器软件

    强大的FTP、FTPS、SFTP服务器软件,让你在FTP应用场景中不再迷茫

    FileZilla 3.62.2,Mac OS + Windows版本,是一款免费的FTP,FTPS和SFTP客户端软件

    FileZilla 客户端是一个快速可靠的、跨平台的FTP,FTPS和SFTP客户端。具有图形用户界面(GUI)和很多有用的特性。 1. 免费 2.易于使用 3.支持FTP, FTP并支持SSL/TLS (FTPS)协议,支持SSH文件传输协议(SFTP) 4.跨平台。...

    Atom-remote-ftp,atom.io的ftp/ftps/sftp客户端。为icetee/remote提供帮助.zip

    Atom Remote FTP 是一款基于 Atom.io 开发的 FTP/FTPS/SFTP 客户端插件,专门为 icetee/remote 提供远程文件管理的支持。Atom.io 是一个由 GitHub 推出的开源代码编辑器平台,它允许开发者使用 HTML、CSS 和 ...

    浅谈 FTP、FTPS 与 SFTP的区别

    隐式 SSL 在端口 990 上运行,所有数据交换都在 SSL 会话中进行,而显式 SSL 允许服务器同时支持 FTP 和 FTPS,客户端需先发送命令请求加密连接,然后进行数据传输。 SFTP(Secure File Transfer Protocol)则完全...

    node-ftps:用于node.js的FTP,FTPS和SFTP客户端,主要是lftp包装器

    节点FTP 用于node.js的FTP,FTPS和SFTP客户端,主要是lftp包装器。要求您需要在计算机上安装可执行文件lftp 。窗户() C:\ &gt; choco install lftp OSX () sudo brew install lftp Linux sudo apt-get install lftp...

    Serv-U是Windows平台和Linux平台的安全FTP服务器(FTPS, SFTP, HTTPS),是一个优秀的、安全的文

    Serv-U是Windows平台和Linux平台的安全FTP服务器(FTPS, SFTP, HTTPS),是一个优秀的、安全的文件管理、文件传输和文件共享的解决方案 Serv-U 是当前众多的FTP服务器软件之一。通过使用Serv-U,用户能够将任何一台PC ...

    FTP,SFTP,FTPS总结

    FTP、SFTP、FTPS 都是文件传输协议,但是它们有着不同的特点和应用场景。FTP 是最常见的文件传输协议,但是它存在一些安全问题;SFTP 和 FTPS 则提供了加密的文件传输功能,能够保护文件传输过程中的数据安全。

    SFTP和FTPS的区别是什么

    SFTP 和 FTPS 的区别是什么? 在了解 SFTP 和 FTPS 之前,我们需要先了解为什么需要加密传输。随着网络技术的发展,数据传输的安全性变得越来越重要。SFTP 和 FTPS 都是为了解决这个问题而生的,它们都是加密传输的...

    ftp和sftp教程和模拟工具

    总的来说,FTP和SFTP是文件传输的重要工具,理解它们的工作原理和操作方法,以及如何安全地使用,对于任何涉及网络文件传输的用户都是至关重要的。通过使用模拟工具,我们可以更加高效且安全地进行文件管理。

    ftp和sftp登录工具

    "ftp和sftp登录工具.exe"可能就是一个这样的客户端软件,它支持FTP和SFTP协议,方便用户进行文件传输。 FTP客户端通常具备以下功能: 1. 多站点管理:用户可以保存多个服务器的配置信息,方便快速切换。 2. 传输...

    苹果下的ftp工具 支持sftp

    Transmit 4.0.4是该软件的一个版本,提供了强大的文件管理功能,支持多种协议,包括FTP、SFTP、FTPS(FTP over SSL/TLS)以及WebDAV。以下是对Transmit 4的一些主要特性和功能的详细说明: 1. **直观界面**:...

    在EMC VNX 存储上FTP、TFTP 和 SFTP.pdf

    本文档详细介绍了在EMC VNX存储系统上配置和管理FTP、TFTP和SFTP服务的步骤和注意事项。EMC VNX存储系统是一种先进的存储解决方案,它支持多种协议以满足不同的数据传输需求。以下是基于文档内容的知识点汇总: ###...

    FTP与SFTP文件上传Demo

    为了解决这个问题,FTP通常与SSL/TLS(FTPS)或SSH(SFTP)结合使用,以提供安全连接。 SFTP,全称为SSH文件传输协议,是SSH(Secure Shell)的一部分,它提供了一个安全的通道来传输文件。SFTP通过加密所有数据,...

    linux sftp、ftp上传(使用curl)

    本文将深入探讨如何使用curl命令来实现在Linux环境下进行SFTP和FTP上传操作。 首先,让我们了解一下SFTP。SFTP是一种基于SSH(Secure Shell)的安全文件传输协议,它提供了安全的数据传输,保护了用户的登录凭证和...

    labview-FTP地址

    4. **安全**:在连接到FTP服务器时,最好使用安全的FTP协议如FTPS或SFTP,以保护传输的数据不被窃取。 5. **备份和版本控制**:下载的文件应该妥善保存,并考虑使用版本控制系统如Git进行管理,以便于跟踪修改和...

    Mac上最好用的FTP/SFTP工具 Transmit 5.8.2

    此外,它还支持FTPS(FTP over SSL/TLS)和WebDAV,以满足不同类型的服务器连接需求。 3. **快速连接**:通过“快速连接”功能,用户可以迅速连接到新的FTP或SFTP服务器,只需输入主机名、用户名和密码即可。 4. *...

    ftp,sftp工具a

    这些工具包括FileZilla、WinSCP、Cyberduck等,它们支持FTP和SFTP,有的甚至支持FTPS(FTP over SSL/TLS)和SCP(Secure Copy)。这些工具提供了方便的功能,如拖放操作、书签管理、自动同步、文件权限设置等,极大...

Global site tag (gtag.js) - Google Analytics