FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,FTP支持两种模式:Standard (PORT方式,主动模式)和Passive (PASV,被动模式)
主动模式
FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20 端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
被动模式
建立控制通道和主动模式类似,但建立连接后发送Pasv命令。服务器收到 Pasv 命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件,本次介绍如何在Linux上安装并配置vsftpd。
vsftpd的三种认证模式
匿名开放模式
它是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器;
本地用户模式
它是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是若被恶意用户破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制服务器;
虚拟用户模式
它是三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出的用户进行口令验证的账户信息,而这些账户信息在服务器系统上并不存在,仅供FTP服务器进行认证使用。
安装
yum install vsftpd
添加ftp用户
#创建新用户vsftp
useradd -d /home/res/ftp vsftp
#设置密码
passwd vsftp
禁止用户ssh登录
usermod -s /sbin/nologin vsftp
编辑shells文件保证FTP可以登录/sbin/nologin类用户
vim /etc/shells
#末尾增加行
/sbin/nologin
修改配置文件
vim /etc/vsftpd/vsftpd.conf
# 不允许匿名访问
anonymous_enable=NO
#开启被动模式
pasv_enable=YES
#被动模式端口范围,如果有防火墙,就得开放这些端口,所以这里限定范围。
pasv_min_port=12000
pasv_max_port=13000
#指定用户登录后的目录。或者不指定也行,系统用户登录ftp后,直接到用户自己的家目录。
local_root=/home/res/ftp
#允许用户对目录写操作
allow_writeable_chroot=YES
# 限制用户只能访问自己的家目录
chroot_local_user=YES
关闭SELinux
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,在进程层面管控文件系统资源的访问的一种安全机制,进程只能访问那些在他的任务中所需要文件。
那为什么要关闭这个很好的功能呢?
不关ftp服务连不上
临时关闭SELinux
setenforce 0
修改/etc/selinux/config配置文件,将SELINUX设置为disabled
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
服务管理
启动vsftpd服务
systemctl start vsftpd
关闭vsftpd服务
systemctl stop vsftpd
重启vsftpd服务
systemctl restart vsftpd
设置开机启动vsftpd服务
systemctl enable vsftpd