FTP服务
课程目标
- 了解FTP服务器的应用场景
- 了解FTP服务器的两种工作模式
- 掌握FTP服务的基本配置
- 能够根据需求对FTP进行访问控制
一、FTP服务介绍
FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
- 主要用于互联网中文件的双向传输(上传/下载)、文件共享
- 跨平台 Linux、Windows
- FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
- FTP的默认端口 21号(命令端口) 20号(数据端口) 默认被动模式下
- FTP程序(软件)vsftpd
二、开胃菜-搭建简易FTP服务器
思路:
- 关闭防火墙和selinux
- 配置yum源
- 软件三步曲(安装|确认|软件列表)
- 了解配置文件——>(man 5 xxx.conf)
- 根据需求通过修改配置文件来完成服务的搭建
- 启动服务,开机自启动
- 测试验证
三、FTP服务的客户端工具
Linux:ftp、lftp(客户端程序)
Windows:FileZilla、IE、Chrome、Firefox
lftp和ftp工具区别:
- lftp可以批量并且下载目录
lftp localhost:~> mirror remote local 下载整个目录到本地
命名
四、FTP服务的两种工作模式
- 主动模式
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
- 被动模式
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
思考1:
FTP的主动模式好还是被动模式好?
-
五、FTP服务的基本配置
1. FTP服务的基本应用
默认安装:没有任何需求
环境:3A网络云服务器
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/logrotate.d/vsftpd //日志轮转的文件
/etc/pam.d/vsftpd //安全认证
/etc/rc.d/init.d/vsftpd //启动脚本
//虚拟用户
/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 //支持匿名用户访问
pam_service_name=vsftpd //指定认证文件
userlist_enable=YES //启用用户列表
tcp_wrappers=YES //支持tcp_wrappers功能
1.5 根据需求通过修改配置文件来完成服务的搭建
没需求
1.6 启动服务,开机自启动
[root@ftp-server ~]# netstat -nltp|grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3534/vsftpd
1.7 测试验证
clinet:
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,1,2,168,207).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 52124 Apr 19 03:52 install.log
-rw-rw-r-- 1 500 500 12 Apr 19 03:51 test1
226 Directory send OK.
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (10,1,1,2,83,153).
150 Ok to send data.
226 Transfer complete.
10033 bytes sent in 0.105 secs (95.86 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (10,1,1,2,92,62).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 52124 Apr 19 03:52 install.log
-rw-r--r-- 1 500 500 10033 Apr 19 03:54 install.log.syslog
-rw-rw-r-- 1 500 500 12 Apr 19 03:51 test1
226 Directory send OK.
ftp> exit
221 Goodbye.
[r
ftp> ls
总结:
1. ftp 默认使用用户名和密码登录 ——>ftp 或者匿名用户
2. lftp 默认使用的匿名用户登录 ——> lftp 10.1.1.2:/> user username
——>lftp user@ip
3. 工具不知道咋用 里面输入?或者 man ftp 和lftp
总结:
- 匿名用户可以下载文件但是不能上传文件
- 本地用户可以上传和下载文件
需求1:允许匿名用户上传文件
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
lftp 10.1.1.2:~> ls
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file1
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file2
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file3
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file4
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file5
drwxr-xr-x 2 0 0 4096 Mar 01 2013 pub
lftp 10.1.1.2:/> put install.log
put: Access failed: 553 Could not create file. (install.log)
lftp 10.1.1.2:/>
原因:匿名用户的默认数据根目录/var/ftp没有写权限
解决:
chmod o+w /var/ftp
解决后遇到另外一个问题:如下
[root@client ~]# ftp 10.1.1.2
Connected to 10.1.1.2 (10.1.1.2).
220 (vsFTPd 2.2.2)
Name (10.1.1.2:root): ftp
331 Please specify the password.
Password:
原因:/var/ftp数据目录权限太大 o+w 777
解决:chmod o-w
最终想让匿名用户上传文件的解决办法是:
1.在/var/ftp目录里自己创建一个数据目录或者直接将匿名用户的数据上传到pub目录
2.将/var/ftp/pub目录权限给o+w 或者777
需求2:下载其他匿名用户上传的文件
anon_umask=022
测试验证:
[root@client ~]# lftp 10.1.1.2
lftp 10.1.1.2:~> ls
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file2
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file3
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file4
-rw-r--r-- 1 0 0 0 Apr 19 02:45 file5
-rw------- 1 14 50 52124 Apr 19 06:42 install.log
drwxr-xrwx 2 0 0 4096 Apr 19 06:48 pub
-rw-r--r-- 1 0 0 0 Apr 19 02:45 test1
lftp 10.1.1.2:/> cd pub/
lftp 10.1.1.2:/pub> ls
-rw------- 1 14 50 52124 Apr 19 06:48 install.log
lftp 10.1.1.2:/pub> put install.log.syslog
10033 bytes transferred
lftp 10.1.1.2:/pub> ls
-rw------- 1 14 50 52124 Apr 19 06:48 install.log
-rw-r--r-- 1 14 50 10033 Apr 19 07:01 install.log.syslog
//更改完anon_umask后,匿名用户上传的文件权限就变成了644,其他人就可以下载文件了
lftp 10.1.1.2:/pub>
需求3:开启本地用户消息功能
1)本地用户访问——>/home/username
[root@ftp-server ~]# echo "welcome to my home" > /home/stu1/.message
2)匿名用户访问——>/var/ftp
[root@ftp-server ~]# echo "welcome to anon home" > /var/ftp/.message
测试验证:
230-welcome to anon home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> exit
221 Goodbye.
另外一种情况:
1. 修改配置文件指定消息文件
banner_file=/etc/vsftpd/banner_file
2. 创建消息文件
vim /etc/vsftpd/banner_file
......
3. 测试验证
[root@client ~]# ftp 10.1.1.2
Connected to 10.1.1.2 (10.1.1.2).
220-@@@@@@@@@@@
220-------- -------
220-
220-哈哈哈哈h
220-嘿嘿嘿
220-
220
Name (10.1.1.2:root): ftp
331 Please specify the password.
Password:
230-welcome to anon home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
需求4:禁锢本地用户的家,只能在自己的家中活动
1)禁锢所有的本地用户
chroot_local_user=YES //禁锢所有的本地用户(不能随便跳转)
2)禁锢大部分用户,允许小部分
chroot_local_user=YES
3)允许大部分,禁锢小部分
chroot_local_user=NO 或者 # chroot_local_user=YES
chroot_list_enable=YES //启用用户文件列表
chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表