vsftpd+pam+mysql实现虚拟用户访问控制

1、安装mysql数据库及开发环境

# yum -y install mysql-server mysql-devel

2、安装pam_mysql-0.7RC1

# tar xf pam_mysql-0.7RC1.tar.gz

# cd pam_mysql-0.7RC1

# ./configure --with-mysql=/usr --with-openssl

# make

# make install

# 启动mysql

# service mysqld start

3、创建数据库、表及虚拟用户

mysqladmin -uroot password ‘redhat‘

mysql -uroot -p

mysql> create database vsftpd;

mysql> use vsftpd;

mysql> create table users( id smallint auto_increment not null , name char(20) binary not null, password char(48) binary not null, primary key(id));

mysql> desc users;

mysql> insert into users (name,password) value (‘tom‘,password(‘redhat‘)),(‘jerry‘,password(‘redhat‘));

mysql> grant select on vsftpd.* to [email protected] identified by ‘vsftpd‘;

mysql> grant select on vsftpd.* to [email protected] identified by ‘vsftpd‘;

mysql> select * from users;

mysql> flush privileges;

4、安装vsftpd

# yum install vsftpd lftp ftp

5、配置pam认证所需文件

# vim /etc/pam.d/vsftpd.mysql

auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

# 注:pam_mysql-0.7RC1源码目录下的README有介绍crypt的几种机制

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

# useradd -s /sbin/nologin -d /data/ftproot vuser

# chmod go+rx /data/ftproot/

7、配置vsftpd

# vim /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

pam_service_name=vsftpd.mysql        # 确保该文件名正确

guest_enable=YES

guest_username=vuser

8、启动vsftpd

# service vsftpd start

# chkconfig vsftpd on

9、测试vsftpd

# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): tom

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd

ftp> lcd /tmp

ftp> get issue

ftp> put inittab

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,27,53).

550 Permission denied.

ftp> bye

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

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

# 配置vsftpd虚拟用户使用的配置文件目录

# vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vuser/

# 创建所需目录及配置文件

# mkdir /etc/vsftpd/vuser/

# cd /etc/vsftpd/vuser/

# touch tom jerry

# 配置对应虚拟用户权限

# vim tom

anon_upload_enable=NO

# vim jerry

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

# 重启vsftpd

# service vsftpd restart

# 测试vsftpd

# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): jerry

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> put inittab

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,73,116).

150 Ok to send data.

226 Transfer complete.

