设为首页 收藏本站
查看: 722|回复: 0

[经验分享] vsftp通过pam集成mysql身份验证

[复制链接]

尚未签到

发表于 2018-9-30 13:32:57 | 显示全部楼层 |阅读模式
  1 前言
  需要解决由FTP上传的文件自动以某个应用程序的身份保存的唯一方式是使用VSFTP的虚拟用户,由于笔者对MySQL比较熟悉,所以利用PAM_MySQL模块将VSFTP与MySQL集成。另外,本文不但整理了CentOS6与CentOS7的安装配置方法,而且同时涵盖了RPM包与编译两种安装方法。
  2 理论基础
  2.1 PAM模块的介绍
  所谓虚拟用户,即通过pam模块将vsftp与数据库集成,将vsftp的传统身份验证方式变成通过数据库中保存的帐号密码验证,用户的身份并非系统用户,而需由pam模块虚拟出来的用户,故称虚拟用户。
  2.2 PAM模块的加载
vim /etc/pam.d/vsftpd  注:通过编辑pam.d目录下的规则实现加载
  2.3 PAM模块的选项
  配置例子:
auth       optional     pam_mysql.so user=root passwd=password  
account    required     pam_mysql.so user=root passwd=password
  其他选项
-- verbose 设置为1则显示详细的调试信息,默认0  
-- debug 开启调试模式
  
-- user mysql数据库认证的用户名
  
-- passwd mysql数据库认证的密码
  
-- host mysql数据库的主机名称或IP
  
-- db 包含验证信息的数据库名称
  
-- table 包含验证信息的数据库表名称
  
-- update_table 包含密码更高的数据库表名称,不配置默认赋予table的值
  
-- usercolumn 包含验证的用户名列
  
-- passwdcolumn 包含验证的密码列
  
-- statcolumn 标记用户状态的列
  
  --- 0表示用户已经过期;
  
  --- 1表示要求用户更改密码
  
-- crypt 密码加密方式,
  
  --- 0无加密,默认为此值;
  
  --- 1使用crypt(3)函数加密;
  
  --- 2使用MySQL的PASSWORD函数加密;
  
  --- 3使用普通十六进制md5加密;
  
  --- 4使用普通十六机制SHA1加密;
  
-- md5 使用md5进行crypt(3)哈希,当crypt设置为“Y”才有效,默认false
  
-- use_323_passwd 使用MySQL版本3风格的加密功能(兼容迁移),默认false
  
-- where 查询的附加条件如 [where=Host.name="web" AND User.active=1]
  
-- sqllog 设置为“true”或“yes”,则启用SQL日志记录,默认false
  
-- logtable 存储日志的表名称
  
-- logmsgcoumn 该列存储日志的消息
  
-- logusercolumn 该列存储产生日志的用户名
  
-- logpidcolumn 该列存储产生日志的进程PID
  注:以上是本人对原文的理解翻译(详细请参阅源码包的README文件),如果有误欢迎指正。
  3 实践部分
  3.1 环境配置
  3.1.1 安装配置工具
yum install -y wget vim  3.1.2 安装编译工具包(可选,编译安装才需要)
yum install -y gcc gcc-c++ make expat-devel  3.1.3 MySQL安装
  1)配置MySQL的源
vim /etc/yum.repos.d/mysql56-community.repo  输入如下内容:
# Enable to use MySQL 5.6  
[mysql56-community]
  
name=MySQL 5.6 Community Server
  
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
  
enabled=1
  
gpgcheck=1
  
gpgkey=http://repo.mysql.com/RPM-GPG-KEY-mysql
  2)安装数据库相关包
yum install -y mysql-community-server mysql-community-devel mysql-community-client  3.1.4 安装相关包
yum install -y vsftpd pam-devel httpd  3.1.5 下载pam模块可选,编译安装才需要)
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz  3.1.6 开启防火墙端口
  In CentOS 6:
