返回顶部

基于MYSQL实现Vsftpd虚拟用户

基于MYSQL实现vsftpd虚拟用户

基于数据库文件#vim /etc/pam.d/vsftpd.db也可以实现安全加密创建用户,缺点是每次创建都需要重新编写#vim /etc/pam.d/vsftpd.db并使用db_load进行加密重启服务生效,不是很方便。使用数据库MYSQL作为后端存储用户密码,就可以很好解决这个问题。并且很方便进行后期维护创建删除,无需重启vsftpd,可以批量创建用户很方便。

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

项目网站:https://sourceforge.net/projects/pam-mysql/

1.安装mysql

#注意:MySQL8.0由于取消了PASSWORD()函数,不支持
[root@centos7 ~]#yum -y install mariadb-server
[root@centos7 ~]#systemctl enable --now mariadb.service

MariaDB [(none)]> select password("centos");

2 在数据库服务上配置数据库支持vsftpd服务

#建立存储虚拟用户数据库和表
[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;

3 在FTP服务器上安装vsftp和pam.mysql包

#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*

 

5 在FTP服务器上建立pam认证所需文件

#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加密

  • 4表示sha1加密

6 建立响应用户修改vsftp配置文件

#建立虚拟用户映射的系统用户及对应的目录
[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

 

7 在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

#配置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

 

posted @ 2022-04-05 10:28  九尾cat  阅读(103)  评论(0编辑  收藏  举报