基于MYSQL实现Vsftpd虚拟用户
基于MYSQL实现vsftpd虚拟用户
基于数据库文件#vim /etc/pam.d/vsftpd.db也可以实现安全加密创建用户,缺点是每次创建都需要重新编写#vim /etc/pam.d/vsftpd.db并使用db_load进行加密重启服务生效,不是很方便。使用数据库MYSQL作为后端存储用户密码,就可以很好解决这个问题。并且很方便进行后期维护创建删除,无需重启vsftpd,可以批量创建用户很方便。
利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能
1.安装mysql
#注意:MySQL8.0由于取消了PASSWORD()函数,不支持 [root@centos7 ~]#yum -y install mariadb-server [root@centos7 ~]#systemctl enable --now mariadb.service MariaDB [(none)]> select password("centos");
#建立存储虚拟用户数据库和表 [root@centos7 ~]#mysql mysql> CREATE DATABASE vsftpd; mysql> USE vsftpd; mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL ); #添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储 mysql> INSERT INTO users(name,password) values('ftp_wang',password('weirui')); mysql> INSERT INTO users(name,password) values('ftp_wei',password('weirui')); --- mysql> INSERT INTO users(name,password) values('ftp_wei',password('weirui')),('ftp_wei',password('weirui')); #创建连接的数据库用户 mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'10.0.0.%' IDENTIFIED BY 'weirui'; mysql> FLUSH PRIVILEGES;
#yum install vsftpd
centos 6:pam_mysql由EPEL的源中提供
#yum install pam_mysql
对于 centos7 和 centos8:无对应rpm包,需手动编译安装
#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
#下载pam-mysql源码进行编译
#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#tar xvf pam_mysql-0.7RC1.tar.gz
#cd pam_mysql-0.7RC1/
#./configure --with-pam-mods-dir=/lib64/security
#make install
验证
#ll /lib64/security/pam_mysql*
#vi /etc/pam.d/vsftpd.mysql #添加如下两行 auth required pam_mysql.so user=vsftpd passwd=password host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=password host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
crypt 加密方式:
-
0表示不加密
-
1表示crypt(3)加密
-
2表示使用mysql password()函数加密
-
3表示md5加密
-
#建立虚拟用户映射的系统用户及对应的目录 [root@centos7 ~]#useradd -s /sbin/nologin -d /data/ftproot -r vuser #centos7 需除去ftp根目录的写权限 [root@centos7 ~]#mkdir -pv /data/ftproot/upload [root@centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload #确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项 [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES #添加下面两项 guest_enable=YES guest_username=vuser #修改下面一项,原系统用户无法登录 pam_service_name=vsftpd.mysql 启动vsftpd服务 [root@centos7 ~]#systemctl enable --now vsftpd
#配置vsftpd为虚拟用户使用配置文件目录 [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf #添加如下选项 user_config_dir=/etc/vsftpd/conf.d/ #创建所需要目录,并为虚拟用户提供配置文件 [root@centos7 ~]#mkdir /etc/vsftpd/conf.d/ #配置虚拟用户的访问权限 #虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO #注意:需确保对应的映射用户对于文件系统有写权限 [root@centos7 ~]#vim /etc/vsftpd/conf.d/ftp_wang anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES