1. 简述

1.1 关于FTP

文件传输协议(FTP),能够让用户在互联网中上传或下载文件的文件协议,FTP服务器即可支持FTP传输协议的主机

用户使用使用FTP客户端向FTP服务端发起链接并发送指令,服务器收到用户指令后将结果返回客户端即可完成文件传输

FTP协议占用两个端口

        20端口:数据传输,用于文件上传与下载

        21端口:命令控制,用于接收客户端的FTP命令

数据传输类型:主动模式和被动模式

1.2 关于Vsftp

Vsftp是一个在Linux操作系统上的运行的FTP服务端程序,具有完全开源及免费、速率高、安全性好,支持IPv6、虚拟用户等其他FTP服务端软件不具有的功能

2. 安装

2.1 安装 Vsftpd服务程序

我们修改为root用户,这样可以避免一些root权限问题

[root@Hoster130 Hoster]# yum -y install vsftpd

出现下图即表示安装成功

  • image

查看一下vsftpd的状态,确定服务是否启动

[root@Hoster130 Hoster]# systemctl status vsftpd

发现 显示为dead,说明服务没有启动

  • image

我们需要手动开启服务,并且可设置为开机启动(自己所需要的都可设置为开机启动)

[root@Hoster130 Hoster]# systemctl start vsftpd\\开启服务

[root@Hoster130 Hoster]# systemctl enable vsftpd\\设置为开机启动

再次查看状态,发现显示为running,说明服务成功开启

  • image

2.2 关闭防火墙

因为Linux系统默认是有防火墙的,要先关闭防火墙

[root@Hoster130 Hoster]#systemctl stop firewalld.service\\关闭防火墙

[root@Hoster130 Hoster]#systemctl disable firewalld.service\\禁止防火墙开机启动

[root@Hoster130 Hoster]#firewall-cmd --reload\\重启防火墙

3. 设置用户登录的不同方式

3.1 介绍

Vsftpd程序提供的FTP服务分为三种登录认证方式,分别为匿名访问、本地用户和虚拟用户

匿名访问:任何用户无需验证即可登录FTP服务端

本地用户:需要使用FTP服务器中的用户、密码信息

虚拟用户:创建独立的FTP账号信息

安全程度由前到后依次递增,虚拟用户是最安全

3.2 匿名访问模式

配置Vsftpd.conf文件

[root@Hoster130 Hoster]# vi /etc/vsftpd/vsftpd.conf

因为要开启匿名用户的上传和写入权限,写入以下参数

#允许匿名访问

anonymous_enable=YES

#匿名用户上传文件的umask值

anon_umask=022

#允许上传文件

anon_upload_enable=YES

#允许创建目录

anon_mkdir_write_enable=YES

#允许修改或删除目录

anon_other_write_enable=YES

保存以后重启vsftpd服务,并设置为开机自启动

[root@Hoster130 Hoster]# systemctl restart vsftpd

[root@Hoster130 Hoster]# systemctl enable vsftpd

安装ftp命令

[root@Hoster130 Hoster]# yum install ftp -y

接下来就可以在客户端中登入FTP服务了,后面两个登录模式均在客户端中测试(可再另一台虚拟机下载,并测试连接)

ftp [参数] [ FTP主机地址],Name输入anonymous,password敲回车

  • image

这时我们创建一个文件,发现创建失败,为pub设置777权限

[root@Hoster140 Hoster]# chmod 777 /var/ftp/pub

重新创建,对files进行修改删除操作

  • image

3.3 本地用户模式

配置vsftpd.conf文件(注意:各个模式下的vsftpd.conf文件内容都不一样,需重新配置,避免因配置文件冲突而报错),写入以下参数

#禁止匿名访问

anonymous_ enable=NO

#允许本地用户模式

local_ enable=YES

#设置可写入权限

write_ enable=YES

#本地用户模式创建文件的umask值

local_ umask=022

#禁止的用户表为YES,允许的用户表为NO

userlist_ deny=YES

#允许“禁止登陆名单”,名单文件为ftpusers和user_listuserlist_ enable=YES

userlist_ enable=YES

保存以后重启vsftpd服务,并设置为开机自启动

[root@Hoster130 Hoster]# systemctl restart vsftpd

[root@Hoster130 Hoster]# systemctl enable vsftpd

查看用户禁止名单

[root@Hoster130 ~]# more /etc/vsftpd/ftpusers

因为默认禁止root用户,所以我换成普通用户Hoster,登录成功

  • image

进行测试,操作成功

  • image

3.4 虚拟用户模式

(1)建立虚拟FTP用户数据库文件

创建生成数据库的原始账号密码

进入/etc/vsftpd的目录下

[root@Hoster130 vsftpd]# vi vuser.list

使用db_load命令用HASH算法生成数据库文件

        [root@Hoster130 vsftpd]# db_load -T -t hash -f vuser.list vuser.db

授予权限,提高安全

      [root@Hoster130 vsftpd]# chmod 600 vuser.db

删除原始账号密码

 [root@Hoster130 vsftpd]# rm -f vuser.list

查看一下,发现数据库文件vuser.db已经存在了

(2)创建FTP根目录及虚拟用户映射的系统用户

创建用户virtual,设置为禁止登陆系统,并定义该用户的家目录

[root@Hoster130 vsftpd]# useradd -d /var/ftproot -s/sbin/nologin virt

查看家目录权限

[root@Hoster130 ftproot]# ls -ld /var/ftproot/

为保证其他用户可以访问,给予rwxr-xr-x权限

[root@Hoster130 ftproot]# chmod -Rf 755 /var/ftproot/

(3)建立支持虚拟用户的PAM认证文件

[root@Hoster130 ~]# vi /etc/pam.d/vsftpd.vu

(4)配置vsftpd.conf文件

[root@Hoster130 ~]# vi /etc/vsftpd/vsftpd.conf

写入以下参数

#禁止匿名访问

anonymous_ enable=NO

#允许本地用户模式

local_ enable=YES

#开启虚拟用户模式

guest_ enable=YES

#指定虚拟用户账号

guest_ username=virt

#指定pam文件

pam_ service_ name=vsftpd.vu

#允许禁止的FTP根目录可写而不拒绝用户登入请求

allow_ writeable_ chroot=YES

(5)给虚拟用户设置权限

添加独立权限配置文件存放目录

[root@Hoster130 ~]# vi /etc/vsftpd/vsftpd.conf

创建独立权限配置文件存放目录

[root@Hoster130 ~]# mkdir /etc/vsftpd/vusers_dir

在该目录中创建空白linuxprobe配置文件(原始账号文件中的第一个账号)

[root@Hoster130 vusers_dir]# touch linuxprobe

指定blackshield用户的具体权限(原始账号文件中的第二个账号

[root@Hoster130 vusers_dir]# vi blackshield

(6)重启vsftpd服务,验证实验效果

[root@Hoster130 Hoster]# systemctl restart vsftpd

[root@Hoster130 Hoster]# systemctl enable vsftpd

进行虚拟用户测试,登录blackshield用户

[root@Hoster140 ~]# ftp 192.168.161.130

声明:此文章通过阅读学习书籍以及查找网上资源所写,部分内容存在引用

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