CentOS上搭建FTP(vsftpd)服务,使用MYSQL验证用户。

本文的初衷是快速建立一个马上可以用的FTP服务器的配置。如果需要详细了解FTP是如何工作和各项参数的意义,请查阅:《FTP 服务器(vsftpd)搭建鸟哥详细教材》

Linux的FTP的三种登录方式: 匿名登录、本地用户登录和虚拟用户登录。

  1. 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。
  2. 本地用户登录:使用系统用户登录,在/etc/passwd中。
  3. 虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。

FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。本文就是使用此种登陆方式。

一、系统基础要求和配置。
查看是否开启selinux。

cat /etc/selinux/config

如果SELINUX=enforcing,则改成SELINUX=disabled。即关闭selinux。

vi /etc/selinux/config

查看防火墙是否存在规则,如果规则有用,则不要自行下面清空操作。

iptables -L -n

清空防火墙规则列表。

iptables -F
iptables -X

保存防火墙配置。

service iptables save

重启系统。

reboot

二、vsftpd的安装和配置。
安装vsftpd。

yum install vsftpd -y

添加一个运行vsftpd的系统用户。

useradd -s /sbin/nologin www

创建自定义用户配置目录。

mkdir -p /etc/vsftpd/vsftpd_user_conf

创建测试站点aaa的目录和一个aaa的文件夹,供区分账户以测试。

mkdir -p /www/web/www.aaa.com/aaa

创建测试站点bbb的目录和一个bbb的文件夹,供区分账户以测试。

mkdir -p /www/web/www.bbb.net/bbb

设置ftp根目录的权限为700。

chmod -R 700 /www

设置ftp根目录的所有者为www。

chown -R www:www /www


备份vsftpd的主配置文件。

mv -f /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default

创建一个新的vsftpd配置文件。

wget http://www.huzs.top/soft/vsftpd/vsftpd.conf -O /etc/vsftpd/vsftpd.conf

三、mysql的安装和配置。
安装mysql-server和客户端开发包。注意:pam_mysql不支持yum安装的mysql5.5版本以上。请不要使用第三方源安装mysql5.5。

yum install mysql mysql-server mysql-devel -y

设置mysql开机自动开启服务。

chkconfig mysqld on

启动mssql服务。

service mysqld start

用root身份登录mysql。

mysql -uroot

CREATE DATABASE IF NOT EXISTS `ftp` ;
use ftp;

CREATE TABLE IF NOT EXISTS `ftpuser` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`level` int(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `ftpuser` (`username`, `password`) VALUES ( aaa, '123');
INSERT INTO `ftpuser` (`username`, `password`) VALUES ( bbb, '456');
grant select on ftp.ftpuser to ftp@localhost identified by '123456';
FLUSH PRIVILEGES;
quit;

验证mysql的设置是否正确。

mysql -u ftp -p

填入刚设置的密码123456

mysql>show databases;
use ftp;
show tables;
select * from ftpuser;
quit;

四、pam-mysql的安装和配置。
安装编译开发工具

yum install wget cpp gcc gcc-c++ make automake autoconf pam-devel -y

进入src目录。

cd /usr/local/src

下载并安装pam_mysql。

wget http://www.huzs.top/soft/vsftpd/pam_mysql-0.7RC1.tar.gz
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-openssl --with-pam-mods-dir=/lib/security/ --with-mysql=/var/lib/mysql/
make
make install

查看文件是否存在。

ls /lib/security/pam_mysql.so

备份vsftpd的默认pam配置文件

mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default

创建新的pam配置文件

vi /etc/pam.d/vsftpd

复制粘贴如下内容:

auth required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=ftp table=ftpuser usercolumn=username passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=ftp table=ftpuser usercolumn=username passwdcolumn=password crypt=0

crypt=0:表示口令使用明文方式保存在数据库中 
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中 
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中 
crypt=3:表示口令使用MD5散列值的方式保存在数据库中

五、添加测试站点测试。
为测试站点aaa添加自定义配置。注意加粗位置!

echo "local_root=/www/web/www.aaa.com/">/etc/vsftpd/vsftpd_user_conf/aaa

为测试站点bbb添加自定义配置。

echo "local_root=/www/web/www.bbb.com/">/etc/vsftpd/vsftpd_user_conf/bbb

六、设置并启动vsftpd
设置vsftpd开机自动启动。

chkconfig vsftpd on

现在启动vsftpd。

service vsftpd start

七、在客户端登录并测试。
打开我的电脑,输入ftp://你服务器的IP
输入用户名:aaa,密码123,应该可以看到aaa目录。看是否可以改名、创建子目录和删除。
输入用户名:bbb,密码456,应该可以看到bbb目录。看是否可以改名、创建子目录和删除。
并且具有完全权限。

八、异常处理
如果你在安装pam_mysql之前就yum安装了mysql5.5,那么你需要先卸载之

yum remove mysql mysql-server mysql-devel mysql-libs php-mysql mysqlclient16 mysqlclient15

然后移除第三方源

mv  /etc/yum.repos.d/atomic.repo /home/

再安装mysql的默认版本

yum install mysql mysql-server mysql-devel

最后重新编译安装pam-mysql

./configure
make
make install

如果你使用php5.4、mysql5.1、nginx最新稳定版,那么你在使用yum升级的时候会自动把mysql升级到5.5.这样又会出现ftp无法登陆的情况。那么我们可以添加yum更新排除,来使mysql不更新。
具体操作为:

vi /etc/yum.conf

添加:

exclude=mysql*

这样既可。

发表评论

邮箱地址不会被公开。 必填项已用*标注