vsftpd是linux发行版中的一款ftp服务器程序是一个安全的ftp服务器,它工作在21,20号端口,主要提供文件传输服务,可以跨越网络提供服务。
vsftp具有可以做基于多个IP的虚拟FTP主机服务器,匿名服务设置十分方便,支持虚拟用户,并且每个虚拟用户可以具有独立的属性配置,支持两种认证方式等特点
ftp有主动模式和被动模式两种工作模式
主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利,因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。目前,ftp服务器一般工作在被动模式。
vsftpd的启动与关闭:
service vsftpd start
service vsftpd stop
vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
如果vsftpd工作在超级守护进程的管理下/etc/xinetd.d/vsftpd配置文件来管理vsftpd
如果vsftpd启用PAM机制/etc/pam.d/vsftpd是PAM认证文件
禁止使用vsftpd的用户列表文件/etc/vsftpd/ftpusers
如果vsftpd启用tcp_wraper控制机制/etc/hosts.allow和/etc/hosts.deny这两个文件可以控制vsftpd
tcp_wraper来控制vsftpd
vsftpd的主配置文件"tcp_wrappers=YES"这一行启用
例如允许192.168.0网段访问ftp
编辑/etc/hosts.allow
添加内容vsftpd:192.168.0.
例如禁止172.16.26网段访问
编辑/etc/hosts.deny
添加内容vsftpd:172.16.26.
ftp虚拟用户
虚拟用户是指那些非操作系统的用户。可以建多个,虚拟用户访问ftp服务器的时候,会映射到操作系统的一个普通进行访问,访问的是这个被映射用户的家目录。
安装pam_mysql-0.7RC1模块可以把ftp的账号,密码信息存入mysql数据库中。
下载pam_mysql-0.7RC1.tar.gz
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install
让ftp支持ssl功能
#yum install openssl
#yum install openssl-devel
配置数据库及相关表
登录mysql建立名为vsftpd的数据库来存放相关虚拟用户的帐号
mysql> create database vsftpd;
给student用户操作vsftpd数据库select的权限,用户student的密码为123456:
mysql> grant select on vsftpd.* to student@localhost identified by '123456';
mysql> grant select on vsftpd.* to student@127.0.0.1 identified by '123456';
mysql>flush privileges;
在vsftpd数据库中创建表users
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
-> );
添加虚拟用户fei,其密码采取加密存放的方式:
mysql> insert into users(name,password) values('fei',password('123456'));
修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户vsftp及对应的目录,/var/ftproot就是虚拟用户登录ftp服务器的所在目录:
#useradd -s /sbin/nologin -d /var/ftproot vsftp
#chmod go+rx /var/ftproot
确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
编辑/etc/vsftpd/vsftpd.conf添加内容
chroot_local_user=YES
guest_enable=YES
guest_username=vsftp
修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd使pam_service_name=vsftpd.mysql
重启服务service vsftpd restart
启用ssl,建立安全的传输
vim /etc/vsftpd/vsftp.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
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
创建证书vsftpd.crt和密码vsftpd.key,放在/etc/vsftpd/ssl目录中
建立PAM认证所需的文件
编辑/etc/pam.d/vsftpd.mysql
添加如下两行内容,此时不允许系统用户登录:
auth required pam_mysql.so user=student passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=student passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
例子:架设FTP服务器,要求:
(1)可以让匿名用户访问;
(2)通过基于mysql的虚拟用户为ftpuser1和ftpuser2提供文件共享服务;且ftpuser1可以上传文件、创建目录、删除文件和下载文件,但ftpuser2只能下载文件;
yum install vsftpd
chkconfig --add vsftpd
chkconfig vsftpd on
service vsftpd start
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
下载pam_mysql-0.7RC1.tar.gz
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456';
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('ftpuser1',password('ftpuser1'));
mysql> insert into users(name,password) values('ftpuser2',password('ftpuser2'));
mysql> select * from users\G;
修改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
建立虚拟用户映射的系统用户及对应的目录
#useradd -s /sbin/nologin -d /var/ftpuser ftpuser
#chmod go+rx /var/ftpuser
确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
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.my
添加user_config_dir=/etc/vsftpd/virusers
mkdir /etc/vsftpd/virusers
cd /etc/vsftpd/virusers
vim ftpuser1添加内容
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim ftpuser2添加内容
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
vim /etc/vsftpd.conf开启ftp服务的传输日志
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
#iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 21 -m state --state NEW -m limit --limit 10/second -j ACCEPT