vim /etc/sysconfig/iptables  加入如下行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 50000:60000 -j ACCEPT
  重启防火墙服务:
/etc/init.d/iptables restart  In CentOS 7:
firewall-cmd --permanent --add-service ftp  
firewall-cmd --permanent --add-port 50000-60000/tcp
  
firewall-cmd --reload
  
firewall-cmd --list-all
  3.1.7 关闭selinux
setenforce 0  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  3.2 安装pam模块
  3.2.1 yum方式安装
  In CentOS 6:
yum install -y http://dl.fedoraproject.org/pub/epel/6/i386/pam_mysql-0.7-0.12.rc1.el6.i686.rpm  注:下载页面,
  http://dl.fedoraproject.org/pub/epel/6/i386/
  In CentOS 7:
yum install -y ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/20/Everything/x86_64/os/Packages/p/pam_mysql-0.7-0.16.rc1.fc20.x86_64.rpm  注:下载页面,
  http://rpm.pbone.net/index.php3/stat/4/idpl/25165183/dir/fedora_20/com/pam_mysql-0.7-0.16.rc1.fc20.x86_64.rpm.html
  3.2.2 编译安装方式可选,编译安装才需要)
  1)解压安装包
tar -xf pam_mysql-0.7RC1.tar.gz  2)编译并安装
cd pam_mysql-0.7RC1  
./configure --with-mysql=/usr/bin/mysql_config
  
make && make install
  如果提示错误以下错误:
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.  可增加参数解决:
./configure --with-mysql=/usr/bin/mysql_config --with-pam-mods-dir=/usr/lib64/security  3.3 配置数据库
  3.3.1 启动服务并配置自动启动
  In CentOS 6:
/etc/init.d/mysqld start  
chkconfig mysqld on
  In CentOS 7:
systemctl start mysqld  
systemctl enable mysqld
  3.3.2 初始化数据库
mysql_secure_installation  向导如下:
[...]  
Enter current password for root (enter for none):
  
OK, successfully used password, moving on...
  
[...]
  
Set root password? [Y/n] y
  
New password:
  
Re-enter new password:
  
Password updated successfully!
  
Reloading privilege tables..
  
... Success!
  
[...]
  
Remove anonymous users? [Y/n] y
  
... Success!
  
[...]
  
Disallow root login remotely? [Y/n] n
  
... skipping.
  
[...]
  
Remove test database and access to it? [Y/n] y
  
- Dropping test database...
  
... Success!
  
- Removing privileges on test database...
  
... Success!
  
[...]
  
Reload privilege tables now? [Y/n] y
  
... Success!
  
[...]
  3.3.3 创建验证数据库
mysql -uroot -p  
create database vsftpd;
  3.3.4 创建验证数据表
use vsftpd;  
create table users (
  
  id int auto_increment not null,
  
  name char(20) not null unique key,
  
  passwd char(48) not null,
  
  primary key(id)
  
);
  3.3.5 添加测试数据
insert into vsftpd.users(name,passwd) values ('test1',password('123456'));  查询数据库中的账号:
select * from vsftpd.users;  3.3.6 配置验证账号
grant select on vsftpd.* to vsftpd@localhost identified by 'abc123';  
grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'abc123';
  
flush privileges;
  3.3.7 测试验证账号
mysql -uvsftpd -pabc123  3.4 配置vsftp
  3.4.1 备份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.defalut  
vim /etc/vsftpd/vsftpd.conf
  输入如下配置:
listen=YES  
anonymous_enable=NO
  
local_enable=YES
  
virtual_use_local_privs=YES
  
write_enable=YES
  
connect_from_port_20=YES
  
pasv_min_port=50000
  
pasv_max_port=60000
  
pam_service_name=vsftpd
  
guest_enable=YES
  
guest_username=apache
  
chroot_local_user=YES
  
allow_writeable_chroot=YES
  
user_sub_token=$USER
  
local_root=/var/www/$USER
  
