日期:2011-02-15 02:11:00  来源:本站整理

<b>用vsftpd架设安全的FTP服务器</b>[服务器安全]

赞助商链接



  本文“<b>用vsftpd架设安全的FTP服务器</b>[服务器安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

网站的建立中,FTP是一项重要的服务,操纵它可以更简单分享有限的软件资源.Linux下有代表性的FTP服务器软件是Wu-FTP、ProFTP及vsftpd.Wu-FTP(Washington University FTP)是由美国华盛顿大学开辟的、以效率和安定性为参考量的FTP软件.它的功效强盛,配置较复杂,由于开辟时间较早,利用非常遍及,也因此成为黑客们主要的攻击目标.Wu-FTP的早期各级版本不断呈现安全漏洞,系统管理员不得不因安全因素而常常对其举行进级.ProFTP针对Wu-FTP的弱项而开辟,除了在安全性方面举行了改良外,还具有设置简单的特点,并供应了一些Wu-FTP没有的功效,大大简化了架设和管理FTP服务器的工作.vsftpd则凭仗在安全性方面的超卓表现,被很多大型网站广为采取.

vsftpd简介

vsftpd在安全性、高性能及安定性三个方面有上佳的表现.它供应的主要功效包含虚拟IP设置、虚拟用户、Standalone、inetd操作情势、强盛的单用户设置本领及带宽限流等.在安全方面,它从原理上修补了大大都Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,利用安全编码技术办理了缓冲溢出问题,并能有效避免“globbing”范例的回绝服务攻击.目前正在利用vsftpd的官方网站有Red Hat、SuSE、Debian、GNU、GNOME、KDE、Gimp和OpenBSD等.

安装

本文以1.1.3版本为例举行介绍(这是2002年11月9日公布的最新正式发行版本).下载地址为ftp://vsftpd.beasts.org/users/cevans/.

1.构建vsftpd

首先解紧缩包,代码以下:

$ tar xzvf vsftpd-1.1.3.tar.gz

进入安装目录cd vsftpd-1.1.3.假如想在今后利用中启用tcp_wrapper功效,可在编译前改正“builddefs.h”文件中的语句,将“#undef VSF_BUILD_TCPWRAPPERS”改成“#define VSF_BUILD_TCPWRAPPERS”.tcp_wrapper功效主要利用于IP管理掌握,比方可认为单独的一个IP地址利用特别优先的FTP配置文件.然后,键入“make”生成一份可履行二进制程序代码.

2.前期预备

vsftpd的默许配置中需求用户“nobody”.增添该用户号令以下:

$ useradd nobody

vsftpd的默许配置中需求目录“/usr/share/empty”.增添该目录的号令以下:

$ mkdir /usr/share/empty/

匿名FTP需求用户“ftp”的存在,并有一个有效的主目录(不答应用户“ftp”有拥有权和可写权).如没有此目录则成立它,号令以下:

$ mkdir /var/ftp/
$ useradd -d /var/ftp ftp

3.安装相关配置文件、履行文件、帮忙手册页等

运行“make install”,将源代码、帮忙手册页等复制到相关途径.假如采取手工复制,号令以下:

$ cp vsftpd /usr/local/sbin/vsftpd
$ cp vsftpd.conf.5 /usr/local/man/man5
$ cp vsftpd.8 /usr/local/man/man8

别的,“make install”不能复制样例配置文件,倡议手工复制,号令以下:

$ cp vsftpd.conf /etc

整个安装历程很简单,下面来看看若何操作vsftpd的强盛功效,举行vsftpd.conf文件的配置.

两种运行情势

像别的保护程序一样,vsftpd供应了standalone和inetd(inetd或xinetd)两种运行情势.简单注释一下,standalone一次性启动,运行期间一向驻留在内存中,长处是对接入信号反映快,缺陷是损耗了一定的系统资源,因此常常利用于对及时反映要求较高的专业FTP服务器.inetd恰好相反,由于只在外部衔接发送恳求时才调用FTP进程,因此不合适利用在同时衔接数目较多的系统.此外,inetd情势不占用系统资源.除了反映速度和占用资源两方面的影响外,vsftpd还供应了一些额外的高级功效,如inetd情势支持per_IP(单一IP)限制,而standalone情势则更有利于PAM考证功效的利用.

1.inetd运行情势

从某种inetd运行vsftpd可以供应一种不错的功效——per_IP衔接限制.这也是vsftpd 1.1.3版本最新推出并举荐的一种运行情势.实现per_IP衔接限制要依靠于vsftpd供应的tcp_wrappers支持.假如利用尺度的“inetd”,需编辑/etc/inetd.conf文件,并增添下面一行代码:

$ ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd

确保删除或注释掉任何原存的FTP服务语句行.假定没有安装tcp_wrappers,或不需求利用它,可去掉“/usr/sbin/tcpd”部份.然后重载配置文件,号令以下:

$ kill -SIGHUP 'pidof inetd'

大大都较新的系统采取的是xinetd超级服务保护进程.利用“vi /etc/xinetd.d/vsftpd” 看一下它的内容,以下:

disable = no
socket_type = stream
wait = no

# 这表示设备是激活的,它正在利用尺度的TCP Sockets.

user = root
server = /usr/local/sbin/vsftpd

# 阐明服务程序/usr/local/sbin/vsftpd已被用来掌握FTP接入恳求,并且该程序是作为root身份运行的(大概刹时拥有过大的特权).请确信已经把vsftpd二进制履行代码安装在了“/usr/local/sbin”目录下.

per_source = 5
instances  = 200

# 由于安全缘由,从一个单一IP地址联入的最大答应数值是5.当前最大衔接总数是200.

no_access  = 192.168.1.3

# 地址192.168.1.3将被回绝拜候.

banner_fail = /etc/vsftpd.busy_banner

# 显示给用户当衔接被禁止时的文件.不管因任何缘由而被回绝(太多用户,IP被禁止).

下面一行是产生的例子:

echo "421 Server busy, please try later." > /etc/vsftpd.busy_banner
log_on_success  += PID HOST DURATION
log_on_failure  += HOST

这将按照时间次序日记全部尝试衔接的IP地址,无论衔接成功与否.假定衔接启动了一个FTP服务,其进程ID和利用期也将被载入日记.假如利用的是Red Hat,这个日记信息将呈目前/var/log/secure文件中.

最后,重启xinetd,号令以下:

$ /etc/rc.d/init.d/xinetd restart

需求注意的是,“/etc/xinetd.d”目录中仅能开启一个FTP服务.

2.standalone情势

standalone情势便于实现PAM考证功效.进入这种情势首先要关闭xinetd下的vsftpd,设置“disable = yes”,大概注销掉“/etc/inetd.conf”中呼应的行.然后改正“/etc/vsftpd.conf”中的选项为“listen=YES”.

配置vsftpd.conf

下面来理解一下核心配置文件vsftpd.conf.它的地址为“/etc/vsftpd.conf”,掌握语句格局为“语句=值”,注意不要在格局间加入任何空格和标点标记.man手册页中把掌握语句分为布尔类(值为YES或NO)、数字类(值为数字)和字符串类(值为字符串)三种.为了管理便利、思绪清楚,按照拜候权(Access rights)、安全(Security)、功效(Features)和性能(Performance)分成四大类.下面是一个样本配置文件内容,用来阐明常用的掌握语句:

# Access rights
anonymous_enable=YES 
/*若不想启用匿名拜候请改正值为NO*/
local_enable=NO 
/*关闭本地用户登陆服务,指全部非匿名用户*/
write_enable=NO 
/*关闭任何用户的写权限*/
anon_upload_enable=NO 
/*关闭匿名用户上传数据的本领*/
anon_mkdir_write_enable=NO 
/*关闭匿名用户成立目录的本领*/
anon_other_write_enable=NO 
/*关闭匿名用户履行成立和上传之外的写入类号令的操作,比方更
改名字和删除操作的本领*/

# Security
anon_world_readable_only=YES 
/*开启匿名用户只能利用答应权为全部可读的资源*/
connect_from_port_20=YES 
/*从尺度端口20触发衔接*/
hide_ids=YES 
/*躲藏FTP服务器顶用户的ID,用“FTP"代替*/
pasv_min_port=50000 
pasv_max_port=60000 
/*设置pasv传输情势下的端口范围为50000-60000*/

# Features
xferlog_enable=YES 
/*开启日记,记录传输状况到文件/var/log/vsftpd.log*/
ls_recurse_enable=NO 
/*关闭“ls -R"号令,该号令常被用于DoS攻击,非常浪费系统资源,
但“mirror"镜像工具会用到它*/
ascii_download_enable=NO 
/*关闭ASCII情势下载,避免被用于DoS攻击,ASCII下载很损耗CPU负担*/
async_abor_enable=YES 
/*开启支持早期FTP客户端“async ABOR"号令的本领*/

# Porformance
one_process_model=YES 
/*开启每个IP单一进程情势,该情势仅支持具有一定本领的内核,
比方linux kernel 2.4*/
idle_session_timeout=120 
/*踢出闲暇了两分钟后的用户*/
data_connection_timeout=300 
/*踢出闲暇了五分钟后的下载*/
accept_timeout=60 
/*踢出挂起了一分钟后的passive衔接*/
connect_timeout=60 
/*踢出挂起了一分钟后的活动衔接*/
anon_max_rate=50000 
/*限止单个用户的下载速度为不超越50kbytes每秒*/

至此,一个匿名服务器已经可以正常运行了,并且举行了安全方面的设置.实际中,按照FTP服务器差别的需求,比方想启用本地用户登录、想让某类用户具有上传本领、想让登录者看到一份友好的欢送信息等,还可以在vsftpd.conf中举行呼应的设置(用“man vsftpd.conf”参考man手册可得到更多的具体资料).

有一些设置选项跟运行情势或外挂模块有关,还有一些选项必须依靠于另一个选项的启用状况.总之,只要尽心搭配,完好可以定制出一个称心的FTP服务器.

tcp_wrappers的利用

要利用这项功效需求在安装编译之前构建包含tcp_wrappers的vsftpd.可通过编辑“builddefs.h”文件,将“#undef VSF_BUILD_TCPWRAPPERS”改正成“#define VSF_BUILD_TCPWRAPPERS”,然后重新构建编译,生成可履行代码.其次,要开启在配置文件vsftpd.conf中的选项“tcp_wrappers=YES”.该功效依靠于对文件“/etc/hosts.allow”的配置.以下是一个样例:

vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY

   此中,第一行表示假如一个客户端从192.168.1.3衔接,那么vsftpd将利用“/etc/vsftpd_tcp_wrap.conf”的vsftpd配置文件给该衔接.这些设置被利用在默许的vsftpd.conf之前.这一点非常有效,可用它为一些IP利用差别的拜候限制(比方上传的本领);还可以指定某些IP有本领来超越衔接限制(max_clients=0);大概为某些IP增减带宽限制.第二行表示回绝192.168.1.4衔接的本领.这一点对心胸叵测的衔接者很有效.

PAM的利用

PAM利用也就是在开启了PAM的系统上利用“虚拟用户”功效.下面一个样例演示怎样操纵“虚拟用户”来设置vsftpd的PAM.虚拟用户是指不像系统上的真实用户一样客观存在的用户.虚拟用户因此而比真实用户更安全,因为一个像这样有威胁系统安全的账户却仅能利用FTP服务.虚拟用户常用来服务那些不想开放给不被信任用户的内容,普通不影响正常的普通用户.

1.成立虚拟用户数据库

利用pam_userdb来辨别虚拟用户.这需求一个“db”格局的用户名/密码文件.要成立一个“db”格局文件,首先要成立一个在交替行上写有效户名和密码的无格局文本文件,代码以下:

$ vi logins.txt

编辑文件内容以下:

tom
foo
fred
bar

上面的“tom”对应着密码“foo”,“fred”对应着密码“bar”.同时用root身份登陆,成立实际的数据库文件,代码以下:

#要求已安装了Berkeley db 程序

这样便可成立“/etc/vsftpd_login.db”.假如想改变拜候答应权限,可用以下号令:

$ chmod 600 /etc/vsftpd_login.db

此外,假如想理解更多有关若何保护登陆数据库的知识,可探求在“Berkeley DB”上的文档资料,网址为http://www.sleepycat.com/docs/utility/index.html.

2.建一个利用新数据库的PAM文件

成立编辑文件vsftpd.pam,包含以下两行:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
accound required /lib/security/pam_userdb.so db=/etc/vsftpd_login

奉告PAM利用新数据库来辨别用户.把该PAM文件保存到PAM目录(普通为“/etc/pam.d/cp vsftpd.pam /etc/pam.d/ftp”).

3.为虚拟用户设置文件位置

接下来利用以下号令为为虚拟用户设置文件位置:

$ useradd -d /home/ftpsite virtual
$ ls -ld /home/ftpsite

将显示以下:

drwx------3 virtual  virtual  4096 Jul 30 00:39 /home/ftpsite

已经成立一个叫做“virtual”的用户,并且有一个主目录“/home/ftpsite”.增添一些内容到这个下载区域,代码以下:

$ cp /etc/hosts /home/ftpsite
$ chown virtual.virtual /home/ftpsite/hosts

4.定制vsftpd.conf配置文件

重新定制vsftpd.conf文件:

anonymous_enable=NO
local_enable=YES
# 由于安全因素应关闭匿名FTP,并开启非匿名FTP(虚拟用户需利用).
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# 出于安全目的写下这些确保号令,不准写号令履行
chroot_local_user=YES
# 限制虚拟用户到我们上面设置的虚拟FTP区域 /home/ftpsite.
guest_enable=YES
guest_username=virtual
# guest_enable很重要,能激活虚拟用户.guest_username表示全部
的虚拟用户都被映射到上面设置的真实用户“virtual”.这也将肯定在文件系统上
虚拟用户的终究归宿,用户“virtual”的主目录“/home/ftpsite”.
listen=YES
listen_port=10021
# 这置vsftpd在“standalone”情势,不从inetd运行.这意味着仅需履行vsftpd
运行号令一次,它就开始运行起来.这也使得vsftpd监听在10021的非尺度端口上
的FTP需求(FTP普通利用端口21).
pasv_min_port=30000
pasv_max_port=30999
# 这些号令在被动FTP接纳端安排一个端口序列.对配置防火墙很有效.

5.开始运行vsftpd

进入vsftpd源代码所在的目录,并履行“./vsftpd”,假如光标一向停在那边阐明无误;不然将会看到一些错误信息.

6.测试

装载另一个Shell会话进程(大概把程序切换到后台运行,按CTRL+Z然后敲“bg”).以下是一个FTP会话样例:

ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.3: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>

这里给出的密码是“foo”.不要因为呈现“failed to open directory”而惊骇,那是因为目录“/home/ftpsite”不全部可读.可以看到,通过size号令已经拜候到复制进虚拟FTP区域的“hosts”文件.

功效扩大

固然第一个vsftpd已经可以运行,但下面的内容可以扩大“VIRTUAL_USERS”,使设置变得略微复杂一些.假定需求两类虚拟用户,一类仅仅能浏览和下载内容,另一种除能下载存在的内容之外还能上传新内容.可以利用vsftpd强盛的单用户利用配置本领(版本1.1.0以上)来完成这个设置.我们在早先的虚拟用户样例中成立了tom和fred两个用户,并设置fred拥有写权限,可拜候上传的新文件;tom仅能下载.

1.激活单用户配置本领

要激活vsftpd的这个强盛功效,增添下面的内容到“/etc/vsftpd.conf”:

user_config_dir=/etc/vsftpd_user_conf

并用“mkdir /etc/vsftpd_user_conf”成立目录.

2.给tom读取全部文件/目录的本领

在上个样例的末尾, 我们注意到虚拟用户仅能看全可读文件和目录.可以使“/home/ftpsite”目录全可读,并且上传有全可读答应的文件.但是做到这点的另一种办法是给tom下载非全可读文件的本领.

关于用户tom,强行供应一个配置设置给“anon_world_readable_only”,代码以下:

echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom

然后检测一下,用tom登录,键入“ls”将返回目录清单.而用fred登录则应不显示.

可以重启vsftpd使方才对“/etc/vsftpd.conf”文件的更改有效(高级用户可发送SIGHUP给vsftpd监听进程).

3.给fred读取全部文件/目录和成立新文件/目录的权限,但是不具有干扰已经存在文件的本领,代码以下:

echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred

最后检测一下,用tom登陆应当不能上传;而用fred登录能上传.并试着辨别用tom和fred删除一个文件,应不能删除.

总结

以上实例均在Red Hat 8.0系统上试验通过,如碰到问题请细心查抄每个细节的精确性.实例中的内容可以按照具体环境举行增减、改正.相信略加变通便可以打造出一个称心的、安全的FTP服务器.

  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .