27.1FTP协议及实验

      • FTP协议
          • FTP介绍
      • 实验:基于文件验证的vsftpd虚拟用户
          • 1、创建用户数据库文件
          • 2、修改配置文件
          • 3、每个用户各自设置家目录

FTP协议

FTP介绍

File Transfer Protocol 早期的三个应用级协议之一 #NFS,samba
基于C/S结构
双通道协议:数据和命令连接
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT style):服务器主动连接
命令(控制):客户端:随机port — 服务器:tcp21
数据: 客户端:随机port —服务器:tcp20
被动(PASV style):客户端主动连接
命令(控制):客户端:随机port — 服务器:tcp21
数据: 客户端:随机port —服务器:随机port
服务器被动模式数据端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服务器数据端口为:224*256+59
————————————————————————————
双通道协议:打开两个tcp连接
命令:都是客户端连接服务器 。而数据连接有主被动之分;服务器主动连接客户端,此时服务器数据端口为tcp20 ,而客户端的端口未知,需要通过命令端口发送客户端协商客户端数据端口,让客户端发送过来数据端口,若客户端方面存在防火墙,则连接失败;而被动连接时,服务器若也存在防火墙,也会导致失败,故ftp适合局域网使用,广域网由于防火墙可能导致失败;一般现在有智能防火墙,只要ftp协议命令端口中传输协商的数据端口传输过来时,防火墙会自动打开该端口,即协议追踪;;数据通道传完数据就断开;客户端可以通过指令决定是用哪种数据端口
如图1
27.1FTP协议及实验_第1张图片

FTP服务器:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS #Servu为商业版
vsftpd:Ver y Secure FTP Daemon,CentOS默认FTP服务器
高速,稳定,下载速度是WU-FTP的两倍
ftp.redhat.com数据:单机最多可支持15000个并发

客户端软件:

ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主动模式 –p 被动模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file #非交互方式
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp #图形工具
IE ftp://username:password@ftpserver

ftp工具 进入输入?为帮助 ,mget ,mput

ftp服务状态码:

1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录

用户认证:

匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件
nsswitch:network service switch名称解析框架
pam:pluggable authentication module 用户认证
/lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服务

[root@centos7:~]# ftp 172.18.0.1
Connected to 172.18.0.1 (172.18.0.1).
220 (vsFTPd 2.2.2)          #ftp服务状态码,版本号
Name (172.18.0.1:root): ftp #匿名账号ftp或者输入anonymous
331 Please specify the password.
Password:                   #匿名账号密码随便输入或者直接回车
230 Login successful.       #状态码,登录成功
Remote system type is UNIX. #远程ftp服务主机
Using binary mode to transfer files.   #使用二进制传输文本,或者文本格式传输文本(不推荐,windows由于回车换行和linux不同,会导致内容错乱)
ftp> ls
227 Entering Passive Mode (172,18,0,1,90,93).  #passive被动模式
150 Here comes the directory listing.
drwxr-xr-x   21 0        0            4096 Apr 09 10:44 pub
226 Directory send OK.
ftp> 

图2
27.1FTP协议及实验_第2张图片
27.1FTP协议及实验_第3张图片

ftp> passive
Passive mode off.
ftp> get winxp_ghost.iso
local: winxp_ghost.iso remote: winxp_ghost.iso
200 PORT command successful. Consider using PASV.  #主动模式成功
150 Opening BINARY mode data connection for winxp_ghost.iso (711854080 bytes).
226 Transfer complete.
711854080 bytes received in 7 secs (101727.29 Kbytes/sec)
[root@centos7:~]# ss -nt
State      Recv-Q Send-Q    Local Address:Port       Peer Address:Port              
ESTAB      14976  0         172.18.122.109:53402      172.18.0.1:20    数据端口,传完数据即断开连接

ftp> ?
Commands may be abbreviated.  Commands are:

!       debug       mdir        sendport    site
$      dir     mget        put     size
account     disconnect  mkdir       pwd     status
append      exit        mls     quit        struct
ascii       form        mode        quote       system
bell        get     modtime     recv        sunique
binary      glob        mput        reget       tenex
bye     hash        newer       rstatus     tick
case        help        nmap        rhelp       trace
cd      idle        nlist       rename      type
cdup        image       ntrans      reset       user
chmod       lcd     open        restart     umask
close       ls      prompt      rmdir       verbose
cr      macdef      passive     runique     ?
delete      mdelete     proxy       send
ftp> 
ftp不支持tab补全  lftp支持补全 ,都是交互方式,lftpget ftp://172.18.0.1/pub/getty  非交互方式,适合脚本
wget ftp://172.18.0.1/pub/getty  #可以显示下载速度等信息
curl ftp://172.18.0.1/pub/RHCE/www.html           #显示
curl -o a.html ftp://172.18.0.1/pub/RHCE/www.html #下载到指定文件

