一, 实验环境:redhat 5.8,软件版本:vsftpd-2.0.5-24.el5, pam_mysql-0.7RC1.tar.gz,mysql-5.5.25a.tar.gz,cmake-2.8.8.tar.gz

二,实验目的:用mysql管理虚拟用户来访问vsftp服务器。

vsftpd-2.0.5+mysql-5.5+pam_mysql构建虚拟用户访问_pam

三,安装编译软件的环境:需要安装

[root@server30 ~]# yum -y groupinstall 'Development Libraries' 'Development Tools'

四,由于mysql-5.5编译安装不支持make编译,而用是cmake来编译,因此需要先安装cmake,cmake安装很简单,就底下三步

[root@server30 ~]# tar xf cmake-2.8.8.tar.gz  [root@server30 ~]# cd cmake-2.8.8 [root@server30 cmake-2.8.8]# ./bootstrap  [root@server30 cmake-2.8.8]# make && make install

五,安装好之后,编译msyql,编译mysql之前先添加mysql用户

[root@server30 ~]# useradd -r mysql

六,开始编译mysql-5.5

[root@server30 ~]# tar xf mysql-5.5.25a.tar.gz   [root@server30 mysql-5.5.25a]#  cmake . DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ (安装路径)  > -DMYSQL_DATADIR=/data/mysql \ (数据存储目录)  > -DSYSCONFDIR=/etc \  (配置文件存储路径)  > -DWITH_INNOBASE_STORAGE_ENGINE=1 \ (安装innodbase存储引擎下两都是)  >  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \  >   -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \   > -DWITH_SSL=system \ (启用ssl加密)  > -DWITH_ZLIB=system \ (启用客户端与服务端压缩传输)  >  -DWITH_LIBWRAP=0 \  (关闭tcpwrap的控制)  > -DDEFAULT_CHARSET=utf8 \ (使用utf8为默认字符)  >  -DDEFAULT_COLLATION=utf8_general_ci \ (使用utf8默认字符排序)  > -DEXTRA_CHARSETS=all  (安装所有字符)  [root@server30 mysql-5.5.25a]# make && make install

安装完了之后,开始初始化数据库

在解压的路径下,或安装完的路径中,都有mysql的脚本与配置文件在supports目录下

[root@server30 mysql]# cp support-files/my-large.cnf /etc/my.cnf 提供配置文件[root@server30 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 提供脚本 [root@server30 mysql]# mkdir -pv /data/mysql 创建数据存储目录[root@server30 mysql]# chown  -R mysql:mysql /data/ 修改data目录的权限[root@server30 mysql]# chown -R :mysql .(对mysql做初始化,需要修改/user/local/mysql所有文件的权限) [root@server30 mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ 对mysql初始化

修改mysql.cnf配置文件,

[root@server30 mysql]#vim /etc/mysql.cnf 在这里修改一行thread_concurrency = 4并在后面添加一行datadir = /data/mysql

启用mysql脚本:

[root@server30 mysql]# service mysqld start [root@server30 mysql]# vim /etc/profile  添加mysql命令到PATH[root@server30 mysql]# . /etc/profile(或者export PATH=$PATH:/usr/local/mysql/bin) [root@server30 mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql  [root@server30 mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 加载库文件  [root@server30 mysql]# ldconfig -v |grep mysql [root@server30 mysql]# vim /etc/man.config

mysql到此为止。可以用mysql命令连接数据库测试下,能否正常连接。

七,安装pam-mysql,使pam支持到mysql数据库中查找用户

[root@server30 ~]# tar xf pam_mysql-0.7RC1.tar.gz [root@server30 ~]# cd pam_mysql-0.7RC1 [root@server30 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql --with-openssl [root@server30 pam_mysql-0.7RC1]# make && make install

八,安装vsftp:

使用yum -y install vsftpd

九,下面开始创建虚拟用户。虚拟用户是存在一张表中,而表是存在库中,因此先创建一个数据库,按以下步骤

  1. mysql> create database vsftp; 创建vsftp的数据库

  2. mysql> grant select on vsftp.* to vsftpd@localhost identified by 'redhat';

  3. 授权vsftpd用户对vsftp数据库的所有表只有查询权限,并且密码是redhat 

  4. mysql> grant select on vsftp.* to vsftpd@127.0.0.1 identified by 'redhat'; 


mysql> use vsftp; 切换到到vsftp数据库mysql> create table users ( 创建users表    -> id int AUTO_INCREMENT NOT NULL, 设定字段id 自动增长型。    -> name char(20)  NOT NULL,      -> passwd char(48)  NOT NULL,     -> primary key(id) 设置id为主键     -> );

添加测试的虚拟用户,密码采用加密存放

mysql> insert into users(name,passwd) values('redhat',password('admin')); mysql> insert into users(name,passwd) values('centos',password('admin'));

 编辑/etc/pam.d/vsftpd

  1. vim /etc/pam.d/vsftpd将原来的内容注释添加下面两行  

  2. auth required pam_mysql.so user=vsftpd passwd=redhat host=localhost db=vsftp table=users   

  3. usercolumn=name passwdcolumn=passwd crypt=2  

  4. 这两行是一行,user=vsftpd就是grant授权时创建的用记,db是指定数据库usercolumn是name

  5. 字段,passwdcolumn是user表中的密码字段,cryptt=2表示用户与密码加密传送
    account required pam_mysql.so user=vsftpd passwd=redhat host=localhost db=vsftp table=users   

  6. usercolumn=name passwdcolumn=passwd crypt=2 

建立虚拟用户映射的账号,当虚拟用户登录到vsftp服务器时,会被映射到vsftp用户,且所登录的目录为vsftpd的家目录。

[root@server30 ~]#useradd -s /sbin/nologin -d /var/ftp2 vsftp [root@server30 ~]chmod go+rx /var/ftp2

编辑/etc/vsftpd/vsftpd.conf

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

此时关闭selinux,重启vsftpd服务,并启动测试。

打开window的命令行窗口,输入ftp 192.168.0.130(此ip为我ftp的IP),并输入虚拟用户和密码,能否登录成功。也可以在本机上上测试,输入

[root@server30 ~]# ftp localhost   Connected to localhost.localdomain.   220 (vsFTPd 2.0.5)   530 Please login with USER and PASS.   530 Please login with USER and PASS.   KERBEROS_V4 rejected as an authentication type   Name (localhost:root): redhat   331 Please specify the password.   Password:   230 Login successful. 认证成功  Remote system type is UNIX.   Using binary mode to transfer files.

十,设置虚拟用户的权限,编辑/etc/vsftpd/vsftpd.conf,最后一行添加一行。

user_config_dir=/ftp 这个目录的作用是让每个用户在这个新建一个与虚拟用户同名的文件,里面设置虚拟用户的权限

下面新建/ftp目录

mkdir /ftp  vim /ftp/redhat,下面添加添加给redhat用户的权限  如果只给上传权限则,则写下面三行  anon_uplocad_enable=YES  anon_mkdir_write_enable=NO  其实下面这两行可以不用写,因为在配置文件已经将anon的anon_other_enable=NO        大部分权限关闭了。

重启vsftpd服务并测试。