运维基础-存储02 FTP

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)

  1. 主动模式下,客户端随机打开一个大于1024的端口N向服务器的21端口发起连接,同时开放N+1端口,并向服务器发出“port N+1”命令。
  2. 由服务器的20端口主动连接到客户端N+1端口。
  • 注意:FTP的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻止。

2、被动模式(PASV)

  1. 被动模式下,客户端打开两个随机端口N和N+1(N>1024)。
  2. 客户端的N端口连接服务器的21端口,提交PASV命令。
  3. 然后,服务器会开启一个随机端口P(P>1024),返回如“227 entering passive mode(127,0,0,1,4,18)”。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘256再加上最后一个数字,这就是FTP服务器开放的用来进行数据传输的端口。
  4. 客户端收到命令并取得服务器的数据端口P之后,会通过N+1端口连接服务器的P端口,然后在两个端口之间进行数据传输。

运维基础-存储02 FTP

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.    #自定义登录横幅字符串

 

 

 

 

 

 

 

 

 

 

#                                                                                                                   #

运维基础-存储02 FTP

上一篇:GitLab配置SSH key


下一篇:vue 销毁组件、重置组件方式