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