#FTP的概念
FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此得到了广大用户的青睐。
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式。
-
主动模式:FTP服务器主动向客户端发起连接请求。
-
被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。
vsftp
由于FTP、HTTP、Telnet等协议的数据都是使用明文进行传输的,因此从设计上就是不可靠的。人们为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费。此外,它还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,管理者可以自行决定客户端是采用匿名开放、本地用户还是虚拟用户的验证方式来登录vsftpd服务器。这样即便黑客拿到了虚拟用户的账号密码,也不见得能成功登录vsftpd服务器。
FTP服务使用者
-
本地用户
如果用户在远程FTP服务器上拥有shell登陆帐户,称此用户为本地用户,本地用户可以输入自己的账号密码进行授权登录,其登录的目录是自己的家目录($home),本地用户既可以下载也可以上传。 -
虚拟用户
如果用户在远程FTP服务器上拥有账号,且此账号只用于文件传输服务,则称此用户为虚拟用户。通常,虚拟用户使用与系统用户分离的用户认证文件。虚拟用户可以通过输入自己的账号和密码进行授权登录。当授权访问的虚拟用户登录系统后,其登录的目录是VSFTP为其指定的目录。虚拟用户既可以下载又可以上传。 -
匿名用户
如果用户在远程的FTP服务器上没有账号,则称此用户为匿名用户(Anonymous用户)。若FTP提供匿名访问权限,用户可以输入anonmous或ftp和口令登录,登录后,其访问的是匿名FTP服务器的根目录(默认为/var/ftp),一般只提供下载功能,不支持上传。
实战
- 配置yum源
[root@localhost yum.repos.d]# mv Ce* bar/
[root@localhost yum.repos.d]# ls
bar
[root@localhost yum.repos.d]# mkdir /cdrom
[root@localhost yum.repos.d]# mount /dev/cdrom /cdrom
mount: no medium found on /dev/sr0
[root@localhost yum.repos.d]# mount /dev/cdrom /cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost yum.repos.d]# echo /dev/cdrom /cdrom iso9660 defaults 0 0 >> /etc/fstab
[root@localhost yum.repos.d]# cat local.repo
[local]
name=local
baseurl=file:///cdrom
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# ls
bar local.repo
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
local | 3.6 kB 00:00
(1/2): local/group_gz | 166 kB 00:00
(2/2): local/primary_db | 3.1 MB 00:00
Loading mirror speeds from cached hostfile
repo id repo name status
local local 3,971
repolist: 3,971
- 安装FTP服务
[root@localhost ~]# yum install -y vsftpd
- 配置FTP文件
在文件最上面添加一行anon_root=/opt
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
- 启动服务,关闭防火墙、selinux
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# systemctl stop firewalld
- 访问测试ftp://192.168.0.20
自定义配置VSFTP文件
[root@localhost ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@localhost ~]# cat /etc/vsftpd/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