一、目的
要求:配置允许虚拟用户访问的 vsftpd 服务器,虚拟用户存储在另一台 MySQL 的服务器上面,虚拟用户账号有两个分别是 tom 和 jerry ,密码是 tom 和 jerry ,要求对这两个账户的权限做一下限制(根据实际的要求,自己调节)。
环境: MySQL 服务器( 172.16.49.1 ), CentOS 6.6 和 MariaDB-5.5.43 。另一台是通过 yum 安装 vsftpd ( 192.168.0.22 ), OS 是 CentOS 6.6 。
MySQL 是通用二进制格式安装,前文的博客已经介绍过如何安装。
vsftpd 。
1 、介绍 vsftpd
Vsftpd 是 ftp 协议实现的一种方式,在应用层,不依赖于通信子网,也就是不依赖于内核,所以, Windows 用户也可以使用。本身基于 C/S 模式,服务器端始终监听在 21 端口,因为 21 端口是命令连接端口,而 20 端口是数据传输的端口,需要数据传输的时候建立,之后拆除,而不是一致处于监听状态,所以, client 和 server 之前的数据传输的连接又可以分为“主动”和“被动”两个模式。
“主动”:由 server 端主动创建的连接。就是首先 client 的随机端口连接 server 的 21 端口,当收到下载数据的命令之后, server 端主动会开启 20 端口,连接 client 的随机 +1 端口,传输完毕 20 端口将被“拆除”,一般不用“主动”连接的模式,因为如果 client 有防火墙的话,一般需要 client 手动去放行或设置。
“被动”:由 client 创建的连接。就是首先 client 的随机端口连接 server 的 21 端口,在 21 端口 client 和 server 已经“协商”完毕, server 端使用哪个随机端口去连接 client 的随机 +1 端口(注意:为什么 client 不主动连接 server 的 20 端口,因为 server 的 20 端口不会像 21 端口那样, vsftpd 一直在监听,按需要建立然后关闭)。
ftp 的传输格式是看数据,如果数据是文本就文本传输,如果数据是二进制的程序,那就是以二进制传输,这一点不同于 http 协议,只能是以文本流进行传输。
ftp 也有信息码:
1 系列:信息码。
2 系列:成功。
3 系类:需要进一步提示补充的状态码(当你输入账户之后,会有,因为还有密码)。
4 系类:客户端错误。
5 系列:服务器端错误。
因为 vsftpd 只有在类 unix 服务器上实现,所以认证主要是通过 OS 自己的 pam 模块认证, OS 的系统用户,匿名用户(没有用户和密码),虚拟用户(在数据库或其它文件中存储的账号和密码)认证。
2 、 yum 安装 vsftpd 之后生成的主要文件。
用户认证 (pam) 配置文件: /etc/pam.d/vsftpd (注意:主配置文件中的 pam_service_name=vsftpd ,就是调用这个配置文件)。
主应用程序: /user/sbin/vsftpd
匿名用户共享的资源: /var/ftp (注意:所有的匿名的用户都需要映射到 OS 中的用户,为了安全起见,最好是系统用户,但是需要创建系统用户的时候建立家目录,因为模式开放的就是家目录,只有映射到 OS 中的用户你才能够访问文件,因为 local file 也是需要权限的,但是不能更改 /var/ftp 的权限,可以新建一个目录,然后修改可写的权限)。
系统用户就是用户的家目录。
配置文件目录: /etc/vsftpd
主配置文件: /etc/vsftpd/vsftpd.conf
3 、对于主配置文件的部分内容进行说明
anonymous_enable=YES //是否启用匿名用户 anon_upload_enable=YES //是否开启匿名用户上传 anon_mkdir_write_enable=YES //是否允许匿名用户创建目录 anon_ohter_write_enable=YES //是否允许匿名用户删除文件 local_enable=YES //是否启用本地系统用户 write_enable=YES //是否允许本地系统用户删除、创建 local_umask=022 //限制权限
禁锢所有的 ftp 本地用户于其家目录中:
chroot_local_user=YES
禁锢文件中指定的 ftp 本地用户于其家目录中:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
日志:
xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog
改变上传文件的属主:
chown_uploads=YES chown_username=whoever
是否启用控制用户登录的列表文件 /etc/vsftpd/user_list
userlist_enable=YES userlist_deny=YES|NO
连接限制:
max_clients: //最大并发连接数 max_per_ip: //每个IP可同时发起的并发请求数
传输速率:
anon_max_rate: //匿名用户的最大传输速率, 单位是“字节/秒” local_max_rate: //本地用户的最大传输速率, 单位是“字节/秒”
强制启动文本流传输,有可能客户端打开的文件是乱码
ascii_upload_enable=YES ascii_download_enable=YES
4 、配置
A 、安装所需要的程序
1 、安装 vsftpd 、 pam_mysql 和 mysql_server
注意: pam_mysql 是由 epel 源提供
B 、创建虚拟用户账号
1 、准备数据库及相关的表格
mysql>CREATE DATABASE vsftpd; //mysql>GRANT SELECT ON vsftpd.* TO vsftp@localhost IDENTIFIED BY‘mima‘; 数据库在本机的时候可以使用 mysql>GRANT SELECT ON vsftpd.* TO vsftp@d‘172.16.%.%‘ IDENTIFIEDBY ‘mima‘; mysql>FLUSH PRIVILEGES; mysql>use vsftp; mysql>CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT NOT NULLPRIMARY KEY,name CHAR(20) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
2 、添加测试的虚拟账户
为了密码的安全使用 mysql 内部的函数进行加密,之后密码的位数是 48 位。
mysql>INSERT INTO users (name,password) VALUES(’tom‘,password(‘tom‘)),(’jerry‘,password(‘jerry‘)
);
C 、配置 vsftpd
1 、建立 pam 认证所需的文件
vim /etc/pam.d/vsftpd.mysql //为了不与原来的vsftpd的认证文件冲突,所以进行重新命名 添加如下两行(可以直接写pam_mysql.so,会自动去/lib64/security这个目录下面去找): auth required /lib64/security/pam_mysql.so user=vsftp passwd=mima host=MYSQL那台机器的IP db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2 //认证账号,为什么是crypt=2,rpm-ql pam_mysql中的README解决 account required /lib64/security/pam_mysql.so user=vsftp passwd=mima host=MYSQL那台机器的IP db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2 //检查账号是否在有效期之内
2 、修改 vsftpd 的配置文件,使其适应 mysql 的认证
建立虚拟用户映射的系统用户及对应的家目录
useradd -s /sbin/nologin -d /var/ftproot vuser chmod go+rx /var/ftproot
确保主配置文件 /etc/vsftpd/vsftpd.conf 中有,可以根据需要临时修改
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 的值
pam_service_name=vsftpd.mysql //只能通过mysql认证登陆
D 、启动 vsftpd 服务
/etc/init.d/vsftpd start chkconfig vsftpd on
使用虚拟用户登陆,验证配置结果,你可以通过 win 的 IE 或者 cmd 等
E 、配置虚拟用户具有不同的访问权限
vsftpd 可以在配置文件目录中为每个用户提供单独的配置文件已定义其 ftp 服务访问权限,每个虚拟用户的配置文件名桐虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在 vsftpd.conf 指定路径及名称即可。
1 、配置 vsftpd 为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下
user_config_dir=/etc/vsftpd/vusers_config
2 、创建所需要的目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vusers_config touch /etc/vsftpd/vusers_config/{tom,jerry}
3 、配置虚拟用户的访问权限
虚拟用户对 vsftpd 服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让 tom 用户具有上传下载的权限,可以修改 /etc/vsftpd/vuser_config/tom 文件,在里面添加
anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO}
四、截图如下
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/D7/wKiom1VTPVPicnRkAALL_GjMNY0011.jpg" title="虚拟用户在数据库中创建.jpg" alt="wKiom1VTPVPicnRkAALL_GjMNY0011.jpg" />
图 1 、数据库的创建
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6C/D2/wKioL1VTPwHiH84FAANNQKbCny4686.jpg" title="通过windows的cmd登陆.jpg" alt="wKioL1VTPwHiH84FAANNQKbCny4686.jpg" />
图 2 、虚拟用户 tom 登陆
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/D2/wKioL1VTP5qw1ArsAAHCS30FI9c371.jpg" title="虚拟用户上传文件和下载文件.jpg" alt="wKioL1VTP5qw1ArsAAHCS30FI9c371.jpg" />
图 3 、 tom 用户上传和创建目录
注意:图 3 中 227 EnteringPassive Mode ( 192,168,0,22,28,236 )告诉你是被动模式下载的数据,其实服务器的端口号就是 28*256+236 。
有志同道合的“战友”可以加我 qq : 865765761 。(注明: Linux )
本文出自 “只写感受!” 博客,请务必保留此出处http://damihua.blog.51cto.com/6537272/1651073
创建vsftpd服务器基于mysql的虚拟用户认证
标签:vsftpd 虚拟用户 mysql认证
查看更多关于创建vsftpd服务器基于mysql的虚拟用户认证的详细内容...