FTP
FTP是仅基于TCP的服务,不支持UDP。
FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。 但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
主动模式
客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,
并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
- 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
- FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
- FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
- 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
连接过程:
- 客户端向服务器的FTP端口(默认是21)发送连接请求
- 服务器接受连接,建立一条命令链路。
- 当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。
- 于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
开启主动模式:pasv_enable=no(若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。)
被动模式
在被动方式FTP中,命令连接和数据连接都由客户端发起
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,
客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
- 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)
- 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
- 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
- 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,
服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
开启被动模式:默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上pasv_enable=yes;
设置端口范围pasv_min_port和pasv_max_port(默认值都为0)
由于指定这段端口范围,iptables也要相应的开启这个范围
主动与被动FTP优缺点
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。(有可能被客户端的防火墙阻塞掉)
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。(有可能被服务器端的防火墙阻塞掉)
折衷的方法:既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。
共同点:用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间随机。
登陆方式
- 防火墙开启21端口:
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- FTP匿名登陆
- 用户名:anonymous 密码:Email或者为空
- 用户名:FTP 密码:FTP或者为空
- 用户名:USER 密码:pass
anonymous_enable=YES#允许匿名用户和本地用户登陆。local_enable=YES#匿名用户使用的登陆名为ftp或anonymous,口令为空;匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传。local_root=/home/username#当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。local_umask=022#本地用户新增档案时的umask 值。默认值为077。write_enable=YES#本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载。anon_root=/var/ftp#使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。anon_world_readable_only=YES/NO(YES)#如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES。anon_upload_enable=YES/NO(NO)#如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。anon_umask=077#设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700。#写在文件/etc/vsftpd.ftpusers中的本地用户禁止登陆。
- IE登陆:ftp默认开启的匿名用户登录和主动模式,用IE访问需要开启主动模式
查看登陆情况
netstat -anpl | grep :21
- 添加一个ftp用户
useradd ftpuser -s /sbin/nologin
虚拟用户登录
pam_service_name=vsftpd
#虚拟用户使用PAM认证方式。
guest_enable= YES/NO(NO)
#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
guest_username=ftp
#启用虚拟用户。默认值为NO。
virtual_use_local_privs=YES/NO(NO)
#这里用来映射虚拟用户。默认值为ftp。
#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。
- 首先需要建立一个文本格式的用户名/密码列表文件,奇数行为用户名,偶数行为上一行中用户名所对应的密码。
[root@ling ~]# vi /etc/vsftpd/juser.txt
jene
abc123
john
abc456
- 生成数据库
yum -y install db4* # yum -y install libdb-utils
db_load -T -t hash -f juser.txt juser.db --转换格式
chmod 600 /etc/vsftpd/juser.db
- 修改pam配置
cat /etc/pam.d/juser.pam # 为虚拟用户创建PAM认证文件,文件名为juser.pam
auth required pam_userdb.so db=/etc/vsftpd/juser
account required pam_userdb.so db=/etc/vsftpd/juser
- 新建一个本地用户
useradd -d /var/ftptom -s /sbin/nologin tom
chmod 755 /var/ftptom/
- 修改主配置文件
# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=no //禁用匿名用户登录
(anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022 //指定上传权限掩码)
local_enable=YES //需映射本地用户,所以启用些项
write_enable=YES //启用上传写入支持
chroot_local_user=YES //(自建配置)将所有本地用户限制在家目录中
guest_enable=YES //启用映射功能
guest_username=tom //指定映射的系统用户名称
pam_service_name=juser.pam //指定新的PAM认证文件
user_config_dir=/opt/vsftpd/juser_dir //(自建配置)设置虚拟帐号的主目录为/juser_dir
max_clients=300 //(自建配置)设置FTP服务器最大接入客户端数为300个
max_per_ip=10 //(自建配置)设置每个IP地址最大连接数为10个
listen=YES
port_enable=NO //(自建配置)取消PORT模式进行数据传输
connect_from_port_20=NO //(修改配置)PORT模式进行数据传输部使用20端口
ftp_data_port=20
pasv_enable=YES //(自建配置)允许PASV模式进行数据传输
pasv_min_port=65341 //(自建配置)PASV模式下数据传输所使用port范围下界
pasv_max_port=65351 //(自建配置)PASV模式下数据传输所使用port范围上界
禁止匿名用户登陆,限制本地用户在家目录,指定映射的系统用户和认证文件,设置虚拟账号主目录,指定PASV模式
SFTP
SFTP是一种安全的文件传输协议,一种通过网络传输文件的安全方法;它确保使用私有和安全的数据流来安全地传输数据。
SFTP要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。它允许对远程文件执行各种操作,有点像远程文件系统协议。SFTP允许从暂停传输,目录列表和远程文件删除等操作中恢复。
SFTP 与 FTP
- 安全通道
FTP 不提供任何安全通道来在主机之间传输文件;而SFTP协议提供了一个安全通道,用于在网络上的主机之间传输文件。
- 使用的协议
FTP使用TCP / IP协议。而,SFTP是SSH协议的一部分,它是一种远程登录信息。
- 链接方式
FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。
- 安全性
FTP密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。而,SFTP会在发送之前加密数据,二进制的形式传递,是无法“按原样”阅读的,安全性较高。
FTP 基于TCP来传输文件,明文传输用户信息和数据。
SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。**
