Linux中,用于实现文件传输和共享的服务比较多,VSFTP就是其中被使用较多的一个文件服务,而说到VSFTP就不得不说一个话题,那就是FTP

FTPFile Transfer Procotol的首字母缩写,是一个用于控制Internet上文件传输的协议,FTP协议一般采用明文进行数据传输,虽然较之安全性不如HTTPS,设置HTTP,但是其建立连接的过程比较简单,所以其传输速率就更快。

FTP在完成数据传输之前就需要建立连接,而传输数据的时候又要建立专门的数据传输连接,由此可把FTP连接分为两种,一种叫命令连接,一种叫数据连接,命令连接开始于数据连接之前,负责把用户登录后输入的相关命令发送到服务器端,实现于服务器端交互;而数据连接则发生于当建立命令连接后客户端开始请求相关文件时,客户端每请求一个文件就会新建立一个数据连接,而当请求的文件传输完成后,该数据连接就会被拆除。而从数据连接请求发出方的角度来看,又可把FTP的连接分为主动连接和被动连接。其区别如下:

连接类型

发起方

发起端口

响应方

响应端口

主动连接(命令连接)

Client

tcp/5000

Server

tcp/21

主动连接(数据连接)

Server

tcp/20

Client

tcp/5000+1

被动连接(命令连接)

Client

tcp/5000

Server

tcp/21

被动连接(数据连接)

Client

tcp/5000+1

Server

随机

Linux中实现FTP文件传输功能的软件以VSFTP最常见,接下来就将通过实验的方式对VSFTP进行介绍。

1:配置vsftp让匿名用户具有上传和下载权限。

安装vsftp

[root@localhost ~]# yum install vsftpd -y

编辑vsftp主配置文件/etc/vsftpd.conf

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

listen=YES#以独立守护进程监听在21号端口

write_enable=YES#设置可写

anonymous_enable=YES#设置启用匿名用户

anon_mkdir_write_enable=YES#设置匿名用户可以新建目录

anon_other_write_enable=YES#设置匿名用户新建的文件或目录其他用户有权限

anon_upload_enable=YES#设置匿名用户可上传文件

新建匿名用户上传文件专用目录,并更改属主为ftp

[root@localhost ~]# mkdir /var/ftp/upload

[root@localhost ~]# chown ftp:ftp /var/ftp/upload/

重启服务并测试

[root@localhost ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

[root@localhost ~]# service iptables stop#关闭防火墙,也可以设置规则方形ftp

登录进入ftp并切换至upload目录


漫漫运维路——文件服务系列之VSFTP_vsftp 

 

新建空目录


漫漫运维路——文件服务系列之VSFTP_ VFP _02

 

成功!

2:设置允许本地用户登录,并禁锢其只能在其家目录内

编辑配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

把配置文件内容更改为如下所示

listen=YES

anonymous_enable=NO#设置禁止匿名用户登录

write_enable=YES#设置可写

local_enable=YES#:设置允许本地用户登录

chroot_local_user=YES#:设置把本地用户禁锢在家目录里

userlist_enable=YES#设置启用控制用户登录的列表文件

userlist_file=/etc/vsftpd/userlist#和上一项同用,定位列表文件位置

userlist_deny=YES#设置使用登录列表为拒绝用户的名单

pam_service_name=vsftpd#设置使用可插入式认证模块的服务名为vsftpd

添加用户用于测试


漫漫运维路——文件服务系列之VSFTP_vsftp_03

 

新建userlist文件并设置禁止root用户登录ftp服务

[root@localhost test]# echo "root">>/etc/vsftpd/userlist

重启测试


漫漫运维路——文件服务系列之VSFTP_ VFP _04

 

使用root用户登录测试


漫漫运维路——文件服务系列之VSFTP_ VFP _05

 

到此可以看出当使用root登录时直接会拒绝,而当使用test用户登录时则一切正常,且被禁锢于test用户的家目录/home/test目录下。

3:把虚拟用户的账号信息保存于单独的服务器的MariaDB数据库上

1、实验规划:

主机

IP

安装服务

A

192.168.252.11

VSFTPD

B

192.168.252.10

MariaDB

2、配置主机B

安装MariaDB就不再赘述,在此直接配置MariaDB

首先创建保存账号信息的数据库,并授权给远程主机A能通过ftp用户登录

MariaDB [ftp]> CREATE DATABASE ftp;#创建数据库

MariaDB [ftp]> GRANT ALL ON ftp.* TO 'ftp'@'192.168.252.11' IDENTIFIED BY "test";#授权

MariaDB [ftp]> FLUSH PRIVILEGES;#通知MariaDB重读授权信息

MariaDB [ftp]> CREATE TABLE users (

    -> id int AUTO_INCREMENT NOT NULL,

    -> name char(20) binary NOT NULL,

    -> password char(48) binary NOT NULL,

    -> primary key(id)

    -> );#创建users表,

在数据库里插入两条用户信息


漫漫运维路——文件服务系列之VSFTP_vsftp_06

 

创建完成后不要忘记使用主机A进行测试


漫漫运维路——文件服务系列之VSFTP_文件服务_07

 

如上所示则成功

3、配置主机A

安装pam_mysql模块

[root@localhost ~]# yum install pam_mysql -y

提供pam.mysql文件并编辑,内容如下

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql

auth required /lib/security/pam_mysql.so user=ftp passwd=test host=192.168.252.10 db=ftp table=users usercolumn=name passwdcolumn=password crypt=2

account required /lib/security/pam_mysql.so user=ftp passwd=test host=192.168.252.10 db=ftp table=users usercolumn=name passwdcolumn=password crypt=2

新建虚拟用户映射的系统用户及相应目录

[root@localhost ~]# useradd -s /sbin/nologin -d /var/ftproot/ vuser

[root@localhost ~]# chmod go+rx /var/ftproot/

修改vsftpd配置文件,其内容如下

listen=YES

anonymous_enable=YES

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.mysql

 

重启测试


漫漫运维路——文件服务系列之VSFTP_文件服务_08

 

~                                                                                   

成功

4、设置vsftpd相关欢迎和提示信息,以及日志功能

编辑配置文件,使其内容如下所示

listen=YES

anonymous_enable=NO

write_enable=YES

local_enable=YES

chroot_local_user=YES

userlist_enable=YES

userlist_file=/etc/vsftpd/userlist

userlist_deny=YES

pam_service_name=vsftpd

dirmessage_enable=YES

ftpd_banner=Hello Welcome to login my FTP server.

xferlog_enable=YES

xferlog_std_format=YES

xferlog_file=/var/log/vsftpd_log

在此使用test用户测试,切换目录到/home/test下,新建ftp目录,并在目录下添加.message文件

[root@localhost ~]# mkdir /home/test/ftp

[root@localhost ftp]# echo "Hello this is ftp dirctory" >.messages

 重启服务测试

  

漫漫运维路——文件服务系列之VSFTP_ VFP _09

 

查看日志

     

漫漫运维路——文件服务系列之VSFTP_vsftp_10

 

到此vsftp服务介绍完毕                                    

~