在Linux中,用于实现文件传输和共享的服务比较多,VSFTP就是其中被使用较多的一个文件服务,而说到VSFTP就不得不说一个话题,那就是FTP。
FTP即File 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目录
新建空目录
成功!
例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
添加用户用于测试
新建userlist文件并设置禁止root用户登录ftp服务
[root@localhost test]# echo "root">>/etc/vsftpd/userlist
重启测试
使用root用户登录测试
到此可以看出当使用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表,
在数据库里插入两条用户信息
创建完成后不要忘记使用主机A进行测试
如上所示则成功
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
重启测试
~
成功
例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服务介绍完毕
~