我们之前在讲文件传输的时候讲过scp和sftp,今天我们认识一个新的传输协议:ftp,他一般会和sftp拿来对比,我们来看一下他们的区别:
-
文件传送协议FTP(File Transfer Protocol)是TCP/IP协议簇中的一个成员,也是现在因特网上最广泛的文件传送协议。FTP协议包括两个部分,一个是FTP客户端,另一个是FTP服务器。当然,FTP服务器是用来存储文件资源的,FTP客户端通过访问FTP服务器来获得资源的。
-
安全文件传送协议SFTP(Secure File Transfer Protocol)可以为文件传送提供安全的加密/解密技术。基本语法和FTP差不多。SFTP是SSH的一部分,在SSH软件包中,已经包含了一个SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作。由于这种传输方式使用了加密/解密技术,文件传送相对来说是很安全的,但是是有代价的,它的传输效率比FTP要低得多。
0. Linux下FTP服务器的搭建
下面我们来学习一下在linux下配置FTP服务器的步骤。
0.1 安装vsftpd服务器
yum -y install vsftpd
安装前可以检验一下是否安装过,不检查直接安也行,如果安装过,系统会自动跳过安装步骤,检验是否安装命令:
//本步骤为非必须的,可以跳过
rpm -qa | grep vsftpd
0.2 启动vsftpd服务
service vsftpd start
0.3 配置说明
vsftpd安装完,会在/etc/vsftpd/
目录下写入配置,一共三个配置文件:
- ftpusers 该文件用来指定那些用户不能访问ftp服务器(即禁止使用ftp的用户名)。
- user_list 该文件用来配置“禁止或允许使用vsftpd的用户列表”
- vsftpd.conf vsftpd的主配置文件
由于vsftpd的用户就是操作系统用户,因此我们只需创建个系统用户,就可以使用该用户使用ftp客户端或者ftp命令来连接本服务器。比如我们创建个系统用户:shusheng,密码设置为:123456
useradd shusheng
passwd shusheng
//让输入密码的时候输入123456即可
然后我们使用ftp客户端,比如flashfxp、FileZilla、xftp等工具就可以连接到本服务了(使用账号为:shusheng,密码:123456,端口:21)
连接过程中如果失败,可能是防护墙、selinux、ftp连接模式等原因,针对具体错误,可以查阅资料。
0.4 限制登录用户只能在自己的家目录
我们发现,我们使用shusheng这个用户登录到ftp服务器,默认是在该用户的家目录,但是我们依然可以切换到其他目录,这样非常不安全,因此我们希望一个用户只在自己的家目录活动,可以这样配置:
chroot_local_user=YES
说明:
如果chroot_local_user=YES
,说明全部用户都只能在自己的家目录活动,如果chroot_local_user=NO
或者被注释掉,说明全部用户都不被锁定在自己的家目录。这是个全局设置,不过有时候我们需要更灵活的配置,比如希望大多数都只能在自己的家目录活动,但是有个别用户不需要受此限制。
这个时候就需要一些对这个全局设定做一些微调,就是设置一些特例。这就要用到另一项配置:chroot_list_enable,该配置项也有两个值:为YES时表示需要有特例,为NO时胡总个该配置项被注释表示不需要有特例,那么这就出现了四种可能
配置项 | chroot_local_user=YES | chroot_local_user=NO |
---|---|---|
chroot_list_enable=YES | 都被限制在家目录 | 都不被限制在家目录 |
chroot_list_enable=NO | 都被限制在家目录 (有特例不被限制) | 都不被限制在家目录(有特例被限制) |
对于那些特例都写在chroot_list_file
配置项指定的文件中,一行一个用户
0.5 匿名登录
0.5.1 更改匿名用户登录的默认目录
vsftp安装后,默认情况下是允许匿名登录的。匿名用户的登录后所在的目录是:/var/ftp/,如果需要修改该路径,可以在配置中增加如下内容即可:
//将匿名用户登录的默认路径改为/var/www/html,如果使用图形化客户端登录的话,客户端可能由之前的缓存,因此可以手动刷新一下目录看看效果。
anon_root=/var/www/html
0.5.2 配置禁止匿名用户登录
如果需要禁止匿名登录,只需将配置中的anonymous_enable值改为NO即可。
anonymous_enable=NO
1. Ftp 主动和被动模式
FTP有两种工作模式,PORT方式和PASV方式,中文意思为主动式和被动式:
主动 FTP :
命令连接:客户端 >1024 端口 → 服务器 21 端口
数据连接:客户端 >1024 端口 ← 服务器 20 端口
被动 FTP :
命令连接:客户端 >1024 端口 → 服务器 21 端口
数据连接:客户端 >1024 端口 ← 服务器 >1024 端口
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。
2. Linux的Cli模式下的ftp命令(客户端)
对于linux下,我们前面讲的是搭建一个ftp服务器,需要使用客户端去连接,图形界面工具有很多,但是我们之前使用sftp的时候,觉得直接命令行使用也很爽,那么在linux下有没有呢?当然是有的,比如:ftp命令
2.1 ftp
默认情况下,CentOS没有ftp客户端命令的,需要我们安装,安装ftp命令:
yum install -y ftp
安装完ftp命令,我们就可以使用该命令连接ftp服务端了,下面介绍使用方法:
2.1.1 连接到ftp服务器
ftp 192.168.1.12
然后根据提示输出用户名和密码即可。
启动主动模式
连接到ftp服务器后,如果在继续运行命令,默认情况下可能进入被动模式,如果防火墙没有开放对应的端口,可能会出现问题,因此我们可以关闭被动模式,只让用主动模式,关闭被动模式命令:
passive
看到Passive mode off.
表示关闭被动模式成功,再次运行passive
会看到Passive mode on
,表示开启被动模式。
(主动模式下,如果客户端开启的有防火墙的话,因为客户端会随机开放个大于1024的端口让服务端来连接,但是这个端口可能会被防火墙拦截)
使用被动模式
如果想正常使用被动模式,需要对ftp的服务端进行配置,同时要在服务端的防火墙上开放对应的端口。
//vim /etc/vsftpd/vsftp.conf
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=42000
以上表示服务端支持被动模式,同时设置最小的被动传输端口为40000,最大被动传输端口为42000
设置完毕需要重启vsftpd服务
service vsftpd restart
然后在防火墙中配置中增加开放对应的端口的配置
-A INPUT -p tcp --dport 40000:42000 -j ACCEPT
保存退出后,重启防火墙即可
2.1.2 上传文件
上传一个文件:
put [本地文件] [远程文件]
上传多个文件:
mput 本地文件
2.1.3 下载文件
下载单个文件:
get [远程文件] [本地文件]
注意:这里的文件要是完整的文件名,如:
//将远端的当前目录里的123.jpg下载到本地的当前目录,并且命名为234.jpg
get ./123.jpg ./234.jpg
批量下载:
mget [远程文件]
比如:
mget 1.jpg 2.jpg
mget *.jpg
在使用mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全部的文件,可以先用prompt命令关掉交互方式。
关闭:prompt off
打开:prompt on
2.1.4 其它常用ftp操作命令
//退出ftp连接
bye
exit
quit
//切换远程目录
cd 目录名称
//切换本地目录
lcd 目录名称
//查看远程目录的文件列表
ls
ls 目录名称
dir
dir 目录名称
//创建远程目录
mkdir 目录名称
//删除远程文件
delete 文件路径
//显示当前远程所在目录
pwd
//修改远程文件或者目录的权限
chmod 权限 路径
//采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。一般来说,我们最好都用binary方式,这样可以保证不出错。
bin
image
//使用ascii类型传输
ascii
//每次命令执行完响铃一声
bell
“!”的使用
ftp下的命令前加上“!”,表示运行本地命令,比如:
//列出本地当前目录下的文件列表
!ls
//在本地创建目录images
!midir images
……
不过本地切换目录使用的是lcd
,不是!cd
。
3. vsftpd.conf 文件配置参数说明
//设置连接服务器后的欢迎信息
ftpd_banner=welcome to ftp service
//限制远程的客户机连接后,所建立的控制连接,在多长时间没有做任何的操作就会中断(秒)
idle_session_timeout=60
//设置客户机在进行数据传输时,设置空闲的数据中断时间
data_connection_timeout=120
//设置在多长时间后自动建立连接
accept_timeout=60
//设置数据连接的最大激活时间,多长时间断开,为别人所使用
connect_timeout=60
//指明服务器总的客户并发连接数为200
max_clients=200
//指明每个客户机的最大连接数为3
max_per_ip=3
//本地用户最大传输速率限制
local_max_rate=50000(50kbytes/sec)
//匿名用户的最大传输速率限制
anon_max_rate=30000
//定义最大与最小端口,为0表示任意端口;为客户端连接指明端口
pasv_min_port=端口号
pasv-max-prot=端口号
//设置ftp服务来监听的地址,客户端可以用哪个地址来连接
listen_address=IP地址
//设置FTP工作的端口号,默认的为21
listen_port=端口号
//是否锁定本地系统帐号用户主目录(所有);锁定后,用户只能访问用户的主目录/home/user,不能利用cd命令向上转;只能向下
//设置所有的本地用户可以chroot
chroot_local_user=YES
//设置指定用户能够chroot(即当该项为NO时,特定用户才能chroot)
chroot_local_user=NO
//锁定指定文件中用户的主目录(部分),文件:chroot_list_file=path 中指定
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(只有/etc/vsftpd/chroot_list中的指定的用户才能执行 )
//无论哪个用户都能登录的用户,定义登录帐号的主目录,若没有指定,则每一个用户则进入到个人用户主目录;
local_root=path
//是否加载用户列表文件;
userlist_enable=YES/NO
//表示上面所加载的用户是否允许拒绝登录;
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
4. FTP 数字代码的意义
标签:FTP,ftp,端口,使用,服务器,连接,客户端 From: https://www.cnblogs.com/kcsjm/p/17024933.html110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路埠开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接埠关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。