如何解决MySQL PAM模块与新版MySQL不兼容问题?

FTP & SFTP & FTPS

1 前言

笔者生产环境有部署VSFTP服务(基于MySQL验证),详细的搭建步骤如下,

如何部署集成MySQL PAM模块的SFTP服务?


最近,用户反馈VSFTP无法使用,笔者通过如下命令监视服务器日志,

tail -f /var/log/secure

然后发现如下错误提示,

Jun 16 15:52:08 vsftpser vsftpd: PAM unable to dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/mysql/libmysqlclient.so.21: symbol X509_check_ip_asc, version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
Jun 16 15:52:08 vsftpser vsftpd: PAM adding faulty module: /usr/lib64/security/pam_mysql.so
Jun 16 15:52:08 vsftpser vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Jun 16 15:52:08 vsftpser vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=asdweb rhost=client.cmdschool.org
Jun 16 15:52:08 vsftpser vsftpd: PAM unable to dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/mysql/libmysqlclient.so.21: symbol X509_check_ip_asc, version libcrypto.so.10 not defined in file

基于以上日志分析,笔者回忆上周有更新过MySQL的客户端到最新版本,估计是升级之后的库文件与当前的MySQL PAM模块不兼容所致,于是一番折腾后想到另外安装旧版本的MySQL库文件的方案。

2 最佳实践

2.1 部署旧版本的MySQL

2.1.1 下载旧版本的MySQL

cd ~
wget https://downloads.mariadb.com/MariaDB/mariadb-5.5.55/bintar-linux-x86_64/mariadb-5.5.55-linux-x86_64.tar.gz

其他版本请从以下链接下载,
https://downloads.mariadb.com/MariaDB/

2.1.2 解压旧版本的MySQL

cd ~
tar -xf mariadb-5.5.55-linux-x86_64.tar.gz

2.1.3 部署旧版本的MySQL

cd ~
mv mariadb-5.5.55-linux-x86_64 /usr/local/
cd /usr/local/
ln -s mariadb-5.5.55-linux-x86_64 mysql

2.2 重新编译并加载MySQL PAM模块

2.2.1 预编译软件包

cd ~/pam_mysql-0.7RC1
make clean
./configure --with-mysql=/usr/local/mysql/bin/mysql_config --with-pam-mods-dir=/usr/local/mysql/lib/plugin

2.2.2 编译软件包

cd ~/pam_mysql-0.7RC1
make

2.2.3 安装软件包

cd ~/pam_mysql-0.7RC1
make install

2.2.4 注册库文件

echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mariadb-10.2.16.conf

配置完成后,使用如下命令确认是否加载,

ldconfig -v

2.2.5 重新定位模块位置

find /usr/ -name \*pam_mysql.so\*

可见如下显示,

/usr/lib64/security/pam_mysql.so
/usr/local/mariadb-5.5.55-linux-x86_64/lib/plugin/pam_mysql.so

注:很明显第二行是最新编译的(位于刚安装的低版本MySQL目录)

2.2.6 更新验证文件配置

vim /etc/pam.d/vsftpd

配置修改如下,

auth       sufficient   /usr/local/mariadb-5.5.55-linux-x86_64/lib/plugin/pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2
#vsftp默认的其余认证
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
#授权和认证也是一样的
account    sufficient   /usr/local/mariadb-5.5.55-linux-x86_64/lib/plugin/pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
没有评论

发表回复

FTP & SFTP & FTPS
如何基于Oracle Linux 9.x实现SFTP邮件认证2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想实现SFTP的2FA以便增强SFTP服务的安全性,于 …

FTP & SFTP & FTPS
如何基于配置SFTP集成AD域?

1 前言 1 前言 一个问题,一篇文章,一出故事。 笔者最近接到需要在SFTP集成AD的任务,于是整 …

FTP & SFTP & FTPS
如何基于Oracle Linux 9.x配置独立的SFTP服务?

1 基础知识 1.1 概念 sftp是Secure File Transfer Protocol的缩 …