FTP服务器配置

一、理论知识

1.FTP服务器概念

FTP是文件传输协议(File Transfer Protocol),用于在网络上进行文件传输的一套标准协议,使用客户/服务器模 式。专门用来传输文件的协议 。

2.FTP服务器工作原理

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式。

在这里插入图片描述

3.FTP服务器的认证登录模式

FTP服务器允许用户以三种认证模式登录到FTP服务器上

  1. 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
  2. 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,配置起 来也很简单。
  3. 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出 用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的 。

4.FTP服务器协议及工作模式

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请 求,以建立数据传输链路的主机。FTP协议有下面两种工作模式

  • 主动模式:FTP服务器主动向客户端发起连接请求
  • 被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)

5.FTP端口:20/21

FTP协议默认使用20、21号端口,其中端口 20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。

4.常见的FTP服务器软件

  • Serv-U #Windows
  • FileZilla #Windows
  • VsFTP #Linux

5.常见的FTP的客户端

  • FileZilla
  • WinScp
  • FlashFTP
  • SecureCRT
  • CuteFTP

二、VSTFTP服务配置

FTP服务端IP地址:192.168.192.133
VSFTP主配置文件:/etc/vsftp/vsftp.conf

1.安装VSFTP服务器与客户端

#在linux下客户端安装ftp,服务器端安装vsftpd
[root@c74 ~]# yum install vsftpd -y
[root@c66 ~]# yum install ftp -y

2.关闭防火墙和selinux

[root@c74 ~]# systemctl stop firewalld 
[root@c74 ~]# setenforce 0 

3.认证登录模式

  1. 匿名开放模式配置
    #开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限
    #不建议在生产环境使用
  • ftp服务端配置