ftp -A 172.18.0.1  #-A主动模式 -P被动模式,可以不写,默认为-P
#windows默认为主动模式
C:\Users\29256>ftp 172.18.0.1
连接到 172.18.0.1220 (vsFTPd 2.2.2)
200 Always in UTF8 mode.
用户(172.18.0.1:(none)): ftp
331 Please specify the password.
密码:
230 Login successful.
ftp>
ftp> ls
200 PORT command successful. Consider using PASV. #主动模式成功
150 Here comes the directory listing.

C:\Users\29256>netstat -nt | findstr 172.18.0.1
  TCP    172.18.118.99:61798    172.18.0.1:445         ESTABLISHED     InHost
  TCP    172.18.118.99:62795    172.18.0.1:21          ESTABLISHED     InHost
[root@centos7:~]# yum info vsftpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
Name        : vsftpd
Arch        : x86_64
Version     : 3.0.2
Release     : 22.el7
Size        : 348 k
Repo        : installed
From repo   : base
Summary     : Very Secure Ftp Daemon
URL         : https://security.appspot.com/vsftpd.html  #官方地址
License     : GPLv2 with exceptions
Description : vsftpd is a Very Secure FTP daemon. It was written completely from
            : scratch.
[root@centos7:~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd   #日志滚动策略文件
/etc/pam.d/vsftpd         #安全机制的pam模块
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/usr/lib/systemd/system/vsftpd.service   #服务名
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/[email protected]
/usr/sbin/vsftpd                     #主进程

/var/ftp             #安装生成的目录
/var/ftp/pub         #共享目录
[root@centos7:~]# systemctl start vsftpd  #端口21
[root@centos7:~]# ss -nt
State      Recv-Q Send-Q    Local Address:Port      Peer Address:Port              
CLOSE-WAIT 15     0         172.18.122.109:39066    172.18.0.1:21                              
ESTAB      0      0     ::ffff:192.168.31.7:21       ::ffff:192.168.31.6:56662   #31.6机器连接的命令端口


[root@centos7:vsftpd]# ps auxf
root       4736  0.0  0.0  53260   708 ?        Ss   16:10   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody     7757  0.0  0.0  55384  1480 ?        Ss   20:34   0:00  \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.co
ftp        7759  0.0  0.0  57492  1232 ?        S    20:34   0:00      \_ /usr/sbin/vsftpd /etc/vsftpd/vsft

实验:基于文件验证的vsftpd虚拟用户

1、创建用户数据库文件

27.1FTP协议及实验_第4张图片

[root@centos7:vsftpd]# pwd
/etc/vsftpd
[root@centos7:vsftpd]# vim ftpusers.txt
ftpuser1
centos1
ftpuser2
centos2  
[root@centos7:vsftpd]# db_load -T -t hash -f ftpusers.txt ftpusers.db
[root@centos7:vsftpd]# file ftpusers.db 
ftpusers.db: Berkeley DB (Hash, version 9, native byte-order)
[root@centos7:vsftpd]# chmod 600 ftpusers.txt   #更改权限,保证安全
[root@centos7:vsftpd]# chmod 600 ftpusers.db
[root@centos7:vsftpd]# useradd vftpuser -s /sbin/nologin  #创建一个系统账号当guest账号
[root@centos7:vsftpd]# chmod 555 /home/vftpuser/  #不能有写权限,否则登录失败
[root@centos7:vftpuser]# mkdir upload
[root@centos7:vftpuser]# chown vftpuser upload/   #创建上传文件目录,有写权限
2、修改配置文件
[root@centos7:vsftpd]# vim /etc/pam.d/vsftpd.db  #pam认证配置文件
auth required pam_userdb.so db=/etc/vsftpd/ftpusers  #无需写后缀.txt                                            
account required pam_userdb.so db=/etc/vsftpd/ftpuses #无需写后缀.db

[root@centos7:vsftpd]# vim vsftpd.conf  #vsftp服务配置文件
pam_service_name=vsftpd.db     #关联pam模块文件路径

guest_enable=YES               #启用来宾
guest_username=vftpuser        #所有系统账号映射为guest用户vftpuser
user_config_dir=/etc/vsftpd/vftpuser.d/
3、每个用户各自设置家目录
[root@centos7:~]# mkdir  /etc/vsftpd/vftpuser.d/  
[root@cos7:~]# vim /etc/vsftpd/vftpuser.d/ftp1
local_root=/home/vftpuser/ftp1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@cos7:~]# vim /etc/vsftpd/vftpuser.d/ftp2
local_root=/home/vftpuser/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@centos7:vsftpd]# systemctl restart vsftpd

你可能感兴趣的:(linux)