本文的初衷是快速建立一个马上可以用的FTP服务器的配置。如果需要详细了解FTP是如何工作和各项参数的意义,请查阅:《FTP 服务器(vsftpd)搭建鸟哥详细教材》
Linux的FTP的三种登录方式: 匿名登录、本地用户登录和虚拟用户登录。
- 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。
- 本地用户登录:使用系统用户登录,在/etc/passwd中。
- 虚拟用户登录:这是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*
这样既可。