[root@c74 ~]# vi/etc/vsftp/vsftp.conf
anon_upload_enable=YES     #允许匿名用户上传
anon_mkdir_write_enable=YES   #匿允许名用户建立目录
anon_other_write_enable=YES    #允许匿名用户删除重命名目录
[root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd 
  • ftp客户端测试
[root@c66 ~]# ftp 192.168.192.133
Connected to 192.168.192.133 (192.168.192.133).
220 (vsFTPd 3.0.2)
Name (192.168.192.133:root): ftp             #用户填ftp
331 Please specify the password.
Password:                                    #密码为空
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>  pwd                                    #刚进来时所处目录为服务器的  /var/ftp/
257 "/"
ftp> cd pub                                  #切换目录至/var/ftp/ftp
250 Directory successfully changed.          #切换成功
ftp> mkdir pub1.1                            #创建目录
550 Create directory operation failed.       #创建失败
ftp> 

解决方法(两种):

第一种:将/var/ftp/pub目录的权限改为757 ,此时客户端可在/var/ftp/pub/目录下创建文
     ftp服务端:
              [root@c74 ~]# chmod 757 /var/ftp/pub/
              [root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd
     ftp客户端:
              [root@c66 ~]# ftp 192.168.192.133
              Connected to 192.168.192.133 (192.168.192.133).
              220 (vsFTPd 3.0.2)
              Name (192.168.192.133:root): ftp
              331 Please specify the password.
              Password:
              230 Login successful.
              Remote system type is UNIX.
              Using binary mode to transfer files.
              ftp> cd pub
              250 Directory successfully changed.
              ftp> mkdir pub1                       #创建目录
              257 "/pub/pub1" created
              ftp> rename pub1 changepub1           #修改目录名
              350 Ready for RNTO.
              250 Rename successful.
              ftp> rmdir changepub1                 #删除目录
              250 Remove directory operation successful.
              ftp> 
第二种方法:将/var/ftp/pub目录的属主改为ftp用户,此时既可以创建目录,也可以修改pub/下的目录名
     ftp服务器:
              [root@c74 ~]# chown -Rf ftp /var/ftp/pub/
              [root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd
     ftp客户端:
              [root@c66 ~]# ftp 192.168.192.133
              Connected to 192.168.192.133 (192.168.192.133).
              220 (vsFTPd 3.0.2)
              Name (192.168.192.133:root): ftp
              331 Please specify the password.
              Password:
              230 Login successful.
              Remote system type is UNIX.
              Using binary mode to transfer files.
              ftp> cd pub
              250 Directory successfully changed.
              ftp> mkdir pub2
              257 "/pub/pub2" created
              ftp> rename pub2 changepub2
              350 Ready for RNTO.
              250 Rename successful.
              ftp> rmdir changepub2
              250 Remove directory operation successful.
              ftp> 
  1. 本地用户模式配置
  • ftp服务端配置:
[root@c74 ~]# vi /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO 
[root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd
  • ftp客户端测试:
  [root@c66 ~]# ftp 192.168.192.133
  Connected to 192.168.192.133 (192.168.192.133).
  220 (vsFTPd 3.0.2)
  Name (192.168.192.133:root): root
  530 Permission denied.
  Login failed.                             #登录失败
  ftp>  

#失败原因:vsftpd服务所在目录中存放着两个用户名单ftpusers,user_list,出于安全原因,root默认不允许登录。

解决方法:

#编辑ftp服务端两个用户名单ftpusers,user_list,注释root即可。同时在新创建一个用户,便于测试。 
     ftp服务器:
           [root@c74 ~]# vi /etc/vsftpd/ftpusers 
           #root
           [root@c74 ~]# vi /etc/vsftpd/user_list
           #root
           [root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd
     ftp客户端测试:
           [c66 ~]# ftp 192.168.192.133
           Connected to 192.168.192.133 (192.168.192.133).
           220 (vsFTPd 3.0.2)
           Name (192.168.192.133:root): root   #登录服务器的管理员用户
           331 Please specify the password.
           Password:
           230 Login successful.
           Remote system type is UNIX.
           Using binary mode to transfer files.
           ftp> pwd                      #一进来就处于/root目录
           257 "/root"
           ftp> cd /var/ftp/pub          #切换目录
           250 Directory successfully changed.
           ftp> mkdir 11                 #在/var/ftp/pub/目录下创建目录
           257 "/var/ftp/pub/11" created
           ftp> rename 11 111            #修改/var/ftp/pub目录下的目录名
           350 Ready for RNTO.
           250 Rename successful
           ftp> rmdir 111                #删除/var/ftp/pub目录下的目录
           250 Remove directory operation successful.
           ftp> cd /root                 #切换目录至/root
           250 Directory successfully changed.
           ftp> pwd
           257 "/root"
           ftp> mkdir ftpclien           #在/root/目录下创建目录
           257 "/root/ftpclien" created
           ftp> rename ftpclien clien    #修改/root目录下的目录名
           350 Ready for RNTO.
           250 Rename successful.
           ftp> rmdir clien              #删除/root目录下的目录
           250 Remove directory operation successful.
           ftp> 
  • 新建一个用户用来测试
      ftp服务器:
            [root@c74 ~]# useradd user1
            [root@c74 ~]# passwd  user1
            Changing password for user user1.
            New password: 
            BAD PASSWORD: The password is shorter than 8 characters
            Retype new password: 
            passwd: all authentication tokens updated successfully.
            [root@c74 ~]# systemctl restart vsftpd&&systemctl enable vsftpd
      tfp客户端测试:
            [root@c66 ~]# ftp 192.168.192.133
            Connected to 192.168.192.133 (192.168.192.133).
            220 (vsFTPd 3.0.2)
            Name (192.168.192.133:root): user1
            331 Please specify the password.
            Password:
            230 Login successful.
            Remote system type is UNIX.
            Using binary mode to transfer files.
            ftp> pwd
            257 "/home/user1"
            ftp> mkdir user1dir
            257 "/home/user1/user1dir" created
            ftp> rename user1dir dir1
            350 Ready for RNTO.
            250 Rename successful.
            ftp> rmdir dir1
            250 Remove directory operation successful.
            ftp> cd /root
            550 Failed to change directory.
 #普通用户只能在自己的家目录里对目录进行操作,不能切换出家用户目录
  1. 虚拟用户模式配置

VsFTP高级应用,虚拟用户模式
#虚拟用户模式是这三种模式中最安全的一种认证模式,配置复杂。

  • ftp服务器配置
     [root@c74 ~]# vi /etc/vsftpd/vuser.list
     user1    #用户名
     123456   #密码
     user2
     123456
      
#db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
#明文不安全,风险高。所以转换为密文,并将明文文件删除
     [root@c74 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list  /etc/vsftpd/vuser.db     #生成密文文件
     [root@c74 ~]# ll -d /etc/vsftpd/vuser.list 
     -rw-r--r--. 1 root root 26 Dec  3 16:45 vuser.list
     [root@c74 ~]# file /etc/vsftpd/vuser.db  
     /etc/vsftpd/vuser.db: Berkeley DB (Hash, version 9, native byte-order)
     [root@c74 ~]# chmod 600 /etc/vsftpd/vuser.db 
     [root@c74 ~]# rm -rf /etc/vsftpd/vuser.list            #删除明文文件
         
#创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。
#FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。 
     [root@c74 ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
     [root@c74 ~]# ls -ld /var/ftproot/
     drwx------. 2 virtual virtual 62 Dec  3 16:53 /var/ftproot/      
     [root@c74 ~]# chmod -Rf 755 /var/ftproot
         
#建立用于支持虚拟用户的PAM文件 
#PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式 
      [root@c74 ~]# vi /etc/pam.d/vsftpd.vu 
      auth       required     pam_userdb.so db=/etc/vsftpd/vuser 
      account    required     pam_userdb.so db=/etc/vsftpd/vuser
      [root@c74 ~]# vi /etc/vsftpd/vsftpd.conf 
      anonymous_enable=No guest_enable=YES 
      guest_username=virtual 
      allow_writeable_chroot=YES  
      pam_service_name =vsftpd.vu
          
#为虚拟用户创建不同的权限 
      [root@c74 ~]# mkdir /etc/vsftpd/vusers_dir 
      [root@c74 ~]# cd /etc/vsftpd/vusers_dir 
      [root@c74 vusers_dir]# touch user1 vi user1 
      anon_upload_enable=YES 
      anon_mkdir_write_enable=YES 
      anon_other_write_enable=YES
      [root@c74 ~]# vi /etc/vsftpd/vsftpd.conf 
      user_config_dir=/etc/vsftpd/vusers_dir
      
#用user1和user2分别进行测试,注意结果              
      [root@c74 ~]# systemctl restart vsftpd       
               
tfp客户端测试:
      [root@c66 ~]# ftp 192.168.192.133
      Connected to 192.168.192.133 (192.168.192.133).
      220 (vsFTPd 3.0.2)
      Name (192.168.192.133:root): user1
      331 Please specify the password.
      Password:
      500 OOPS: bad bool value in config file for: anon_upload_enable
      Login failed.
      421 Service not available, remote server has closed connection
      ftp> pwd
      Not connected.
      ftp>               
      [root@c66 ~]# ftp 192.168.192.133
      Connected to 192.168.192.133 (192.168.192.133).
      220 (vsFTPd 3.0.2)
      Name (192.168.192.133:root): user2
      331 Please specify the password.
      Password:
      230 Login successful.
      Remote system type is UNIX.
      Using binary mode to transfer files.
      ftp> pwd
      257 "/"
      ftp> ls
      227 Entering Passive Mode (192,168,192,133,80,133).
      150 Here comes the directory listing.
      226 Transfer done (but failed to open directory).
      ftp>      
#得出客户端可以登录user2,却不可以登录user1          

问题

#如果加密用户不能认证,注意监控/var/log/secure日志!

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值