FTP的全称是File Transfer Protocol(文件传输协议)
FTP服务器可以简单的理解为是依照ftp协议提供文件共享的主机。
在使用计算机的过程中,一般我们重要的目的就是实现信息共享,但不同的操作系统有着不同的ftp应用程序,要实现信息的共享,就需要这些应用程序都遵循同一种协议,而此时用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得自己所需要的文件。
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP ,它的特点是安全,高速和高稳定性
由于我们使用的是redhat5.4的系统,而红帽自带的ftp服务器端的工具就是vsftpd,所以在此就使用vsftpd来搭建ftp服务器
一:ftp服务器端工具的安装
vsftpd的软件包在红帽光盘上是有的,如果你已经配置好yum源指向光盘,可直接用yum安装,如果没有光盘镜像,你也可去互联网上下载vsftpd的rpm包来安装,由于我们在此有配置yum源,所以采用yum安装
#yum –y install vsftpd
#service vsftpd start //启动服务
#netstat –tnlp | grep 21 //ftp服务是监听在21端口上的,此为查看是否正常启动
此时,一个简易的ftp服务器就可使用了。
二:基于ssl的ftp服务器(此时我们选择的是自己建立CA)
#cd /etc/pki
#cd CA
#vim ../tls/openssl.cnf
dir = ../../CA 将此行改为
dir =/etc/pki/CA //以此作为工作目录
#(umask 077;openssl genrsa 1024 > private/cakey.pem) //生成非对称密钥
#openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3650
//根据自己的情况输入相关信息
#mkdir certs newcerts crtl // 创建CA所用的目录及
#touch index.txt //创建CA所用的文件
#echo 01 > serial //创建CA所用的文件
#cd /etc/vsftpd/
#mkdir ssl //此目录为了放置所用的公钥私钥
#cd ssl
#(umask 077;openssl genrsa 1024 > vsftpd.key)
#openssl req –new –key vsftpd.key –out vsftpd.csr
#openssl ca –in vsftpd.csr –out vsftpd.crt –days 3650 //颁发证书
#vim /etc/vsftpd/vsftpd.conf //添加内容如下
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
res_private_key_file=/etc/vsftpd/ssl/vsftpd.key
#service vsftpd restart //此时数据的传输就基于ssl加密了
三:让ftp服务器支持虚拟用户登录
简介:虚拟用户指的是非系统上能够登录的用户,它是不能登录操作系统的,但是可用于访问ftp服务器,虚拟用户实现认证的机制可有多种,如:file,LDAP,mysql等,此处使用mysql来存放虚拟用户的账号,密码.默认pam认证是不支持mysql存放账号,密码的因此我们需要借助于pam_mysql.so这个模块来实现
1:生成所需模块
# tar zxvf pam_mysql-0.7RC1.tar.gz //此压缩包可从互联网上下载
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install //此步结束后可生成pam_mysq.so模块
2:准备数据库及相关表,我们建立名为vsftpd的数据库来存放相关虚拟用户的帐号(提示:需要你提前建好mysql数据库,并且能正常启用)
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users ( //创建表
-> id int AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> name char(20) NOT NULL UNIQUE KEY,
-> password char(48) NOT NULL
-> );
mysql> insert into users(name,password) values('ccle',password('123456'));
//添加测试的虚拟用户,其密码采取加密存放的方式
mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> grant select on vsftpd.* to [email protected] identified by '123456';
// 将此数据库的所有表权限赋予给vsftpd的用户
mysql> select * from users; //查看结果
mysql>flush privileges // 同步,保证其生效
3:创建pam认证所需文件
#vim /etc/pam.d/vsftpd.mysql // 添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
4:创建用户及修改配置文件
#useradd -s /sbin/nologin -d /var/ftproot ftpuser
//建立虚拟用户映射的系统用户及对应的目录
#chmod go+rx /var/ftproot
#vim /etc/vsftpd/vsftpd.conf
请确定/etc/vsftpd/vsftpd.conf中的以下选项的状态为此
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
为/etc/vsftpd/vsftpd.conf添加以下选项
guest_enable=YES
guest_username=ftpuser
修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd为如下内容:
pam_service_name=vsftpd.mysql
#service vsftpd restart // 重启后测试
此时,虚拟用户ccle应是可以登录的,但系统本身的用户是不能正常登录的,建议可多配置虚拟用户,如需要系统用户登录ftp服务器,还需要修改相应的配置文件,此处暂不叙述。另vsftpd创建的ftp服务器的访问控制,可基于tcp wrapper来实现,也可基于iptables来实现其功能,根据自己的需要来配置即可。