天天看点

vsftpd配置详解

     vsftpd是linux发行版中的一款ftp服务器程序它的全称是“very secure ftp daemon”,号称是最安全的ftp服务器。它工作在2120号端口主要提供文件传输服务可以跨越网络提供服务非常好用。

本文主要内容

一ftp的工作原理:

二vsftpd的配置文件

三vsftpd的安装

四vsftpd的启动与关闭

五vsftpd的配置文件/etc/vsftpd/vsftpd.conf解析

六用tcp_wraper来控制vsftpd:

七创建ftp虚拟用户

八启用ssl建立安全的传输

一ftp的工作原理

    ftp的两种工作模式

    1主动模式

    工作原理客户端从一个任意的非特权端口大于1024N连接到FTP服务器的命令端口也就是21端口。然后客户端开始监听端口N+1并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口20连接到客户端指定的数据端口N+1

    2被动模式

    工作原理当开启一个 FTP连接时客户端打开两个任意的非特权本地端口大于1024N和N+1。第一个端口连接服务器的21端口但与主动方式的FTP不同客户端不会提交PORT命令并允许服务器来回连它的数据端口而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口大于1024P 并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据

    主动模式与被动模式的比较       

    主动FTP对FTP服务器的管理和安全很有利但对客户端的管理不利因为FTP服务器企图与客户端的高位随机端口建立连接而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利但对服务器端的管理不利。因为客户端要与服务器端建立两个连接其中一个连到一个高位随机端口而这个端口很有可能被服务器端的防火墙阻塞掉。目前ftp服务器一般工作在被动模式。

     1/etc/vsftpd/vsftpd.conf

     这个是vsftpd的主配置文件

     2/etc/xinetd.d/vsftpd

     如果vsftpd工作在超级守护进程的管理下这是其配置文件来管理vsftpd

     3/etc/pam.d/vsftpd

     如果vsftpd启用PAM机制这是PAM认证文件(此文件中file=/etc/vsftpd/ftpusers

字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)

     4/etc/vsftpd/ftpusers

     禁止使用vsftpd的用户列表文件

     5/etc/vsftpd/user_list

     禁止或允许使用vsftpd的用户列表文件

     6/etc/hosts.allow和/etc/hosts.deny

     如果vsftpd启用tcp_wraper控制机制这两个文件可以控制vsftpd

     小知识

    1ftp是受selinux管理的要配置好selinux或是关闭

    2改动vsftpd主配置文件时确保“=”两边无空格有些功能我们可以添加到配置文件中并且指令要顶格写

三vsftpd的安装在系统光盘中有对应的rpm包

#rpm -ivh rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm

#service vsftpd start

#service vsftpd stop

anonymous_enable=YES

是否允许匿名用户访问匿名用户访问的时候是被映射为系统的ftp用户它的家目录为/var/ftp故我们用匿名访问的时候访问的是/var/ftp的目录这个目录的权限请不要随意改动如果改动可能造成无法访问。

local_enable=YES

是否允许本地用户登录ftp登录之后是用户的家目录但uid号小于500的用户都不允许登录

write_enable=YES

本地用户是否有上传权限

local_umask=022

本地用户上传的文件的反向掩码。而f用户访问ftp对文件的实际权限是所访问目录和这个文件权限的交集

anon_upload_enable=YES

是否允许匿名用户上传文件

anon_mkdir_write_enable=NO

匿名用户是否有创建目录的权限

anon_other_write_enable=NO

匿名用户是否有删除和重名名文件的权限

anon_world_readable_only=NO

匿名用户只能下载全局可读的文件即文件的属组属主其他用户都有读权限

dirmessage_enable=YES

当用户切换目录时定义的欢迎信息。可以在家目录中定义一个.message的文件

xferlog_enable=YES

是否打开传输日志

connect_from_port_20=YES

是否启用20号端口进行数据传输这样会工作在主动模式

chown_uploads=YES

chown_username=whoever

当用户上传了文件是否更改该上传的文件属主并且属主更改为哪个用户

xferlog_file=/var/log/xferlog

定义传输日志的位置默认在/var/log/messages中

xferlog_std_format=YES

定义日志的格式

idle_session_timeout=600

会话的超时时间

data_connection_timeout=120

数据连接的超时时间

nopriv_user=ftpsecure

指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。一般不启用

async_abor_enable=YES

是否允许运行特殊的ftp命令"async ABOR"一般不启用

ascii_upload_enable=YES

ascii_download_enable=YES

以ascii形式传输一般不启用

ftpd_banner=Welcome to blah FTP service.

登录ftp的欢迎信息

deny_email_enable=YES

banned_email_file=/etc/vsftpd/banned_emails

是否要禁止匿名用户使用某些邮件地址,如果是输入禁止的邮件地址的路径和文件名可防Dos攻击

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

当这个文件中的用户登录时把其用户的目录锁定不能随意切换对保证系统的安全重要。

chroot_local_user=YES

把所有登录的用户都锁进自己的家目录不能随意切换

ls_recurse_enable=YES

当用户查看ftp服务器上目录文件时支持递归显示

listen=YES

以独立守护进程工作

listen_ipv6=YES

是否启用ipv6地址上监听

pam_service_name=vsftpd

定义以pam实现ftp用户认证根据/etc/pam.d/vsftpd定义进行认证

userlist_enable=YES

是否启用用户列表并且只允许/etc/vsftpd/user_list文件中的用户登录

userlist_deny=YES

启用用户列表禁止此列表/etc/vsftpd/usr_list中定义的用户登录

tcp_wrappers=YES

是否启用tcp_wrapper对vsftpd的控制

