目录
一、理论
1.FTP服务
(1)FTP协议
FTP(File Transfer Protocol)文件传输协议,是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。
使用TCP的20、21端口:
① 控制连接:TCP 21 ,用于建立控制连接,发送FTP命令信息。
② 数据连接:TCP 20 ,用于建立数据连接,传输文件数据包括上传和下载数据。
(2)FTP连接及传输模式
FTP数据来连接分为主动模式和被动模式:
① 主动模式(port):服务器主动发起数据连接。
首先由客户端向服务端的21端口建立FTP控制连接。当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,请你过来连接我”,预算服务器从20端口向客户端的该端口发送请求并建立数据连接。
② 被动模式(PASV):服务器被动等待连接。
如果客户端所在的网络的防火墙禁止主动模式连接,通常会使用被动模式。
首先由客户端向服务器的21端口建立FTP控制连接。当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,请你来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式:
① 文本模式:又称为ASCII模式,一般只用于纯文本文件的传输。
ASCII(American Standard Code for information interchange)美国信息交换标准码模式,这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件传输。
② 二进制模式:又称为Binary模式:适合传输程序、图片等非纯文本字符的文件。
这种模式不会转换文件中的字符序列,更合适传输程序,图片等非纯文本字符的文件。使用二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式。
(3)FTP用户的类型
① 匿名用户:用户名为ftp或anonymous,提供任意密码(包括空密码),都可以通过服务器的验证
② 本地用户:除了匿名用户以外的其他系统用户。
(4)FTP服务器软件的种类
WIndows系统:FileZilla Sener、Serv-U
Linux系统:vsftpd (Very Secure FTP Daemon),该软件针对安全特性方面做了大量的设计,支持15000ge 用户并发连接。
(5)FTP客户端工具的种类
Windows系统和Linux系统默认都自带有ftp命令程序。
2.配置文件路径
① 服务配置文件:/etc/vsftpd/vsftpd.conf
② 黑名单配置文件:/etc/vsftpd/user_list
③ 匿名用户FTP服务的默认根目录:/var/ftp
④ 本地用户FTP服务的默认根目录:/home/账户同名文件
⑤ 错误日志路径:/var/log/messages
3.FTP配置文件解析
服务配置文件:/etc/vsftpd/vsftpd.conf
表1 FTP配置文件解析
命令 | 功能 |
anonymous_enable=YES | 允许匿名用户访问(账户名为ftp,不需要密码),默认允许建议关闭 |
local_enable=YES | 允许本地用户访问(本地可登录账户) |
write_enable=YES | 开放服务器的写权限,上传文件到服务器必须开启,默认开启 |
local_umask=022 | 本地用户文件权限反掩码,文件权限777-umask,文件权限666-umask |
dirmessage_enable=YES | 开启日志消息,默认开启 |
connect_from_port_20=YES | 确保端口数据传输来自20端口,默认开启 |
xferlog_std_format=YES | 日志文件设置为标准ftpd xferlog格式,默认开启,日志位置/var/log/xferlog |
chroot_local_user=YES | 将用户访问权限限制在用户自己的根目录下,默认关闭。 |
allow_writeable_chroot=YES | 允许被限制用户对自己根目录进行写操作 |
anon_root=/var | 设置本地用户的默认根目录为/var,注意需要此目录给其他用户读写权限才可上传下载 |
userlist_enable=YES | 开启user_list用户列表,文件位置/etc/vsftpd/user_list,默认关闭 |
userlist_deny=YES | 若user_list是开启状态userlist_deny=YES是黑名单文件中的用户不能登录,默认关闭 |
若user_list是开启状态,userlist_deny=NO则只允许user_list中的用户登录 |
4.配置本地用户访问FTP
表2 配置本地用户访问FTP
命令 | 功能 |
anonymous_enable=YES | 允许匿名用户访问 |
local_enable=YES | 允许本地用户访问 |
write_enable=YES | 开放服务器的写权限 |
local_umask=022 | 设置本地用户umask为022 |
chroot_local_user=YES | 限制本地用户只能访问默认根目录 |
allow_writeable_chroot=YES | 允许被限制用户对自己根目录进行写操作 |
anon_root=/mnt | 设置本地用户默认根目录为/mnt |
userlist_enable=YES | 开启user_list用户列表 |
userlist_deny=YES | 开启黑名单,禁用user_list文件中的用户登录 |
userlist_deny=YES | 开启白名单,允许user_list文件中的用户登录 |
二、实验
1.匿名用户访问FTP服务器
ftp传输使用匿名用户上传下载文件:
(1)搭建环境
centos 7系统虚拟机一台,配置关闭防火墙和selinux。
(2)检测环境并安装ftp服务
(3)备份配置文件
(4)配置文件
进入vsftpd文件
取消注释 ,允许匿名用户上传下载
重启vsftpd服务
(5)目录配置读写权限
创建测试文件test.txt
写入内容:”hello 123”
(6)匿名用户登录ftp
Windows cmd命令:ftp 服务器IP地址
匿名账户:ftp 密码:无
(7)匿名用户进行下载、上传文件
get 命令下载文件
下载到本地的文件路径在C:\Users\下
删除文件
客户端上传新文件到服务器
显示成功
用户put命令上传备份文件到服务器
显示成功
2.普通用户访问FTP服务器
ftp传输使用普通用户在家目录上传下载文件:
(1)禁用匿名用户访问
进入配置文件
设置匿名用户禁止访问
(2)验证ftp匿名登录
匿名登录显示失败
(3)限制访问根目录,拥有写权限
进入配置文件
限制本地用户只能访问默认根目录
允许本地用户对默认根目录有写权限
(4)普通用户进行下载、上传文件
普通用户jia登录
切换目录,显示不能切换
根目录创建文件
服务器下载到用户2个文件:test3和test5
删除根目录文件
用户将备份文件上传到服务器
显示已恢复
3.FTP服务器黑白名单
ftp传输开启黑白名单
(1)新增用户mao
(2)启用黑名单
(3)用户列表新增mao
(5)用户登录被拒绝
(6)启用白名单
重启服务
(7)被禁用户解除限制可以登录
4.问题
(1)ftp相关命令命令失败
① 查看本机防火墙以及ftp防火墙和selinux是否关闭
关闭防火墙和安全机制
② 检查配置文件内容是有错误:
重启报错
拼写错误:正确为“enable”
③ 查看服务状态是否正常,不正常查看/var/log/messages日志排错
④ 匿名用户的默认根目录不能有读权限否则连接不上ftp服务器
⑤ 可以get但是不能put查看根目录的权限和属主情况
取消注释 ,允许匿名用户上传下载
目录权限