FTP服务基于MySQL数据库认证
Posted Welcome My blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP服务基于MySQL数据库认证相关的知识,希望对你有一定的参考价值。
基于mysql数据库认证
说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器
数据库服务器和FTP服务器系统都是CentOS7
注意:如果是CentOS6系统请执行
yum install vsftpd pam_mysql
命令安装连接组件
MariaDB服务器:
yum install mariadb-server -y systemctl start mariadb mysql MariaDB [(none)]> CREATE DATABASE vsftpddb; #准备数据库 MariaDB [(none)]> use vsftpddb MariaDB [vsftpddb]> CREATE TABLE users(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL); #创建users表 MariaDB [vsftpddb]> DESC users; +----------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | char(50) | NO | | NULL | | | password | char(48) | NO | | NULL | | +----------+----------+------+-----+---------+----------------+ MariaDB [vsftpddb]> GRANT ALL ON vsftpddb.* TO vsftpduser@\'192.168.0.7\' IDENTIFIED BY \'vsftpdpass\'; #创建并授权用户
vsftpd服务器:
yum install mariadb -y mysql -uvsftpduser -pvsftpdpass -h192.168.0.8 #测试连接数据库 MariaDB [(none)]> DESC vsftpddb.users; +----------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | char(50) | NO | | NULL | | | password | char(48) | NO | | NULL | | +----------+----------+------+-----+---------+----------------+ MariaDB [(none)]> use vsftpddb MariaDB [vsftpddb]> INSERT INTO users(name,password) VALUES(\'user1\',PASSWORD(\'user1pass\')); #创建vsftpd的虚拟用户 MariaDB [vsftpddb]> INSERT INTO users(name,password) VALUES(\'user2\',PASSWORD(\'user2pass\')); MariaDB [vsftpddb]> SELECT * FROM users; +----+-------+-------------------------------------------+ | id | name | password | +----+-------+-------------------------------------------+ | 1 | user1 | *F20B90D5A0CED3757C51AE04CD4700AB9879E467 | | 2 | user2 | *A9C95B38C9A88ECAE9128FD396059335E97CAA6E | +----+-------+-------------------------------------------+
yum groupinstall "Development Tools" -y yum -y install mariadb-devel pam-devel vsftpd wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz tar xf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1/ pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security pam_mysql-0.7RC1]# make && make installls /lib64/security/ |grep pam_mysql.so pam_mysql.so #pam模块已安装
vim /etc/pam.d/vsftpd.mysql auth required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.0.8 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.0.8 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=2
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=vsftpd为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
useradd -r -s /sbin/nologin -d /data/mftp/ vuser mkdir -pv /data/mftp/pub/ chmod -w /data/mftp/ setfacl -m u:vuser:rwx /data/mftp/pub/ vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES guest_enable=YES guest_username=vuser pam_service_name=vsftpd.mysql #修改为使用pam_mysql模块认证 systemctl restart vsftpd
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d mkdir /etc/vsftpd/vusers.d/ touch /etc/vsftpd/vusers.d/{user1,user2} vim /etc/vsftpd/vusers.d/user1 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/ftproot #登录目录改变至指定的目录
以上是关于FTP服务基于MySQL数据库认证的主要内容,如果未能解决你的问题,请参考以下文章