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.net/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.net/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*


好了,基本完成了。