目录
[2.3.综合案例 - 本地用户模式](#2.3.综合案例 - 本地用户模式)
1.ftp简介
一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。
FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。
FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点,有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求;
被动模式的工作原理: FTP
客户端连接到FTP
服务器的21端口,发送用户名和密码登录,登录成功后要list
列表或者读取数据时,发送PASV
命令到FTP
服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。
2.vsftpd
2.1.介绍
vsftpd
的全称是 Very Secure FTP Daemon
的意思;安全性是它的一个最大的特点,vsftpd
是一个UNIX
类操作系统上运行的服务器的名称,它可以运行在Linux
、BSD
、Solaris
、HP-UNIX
等系统上面,是一个完全免费的、开放源码的ftp
服务器软件,支持很多其他的FTP服务器所不支持的特征。
vsftpd
也支持chroot
功能,chroot
顾名思义就是change root directory
的意思,root
指的是根目录而非系统管理员;chroot
可以将用户的某个特定的目录变成根目录(家目录),所以与该目录没有关系的其他目录就不会被访问了;
vsftpd
这个服务的启动者身份为一般用户,所以对于 Linux
系统的权限较低,对于 Linux
系统的危害就相对的减低了;绝大部分 ftp
会使用到的额外指令功能 (dir, ls, cd ...
) 都已经被整合到 vsftpd
主程序当中了,因此理论上 vsftpd
不需要使用到额外的系统提供的指令,所以在 chroot
的情况下,vsftpd
不但可以顺利运作,且不需要额外功能对于系统来说也比较安全;
vsftpd
作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器:
-
匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
-
本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
-
虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。
本次课将主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。
2.2.安装与卸载
安装vsftpd
# 更新apt软件包列表
sudo apt-get update
# 安装vsftpd
sudo apt-get install vsftpd
# 检测是否安装
vsftpd -version
# 设置FTP服务开机自启动。
sudo systemctl enable vsftpd.service
# 启动FTP服务
sudo systemctl start vsftpd.service
执行该命令时如果提示错误信息
Job for vsftpd.service failed because the control process exited with error code
,请排查是否存在下述问题:
-
21端口被占用时,使用
lsof -i:21
命令查看是否存在进程,如果存在进程,使用kill -9 <进程号>
命令杀掉进程。 -
网络环境不支持IPv6时,在
/etc/vsftpd.conf
配置文件中,将listen_ipv6=YES
修改为listen_ipv6=NO
。 -
MAC地址不匹配时,运行
ifconfig
命令查看MAC地址,并在/etc/sysconfig/network-scripts/ifcfg-xxx
配置文件中新增或修改HWADDR=<MAC地址>
。
运行以下命令,查看FTP服务监听的端口:
# 安装netstate sudo apt install -y net-tools # 查看FTP服务的端口 sudo netstat -antup | grep ftp
出现类似回显信息,表示FTP服务已启动,监听的端口号为21。
此时,vsftpd
默认已开启本地用户模式,还需要继续进行配置才能正常使用FTP
服务。
卸载vsftpd
卸载ftp服务,--purge:选项表示彻底删除改软件和相关文件
sudo apt-get remove --purge vsftpd
2.3.综合案例 - 本地用户模式
2.4.1.创建FTP用户
创建FTP用户及主目录。
# 创建FTP用户主目录 sudo mkdir /home/uftp # 添加FTP用户uftp,指定用户主目录和所用shell sudo useradd -d /home/uftp -s /bin/bash uftp # 设置uftp的密码 sudo passwd uftp # 输入密码: # 再次输入密码:
-s /bin/bash
表示允许用户与操作系统进行交互。
但是也有特殊需求,如希望设置的用户只能访问FTP,而不能直接登录系统。(可选)
# 将uftp用户的Shell修改为/sbin/nologin,它不允许用户登录系统 sudo usermod -s /bin/nologin uftp
更改/home/uftp/
目录的拥有者为uftp
。
sudo chown -R uftp:uftp /home/uftp/
2.4.2.配置vsftpd
可以通过编辑/etc/vsftpd.conf
文件来配置vsftpd
服务器。大多数设置在配置文件中都有详细记录。有关所有可用选项,请访问官方vsftpd页面。
编辑vsftpd.conf
文件,命令如下:
# 在编辑之前先完成vsftpd.conf的备份 sudo cp vim /etc/vsftpd.conf /etc/vsftpd.conf.bak # 编辑vsftpd.conf文件 sudo vim /etc/vsftpd.conf
禁止匿名登录FTP服务器,仅允许本地用户登录:
#禁止匿名登录FTP服务器。 anonymous_enable=NO #允许本地用户登录FTP服务器。 local_enable=YES
在行首添加#
注释掉以下参数,关闭监听IPv6 sockets
,开启IPv4
(ipV4
和ipV6
不能同时被监听):
# 启用IPv4 listen=YES # 关闭监听IPv6 sockets #listen_ipv6=YES
取消注释write_enable
设置以允许对文件系统进行更改,例如上传和删除文件:
# 取消注释write_enable write_enable=YES
开启FTP的被动模式,设置数据传输的端口范围:(添加在/etc/vsftpd.conf
文件的最后)
# 开启被动模式。 pasv_enable=YES #设置被动模式下,建立数据传输可使用的端口范围的最小值。 #建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。 pasv_min_port=50000 #设置被动模式下,建立数据传输可使用的端口范围的最大值。 pasv_max_port=50010
配置chroot
,为防止FTP用户访问其主目录之外的任何文件:(添加在/etc/vsftpd.conf
文件的最后)
# 全部用户被限制在主目录 chroot_local_user=YES # 启用例外用户名单 chroot_list_enable=YES # (default follows) # 指定例外用户列表文件,列表中用户不被锁定在主目录 chroot_list_file=/etc/chroot_list
重要:没有例外用户时,也必须创建chroot_list
文件,内容可为空。
创建chroot_list
文件,按i
,进入编辑模式。输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
sudo vim /etc/chroot_list
如果有多个用户,则一行一个。
默认情况下,为了防止安全漏洞,启用chroot
后,如果用户锁定的目录可写,则vsftpd
将拒绝上传文件,在vsftpd
配置文件中添加以下指令。
allow_writeable_chroot=YES
如果不配置,则FTP客户端连接时将提示:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
重启FTP服务使配置生效
# 重启FTP服务 sudo systemctl restart vsftpd # 查询FTP服务状态 sudo systemctl status vsftpd
2.4.3.配置防火墙
如果正在运行UFW
防火墙,则需要允许FTP通信。
要打开端口21
(FTP命令端口),端口20
(FTP数据端口)和50000-50010
(被动端口范围),请运行以下命令:
sudo ufw allow 20:21/tcp
sudo ufw allow 50000:50010/tcp
最后,可以使用不同的FTP
客户端连接vsftpd
服务器进行连接测试,例如:flashfxp
、fileZilla
等等。