搭建linux vsftpd服务器
一、vsftpd简介
vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握,也然最主要的是会用;目前在开源操作系统中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至于哪个FTP服务器套件更好,哪个是你最熟悉的,哪个就是最好的。
二、vsftpd的两种工作模式
FTP的连接一般是有两个连接的,一个是用于客户程和服务器传输命令的,另一个是用于数据传送的连接。FTP服务程序一般会支持两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),我先说说这两种不同模式连接方式的分别。(先假设客户端为C,服务端为S)
主动模式(Port Mode):命令连接的建立是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;数据连接的建立是由:(命令端口的连接建立在成功后)客户端C会发送一条命令告诉服务端S (客户端C在本地打开了一个端口随机端口N在等着你进行数据连接),当服务端S收到这个Port命令后,就会利用服务器S自己的TCP 20端口向客户端打开的那个随机端口N进行请求连接,最终连接成功。
被动模式(Pasv Mode):命令连接的建立也是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;(命令端口的连接建立在成功后)服务端S会发信息给客户端C,这个信息内容是(服务端S在本地打开了一个高位端口M,你现在去连接我吧),当客户端C收到这个信息后,就利用客户端自己的随机端口向服务端S的M端口进行连接,进而数据连接建立成功。
三、vsftpd的安装与启动
Vsftpd的安装程序在RHEL5安装光盘的Server目录中,名称是:vsftpd-*(版本).rpm。在安装之前您可以先查看自己的服务器上是否已经安装。例如下所示:
#rpm -qa|grep vsftpd
vsftpd-2.0.5-10.e15
如果您的服务器上没有安装vsftpd的程序包,您可以使用以下命令安装:
#rpm -ivh vsftp-2.0.5-10.e15.i386.rpm
当您的vsftpd程序包安装上之后,就可以设置vsftpd服务开机自动启动。命令如下:
#chkconfig vsftpd on
并设置手工启动该服务,命令如下所示:
#service vsftpd start 或 #/etc/init.d/vsftpd start
四、vsftpd的用户
Vsftpd服务支持三种用户登录ftp服务器,包括:匿名用户、本地用户、虚拟用户。
匿名用户在text模式下,要用用户名ftp,密码也是ftp,来进行登陆;如果是用FTP工具来匿名登陆的话,用户名和密码都为:anonymous。默认情况下匿名用户可以访问和下载,但不能进行上传、删除、新建目录、执行文件等操作!默认情况下匿名用户登录之后访问的位置是/var/ftp目录
本地用户就是使用useradd手工建立的用户,这些用户的相关资料都存储在/etc/passwd与/etc/shadow文件中。当vsftpd的客户端利用本地用户的身份与口令登录vsftpd时,默认访问本地用户自己的家目录(主目录)。(提示:为了提高vsftpd服务器的安全性,我们可以把一些vsftpd的本地用户的shell设置为/sbin/nologin,表示这些用户不能在本地登录系统,但可以使用ftp的方式访问服务器上的资料)
虚拟用户:即客户端登录vsftpd服务器时输入的多个用户名在服务器上根本不存在,这些用户名都对应了一个vsftpd服务器上的本地用户。所以当这些虚拟用户在登录时看到的主目录都是相同的位置(就是对应的那个本地用户的家目录)。这样可以提高vsftpd的安装性。
五、vsftpd的配置文件:
Vsftpd相关的配置文件有:/etc/vsftpd/vsftpd.conf 、/etc/vsftpd/ftpusers、/etc/vsftpd/user_list三个。其中/etc/vsftpd/ftpusers为ftp黑名单文件,即此文件中存储的用户名都禁止访问vsftpd;/etc/vsftpd/vsftpd.conf是vsftpd的主配置文件;/etc/vsftpd/user_list文件比较灵活,它根据vsftpd.conf主配置文件的不同配置,即可以充当黑名单文件(默认即是),也可以充当白名称文件(即只允许该文件中存储的用户名访问vsftpd),具体设置详见本文相关介绍。
Vsftpd主配置文件/etc/vsftpd/vsftpd.conf的相关设置:
anonymous_enable=YES 允许使用匿名用户
anon_upload_enable=YES 允许匿名用户上传数据
anon_mkdir_write_enable=YES 允许匿名用户创建目录并在新目录中写入数据
anon_world_readable_only=NO 允许匿名用户浏览已目录中已经存在的数据
anon_other_write_enable=YES 允许匿名修改、删除文件
anon_umask=022 设置匿名用户上传数据的默认权限
anon_max_rate=81920 匿名用户的最大传输速度(80K/s)
local_enable=YES 允许使用本地用户
write_enable=YES 允许本地用户上传数据
local_umask=022 设置本地用户上传数据的默认权限
local_max_rate=81920 本地用户的最大传输速度(80K/s)
max_clients=数字 允许最大连接客户端数量
max_per_ip=数字 允许每个客户端的最多线程数量
chroot_local_user=YES 锁定所有本地用户只允许访问自己的家目录
chroot_list_enable=YES 锁定部分本地用户只允许访问自己的家目录(用户是手工指定的)
chroot_list_file=/etc/vsftpd.chroot_list 指定锁定用户的列表文件
userlist_enable=YES 允许使用/etc/vsftpd/user_list文件
userlist_deny=YES 设置/etc/vsftpd/user_list文件中的用户拒绝访问ftp服务器;若为NO
则是设置只允许user_list文件中的用户访问ftp服务器。
tcp_wrappers=YES 设置允许使用tcp_wrapper来控制vsftpd的访问
listen_port=21 设置ftp服务的端口号默认为21
ftpd_banner=***** 设置ftp的登录欢迎信息
六、创建vsftpd虚拟用户(说明:以下实验彩色字体中,颜色相同的部分内容必须相同)
1、建立虚拟用户列表文件
例:#vim ~/login.txt (文件中奇数行写虚拟用户名,偶数行写虚拟用户口令)
tom
1234
jack
123
2、利用虚拟用户列表文件生成虚拟用户数据库文件(rpm -ivh db4-util)
例:#db_load -T -t hash -f ~/login.txt /etc/vsftpd/vir_user.db
#chmod 600 /etc/vsftpd/vsfptd_login.db
说明:如果您的系统中没有db_load命令说明您需要安装db4-util的程序包,该程序包就RHEL5的系统安装盘上Server目录下。而且生成了虚拟用户数据库文件之后还需要将该数据库文件的权限设置为600。
3、为虚拟用户建立pam认证文件:
例:#vim /etc/pam.d/vsftpd.vu,内容如下:
auth required pam_userdb.so db=/etc/vsftpd/vir_user
account required pam_userdb.so db=/etc/vsftpd/vir_user
4、建立需要映射的本地账户
例:#useradd vitrual_user
5、配置vsftpd.conf文件(包括:禁用匿名用户相关项;启用虚拟用户功能;并指定映射账户;使用新的PAM文件)
例:#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO (修改原文件中的相关行,禁用匿名用户)
guest_enable=YES (添加新行,启用虚拟用户功能)
guest_username=virtual_user (添加新行,指定映射账户为virtual_user)
pam_service_name=vsftpd.vu (修改原文件中的相关行,指定使用新的pam认证文件)
通过以上的操作虚拟用户已经可以使用,但每个虚拟用户登录到系统后所持有的权限是相同的,因为它们使用的配置文件都是/etc/vsftpd/vsftpd.conf。如果您希望不同的虚拟用户持有不相同的权限,您可以为虚拟用户建立自己的私有配置文件。但首先要在vsftpd的主配置文件中添加以下行,目的是指定虚拟用户私有配置文件的具体位置,然后再建立虚拟用户的私有配置文件。
例:#mkdir /etc/vsftpd/vu_user_conf_dir
#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vu_user_conf_dir (添加新行,指定虚拟用户的配置文件存
储在vu_user_conf_dir)
#vim /etc/vsftpd/vu_user_conf_dir/tom (建立tom用户的私有配置文件,内容省略)
#vim /etc/vsftpd/vu_user_conf_dir/jack (建立jack用户的私有配置文件,内容省略)
七、关于iptables防火墙的设置
由于vsftpd服务使用TCP的21号端口输送指令,在主动模式下使用TCP的20号端口输送数据,但在被动模式下使用高位动态端口做为数据端口。这样防火墙的设置就比较麻烦一些,不仅需要开启tcp 21号端口,还需要开启防火墙的跟踪模式。操作如下:
#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
#iptables -I INPUT -p tcp --dport 20 -j ACCEPT 支持主动模式
#iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 支持被动模式
#modprobe ip_conntrack_ftp 临时加载ip跟踪模块
当然也可以将跟踪模块加载到iptables的配置文件(/etc/sysconfig/iptables-config)中,这样它就永久生效了。操作如下:
#vim /etc/sysconfig/iptables-config
将IPTABLES_MODULES="ip_conntrack_netbios_ns" 行更改成为:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp" 即可
由于时间关系本次关于vsftpd我就简单的介绍到这里,如果您有不同看法或意见,请跟我联系
流星:caiyuanji (at) 163.com QQ:85104942