基于mysql验证的vsftpd虚拟用户
目录
基于mysql验证的vsftpd虚拟用户主要利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能
项目网站:https://sourceforge.net/projects/pam-mysql/
因此项目年代久远不再更新,只支持CentOS 6,7,不支持CentOS 8!
本实验在两台主机上实现, CentOS 7 一台做为FTP服务器,一台做MySQL 数据库服务器!
1、在数据库服务器上安装mysql数据库
$ yum -y install mariadb-server $ systemctl enable --now mariadb.service
2、在数据库服务上配置数据库支持vsftp服务
$ mysql # 建立存储虚拟用户数据库和表 MariaDB [(none)]> CREATE DATABASE vsftpd; MariaDB [(none)]> USE vsftpd; MariaDB [vsftpd]> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); # 添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储 MariaDB [vsftpd]> INSERT INTO users(name,password) values('test03',password('test')); MariaDB [vsftpd]> INSERT INTO users(name,password) values('test04',password('test')); # 创建连接的数据库用户 MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456'; MariaDB [vsftpd]> FLUSH PRIVILEGES;
3、在ftp服务器上安装vsftpd和pam_mysql包
$ yum install vsftpd
在FTP服务器上安装 pam_mysql
对于 centos 6:pam_mysql由EPEL的源中提供
$ yum install pam_mysql
对于 centos7 和 8:无对应rpm包,需手动编译安装
pam-mysql源码进行编译
$ yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel -y # 安装相关包 $ wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz # 也可以在github上获取源码https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.g # 下载pam-mysql源码进行编译 $ tar xvf pam_mysql-0.7RC1.tar.gz && cd pam_mysql-0.7RC1/ $ ./configure --with-pam-mods-dir=/lib64/security # 如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误 # checking if the second argument of pam_conv.conv() takes const pointer... no # configure: error: Your system doesn't appear to be configured to use PAM. Perhaps you need to specify the correct location where the PAM modules reside. $ make install $ ll /lib64/security/pam_mysql* -rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la -rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so
4、 在FTP服务器上建立pam认证所需文件
$ vim /etc/pam.d/vsftpd.mysql #添加如下两行 auth required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=123456 host=10.4.7.101 db=vsftpd 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()函数加密
5、 建立相应用户和修改vsftpd配置文件
$ useradd -s /sbin/nologin -d /data/ftproot -r vuser # 建立虚拟用户映射的系统用户及对应的目录 $ mkdir -pv /data/ftproot/upload $ setfacl –m u:vuser:rwx /data/ftproot/upload # centos7 需除去ftp根目录的写权限 $ vim /etc/vsftpd/vsftpd.conf # 确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项 anonymous_enable=YES # 添加下面两项 guest_enable=YES guest_username=vuser # 修改下面一项,原系统用户无法登录 pam_service_name=vsftpd.mysql $ systemctl enable --now vsftpd # 启动vsftpd服务
6、在FTP服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可!
$ vim /etc/vsftpd/vsftpd.conf # 配置vsftpd为虚拟用户使用配置文件目录 # 添加如下选项 user_config_dir=/etc/vsftpd/vusers.d/ $ mkdir /etc/vsftpd/vusers.d/ # 创建所需要目录,并为虚拟用户提供配置文件 # 配置虚拟用户的访问权限 # 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户test03具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO # 注意:需确保对应的映射用户对于文件系统有写权限 $ vim /etc/vsftpd/vusers.d/test03 anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO} # 登录目录改变至指定的目录 local_root=/data/ftproot2
自行测试!
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律