hide_ids=YES
  
xferlog_enable=YES
  
xferlog_file=/var/log/vsftpd.log
  重要代码解析:
第9行声明调用PAM_MySQL模块  
第11行决定上传代码的属主是apache,也可以映射到其他本地用户,请灵活运用
  
第12行限制用户chroot,限制FTP用户浏览其他非权限目录
  
第13和14行根据登录的账号动态指定用户根目录
  
第15行向FTP用户显示属主和属组为FTP
  3.4.2 配置pam
  确认pam_mysql.so的位置:
find / -name \*pam_mysql.so\*  假设显示如下:
/lib/security/pam_mysql.so  加载认证模块:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.defautl  
vim /etc/pam.d/vsftpd
  修改配置如下:
#%PAM-1.0  
session    optional     pam_keyinit.so    force revoke
  
#数据库认证
  
auth       sufficient   /lib/security/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   /lib/security/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
  注:请根据pam_mysql.so实际路径写,不同的安装方法位置会有所不同。
  3.4.3 创建用户配置文件目录
mkdir -p /var/www/test1  3.4.4 配置映射用户目录权限
  查询映射用户的家目录
cat /etc/passwd | grep apache  显示如下:
apache:x:48:48:Apache:/var/www:/sbin/nologin  修改映射用户的属主
chown apache:apache /var/www/test1  3.4.5 重启服务
  In CentOS 6:
/etc/init.d/vsftpd restart  In CentOS 7:
systemctl restart vsftpd  3.5 测试并调试
  3.5.1 监视日志
tail -f /var/log/secure  
tail -f /var/log/vsftpd.log
  注:如果登陆成功secure中没有任何日志,但vsftpd.log中会有登陆成功的提示,这时候无论是否能正常使用都表示PAM_MySQL模块已经配置好,请检查VSFTP的配置。
  3.5.2 尝试登陆
ftp://10.168.0.51/  注:如果登陆不成功请根据监视日志的提示信息排错。
  4 用户管理工具的使用
  4.1 工具的下载
  http://down.51cto.com/data/2298015
  注:该工具是笔者自己写的,请按照自己的需求确定是否使用。
  4.2 安装配置
  4.2.1 部署工具
tar -xf vsftpcli.tar  
cp vsftpcli /usr/bin/
  
chmod 700 /usr/bin/vsftpcli
  4.2.2 工具的常量定义
vim /usr/bin/vsftpcli  修改以下常量:
mysql_user='root' #数据库连接的账号  
mysql_pass='abc123' #数据库连接的密码
  
mysql_host='localhost' #数据库主机
  
mysql_host='3306' #数据库的端口
  

  
basedir='/var/www' #网站的根目录
  
localuser='apache' #网站的属主
  
localgroup='apache' #网站的属组
  4.3 工具的使用
  4.3.1 获取帮助
vsftpcli  显示如下:
Usage: /usr/bin/vsftpcli     
       /usr/bin/vsftpcli  
  
       /usr/bin/vsftpcli   
  
       /usr/bin/vsftpcli   
  
       /usr/bin/vsftpcli
  4.3.2 增加用户
vsftpcli add user1 123456  
vsftpcli add user2 123456
  
vsftpcli add user3 123456
  4.3.3 打印用户
vsftpcli print  4.3.4 删除用户
vsftpcli remove user2  4.3.5 重命名用户
vsftpcli rename user3 user2  4.3.6 更改用户密码
vsftpcli chpasswd user2 456789  参阅地址:
  ==================================
  PAM-MySQL:
  http://pam-mysql.sourceforge.net
  http://pam-mysql.sourceforge.net/Documentation/
  VSFTPD:
  https://security.appspot.com/vsftpd.html#docs
  https://security.appspot.com/vsftpd/vsftpd_conf.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-606796-1-1.html 上篇帖子: 查询修改mysql事务隔离级别 下篇帖子: mysql查看当前正在使用的数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表