要搭建vsftpd+pam首先要确保安装环境
yum grouplist


1.确定无误后,开始源码编译安装新版的mysql-5.5.25a.tar.gz
要先编译安装cmake(cmake-2.8.8.tar.gz)
 

 
  
  1. tar xf cmake-2.8.8.tar.gz  
  2. cd cmake-2.8.8  
  3. ./bootstrap  
  4. make  
  5. make install  

开始安装mysql
这里用了cmake所以与以往的编译安装不同
以往    现在
./configure   cmake .
./configure --help  cmake . -LH 或者ccmake .
制定安装文件的安装路径常用选项
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc
默认编译的存储引擎包括:csv,myisam,myisammrg,heap(可以在源代码目录中的storage中查看所有可编译的存储引擎)
指定安装某存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
指定不安装某存储引擎
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
如果要编译进其他功能,例如ssl等,则使用如下选项来实现编译时使用某库或者不实用
-DWITH_READLINE=1
-DWITH_SSL=system通过本地openssl来实现
-DWITH_ZLIB=system压缩库
-DWITH_LIBWRAP=0接受tcp_wrappers的控制(这里不接受)
其它常用选项
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
-DENABLED_LOCAL_INFILE=1本地装载数据库
-DEXTRA_CHARSETS=all支持的字符集有哪些
-DDEFAULT_CHARSET=utf8默认字符集
-DDEFAULT_COLLATION=utf8_general_ci默认的排序规则
-DWITH_DEBUG=0是否开启mysql的调试功能
-DENABLE_PROFILING=1是否开启mysql的profileing(1是开启)

这里我们使用的编译选项是
 

 
  
  1. cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci  

如果编译过程中出错,可以通过make clean 和rm CMakeCache.txt来删除
然后make && make install
然后开始copy官方提供的文件
 

 
  
  1. cd /usr/local/mysql  
  2. cp support-files/my-large.cnf /etc/my.cnf  
  3. cp support-files/mysql.server /etc/rc.d/init.d/mysqld  
  4. chmod +x /etc/rc.d/init.d/mysqld  
  5. chkconfig --add mysqld  
  6. chkconfig mysqld on 

然后初始化数据库
初始化数据库之前得先创建数据目录(为了安全,可以放在逻辑卷上,这里演示就不做了)
 

 
  
  1. mkdir -pv /data/mysql  
  2. chown -R mysql:mysql /data/  
  3. chown -R :mysql /usr/local/mysql/.  
  4. scripts/mysql_install_db --user=mysql --datadir=/data/mysql  

最后修改mysql配置文件
添加
datadir = /data/mysql
修改
thread_concurrency = 2
然后就可以启动服务了


编辑/etc/profile
修改path路径
添加
PATH=$PATH:/usr/local/mysql/bin
. /etc/profile重新读一下
然后就可以mysql进去了
select version()查看版本


mysql编译安装完成
2.开始编译安装pam_mysql-0.7RC1
 

 
  
  1. tar zxvf  pam_mysql-0.7RC1.tar.gz  
  2. cd  pam_mysql-0.7RC1  
  3. ./configure --with-mysql=/usr/local/mysql --with-openssl  
  4. make && make install  

3.编译安装vsftpd
安装配置文件
 

 
  
  1. tar xf vsftpd-2.3.5.tar.gz  
  2. useradd -s /bin/false -d /var/ftp ftp  
  3. cd vsftpd-2.3.5  
  4. make  
  5. make install  
  6. cp vsftpd.conf /etc  

启动服务器
/usr/local/sbin/vsftpd /etc/vsftpd.conf
chmod og-w /var/ftp
4.配置vsftpd数据库
在此,我们建立名为vsftp的数据库来存放相关虚拟用户的帐号
 

 
  
  1. mysql> create database vsftp;  
  2. mysql> grant select on vsftp.* to vsftpd@localhost identified by '123456';  
  3. mysql> grant select on vsftp.* to vsftpd@127.0.0.1 identified by '123456';  
  4. mysql> use vsftp;  
  5. mysql> create table users (  
  6.     -> id int AUTO_INCREMENT NOT NULL,  
  7.     -> name char(20) binary NOT NULL,  
  8.     -> passwd char(48) binary NOT NULL,  
  9.     -> primary key(id)  
  10.     -> );  

添加测试的虚拟用户,其密码采取加密存放的方式
 

 
  
  1. mysql> insert into users(name,passwd) values('redhat',password('123456'));  
  2. mysql> insert into users(name,passwd) values('gentoo',password('123456'));  

建立pam认证所需文件
vim /etc/pam.d/vsftp.mysql
添加如下两行
 

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

修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftp2 vsftp
chmod go+rx /var/ftp2
请确保/etc/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=vsftp
listen=YES
pam_service_name=vsftp.mysql
5.启动vsftpd服务
/usr/local/sbin/vsftpd /etc/vsftpd.conf
查看端口开启情况
netstat -tnlp |grep :21
使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正
 

6.整个配置过程中,可能遇到的错误

找不到libmysqlclient.so.18,他默认是在/usr/lib下找的,所以,直接连接过去

ln -sv /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib

500 OOPS: vsftpd: refusing to run with writable root inside chroot()错误

为了避免一个安全漏洞,从 vsftpd 2.3.5 开始,chroot 目录必须不可写。使用命令:

chmod a-w /var/ftp

chmod a-w /var/ftp2