884 bytes sent in 2.2e-05 secs (40181.82 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (127,0,0,1,71,165).

150 Here comes the directory listing.

-rw-------    1 500      500           884 May 22 13:00 inittab

-rw-r--r--    1 0        0              75 May 22 12:55 issue

226 Directory send OK.

ftp> bye

### 配置vsftpd支持openssl安全通信 ###

# 配置生成CA证书

# cd /etc/pki/CA

# (umask 077; openssl genrsa -out private/cakey.pem 2048)

# vim ../tls/openssl.cnf

countryName_default= CN

stateOrProvinceName_default= GuangDong

localityName_default= GuangZhou

0.organizationName_default= Test

organizationalUnitName_default= Tech

dir= /etc/pki/CA

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3656

# mkdir certs crl newcerts

# touch index.txt

# echo 01 > serial

# mkdir -p /etc/vsftpd/ssl

# cd /etc/vsftpd/ssl/

# (umask 077;openssl genrsa -out vsftpd.key 2048)

# openssl req -new -key vsftpd.key -out vsftpd.csr

# openssl ca -in vsftpd.csr -out vsftpd.crt -days 3656

# 配置vsftpd支持ssl认证

# vim /etc/vsftpd/vsftpd.conf

ssl_enable=YES

ssl_tlsv1=YES

ssl_sslv2=NO

ssl_sslv3=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key

# 重启vsftpd

# service vsftpd restart

# 测试

# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): tom

530 Non-anonymous sessions must use encryption.

Login failed.

# 显示以上信息则表明OK,因Linux的ftp命令不支持ssl连接,固可用其它ftp客户端工具(例如filezilla)连接测试,并使用tcpdump工具抓包查看。

时间: 2024-10-26 23:46:00

vsftpd+pam+mysql实现虚拟用户访问控制的相关文章

vsftpd+pam+MySQL—->实现虚拟用户认证

一.安装所需要程序 1.安装vsftpd yum -y install vsftpd 2.安装MySQL yum -y install  mysql-server mysql-devel pam_mysql 二.创建虚拟用户账号 1.准备数据库及相关表 首先请确保mysql服务已经正常启动.而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库. mysql> create database vsftpd; mysql> grant select on vsftpd.* t

VSftpd使用MySQL存储虚拟用户进行认证

VSftpd使用MySQL存储虚拟用户进行认证 前言 周一的时候做这个实验失败了,当时以为是pam_mysql模块的问题,今天晚上随便试试,没想到竟然成功了,遂写一篇博客来分享一下 实验拓扑 实验环境 主机 IP 作用 server1.anyisalin.com 172.16.1.2 提供ftp服务 server2.anyisalin.com 172.16.1.3 使用存储vsftpd虚拟用户 注意:本实验所有操作都在SElinux和iptables关闭的前提下进行 实验步骤 安装vsftpd并

vsftpd基于mysql做虚拟用户认证

虚拟用户: 用户账号存储于何处? 文件,MySQL,Redis, ... vsftpd的认证功能托管给pam: Pluggable Authencate Module,认证框架,认证库: 通过模块完成认证功能:/usr/lib64/security/ pam_mysql模块: 下载pam_mysql的源码包官方下载http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz (1)准备编译安装环境 [[email pro

FTP基于PAM和MySQL/MariaDB实现虚拟用户访问控制

前言 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftpd.pureftp.ServU和wu-ftpd等.本文将讲解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB实现虚拟用户访问控制. 基础配置介绍 工作原理 状态响应码 1xx:信息码 2xx:成功状态码 3xx:进一步提示补全信息的状态码 4xx:客户端错误 5xx:服务器端错误 用户认证 虚拟用户:仅用于访问某特定服务中的资源

安装vsftpd+pam+mysql实现对虚拟用户身份认证功能

安装vsftpd+pam+mysql来实现对虚拟用户身份认证功能 事项说明:在这里vsftpd直接使用yum  -y  install   vsftpd来直接安装的:mysql是使用通用二进制格式安装的,使用的版本为mysql-5.5.28.这里不再介绍安装步骤,前面已经详细介绍过.由于vsftpd需要借助pam模块到mysql数据库中检索用户名和密码,在这里还需要安装pam-mysql模块,才能实现pam到mysql中完成用户名和密码的认证功能. 一.安装所需要程序 1.事先安装好开发环境和m

通过MySQL实现虚拟用户访问vsftpd服务器

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 通过MySQL实现虚拟用户访问FTP服务器. 配置 # 安装本次实验所用到的所有软件包 yum -y install vsftpd mysql-server mysql-devel pam-devel gcc-c++ make wget # 启动mysqld服务 service mysqld start # 初始化数据库管理员密码 mysq

vsftpd基于pam_mysql的虚拟用户认证

1.ftp用户 匿名用户:映射到某一个固定的系统用户,例如(ftp,vsftp,/var/ftp) 本地用户:系统用户,root及系统用户(0-999) 虚拟用户:nsswitch: name services switch  名称服务转换 PAM: Plugabl Plugable Authentication Modules  插入式认证模块本文主要讲解vsftpd基于pam_mysql的虚拟用户认证步骤. 2.准备环境 操作系统 主机名 IP地址 环境描述 CentOS 7.1 ch7 1

vsftpd基于pam_mysql的虚拟用户机制

一.虚拟用户概述 vsftpd使用虚拟用户时,需要为所有的虚拟用户创建一个系统用户,因为无论vsftpd使用的是哪一种用户类型(匿名用户.系统用户.虚拟用户),最终都是要映射为操作系统上的一个用户,而每一个文件资源都有各自的权限,只有操作系统上的用户才能根据权限模型判断是否能够访问该文件资源.这里仅介绍vsftpd基于pam_mysql的虚拟用户机制的使用. 二.vsftpd基于pam_mysql的虚拟用户机制 1.编译安装pam_mysql (1) 编译pam_mysql前要提供开发环境,并安

vsftpd 基于mysql的虚拟账户

Centos7 vsftpd 基于MySQL的虚拟账户认证 实验环境: 两台虚拟机的防火墙和SELinux都已关闭 角色 IP vsftpd 192.168.148.7 mysql 192.168.148.17 系统账户 用户主目录 vuser /data/ftproot 虚拟账户 密码 用户主目录 ftp1 centos /data/ftproot/ftp1 ftp2 redhat /data/ftproot/ftp2 mysql服务器添加用户数据库 [[email protected] ~]