Vsftpd+MySQL实现虚拟用户验证登录

一、安装所需要包和包组:

在数据库服务器上安装包:

yum –y install mariadb-server mariadb-devel 
systemctl start mariadb.service 
systemctl enable mariadb

在FTP服务器上安装包pam_mysql 
centos7:无对应rpm包,需手动编译安装 
yum -y groupinstall “Development Tools” 
yum -y install mariadb-devel pam-devel vsftpd 
下载pam_mysql-0.7RC1.tar.gz 
ftp://172.16.0.1/pub/Sources/sources/pam/ 
tar xvfpam_mysql-0.7RC1.tar.gz 
cd pam_mysql-0.7RC1/ 
./configure –with-mysql=/usr –with-pam=/usr –with-pam-mods-dir=/lib64/security 
make 
make install

二、在数据库服务器上创建虚拟用户账号

1.建立存储虚拟用户的数据库,示例创建为vsftpd数据库 
mysql> CREATE DATABASE vsftpd; 
mysql> SHOW DATABASES; 
ftp服务和mysql不在同一主机: 
mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@’172.16.%.%’ IDENTIFIED BY ‘magedu’; 
ftp服务和mysql在同一主机: 
mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@localhost IDENTIFIED BY ‘magedu’; 
mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@’127.0.0.1′ IDENTIFIED BY ‘magedu’; 
mysql> FLUSH PRIVILEGES;

2.准备相关表 
mysql> USE vsftpd; 
Mysql> SHOW TABLES; 
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL); 
mysql>DESC users; 

mysql -uvsftpd -h 172.16.200.200 -pmagedu 

mysql> SHOW DATABASES;

3.添加测试的虚拟用户 
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储 
mysql>DESC users; 
mysql> INSERT INTO users(name,password) values(‘wang’,password(‘magedu’)); 
mysql> INSERT INTO users(name,password) values(‘mage’,password(‘magedu’)); 
mysql> SELECT * FROM users;

三、在FTP服务器上配置vsftpd服务

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

vi /etc/pam.d/vsftpd.mysql 

添加如下两行 
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
注意:参考README文档,选择正确的加密方式crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密 
配置字段说明 
auth 表示认证 
account 验证账号密码正常使用 
required 表示认证要通过 
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数 
user=vsftpd为登录mysql的用户 
passwd=mageedu 登录mysql的的密码 
host=localhost 在mysql中定义的允许连接的主机名或ip地址 
db=vsftpd 连接msyql的哪一个库 
table=users 连接库里的哪一个表 
usercolumn=name 当做用户名的字段 
passwdcolumn=password 当做用户名字段的密码 
crypt=2 密码的加密方式为mysql password()函数加密

2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证 
建立虚拟用户映射的系统用户及对应的目录 
useradd -s /sbin/nologin -d /var/ftproot vuser 
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限 
mkdir /var/ftproot/{upload,pub} 
setfacl –m u:vuser:rwx /var/ftproot/upload 
确保/etc/vsftpd.conf中已经启用了以下选项 
anonymous_enable=YES 
添加下面两项 
guest_enable=YES 
guest_username=vuser 
修改下面一项,原系统用户无法登录 
pam_service_name=vsftpd.mysql

四、启动vsftpd服务

service vsftpd start;systemctl start vsftpd 
chkconfig vsftpd on;systemctl enable vsftpd 
查看端口开启情况 
netstat -tnlp |grep :21

五、Selinux相关设置:在FTP服务器上执行

restorecon -R /lib64/security 
setsebool -P ftpd_connect_db 1 
setsebool -P ftp_home_dir 1 
chcon -R -t public_content_rw_t /var/ftproot/

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果

tail /var/log/secure

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

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 wangmage

3、配置虚拟用户的访问权限 
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO 
注意:需确保对应的映射用户对于文件系统有写权限 
anon_upload_enable={YES|NO} 
anon_mkdir_write_enable={YES|NO} 
anon_other_write_enable={YES|NO}

原创文章,作者:sunhao,如若转载,请注明出处:http://www.178linux.com/84734

(1)
sunhaosunhao
上一篇 2017-08-14 18:17
下一篇 2017-08-14 19:36

相关推荐

  • 磁盘文件系统基础(一)

    磁盘的主要硬件单元有:     1、磁头:通过电磁感应的方式对磁盘数据进行读写。     2、磁道:在磁盘自传过程中磁头划过的圆形轨迹,这些轨迹是肉眼看不见的特色磁化区域。     3、扇区:磁盘上的每个磁道被等分为若干个圆弧,这些圆弧被称…

    Linux干货 2016-10-27
  • N25期–第十六周作业

    1源码编译安装LNMP架构环境; 2、编写一个脚本完成以下功能: (1)、一键搭建LNMP源码编译环境; (2)、可通过在脚本后面跟上一些参数来自定义安装目录等其他选项。” 1、源码编译安装LNMP架构环境; 安装编译工具和库文件 1 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libp…

    Linux干货 2017-05-08
  • LNMP的虚拟主机配置http和https

    项目实战:    搭建LNMP环境:Linux+Nginx+Mysql(MariaDB)+php(php-fpm),创建多个虚拟主机:    主机1提供正常的http服务,用于安装wordpress博客;    主机2提供正常的https服…

    Linux干货 2016-10-30
  • Linux基于PXE实现系统全自动无人值守安装

    前言 在生产环境中,我们时常会需要在多台客户端主机或服务器安装操作系统,如果每一台都去手动安装,费时费力,显然是不现实的。那么,如何高效的完成此类工作呢?文将讲解如何实现Linux系统的全自动无人值守安装。 提供PXE服务所需安装包 dhcp:动态主机配置协议,给客户端提供ip地址 tftp-server:tftp服务器端,提供系统安装所需文件 xinetd…

    Linux干货 2015-04-01
  • Linux系统

    1、计算机的组成及其功能 从基本结构上来讲,电脑可以分为五大部分:运算器、存储器、控制器、输入和输出设备。 运算器(Datapath):对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 存储器(Memory):存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。 控制器(Control):整个计算机的中枢神经,对程序规定的控制信息进行解释,…

    Linux干货 2016-10-30
  • 十一.Linux博客-2016年8月14日if、case、find

    格式说明: 操作 概念 命令 说明及举例 十一.if、case、find if 单分支if开头+条件+then+fi结尾双分支 if else fi多分枝 if elif else fi case case $num in1|3|5)echo xxx;;2|4|5)echo yyy;;*)echo nullesac 多用于离散数值匹配 文件查找和压缩 文件系…

    Linux干货 2016-08-24