要搭建vsftpd+pam首先要确保安装环境
yum grouplist
1.确定无误后,开始源码编译安装新版的mysql-5.5.25a.tar.gz
要先编译安装cmake(cmake-2.8.8.tar.gz)
- tar xf cmake-2.8.8.tar.gz
- cd cmake-2.8.8
- ./bootstrap
- make
- 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是开启)
这里我们使用的编译选项是
- 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官方提供的文件
- cd /usr/local/mysql
- cp support-files/my-large.cnf /etc/my.cnf
- cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- chmod +x /etc/rc.d/init.d/mysqld
- chkconfig --add mysqld
- chkconfig mysqld on
然后初始化数据库
初始化数据库之前得先创建数据目录(为了安全,可以放在逻辑卷上,这里演示就不做了)
- mkdir -pv /data/mysql
- chown -R mysql:mysql /data/
- chown -R :mysql /usr/local/mysql/.
- 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
- tar zxvf pam_mysql-0.7RC1.tar.gz
- cd pam_mysql-0.7RC1
- ./configure --with-mysql=/usr/local/mysql --with-openssl
- make && make install
3.编译安装vsftpd
安装配置文件
- tar xf vsftpd-2.3.5.tar.gz
- useradd -s /bin/false -d /var/ftp ftp
- cd vsftpd-2.3.5
- make
- make install
- cp vsftpd.conf /etc
启动服务器
/usr/local/sbin/vsftpd /etc/vsftpd.conf
chmod og-w /var/ftp
4.配置vsftpd数据库
在此,我们建立名为vsftp的数据库来存放相关虚拟用户的帐号
- mysql> create database vsftp;
- mysql> grant select on vsftp.* to vsftpd@localhost identified by '123456';
- mysql> grant select on vsftp.* to vsftpd@127.0.0.1 identified by '123456';
- mysql> use vsftp;
- mysql> create table users (
- -> id int AUTO_INCREMENT NOT NULL,
- -> name char(20) binary NOT NULL,
- -> passwd char(48) binary NOT NULL,
- -> primary key(id)
- -> );
添加测试的虚拟用户,其密码采取加密存放的方式
- mysql> insert into users(name,passwd) values('redhat',password('123456'));
- mysql> insert into users(name,passwd) values('gentoo',password('123456'));
建立pam认证所需文件
vim /etc/pam.d/vsftp.mysql
添加如下两行
- auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftp table=users usercolumn=name passwdcolumn=passwd crypt=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
转载于:https://blog.51cto.com/zhouyuqin/935652