??FTP,File Transfer Protocol,文件传输协议
??文件服务器,具备存储和共享文件(权限设置合理的情况下)的功能
??命令端口:TCP/21
??数据端口:TCP/20(主动模式)
??明文传输指令与数据,解决办法是SFTP(SSH)和FTPS(SSL/TLS)
??Linux:vsftpd, pureftpd, proftpd
??Windows:Filezilla Server, Serv-U, ...
??Linux:ftp, lftp, ...
??Windows:cuteftp, Filezilla, Flashfxp, ...
??FTP协议是一种古老的协议,比较特别。一般的协议,客户端和服务器端之间只需要一条连接即可,但是FTP需要两条,一条是命令连接,用于传输FTP命令;另外一条是数据连接,用于传输上传下载的数据。
??命令连接为客户端启用一个随机端口连接服务器端的21端口。
??数据连接有主动模式和被动模式两种。
??主动模式,positive,PORT
??1、服务器端启动ftp服务器端进程并监听21号端口,客户端启动ftp客户端进程并开启x号端口(x>1024),客户端发起连接至服务器端,源端口为客户端的x,目标端口为服务器端的21。
??2、客户端在x+1号端口上进行监听,并使用之前建立的命令连接告诉服务器端使用主动模式以及x+1号监听端口的存在。
??3、服务器端使用20号端口与客户端的x+1号端口进行连接。此连接即为数据连接。
??4、客户端通过数据连接向服务器端发送一个应答,表示数据连接建立成功。
缺陷:客户端需要启用一个数据连接监听端口等待服务器端来连接,因此客户端如果有防火墙的话,就需要对此端口进行放行。同时又由于端口号为随机的x+1号端口,因此在客户端防火墙要放行一个随机的端口就有一定的难度了!加之客户端的用户很多都是计算机小白用户,一般不太懂的做这个设置,也不太情愿。
??被动模式,passive,PASV
??由于主动模式缺陷的存在,诞生了被动模式。
??1、服务器端启动ftp服务器端进程并监听21号端口,客户端启动ftp客户端进程并开启x号端口(x>1024),客户端发起连接至服务器端,源端口为客户端的x,目标端口为服务器端的21。
??2、客户端通过命令连接向服务器端发送PASV指令表示要使用被动模式,并且告知服务器端,本地(客户端)使用x+1号端口进行数据连接通信;
??3、服务器端启用并监听一个非特权端口m,通过之前建立的命令连接将此端口号发送给客户端;
??4、客户端使用x+1号端口与服务器端口m建立数据连接。
参考资料:
https://mingersoft.com/blog/2011/01/ftp-and-the-difference-between-ascii-and-binary-modes/
http://www.jscape.com/blog/ftp-binary-and-ascii-transfer-types-and-the-case-of-corrupt-files
数据在计算机中存储或者在计算机间传输,需要以计算机可识别的一种形式而存在。这种形式就是二进制的数据,即0和1。将字母a翻译成二进制数值存储在计算机中,这种翻译过程可理解为编码。不同的计算机,编码可能不同,因此需要统一,应该是ISO给统一的,后来就诞生了ASCII这种编码。ASCII编码将大写字母、小写字母、数字以及控制符号都定义了ASCII值。比如数字0的十进制ASCII值是48,二进制的值是00110000。
一般用于传输纯文本文件,纯文本文件指的是编辑器打开可读的(例如批处理脚本、shell脚本、HTML文件、JavaScript文件等)。对于跨平台(例如Windows和Linux)的传输来说,ASCII传输模式可以自动修改行结束符,避免出现换行错乱的情况。
逐字节传输数据,保留数据本身模样,不会像ASCII那样转换数据。
用于传输二进制文件,库文件、图片、视频、Linux下的ELF可执行文件等,二进制文件如果使用编辑器打开一般会是此类乱码。
ftp> type ascii
200 Switching to ASCII mode.
ftp> type binary
200 Switching to Binary mode.
ftp> type image
200 Switching to Binary mode.
登录的用户名为anonymous,密码为空。映射到本地用户ftp,家目录为/var/ftp/。
登录的用户名和密码与Linux本地用户相同。每个FTP本地用户都会映射到同用户名的Linux用户,家目录为Linux用户的家目录。
还没学到这里。。。敬请期待!
系统:CentOS 6.9
软件:vsftpd 2.2.2
官网:<http://vsftpd.beasts.org>
查看配置文件中的样例说明
vim /etc/vsftpd/vsftpd.conf
查看man手册
man 5 vsftpd.conf
/etc/vsftpd/vsftpd.conf
此配置文件也是主配置文件
每一行就是一句指令(directive)或者注释
指令的格式如下
option=value
在option、=和value的两边都不可以存在空格
指令有默认值,如果没有显式定义指令,则采用默认值,默认值查看man手册。
“#”开头的行表示注释,“#”后接着1个空格表示描述信息
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
“#”后不接空格表示被注释掉的指令
#chown_uploads=YES
#chown_username=whoever
write_enable:控制FTP是否可写,无论用户类型。最终用户是否具备相应的权限,一个是看指令上是否允许,另一个就是和Linux用户权限相关。
anonymous_enable:是否启用匿名用户。
anon_upload_enable:是否允许匿名用户上传文件。
anon_mkdir_write_enable:是否允许匿名用户创建目录。
anon_other_write_enable:是否允许匿名用户执行其他写操作,包括删除和重命名。
local_enable:是否启用本地用户。
local_umask:本地用户创建文件的umask,文件使用666去减,目录使用777去减。
dirmessage_enable:第一次进入某个目录的欢迎/描述信息,默认在每个目录下搜索.message文件,是否显示与客户端有关。
message_file:指定目录消息文件的文件名。
xferlog_enable:是否启用传输日志,传输日志记录用户上传下载的细节信息。
vsftpd_log_file:传输日志的位置。当且仅当xferlog_enable为YES且xferlog_std_format为NO的时候有效。默认值是/var/log/vsftpd.log。
xferlog_std_format:是否启用标准格式的传输日志,标准格式的传输日志易读性差,不过可用于传输统计生成器(猜测应该是一种日志统计工具)再利用。
xferlog_file:指定标准格式的传输日志文件存储位置,当且仅当xferlog_enable和xferlog_std_format都被启用的情况下有效。默认值是/var/log/xferlog。
connect_from_port_20:指定FTP的PORT模式是否使用20号端口;
ftp_data_port:当connect_from_port_20为NO的时候,此选项设置PORT模式下FTP服务器使用的数据连接端口,默认值是20。
ascii_download_enable和ascii_upload_enable:上传和下载的时候是否明确使用ASCII数据传输模式。默认情况下服务器假装允许ASCII模式但实际上会忽略ASCII请求。某些FTP如果启用此特性,会被通过FTP命令SIZE一个大文件来达到DoS攻击的效果。
chown_uploads:是否修改匿名用户上传文件的属主,不修改的话默认匿名用户上传的文件的属主和属组都是ftp。
chown_username:设置匿名用户上传文件的新属主,不会改变属组。
chown_upload_mode:设置匿名用户上传文件后文件的权限,默认是0600。
idle_session_timeout:客户端输入两次FTP命令间隔时间的超时时长,默认是300秒。
connect_timeout:PORT模式下,客户端响应数据连接的超时时长,默认是60秒。
data_connection_timeout:数据传输停止的大致超时时长,默认是300秒。
standalone(独立模式):表示直接运行在后台,自己监听,不依靠类似xinetd的守护进程管理。
listen:启用的话,使vsftpd运行于独立模式。
listen_address:当vsftpd运行于独立模式时,此选项设置vsftpd监听的ipv4地址,默认是0.0.0.0。
listen_port:当vsftpd运行于独立模式时,此选项设置vsftpd监听端口,默认是21。
local_max_rate:本地用户最大数据传输速率,单位是“字节/秒”,默认是0,表示无限制。
anon_max_rate:匿名用户最大数据传输速率,单位是“字节/秒”,默认是0,表示无限制。
max_clients:当vsftpd运行于独立模式时,此选项设置vsftpd支持的最大客户端连接数,0表示无限制,默认值是2000。
max_per_ip:当vsftpd运行于独立模式时,此选项设置vsftpd支持的最大相同IP地址的客户端连接数,0表示无限制,默认值是50。
chroot可以理解为禁锢的意思,使得用户在自己的家目录,无法切换至其他目录,但是进入自己的子目录除外。
匿名用户始终被禁锢。
chroot_local_user:是否禁锢所有本地用户。
chroot_list_enable:是否启用禁锢列表文件。当chroot_local_user为YES的时候,chroot_list_file表示不被禁锢的本地用户。当chroot_local_user为NO的时候,chroot_list_file表示被禁锢的本地用户。
chroot_list_file:禁锢列表文件位置。
/etc/vsftpd/ftpusers:这是一个文件,非指令。黑名单文件,文件中的用户将被禁止登录FTP。不过是在输入密码之后才禁止登录的,密码仍然被传输了。
userlist_enable:是否启用用户列表文件。
userlist_file:用户列表文件位置。
userlist_deny:用户列表文件中的用户是否被拒绝。如果用户被用户列表给拒绝了,那么连输入账号密码的机会都没有。
原文地址:http://blog.51cto.com/magiclikes/2090291