FTP服务初探

FTP服务

课程目标

了解FTP服务器的应用场景

了解FTP服务器的两种工作模式

掌握FTP服务的基本配置

能够根据需求对FTP进行访问控制

一、FTP服务介绍

FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。

主要用于互联网中文件的双向传输(上传/下载)、文件共享

跨平台  Linux、Windows

FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输

FTP的默认端口 21号(命令端口)    20号(数据端口) 默认被动模式下

FTP程序(软件)vsftpd

二、开胃菜-搭建简易FTP服务器

思路:

关闭防火墙和selinux

配置yum源

部署环境:我用的是3A网络云服务器,可以随时更换ip地址,适合小白。

软件三步曲(安装|确认|软件列表)

了解配置文件——>(man 5 xxx.conf)

根据需求通过修改配置文件来完成服务的搭建

启动服务,开机自启动

测试验证

三、FTP服务的客户端工具

Linux:ftp、lftp(客户端程序)

Windows:FileZilla、IE、Chrome、Firefox

lftp和ftp工具区别:

lftp可以批量并且下载目录

lftplocalhost:~>mirrorremotelocal下载整个目录到本地

主动模式

客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求

服务端的21号命令端口响应客户端的随机命令端口

服务端的20号端口主动请求连接客户端的随机数据端口

客户端的随机数据端口进行确认

被动模式

客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求

服务端的21号命令端口响应客户端的随机命令端口

客户端主动连接服务端打开的大于1023的随机端口

服务端进行确认

思考1:

FTP的主动模式好还是被动模式好?

五、FTP服务的基本配置

1. FTP服务的基本应用

默认安装:没有任何需求

环境:

node1:FTP-server  10.1.1.2

node2:client      10.1.1.3

步骤:

1.1 关闭防火墙和selinux

1.2 配置yum源

1.3 软件三步曲

安装软件  vsftpd

确认安装成功

[root@ftp-server ftp]# rpm -q vsftpd

vsftpd-2.2.2-11.el6_4.1.x86_64

查看软件带来的文件列表


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

/usr/sbin/vsftpd            //二进制命令


/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS

/usr/share/man/man5/vsftpd.conf.5.gz            //man文档

/var/ftp            //匿名用户的默认数据的根目录

/var/ftp/pub        //匿名用户的默认数据目录的扩展目录

1.4 了解配置文件

主配置文件:man 5 vsftpd.conf

[root@ftp-server ~]# grep -v ^# /etc/vsftpd/vsftpd.conf

anonymous_enable=YES    //支持匿名用户访问 

local_enable=YES        //非匿名用户

connect_from_port_20=YES    //支持主动模式(默认被动模式)

xferlog_std_format=YES      //xferlog日志格式

listen=YES                  //ftp服务独立模式下的监听

pam_service_name=vsftpd //指定认证文件

userlist_enable=YES    //启用用户列表

tcp_wrappers=YES        //支持tcp_wrappers功能

1.5 根据需求通过修改配置文件来完成服务的搭建

没需求

1.6 启动服务,开机自启动

[root@ftp-server~]# netstat -nltp|grep vsftpd

tcp000.0.0.0:210.0.0.0:*LISTEN3534/vsftpd

1.7 测试验证

clinet:

Linux:

[root@client~]# lftp stu1@10.1.1.2

Password:

lftpstu1@10.1.1.2:~>putinstall.log

52124bytestransferred

lftpstu1@10.1.1.2:~>exit

[root@client~]# ftp 10.1.1.2

Connectedto10.1.1.2(10.1.1.2).

220(vsFTPd2.2.2)

Name(10.1.1.2:root):stu1

331Pleasespecifythepassword.

Password:

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>putinstall.log.syslog

local:install.log.syslogremote:install.log.syslog

227EnteringPassiveMode(10,1,1,2,83,153).

150Oktosenddata.

226Transfercomplete.

10033bytessentin0.105secs(95.86Kbytes/sec)

ftp>ls

227EnteringPassiveMode(10,1,1,2,92,62).

150Herecomesthedirectorylisting.

-rw-r--r--150050052124Apr1903:52install.log

-rw-r--r--150050010033Apr1903:54install.log.syslog

-rw-rw-r--150050012Apr1903:51test1

226DirectorysendOK.

ftp>exit

221Goodbye.

[root@client~]# ftp 10.1.1.2

Connectedto10.1.1.2(10.1.1.2).

220(vsFTPd2.2.2)

