1、FTP协议
1、FTP协议简介
- FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一。
- FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
- FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
- 默认情况下FTP协议使用TCP端口中的20和21这两个端口,其中20用于传输数据,21用于传输控制信息。
2、FTP两种工作方式
- 一个客户端和服务器之间,只会有一个命令连接,但可能会有多个数据连接。
- 命令连接:传输命令。命令连接会一直在,直到客户端断开连接。
- 数据连接:传输数据。每个数据连接就是一次数据传输,数据传输完成该连接随即断开。
1、主动模式(PORT)
- 主动模式下,客户端随机打开一个大于1024的端口N向服务器的21端口发起连接,同时开放N+1端口,并向服务器发出“port N+1”命令。
- 由服务器的20端口主动连接到客户端N+1端口。
- 注意:FTP的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻止。
2、被动模式(PASV)
- 被动模式下,客户端打开两个随机端口N和N+1(N>1024)。
- 客户端的N端口连接服务器的21端口,提交PASV命令。
- 然后,服务器会开启一个随机端口P(P>1024),返回如“227 entering passive mode(127,0,0,1,4,18)”。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘256再加上最后一个数字,这就是FTP服务器开放的用来进行数据传输的端口。
- 客户端收到命令并取得服务器的数据端口P之后,会通过N+1端口连接服务器的P端口,然后在两个端口之间进行数据传输。
3、FTP的协议实现
- FTP协议是C/S架构。
1、服务端应用
- Windows:Serv-U、IIS、FileZilla等。
- 开源:WU-ftpd、ProFTPD、Pure-FTPd、vsftpd等。
2、客户端应用
- Windows:ftp、FileZilla、CuteFTP、FlashFXP等。
- 开源:lftp、ftp、Filezilla、gftp等。
2、vsftpd的使用
- vsftpd(Very Secure FTP daemon)是一个非常安全的FTP守护进程。它完全是从头开始写的。
1、vsftpd的安装和启动
1、安装vsftpd
yum install vsftpd
2、启动vsftpd
- 有两种启动方式
- 独立守护进程(standalone):由服务进程自行监听套按字,并接收用户访问请求。
- 瞬时守护进程(transient):由受托管方代为监听套按字,服务进程没有访问请求时不启动,当托管方收到访问请求时,才启动服务进程。
- Centos6:xinetd独立守护进程, /etc/xinetd.d/。
- Centos7:由systemd代为监听。
~]# rpm -ql vsftpd /usr/lib/systemd/system/vsftpd.service #独立守护进程 /usr/lib/systemd/system/vsftpd.target #瞬时守护进程
- 启动服务
~]# systemctl start vsftpd.service #启动vsftpd服务 ~]# systemctl enable vsftpd.service #开机自启
2、vsftpd配置文件
- vsftpd配置文件的路径:/etc/vsftpd/vsftpd.conf
###匿名用户 anonymous_enable=YES #是否启用匿名用户,默认yes #anon_upload_enable=YES #是否可以上传文件,默认no。当SELinux=enforcing检查SE bool allow_ftpd_anon_write, allow_ftpd_full_access #anon_mkdir_write_enable=YES #是否可以创建目录,默认no #anon_world_readable_only=YES #是否可以下载,默认yes #anon_other_write_enable=YES #是否可以删除文件、目录和修改权限,默认no #anon_umask=077 #设定匿名用户上传文件的umask ###本地用户 local_enable=YES #是否启用本地用户,默认yes。当SELinux=enforcing检查 SE bool ftp_home_dir write_enable=YES #是否拥有读写权限,默认yes。(对文件、目录的完全操作) local_umask=022 #设定本地用户上传文件的umask,默认为077 #chroot_local_user=YES #禁锢所有本地用户在其家目录中;需要事先去除用户对家目录的写权限; #chroot_list_enable=YES #禁锢chroot_list_file指定的列表文件中的用户在其家目录中;需要事先去除用户对家目录的写权限; #chroot_list_file=/etc/vsftpd/chroot_list ###控制可登录vsftpd服务的用户列表 userlist_enable=YES #启用/etc/vsftpd/user_list文件来控制可登录用户 #userlist_deny=YES|NO #默认yes。YES是黑名单,NO是白名单 #/etc/vsftpd/ftpusers列在此文件中的用户都被禁止使用ftp服务。(#cat /etc/pam.d/vsftpd) ###安全 pam_service_name=vsftpd #登录FTP服务器的时候进行认证是根据/etc/pam.d/vsftpd文件定义的内容进行 tcp_wrappers=YES #对有状态连接的特定服务进行安全检测并实现访问控制 #nopriv_user=ftpsecure #建议您在系统上定义一个唯一的用户,ftp服务器可以将其作为完全隔离的非特权用户使用。 ###传输日志 xferlog_enable=YES #激活上传/下载日志。 xferlog_std_format=YES #使用标准的ftpd xferlog格式保存日志文件。 #xferlog_file=/var/log/xferlog #日志文件的位置。默认值/var/log/xferlog ###监听套接字 listen=NO #vsftpd以独立模式运行并监听IPv4套接字。不能与listen_ipv6指令同时使用。 listen_ipv6=YES #允许监听IPv6套接字。默认情况下,监听IPv6的“any”地址(::)将接受来自IPv6和IPv4客户端的连接。 ###并发连接数限制 #max_clients=2000 #限制并发的客户端个数 #max_per?_ip=50 #限制每个客户机IP的并发连接数 ###上传下载速率 #anon_max_rate=0 #匿名最大速度(字节/秒) #local_max_rate=0 #本地用户最大速率(字节/秒) ###超时时间 #idle_session_timeout=600 #空闲会话超时的默认值。 #data_connection_timeout=120 #数据连接超时的默认值。 #如果您愿意,您可以安排将上传的匿名文件由不同的用户拥有。注意!不推荐使用“root”上传文件! #chown_uploads=YES #chown_username=whoever #ls_recurse_enable=YES #激活内置ls的“-R”选项。这在默认情况下是禁用的 dirmessage_enable=YES #激活目录消息-当远程用户进入某个目录时,发送给他们的消息。 connect_from_port_20=YES #确保端口传输连接来自端口20 (ftp-data)。 #ftpd_banner=Welcome to blah FTP service. #自定义登录横幅字符串
# #