首先要确保vsftpd的主配置文件"tcp_wrappers=YES"这一行启用

允许192.168.0网段访问

#vim /etc/hosts.allow

添加

vsftpd192.168.0.

禁止172.16.30网段访问

#vim /etc/hosts.deny

vsftpd172.16.30.

    什么是虚拟用户呢

虚拟用户是指那些非操作系统的用户。可以建多个虚拟用户访问ftp服务器的时候会映射到操作系统的一个普通进行访问访问的是这个被映射用户的家目录。

我们可以把ftp的账号密码信息存入mysql数据库中

1编译安装pam_mysql-0.7RC1

#yum groupinstall "Development Tools" "Development Libraries"

如果我们想让ftp支持ssl功能的话要安装如下两个包

#yum install openssl

#yum install openssl-devel

# tar zxvf  pam_mysql-0.7RC1.tar.gz

# cd  pam_mysql-0.7RC1

# ./configure --with-mysql=/usr/local/mysql --with-openssl 

--with-mysql 指定mysql的安装位置根据mysql的安装位置指定mysql的安装见我的文章"LNMP源码安装配置+discuz")

--with-openssl 使ftp启用ssl可选

# make

# make install

2配置

1.准备数据库及相关表

登录进mysql

#mysql -uroot -p

我们建立名为vsftpd的数据库来存放相关虚拟用户的帐号

mysql> create database vsftpd;

只给lee用户操作vsftpd数据库select的权限用户lee的密码为123456

mysql> grant select on vsftpd.* to lee@localhost identified by '123456';

mysql> grant select on vsftpd.* to [email protected] identified by '123456';

mysql>flush privileges;

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>DESC users

添加虚拟用户jia,其密码采取加密存放的方式

mysql> insert into users(name,password) values('jia',password('123456'));

查看结果

mysql> select * from users;

2建立PAM认证所需的文件

为了我们ftp服务器的安全性一般不允许我们的系统用户直接登录ftp服务器

#vi /etc/pam.d/vsftpd.mysql

添加如下两行内容此时不允许系统用户登录

auth required pam_mysql.so user=lee passwd=123456 host=localhost db=vsftpd table=users  usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=lee passwd=123456 host=localhost db=vsftpd table=users  usercolumn=name passwdcolumn=password crypt=2

如果想要系统用户用自己的账号密码也能访问我们的ftp服务器则修改/etc/pam.d/vsftpd.mysql文件改为为如下六行内容

auth sufficient pam_mysql.so user=lee passwd=123456 host=localhost db=vsftpd table=users  usercolumn=name passwdcolumn=password crypt=2

auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

auth required pam_shells.so

auth include system-auth

account sufficient pam_mysql.so user=lee passwd=123456 host=localhost 

db=vsftpd table=users  usercolumn=name passwdcolumn=password crypt=2

account include system-auth

注意此时系统用户访问的时候也是被映射为我们的虚拟用户vsftp来访问的也就是说系统用户访问的时候也只能访问/var/ftproot这个目录

3修改vsftpd的配置文件使其适应mysql认证

建立虚拟用户映射的系统用户vsftp及对应的目录/var/ftproot就是虚拟用户登录ftp服务器的所在目录

#useradd -s /sbin/nologin -d /var/ftproot vsftp

#chmod go+rx /var/ftproot

请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项

anon_upload_enable=NO

为/etc/vsftpd/vsftpd.conf添加以下选项

guest_enable=YES

guest_username=vsftp

修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd为如下内容

pam_service_name=vsftpd.mysql

启动服务

#service vsftpd restart

4设置虚拟用户的权限

先建立一个目录用来存放与虚拟用户名对应的文件

#mkdir /etc/vsftpd/virusers

#cd /etc/vsftpd/virusers

在这个目录中建立的文件的名字必须和虚拟用户的名字相同

#vim lee

使虚拟用户lee有上传下载新建文件的权限则添加如下内容

anon_mkdir_write_enable=YES

#vim /etc/vsftpd/vsftpd.conf

添加如下行目录文件的名字和建立的目录路径相对应

user_config_dir=/etc/vsftpd/virusers

重启服务

5启用iptables跟踪功能

我们的服务器通常要有防火墙的而我们的ftp服务一般工作在被动模式如果我们设置ftp服务器(ip:1.1.1.1)的防火墙规则而工作在被动模式的ftp服务可能会被挡掉可以启用iptables的跟踪功能解决

安装模块

#modprobe ip_conntrack_ftp

#modprobe ip_nat_ftp

是这些模块能自动装载

#vim /etc/sysconfig/iptables-config

修改:

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

例设置ftp服务器的规则可以如下使用RELATED选项

#iptables -P INPUT DROP

#iptables -P OUTPUT DROP

#iptables -A INPUT -d 1.1.1.1 -p tcp --dport 20:21 -j ACCEPT

#iptables -A OUTPUT -s 1.1.1.1 -p tcp --sport 20:21 -j ACCEPT

#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

好了我们可以用虚拟用户可以正常访问ftp服务器了。

八启用ssl建立安全的传输可选

由于ftp传输是明文的非常不安全我们可以启用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

然后建立我们自己的CA然后创建证书vsftpd.crt和密码vsftpd.key放在/etc/vsftpd/ssl目录中CA建立过程见我的博客“数据加密及CA的创建”

这时候只有我们使用专用的ftp客户端工具才可以使用加密的传输因为要指定使用哪种ssl类型进行传输。

<a href="http://down.51cto.com/data/2360141" target="_blank">附件http://down.51cto.com/data/2360141</a>

本文转自 leejia1989 51CTO博客原文链接http://blog.51cto.com/leejia/816833如需转载请自行联系原作者