ftp:file transfer protocol,  监听21端口

    文件传输协议,工作在应用层

     明文协议:认证及数据传输;

ftp实现方式:

      服务端实现:vsftpd pureftpd proftpd   vsftpd是默认在光盘上自带的

      客户端实现:

            linux:ftp lftp

            windows:cuteftp Filezilla Flashfxp

ftp连接类型:

      命令连接:传输指令

      数据连接:传输连接

工作方式:站在服务器端的角度描述

   主动模式:服务器向客户端发起数据传输请求

        服务器端口:固定 

        客户端端口:随机

   被动模式:客户端向服务器端发起数据传输请求

        服务器端口:半随机,有客户端向21号端口发送了连接请求,此时服务器会发送两个数字,这两个数字是服务器端新开启的服务端口除以256得的商值和余数。由此客户端可以计算出服务器端的端口号。

ftp用户分类:

            资源位于用户的家目录下/var/ftp/

     匿名用户:(映射至某一固定的系统用户)  匿名用户的用户名为ftp、vsftp 

     本地用户:(系统用户)   root及系统用户(0-999);操作系统上的每一个用户都是本地用户,我们不允许访问ftp服务器

     虚拟用户:映射入某操作系统上的某个用户

          nsswitch:名称服务转换

          PAM:插入式认证模块。

数据传输格式:

      文本格式:binary

      二进制格式:ascll

数据传输是通过线缆流式化传输的;传输图片也同样传输的字符串,到本地之后,通过这个字符调用相对应的图片。

或者是传输过程中再加一个说明文档,告诉对方如何将数据流重组。


vsftpd安装方法

步骤一

 
  

vftpd 是centos自带的,短小精悍,监听21号端口

~]# yum info vsftpd 查看属性

~]# yum install vsftpd   

/usr/sbin/vsftpd   程序

/etc/vsftpd/vsftpd.conf   配置文件

/etc/pam.d/vsftpd     因为基于pam进行认证,所以在pam下也有一个配置文件

/var/ftp/    用户家目录

步骤二

 
  

CentOS 6 :

   /etc/rc.d/init.d/vsftpd  <--启动服务脚本

   chkconfig vsftpd on      <--启动服务永久开启

CentOS 7

  /usr/lib/systemd/system/vsftpd.server

   systemctl enable vstfpd.service  <--永久开启


getenforce 关闭selinux

步骤三:

测试:ftp://172.18.64.70/pub

步骤四:

lftp -u centos,magedu 172.18.64.70  <--创建centos用户密码为magedu,使用此用户访问ftp服务->lcd /etc   切换到centos用户的etc目录->put fstab  将fstab文件上传到ftp上

步骤五:对匿名用户控制

 
  

 

开启匿名用户的上传、创建、删除及重命名功能

对用户权限进行限制,建议先备份配置文件

  ~]# vim /etc/vsftpd/vsftpd.conf

  ~]# directive=value    <--配置文件书写格式必须顶格写


匿名用户配置方法:此处我们要实现匿名用户有上传权限

    anonymous_enable=YES    <--是否启用匿名用户 想关闭单纯注释掉是没有用的

   anon_upload_enable=YES  <--控制匿名用户的上传权限,依赖于write_enable=YES

  write_enable=YES       <--是否允许通过ftp协议修改文件系统上的数据指令,此命令全局生效,所以一定要处于开启状态

   anon_mkdir_write_enable=YES   <--开启匿名用户创建目录的权限,默认关闭

   anon_other_write_enable=YES  <--定义匿名用的删除及重命名权限

生效需重载:systemctl restart vsftpd.service

~]# cd /var/ftp/  

~]# chown ftp upload  将属主改为ftp


测试:使用172.18.64.71这台主机

    ~]# lftp 172.18.64.70/upload    <--因为我们只给upload目录修改了属主

   ~]# lcd /etc/    切换到70这台主机的/etc/目录下

   ~]# put fstab   上传文件成功    


步骤六:对本地用户控制

 
  

本地用户:

    (1)local_enable=YES   <--是否允许本地用户可以登陆ftp,如果关闭即只开放匿名用户

        注意:所有非匿名用户的生效,都依赖于此命令

    (2)local_umask=022 <--本地用户上传的文件权限掩码,应该设置为077,本地用户上传的只有本地用户可以查看


目录消息   

    (3)dirmessage_enable=YES  <--目录消息显示,用户 第一次进入目录时,vsftpd会查看.message文件,并将其内容显示给用户。message_file指定文件路径,而不使用默认的.message;


数据传输日志

  (4)xferlog_enable=YES  <--是否打开上传下载的日志默认路径/var/log/vsftpd.log 不建议启用

     (5)xferlog_file=/var/log/vsftpd.log  <--定义传输日志文件的文件名


数据传输模式:

  (6)connect_from_port_20  我们服务器是否能够工作于主动模式。但是取决于客户端是否支持,如果支持就主动,不支持就被动


修改匿名用户上传的文件的属主:

   chown_uploads       控制匿名用户上传的文件,是不是要改变其默认属主属组,如果不改就是匿名用户映射的系统用户ftp

   chown_username:     启用chown_uploads时,将文件属主修改为此指令指定的用户,默认为root

   chown_upload_mode   设定匿名用户上传的文件的权限,默认为600


设定空闲会话超时时长:

   idle_session_timeout 定义任何一个远程连接建立起以后,部在活跃了,多久断开,默认为300s


命令连接的监听端口

   listen_port 默认为21 可能默认没有设置,要手动设置


设定连接及传输速率

  local_max_rate 默认最大传输速率,


默认最大连接数

  max_clients   默认2000个  0表示无限制


单个ip所允许的最大连接数

  max_per_ip


设定匿名用户的最大传输速率

   anon_max_rate


主动数据传输模式下 服务器连接客户端的超时时间

idle_connection_timeout


被动数据传输模式下 服务器连接客户端的超时时长

data_connection_timeout


只以文本格式上传,不能开启;除非你确定自己只上传文本文件

ascii_upload_enable=YES


大条幅:

ftpd_banner=Welcome  每次连接ftp服务器都会显示一些信息


禁锢所有本地用户,锁在自己家目录下

chroot_local_user=YES <--禁锢所有本地用户

   注意:要求用户对家目录,没有写权限


禁锢列表中的用户,与上方式不能同时使用

vim /etc/vsftpd/chroot_list

每行一个用户名

chroot_list_file=/etc/vsftpd/chroot_list  <--此选项在主配置文件中


是否启用用户列表

/etc/vsftpd/ftpusers  <--禁止某些用户登录,只是一个黑名单


userlist_enable=YES  <--启用时,vsftpd将加载一个由userlist_file指令指定的用户列表文件;此用户中的用户是否能访问vsftpd服务取决于userlist_deny指令


userlist_deny=YES   此时user_list为黑名单

userlist_deny=NO   此时user_list为白名单

/etc/vsftpd/user_list/  <--这是user_list的目录