vsftpd基于pam_mysql的虚拟用户认证

本文详细介绍了如何在CentOS 6.9上配置vsftpd以使用pam_mysql模块实现基于MySQL的虚拟用户认证。步骤包括安装ftp和mysql服务,创建数据库和虚拟用户,配置vsftpd,启动服务,并调整虚拟用户的访问权限。通过这种方法,可以增强ftp服务的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟用户验证登录是ftp中常用的一种策略,因为ftp服务古老而且不安全,使用匿名用户不能有效的控制权限,而本地用户可以登录操作系统,极为不安全,所以引入了虚拟用户的概念,其原理是将多个虚拟用户映射为一个本地用户,从而加强了系统的安全性,本文主要介绍基于mysql的虚拟用户。 其原理图如下:

enter description here

测试环境:
ftp服务器A : CenOS 6.9 IP:192.168.159.11
mysql服务器B : CenOS 6.9 IP:192.168.159.12

一、安装所需要程序


1、安装ftp服务

yum -y install ftp #客户端
yum -y install vsftpd #服务器

2、安装mysql服务

yum -y install mysql-server mysql-devel

安装pam_mysql模块(只需在A主机安装)

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install pam_mysql

注意:pam_mysql由epel源提供

service vsftpd start

以==ftp匿名==用户验证ftp能是否连接

二、在B主机mysql数据库中创建虚拟用户账号


1.准备数据库及相关表

启动mysql服务

service mysqld start

ss -ntl #mysqld服务已启用并监听在3306默认端口

确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库,这里将其创建为vsftpd数据库。

mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@192.168.159.12 identified by ‘8520’;
mysql> flush privileges;

验证A是否能登陆B主机

如果不能,数据库问题请看这里
在数据库中加用户表:

mysql> use vsftpd;
mysql> create table users (
id int AUTO_INCREMENTNOT NULL,
name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id) );

enter description here

2、添加测试的虚拟用户

mysql> insert into users(name,password)values(‘tom’,password(‘8520’));
mysql> insert into users(name,password) values(‘maria’,password(‘8520’));

查询虚拟用户信息

三、配置vsftpd

1.建立pam认证所需文件

vim /etc/pam.d/vsftpd.mysql

添加如下两行:

auth required pam_mysql.so user=vsftpd passwd=8520 host=192.168.159.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account pam_mysql.so user=vsftpd passwd=8520 host=192.168.159.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

tips:

auth 检查用户名密码
acccount (审查)检查用户是否在有限期内

注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。

2.修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

useradd -s /sbin/nologin -d /var/ftproot vuser #创建一个只能ftp登陆的用户
chmod go+rx /var/ftproot #在其家目录让其他用户能读能写

请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

而后添加以下选项
guest_enable=YES
guest_username=vuser

并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql

tips:默认为pam_service_name=vsftp 修改后系统用户将无法登陆

四、启动vsftpd服务

service vsftpd start
chkconfig vsftpd on

查看端口开启情况

netstat -tnlp |grep 21

使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win 上用IE或者FTP客户端工具登录验证。

ftp 192.168.159.11

虚拟用户tom登陆成功

五、配置虚拟用户具有不同的访问权限

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

1、配置vsftpd为虚拟用户使用配置文件目录

vim /etc/vsftpd/vsftpd.conf

添加如下选项:
user_config_dir=/etc/vsftpd/vusers_config #指定虚拟用户配置目录

2、创建所需要目录,并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch tom maria

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

现象0:
ftp: connect :连接被拒绝
原因: 服务没启动
解决: # chkconfig vsftpd on
现象1:
500 OOPS: cannot open user list file
原因: 不存在文件“/etc/vsftpd.user_list”或文件中不存在该帐户
解决: # echo username >> /etc/vsftpd.user_list
现象2:
530 Permission denied.
Login failed.
原因: “/etc/vsftpd.user_list”文件中不存在当前登陆用户
解决: # echo username >> /etc/vsftpd.user_list
现象3:
500 OOPS: cannot open chroot() user list file
Login failed.
原因: 不存在文件“/etc/vsftpd.chroot_list”
解决: # echo username >> /etc/vsftpd.chroot_list
现象4:
500 OOPS: missing value in config file
Connection closed by remote host.
原因: “=”等号前值有问题,或只有一个空格
解决: 修正相应的值即可,可能过 diff 来比较查找
现象5:
500 OOPS: bad bool value in config file
Connection closed by remote host.
原因: “=”等号后值有问题
解决: 将“=”等号后值确认修改
现象6:
500 OOPS: unrecognised variable in config file
Connection closed by remote host.
原因: 参数前有空格
解决: 将参数前空格删除
现象7、
确认存在“local_enable=YES”,但本地用户无法登陆
原因: 验证参数被误删除
解决: 添加“pam_service_name=vsftpd”

现象8、
500 OOPS: chdir
500 OOPS: child died
Connection closed by remote host.
原因: 用户主目录没有权限或没有主目录
解决: 正确设置用户主目录权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值