您现在的位置是:首页> 操作系统> Linux

vsftpd虚拟用户之mysql实战详解

  • 3160人已阅读
  • 时间:2018-10-30 09:58:46
  • 分类:Linux
  • 作者:祥哥

vsftpd是个强大的ftp服务器工具,同时虚拟用户也是最安全,权限最方便控制的方法,所以祥哥今天讲一下vsftpd基于MYSQL的虚拟用户认证。为什么讲这个呢,因为不得不说,这个MYSQL认证网上的坑太多,很多人就是弄不成功。所以今天看见了祥哥的文章,你肯定会弄成功。

祥哥整理一下过程:

  1. 安装vsftpd软件

  2. 安装MYSQL

  3. 安装pam模块与mysql连接认证

搭建FTP+PAM+MySQL环境开始。

第一步:安装vsftpd软件,祥哥不说了,如果不会的往前翻,祥哥讲过怎么安装了。

第二步:对vsftpd做主要的默认配置,这个配置取决于自己想让默认的用户有什么样的权限,就配置什么权限。但我们要配置虚拟用户,所有下面的这几项要有

pam_service_name=vsftpd
guest_enable= YES
guest_username=ftp
virtual_use_local_privs=NO

这里的配置项是如果还是不明白,往前看祥哥写的FTP配置详解,写的已经很全了。

第三步:MYSQL的安装,这步我就省略了,如果在LINUX上还不会安装MYSQL哪天祥哥单独出教程。因为我的本机架设了LAMP环境,所以有了MYSQL。而且是编译安装的,特意说了一下编译安装的,这个就是个坑。我们一会说。

第四步:创建个数据库ftp和表user存放FTP帐号和密码

#登陆到mysql数据库上后创建数据库FTP
mysql>CREATE DATABASE IF NOT EXISTS `ftp` ;
#选择库
mysql>use ftp;
#创建表
mysql>CREATE TABLE IF NOT EXISTS `user` (
`id` smallint unsigned not null primary key auto_increment,
`username` varchar(20) not null,
`password` varchar(256) not null
)charset=utf8;
#插入两个用户
mysql>insert into user (username,password) values('xiangge',encrypt('123456'));
mysql>insert into user (username,password) values('xg',encrypt('123456'));
#授权pam验证用户连接数据库的帐号和密码这有个坑,如果编译安装必须用IP。yum直接安装的可以用localhost
mysql>grant select on ftp.user to ftp@192.168.0.200 identified by '123456';
mysql> FLUSH PRIVILEGES;
#好了,mysql的条件具备了。

第五步:安装PAM

#安装依赖包
yum -y install mysql-devel pam-devel
#编译安装pam
[root@localhost]#wget http://www.huzs.net/soft/vsftpd/pam_mysql-0.7RC1.tar.gz
[root@localhost]#tar xvf pam_mysql-0.7RC1.tar.gz
[root@localhost]#cd pam_mysql-0.7RC1
[root@localhost]# ./configure --with-openssl --with-pam-mods-dir=/lib64/security/
[root@localhost]# make && make install

安装完成后,会在/lib64/security下生成如下两个文件

/lib64/security/pam_mysql.la  /lib64/security/pam_mysql.so

第六步:关键配置

#因为上面pam_service_name是默认的vsftpd,当然这个名字你可以自己重新定义
#我们直接修改/etc/pam.d/vsftpd
auth required /lib64/security/pam_mysql.so user=ftp passwd=123456 host=192.168.0.200 db=ftp table=user usercolumn=username passwdcolumn=password crypt=1
account required /lib64/security/pam_mysql.so user=ftp passwd=123456 host=192.168.0.200 db=ftp table=user usercolumn=username passwdcolumn=password crypt=1
#这里有坑祥哥解释一下各个字段含义
#  调用的模块    数据库用户名    数据库密码    IP     库名    表名    用户名字段     密码字段  加密方式
#crypt 0:表示明文 ,1表示encrypt加密    2表示password()函数    3.表示md5()加密
#第1个坑,有的教程写的是host=localhost 这个没有错,但MYSQL只要是编译安装的绝对不行,必须填远程IP地址
#第2个坑,0:明文测试通,1:encrypt测试通过,2:password()不通过  3:md5()不通过。所以后两种最好别用了

第七步:重启vsftpd服务和MYSQL服务。大功告成。


祥哥在这里也说一下基于Berkeley DB工具认证主要就是PAM的配置和DB文件的生成。

#首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。
yum install db4 db4-utils
#然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码
test
123456
#接着,生成虚拟用户认证的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
#随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句,再增加以下两句:
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

好了,还有人说那不同用户不同权限怎么控制,这个权限与这些认证是两回事,还记得上篇祥哥讲配置里面有一项:

user_config_dir=/etc/vsftpd/userconf

也就是说vsftp看见这个配置会先到/etc/vsftpd/userconf下找用户的配置文件,配置文件与用户名相同,可以在那里指定不同的权限。

Top