Name(10.1.1.2:root):ftp

331Pleasespecifythepassword.

Password:

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>ls

总结:

1.ftp  默认使用用户名和密码登录    ——>ftp或者匿名用户


3.工具不知道咋用里面输入?或者manftp和lftp

总结:

匿名用户可以下载文件但是不能上传文件

本地用户可以上传和下载文件

需求1:允许匿名用户上传文件

[root@ftp-servervsftpd]# cat vsftpd.conf

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

测试验证:

[root@client~]# lftp 10.1.1.2

lftp10.1.1.2:~>ls

-rw-r--r--1000Apr1902:45file1

-rw-r--r--1000Apr1902:45file2

-rw-r--r--1000Apr1902:45file3

-rw-r--r--1000Apr1902:45file4

-rw-r--r--1000Apr1902:45file5

drwxr-xr-x2004096Mar012013pub

lftp10.1.1.2:/>putinstall.log

put:Accessfailed:553Couldnotcreatefile.(install.log)

lftp10.1.1.2:/>

原因:匿名用户的默认数据根目录/var/ftp没有写权限

解决:

chmodo+w/var/ftp

解决后遇到另外一个问题:如下

[root@client~]# ftp 10.1.1.2

Connectedto10.1.1.2(10.1.1.2).

220(vsFTPd2.2.2)

Name(10.1.1.2:root):ftp

331Pleasespecifythepassword.

Password:

500OOPS:vsftpd:refusingtorunwithwritableanonymousroot

Loginfailed.

ftp>exit

[root@client~]# lftp 10.1.1.2

lftp10.1.1.2:~>ls

ls:Loginfailed:500OOPS:vsftpd:refusingtorunwithwritableanonymousroot

lftp10.1.1.2:~>exit

最终想让匿名用户上传文件的解决办法是:

1.在/var/ftp目录里自己创建一个数据目录或者直接将匿名用户的数据上传到pub目录

2.将/var/ftp/pub目录权限给o+w或者777

需求2:下载其他匿名用户上传的文件

anon_umask=022

测试验证:

[root@client~]# lftp 10.1.1.2

lftp10.1.1.2:~>ls

-rw-r--r--1000Apr1902:45file2

-rw-r--r--1000Apr1902:45file3

-rw-r--r--1000Apr1902:45file4

-rw-r--r--1000Apr1902:45file5

-rw-------1145052124Apr1906:42install.log

drwxr-xrwx2004096Apr1906:48pub

10033bytestransferred

lftp10.1.1.2:/pub>ls

-rw-------1145052124Apr1906:48install.log

-rw-r--r--1145010033Apr1907:01install.log.syslog

//更改完anon_umask后,匿名用户上传的文件权限就变成了644,其他人就可以下载文件了

lftp10.1.1.2:/pub>

需求3:开启本地用户消息功能

1)本地用户访问——>/home/username

测试验证:

[root@client~]# ftp 10.1.1.2

Connectedto10.1.1.2(10.1.1.2).

220(vsFTPd2.2.2)

Name(10.1.1.2:root):stu1

331Pleasespecifythepassword.

Password:

230-welcometomyhome

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>exit

221Goodbye.

[root@client~]# ftp 10.1.1.2

Connectedto10.1.1.2(10.1.1.2).

220(vsFTPd2.2.2)

Name(10.1.1.2:root):ftp

331Pleasespecifythepassword.

Password:

230-welcometoanonhome

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>

ftp>exit

221Goodbye.

另外一种情况:

1. 修改配置文件指定消息文件

banner_file=/etc/vsftpd/banner_file

2. 创建消息文件

vim/etc/vsftpd/banner_file

......

3. 测试验证

[root@client ~]# ftp 10.1.1.2

Connected to10.1.1.2 (10.1.1.2).

220-@@@@@@@@@@@

220--------        -------

220-

220-哈哈哈哈h

220-嘿嘿嘿

220-

220

Name (10.1.1.2:root): ftp

331Please specify the password.

Password:

230-welcometo anon home

230Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

需求4:禁锢本地用户的家,只能在自己的家中活动

1)禁锢所有的本地用户

chroot_local_user=YES //禁锢所有的本地用户(不能随便跳转)

2)禁锢大部分用户,允许小部分

chroot_local_user=YES

chroot_list_enable=YES //启用用户文件列表

chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表

3)允许大部分,禁锢小部分

chroot_local_user=NO 或者 # chroot_local_user=YES

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容