以下是小编整理了如何安全设置ApacheWeb服务器(共含7篇),希望你喜欢,也可以帮助到您,欢迎分享!同时,但愿您也能像本文投稿人“的故意”一样,积极向本站投稿分享好文章。
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
HTTP拒绝服务攻击
攻击者通过某些手段使服务器拒绝对http应答,这使Apache对系统资源(cup时间与内存)需求巨增,最终造成系统变慢甚至完全瘫痪,Apache服务器最大的缺点是,它的普遍性使它成为众矢之的,Apache服务器无时无刻不受到DoS攻击威胁,主要有下边几种
1.数据包洪水攻击
一种中断服务器或本地网络的方法是数据包洪水攻击,它通常使用internet控制报文协议(ICMP,属于网络层协议)包或是udp包,在最简单的形式下,这些攻击都是使服务器或网络负载过重,这意味这攻击者的网络速度必须比目标主机网络速度要快,使用udp包的优势是不会有任何包返回到黑客的计算机(udp效率要比tcp高17倍),而使用ICMP包的优势是攻击者能让攻击更加富与变化,发送有缺陷的包会搞乱并锁住受害者的网络,目前流行的趋势是攻击者欺骗服务器,让其相信正在受来自自身的洪水攻击.
2.磁盘攻击
这是一种很不道德的攻击,它不仅影响计算机的通信,还破坏其硬件,伪造的用户请求利用写命令攻击目标计算机硬盘,让其超过极限,并强制关闭,结局很悲惨.
3.路由不可达
通常DoS攻击,集中在路由器上,攻击者首先获得控制权并操纵目标机器,当攻击者能更改路由表条目时候,会导致整个网络无法通信,这种攻击很阴险,隐蔽,因为网络管理员需要排除的网络不通原因很多,其中一些原因需要详细分辨.
4.分布式拒绝服务攻击
这也是最具有威胁的DDoS攻击,名称很容易理解,简单说就是群欧,很多客户机同时单条服务器,你会发现你将伤痕累累,Apache服务器特别容易受到攻击,无论是DDos还是隐藏来源的攻击,因为Apache无处不在,特别是为Apache特意打造的病毒(特选SSL蠕虫),潜伏在许多主机上,攻击者通过病毒可以操纵大量被感染的机器,对特定目标发动一次浩大的DDoS攻击,通过将蠕虫散播到大量主机,大规模的点对点攻击得以进行,除非你不提供服务,要不然几乎无法阻止这样的攻击,这种攻击通常会定位到大型的网站上.
5.缓冲区溢出
这种攻击很普遍,攻击者利用CGI程序编写一些缺陷程序偏离正常的流程,程序使用静态的内存分配,攻击者就可以发送一个超长的请求使缓冲区溢出,比如,一些perl编写的处理用户请求的网关脚本,一但缓冲区溢出,攻击者就可以执行恶意指令.
6.非法获取root权限
如果Apache以root权限运行,系统上一些程序的逻辑缺陷或缓冲区溢出漏洞,会让攻击者很容易在本地系统获取linux服务器上的管理者权限,在一些远程情况下,攻击者会利用一些以root身份执行的有缺陷的系统守护进程来取得root权限,或利用有缺陷的服务进程漏洞来取得普通用户权限,以远程登陆,进而控制整个系统.
这边这些都是服务将会遇到的攻击手段,下边来说,如何打造安全的Apache服务器,如果你能遵守下边这些建议,那么你将得到一台相对安全的apache服务器.
一:勤打补丁
你必须要相信这个是最有用的手段,缓冲区溢出等漏洞都必须使用这种手段来防御,勤快点相信对你没有坏处,在http:www.apache.org上最新的changelog中都写有:bug fix,security bug fix的字样,做为负责任的管理员要经常关注相关漏洞,及时升级系统添加补丁.使用最新安全版本对加强apache至关重要.
二:隐藏和伪装Apache的版本
打乱攻击者的步骤,给攻击者带来麻烦,相信是管理员愿意看到的.软件的漏洞信息和版本是相关的,在攻击者收集你服务软件信息时候给与迷惑是个不错的选择,何况版本号,对攻击者来说相当与GPS定位一样重要,默认情况,系统会把apache版本模块都显示出来(http返回头),如果列举目录的话,会显示域名信息(文件列表正文),去除Apache版本号的方法是修改配置文件,找到关键字,修改为下边:
ServerSignature off
ServerTokens prod 通过分析web服务器类型,大致可以推测操作系统类型,win使用iis,linux普遍apache,默认的Apache配置里没有任何信息保护机制,并且允许目录浏览,通过目录浏览,通常可以得到类似“apache/1.37 Server at apache.linuxforum.net Port 80”或“apache/2.0.49(unix)PHP/4.3.8”的信息,通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来,如果不行的话,可能是提示信息被编译在程序里了,要隐藏需要修改apache的源代码,然后重新编译程序,以替换内容:
编辑ap_release.h文件,修改
“#define AP_SERVER_BASEPRODUCT”“Apache”“”
为
“#define AP_SERVER_BASEPRODUCT”“Microsoft-IIS/5.0”“
编辑os/unix/os.h文件,修改
”#define PLATFORM“”Unix“”“
为
”#define PLATFORM“'Win32”
修改完成后,重新编译,安装apache,在修改配置文件为上边做过的,再次启动apache后,用工具扫描,发现提示信息中已经显示为windows操作系统了顺便说下,现在这个论坛,就有点不太讲究,这是论坛错误的返回信息,看了有点汗地感觉,Apache/2.2.8(Ubuntu)DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g Server at forum.ubuntu.org.cn Port 80这个等于告诉恶意用户很多有用信息,虽然说不算开了门,但等于被告诉了门在那里,还是相当危险的.
三:建立安全的目录结构apache服务器包括四个目录结构
ServerRoot #保存配置文件,二进制文件与其他服务器配置文件
DocumentRoot #保存web站点内容,包括HTML文件和图片等
ScripAlias #保存CGI脚本
Customlog #保存日志
Errorlog #保存错误日志
建议的目录结构为,以上四种目录相互独立并且不存在父子逻辑关系
注:
ServerRoot目录只能为root用户访问
DocumentRoot目录应该能够被管理web站点内容的用户访问和使用apache服务器的apache用户与组访问
ScripAlias目录应该只能被CGI开发人员和apache用户访问
Customlog和Errorlog只能被root访问
下边是一个安全目录结构的事例:
+-------/etc/
|
| +----/http (ServerRoot)
| +----/logs (Customlog和Errorlog)
|
+-------var/www
|
| +---/cgi-bin(ScripAlias)
| +---/html(DocumentRoot)
这样的目录结构是比较安全的,因为目录之间独立,某个目录权限错误不会影响到其他目录
四:为apache使用专门的用户与组
按照最小特权的原则,需要给apache分配一个合适的权限,让其能够完成web服务.
注:最小特权原则是系统安全中最基本的原则之一,限制使用者对系统及数据进行存取所需要的最小权限,保证用户可以完成任务,同时也确保被窃取或异常操作所造成的损失.
必须保证apache使用一个专门的用户与组,不要使用系统预定的帐户,比如nobody用户与nogroup组,因为只有root用户可以运行apache,DocumentRoot应该能够被管理web站点内容的用户访问和使用apache服务器的apache用户与组访问,例如,希望“test”用户在web站点发布内容,并且可以以httpd身份运行apache服务器,可以这样设定:
groupadd webteam
usermod -G webteam test
chown -R httpd.webteam /www/html
chmod -R 2570 /www/htdocs
只有root能访问日志,推荐这样的权限
chown -R root.root /etc/logs
chown -R 700 /etc/logs
五:web目录的访问策略
对于可以访问的web目录,要使用相对保守的途径进行访问,不要让用户查看任何目录索引列表
禁止使用目录索引:
apache在接到用户对一个目录的访问时,会查找DirectoryIndex指令指定的目录索引文件,默认为index.html,如果该文件不存在,那么apache会创建动态列表为用户显示该目录的内容,这样就会暴露web站点结构,因此需要修改配置文件禁止显示动态目录索引,修改httpd.conf
Options -Indexes FollowSymLinks
Options指令通知apache禁止使用目录索引,FollowSymLinks表示不允许使用符号连接.
禁止默认访问:
要的安全策略必须要禁止默认访问的存在,只对指定的目录开放权限,如果允许访问/var/www/html目录,使用如下设定
Order deny,allow
Allow from all
禁止用户重载:
为了禁止用户对目录配置文件(htaccess)进行重载(修改),可以这样设定
AllowOverride None
六:apache服务器访问控制
apache的access.conf文件负责设置文件的访问权限,可以实现互联网域名和ip地址的访问控制,如允许192.168.1.1到192.168.1.254的主机访问,可以这样设定
order deny,allow
deny from all
allow from pair 192.168.1.0/255.255.255.0
七:apache服务器的密码保护
.htaccess文件是apache上的一个设置文件,它是一个文本文件,.htaccess文件提供了针对目录改变配置的方法既通过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以作用于此目录和子目录.
.htaccess的功能包括设置网页密码,设置发生错误时出现的文件,改变首业的文件名(如,index.html),禁止读取文件名,重新导向文件,加上MIME类别,禁止目录下的文件等.
注:.htaccess是一个完整的文件名,不是***.htaccess或其他格式,在/abc目录下放置一个.htaccess文件,那么/abc与它的子目录都会被这个文件影响,但/index.html不会被影响.
.htaccess的建立和使用比较复杂点,如果感兴趣的朋友可以回帖发问,这里就不具体写出来了,这种保护要比某些程序实现的保护安全,那种方法可以通过被猜测方法获取密码,用.htaccess很难被解除,但文本方式的验证会比较慢,对少量用户没影响,但对大量用户就必须使用带数据模块的验证了,这需要编译源代码时候开启模块,默认是不开启的.
八:让apache运行在“监牢”中
“监牢”的意思是指通过chroot机制来更改某个软件运行时所能看到的根目录,简单说,就是被限制在指定目录中,保证软件只能对该目录与子目录文件有所动作,从而保证整个服务器的安全,即使被破坏或侵入,损伤也不大.
以前,unix/linux上的daemon都是以root权限启动的,当时,这是一件理所当然的事情,像apache这样的服务器软件,需要绑定到80端口上来监听请求,而root是唯一有这种权限的用户,随着攻击手段和强度的增加,这样会使服务器受到相当大的威胁,一但被利用缓冲区溢出漏洞,就可以控制整个系统.现在的服务器设计通常以root启动,然后进程放弃root权限,改为某个低级的帐号运行.这种方式显然会降低对系统的危害,但攻击者还是会寻找漏洞提升权限,即使无法获得root权限,也可以删除文件,涂改主页等.
为了进一步提高系统安全性,linux内核引入chroot机制,chroot是内核中的一个系统调用,软件可以通过调用函数库的chroot函数,来更改某个进程所能见到的跟目录,比如,apache软件安装在/usr/local/httpd目录,以root启动apache,这个root权限的父进程会派生数个以nobody权限运行的子进程,父进程监听80端口,然后交给某个子进程处理,这时候子进程所处的目录续承父进程,即/usr/local/httpd目录,但是一但目录权限设定错误,被攻击的apache子进程可以访问/usr/local,/usr,/tmp甚至整个文件系统,因为apache进程所处的跟目录仍然是整个文件系统的跟目录,如果可以用chroot将apache限制在/usr/local/httpd/下,那么apache所存取的文件都被限制在/usr/local/httpd下,创建chroot监牢的作用就是将进程权限限制在文件目录树下,保证安全.
如果自己手动apache的监牢,将是很烦琐和复杂的工作,需要牵扯到库文件,这里可以使用jail包来简化监牢的实现jail的官方网站为:有兴趣可以逛逛这里也不写出具体的创建过程稍微麻烦.
九:apache服务器防范Dos
apache服务经常会碰到Dos攻击,防范的主要手段是通过软件,apahce Dos Evasive Maneuvers Module来实现的,它是一款mod_access的代替软件,可以对抗DoS攻击,该软件可以快速拒绝来自相同地址对同一URL的重复请求,通过查询内部一张各子进程的哈希表来实现,可以到网址:online/.securityfocus.com/tools/上下载软件
十:减少CGI和SSI风险
CGI脚本的漏洞已经成为WEB服务器的首要安全隐患,通常是程序编写CGI脚本产生了许多漏洞,控制CGI的漏洞除了在编写时候注意对输入数据的合法检查,对系统调用的谨慎使用等因素外,首先使用CGI程序所有者的ID来运行这些程序,即使被漏洞危害也仅限于该ID能访问的文件,不会对整个系统带来致命的危害,因此需要谨慎使用CGI程序.
1.3版的apache集成了suEXEC程序,可以为apache提供CGI程序的控制支持,可以把suEXEC看做一个包装器,在Apache接到CGI程序的调用请求后,把这个请求交给suEXEC来负责完成具体调用,并从suEXEC返回结果,suEXEC可以解决一些安全问题,但会影响速度,如果是对安全性要求很高时候,建议使用suEXEC,此外还有一个软件CGIWrap,它的安全性要高与suEXEC.
减少SSI脚本风险,如果用exec等SSI命令运行外部程序,也会存在类似CGI脚本风险,除了内部调试程序时,应使用:
option命令禁止其使用:
Option IncludesNOEXEC
十一:使用ssl加固Apache
使用具有SSL功能的服务器,可以提高网站敏感页的安全性能,SSL工作与TCP/IP协议和HTTP协议之间,SSL可以加密互联网上传递的数据流,提供身份验证,在线购物而不必担心别人窃取信用卡信息,在基于电子商务和基于web邮件的地方非常重要.SSL的应用相对还是比较麻烦的,有需要的话,可以发贴或查看资料.
一:FileSystemObject组件
FileSystemObject可以对文件进行常规操作
可以通过修改注册表,将此组件改名,来防止此类木马的危害,
HKEY_CLASSES_ROOT\Scripting.FileSystemObject\
改名为其它的名字,如:改为FileSystemObject_ChangeName
自己以后调用的时候使用这个就可以正常调用此组件了
也要将clsid值也改一下
HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\项目的值
也可以将其删除,来防止此类木马的危害。
注销此组件命令:RegSrv32 /u C:\WINNT\SYSTEM\scrrun.dll
禁止Guest用户使用scrrun.dll来防止调用此组件。
使用命令:cacls C:\WINNT\system32\scrrun.dll /e /d guests
三种禁用FileSystemObject(FSO)组件的方法
众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页
提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来
被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。
第一种:用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll来注销该组件。
此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招
第二种:修改Progid的值,在ASP里调用组件的方式通常是 Set 对象名=Server.
CreateObject(“Progid”),这时候我们就可以通过修改注册表中的Progid值从达
到禁用该组件的方法,
在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROO
T\Scripting.FileSystemObject,这时候我们就可以更改该Progid的值了,如改
成Scripting.FileSystemObject8。这样在ASP页里就这样调用了:
以下是代码片段:
<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject(“Scripting.FileSystemObject8”)
%>
(如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重
启后看效果。)
第三种:细心的高手们会想,既然能通过修改Progid值来禁用该组件,那Clsid是
否也可以来修改呢?(OK,你想得和我一样)我们知道,除了CreateObject方法以
外,也可以使用一般的标注建立一个组件,我们可以在ASP里面使用HTM
L的标注,以便在网页中加入一个组件。方法是:
以下是代码片段:
Runat表示是在服务端执行,Scope表示组件的生命周期,可以选用Session,Appl
ication或page(表示当前页面,也可缺省)
这种写法对我们没用,还有一种写法是:
以下是代码片段:
看运行结果,没问题,OK。这时候我们再用
以下是代码片段:
这时候就出错了。
新建一用户:iusr_domain
IIS里设置对应站点的匿名用户IUSR_DOMAIN
CACLS: 设置目录权限
这样FSO可用,但不会影响别人
有很多人都认为微软的东西漏洞太多,微软的系统安全性太差,网站服务器通常都不建议用微软的系统,不过,如果网站维护人员很少,通过在Windows Server里进行一些安全配置,也可以让系统的安全性有所提高,对于网站的备份、恢复等一系列复杂操作,也可以通过一些较为简单的方式来实现,下面是我总结的一些Windows Server安全配置和备份恢复的一些经验和技巧,供各位参考,
Windows服务器安全配置技巧 - Windows服务器安装、网络安全配置、安全模板设置等。
防止服务器网卡被误停用 - 服务器一般放在IDC机房,如果我们远程控制Windows服务器的时候,不小心禁用了网卡,后果不堪设想。
ASP博客安全技巧 - 以Z-Blog博客系统为例介绍在独立主机可配置的条件下(托管、租用或者合租主机)的系统安全设置。
海量文件复制和备份的技巧 - 海量文件服务技巧,带权限文件复制(单个文件的权限)技巧。
修改远程登录3389端口 - 众所周知,远程终端服务基于端口3389,
入侵者一般先扫描主机开放端口,一旦发现其开放了3389端口,就会进行下一步的入侵,所以我们只需要修改该务默认端口就可以避开大多数入侵者的耳目。
五个远程管理Windows服务器的技巧 - 一些有效管理服务器的小技巧。
IIS 的备份恢复 - Windows的IIS有一个非常“ ”的备份还原功能,和大部分备份还原不同的是,这个服务默认不支持不同电脑之间的备份还原,如果用户重装Windows的话,即使备份了IIS的相关文件,还原的时候还是提示“无效签名”,导致这个IIS无法恢复。
Windows IIS日志文件分析程序 - Windows Server具有事件日志记录的功能,其IIS日志文件里记录了包括下列信息:谁访问了您的站点,访问者查看了哪些内容等等。通过定期检查这些日志文件,网站管理员可以检测到服务器或站点的哪些方面易受攻击或存在其他安全隐患。
Google KMZ/MKL文件设置 - Google Earth的KML文件的MIME类型是application/vnd.google-earth.kml+xml,KMZ文件的MIME类型是application/vnd.google-earth.kmz。
服务器安全设置
1.系统盘和站点放置盘必须设置为NTFS格式,方便设置权限.
2.系统盘和站点放置盘除administrators和system的用户权限全部去除.
3.启用windows自带防火墙,只保留有用的端口,比如远程和Web,Ftp(3389,80,21)等等,有邮件服务器的还要打开25和130端口.
4.安装好SQL后进入目录搜索xplog70然后将找到的三个文件改名或者删除.
5.更改sa密码为你都不知道的超长密码,在任何情况下都不要用sa这个帐户.
6.改名系统默认帐户名并新建一个Administrator帐户作为陷阱帐户,设置超长密码,并去掉所有用户组.(就是在用户组那里设置为空即可.让这个帐号不属于任何用户组)同样改名禁用掉Guest用户.
7.配置帐户锁定策略(在运行中输入gpedit.msc回车,打开组策略编辑器,选择计算机配置-Windows设置-安全设置-账户策略-账户锁定策略,将账户设为“三次登陆无效”,“锁定时间30分钟”,“复位锁定计数设为30分钟”,
win2003服务器安全设置教程
,
)
8.在安全设置里本地策略-安全选项将
网络访问:可匿名访问的共享;
网络访问:可匿名访问的命名管道;
网络访问:可远程访问的注册表路径;
网络访问:可远程访问的注册表路径和子路径;
以上四项清空.
9.
一、服务器系统安装建议
1、不安装多余组件,停止不需要的服务;
2、www服务单独分区;
3、补丁打全;
二、登录账号与口令安全
1、设置密码使用、数字加大小写字母不少余8位;
# vi /etc/login.defs
找到以下:
PASS_MAX_DAYS 99999 #最大的天数密码可以使用,
PASS_MIN_DAYS 0 #最小数目密码更改期限内。
PASS_MIN_LEN 5 #最小可接受的密码长度。
PASS_WARN_AGE 7
根据自已实际实情况修改。
2、禁用不必要的账号;
设置密码使用时间
查看密码使用时间
#chage -l xxx(登录用户名)
查看账号所属组
# id xxx(登录用户名)
3、登录系统时,不要直接使用ROOT,以普通用户登录后,用SU切换ROOT户;
#vi /etc/ssh/sshd_config
找到
四、设置history保留量
#vi /etc/profile
找到
HISTSIZE=X (修改X保留行数)
退出时自动删除命令记录(history)
修改
vi .bash_logout
加入一行
rm -rf $HOME /.bash_history
五、锁定口令文件
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
六、其它安全配置
1、备份/etc/下重要配置文件到其它介质上;
2、修改SSH端口号
#vi /etc/ssh/sshd_config
修改为不常用的端口号
重起生效
#service sshd restart
七、设置允许访问的主机
#vi /etc/hosts.allow
本地服务器架构为LAMP的,以下设置多多少少会增加不多安全。
1.账号安全
禁用不需要的用户和系统账号,或者shell设置为/sbin/nologin,宿主目录为/dev/null,权限放低。
密码不能设置简单,密码最好不要与自己的信息有关系,日期、名称、电话、网址。最好为一句话,好记,又不容易被社工。
2.服务安全
禁用不需要的服务,修改常用的服务端口(自己用的话)。
3.mysql安全
在php中不要使用root连接。新建一个用户,只需要给 “增删改查” 功能。
多个数据库应创建不同的用户。除去所有远程连接权限。有必要时,关闭连接端口3306。只是本地连接的话,监听完全没有必要。
如果有mysql的0day,远程溢出也不好使。
4.php安全
如果php安全模式对现有的php程序没有影响,请开始安全模式。
禁止php函数。例如:system,passthru,dl,exec,shell_exec,popen,phpinfo,proc_open,chmod,chown,chroot,dir,opendir,readdir,scandir,
前面红色的,我认为是很重要的。就算拿到webshell提权也不好提,列出文件函数也要禁止,dl这个还是比较有趣的。
5.apache安全
apache程序的uid用户,禁止登陆。
禁止某些目录执行php程序。
php网页程序,这个安全就不好说了。上传,注入,跨站。网站路径最好 “奇异”一点,后台要保护好。
6.权限设置。
chmod 700 gcc g++ perl php make 禁止一些开发工具。防止写代码编译提权(提前得到shell)。
chmod 700 wget chmod rpm yum 。。 禁止一些下载工具和权限控制程序 ,防止上传 提权程序,加执行权限。提权。
chmod 700 ping ifconfig netstat ps 。。 禁止一下系统配置命令,和网络命令。
以上就我所总结的,没有很大的0day,服务器不会被占用的。防止拿到webshell,那就是php网站程序的问题了。
如有什么地方错误,请大家指正。我也是初学者。
FTP的隐患
早期FTP并没有涉及安全问题,随着互连网应用的快速增长,人们对安全的要求也不断提高。目前在各种平台上包括UNIX、Linux、Windows NT以及Netware等网络操作系统,都实现了FTP的客户和服务器。
FTP是为了共享资源、方便用户文件下载而制定的文件传输协议,那么必然有对系统读写的权利,所以它也是整个网络系统的薄弱环节,一些网上的黑客常常利用FTP作为侵入和破坏系统的突破口。他们有时利用FTP将一些监控程序装入系统,以窃取管理口令;有时利用FTP获取系统的passwd文件,从而了解系统的用户信息;有时利用FTP的puts和gets功能,增加系统负担,从而导致硬盘塞满甚至系统崩溃。
FTP主要工作原理
FTP是基于客户端/服务器方式来提供文件传输服务的。一个FTP服务器进程可同时为多个客户进程提供服务,即用户所在的一方是客户方,客户方翻译用户发出的命令,向提供FTP服务的文件服务器传送适当的请求。
服务器端则一直运行着ftpd守护程序,遵循TCP协议,服务进程ftpd在指定的通信端口监听客户发来的FTP请求,当ftpd确认该用户为合法时,就开始为其客户进程提供文件传输服务了。因此FTP协议在客户和服务器之间通过TCP来建立连接,并利用TCP提供的可靠传输在不同的站点间传输文件。当FTP客户与FTP服务器进行会话时,FTP建立了两个连接,一个是控制连接,一个是数据连接,如图所示。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631711.jpg“ border=1>
FTP的客户服务器模式
在一个FTP会话中需建立一个控制连接和若干个数据连接。控制连接是执行ftp命令时由客户建立的通向FTP服务器的连接,该连接只能用来传送FTP执行的内部命令以及命令的响应等控制信息而非数据,数据连接是为在服务器与客户端,或两个ftp服务器之间传输文件(即FTP代理传输方式)而建立的连接,该连接是全双工的,允许同时进行双向数据的传输。一旦数据传输结束,就撤消数据连接,再回到交互会话状态,直到客户撤消控制连接,并退出FTP会话为止。
FTP服务器的安全分析
我们可以通过编辑FTP服务器的配置文件来调整访问权限,在传输文件过程中进行文件加密等措施来达到FTP服务器的安全工作。下面是FTP服务器对用户、目录和文件管理安全问题的分析。
1)FTP服务器对用户的管理
为了不允许其它用户用匿名ftp访问系统,必须创建一个名为ftp的帐号,给帐号ftp设置一些限制,使得任何远程的ftp用户不能访问系统的其他部分。必须改变此帐号在文件/etc/passwd中的项,使一般的用户不能访问它,这一项是ftp:*:14:50:FTPUser:/home/ftp:。
口令区域中的星号用来保护帐号,它将阻止其他用户以此帐号注册以及控制它的文件或访问系统的其他部分。用户ID为14,是一个独立的ID,注释域是“FTP User”,注册目录是/home/ftp,当ftp用户注册到系统时,它将处于此目录中。
如果没有设置主目录,需创建一个,并用命令chown为ftp用户改变它的权限。组ID是ftp组的ID,专门为匿名ftp用户设置的。通过为ftp组设置限制来限制匿名的ftp用户。下面是一个在/etc/group文件中找到的关于ftp组的项。对于Linux系统,如果没有此项,应该加上ftp:: 50。
目录/home/ftp的权限中应该否定写权限。如果不希望ftp用户创建和删除目录,可以用chmod命令设置权限555来禁止写访问,这个命令是chmod555/home/ftp。
2)FTP服务器对目录的管理
为了防止系统遭到ftp用户的一些意外的访问,应在ftp目录中(如/home/ftp中),创建一组有限制的目录。在表1中提供一列目录。保护一个重要部分的方法是阻止远程用户使用不在限制目录中的命令或程序。例如,因为ls命令位于/bin目录中,可能不希望用户使用ls列出文件名,同时,又希望用户使用ls命令。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631974.jpg” border=1>
为了做到这一点,需要在目录/home/ftp中创建一个新的目录bin,接着复制一份命令ls放到/home/ftp/bin中。此目录将限制ftp用户的使用,他们使用的命令ls是目录/home/ftp/bin中的命令,而不是管理员用的/bin中的ls命令。通过同样的方法,可以让ftp用户使用其他命令。
目录/home/ftp/etc中存放passwd和group文件的副本,这个目录的存在也阻止ftp用户访问/etc目录下的原文件。编辑 /home/ftp/etc/passwd文件,删除系统的一般用户的项,剩余的项的口令应被设置为3,以保护访问。对于group文件,除去所有的用户组并设置所有的口令为3。
具体命令如下:
#cat/home/ftp/etc/kpasswd
root:3:0:0:::
bin:3:1:1:::
operator:3:11:0:::
ftp:3:14:50:::
nobody:3:99:99:::
#cat/home/ftp/etc/group
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::50:
目录/home/ftp/pub中放有想让远程ftp用户下载的文件。当ftp用户注册到系统时,它将处于目录/home/ftp中,并能切换到目录/home/ftp/pub中开始访问其中的文件。在/home/ftp/pub中能加入任何希望的目录和文件,甚至可以指定一些目录为上传目录,允许ftp用户上传文件到系统中。
一些Linux系统要求,ls命令工作时要访问libc.so.l和rld文件。它们通常存放在/lib目录中。因为不希望ftp用户间接访问系统,所以要创建一个/home/ftp/lib目录,并复制这些文件到此目录中。
另外,因为rld使用/dev/zero文件,还要创建一个/home/ftp/dev目录并用mknod复制设备文件/dev/zero,然后把它放到此目录中。
3)权限
为了限制ftp用户只能访问目录/home/ftp和它的子目录,需要对ftp用户隐藏文件结构的其余部分。要让目录/home/ftp呈现为ftp用户的主目录,实际的主目录和其他的目录结构则对ftp用户隐藏。可以用命令chroot加上参数ftp,使得目录/home/ftp呈现为主目录。
ftp目录的权限应该设置为允许ftp用户访问。对于所有者、组和另外的用户,有三组权限为读、写和执行。为了允许ftp用户访问,组和目录的其他权限应设置为可读和执行。执行权限允许ftp用户访问目录,读权限则允许列出目录中内容。目录不允许ftp用户具有写权限,没人想让ftp用户能删除或添加一个目录。对于拥有可以下载的文件的目录/home/ftp/pub来说,它必须拥有读和执行的权限。
作为目录的所有者,需要写权限以便能添加新文件或子目录。当然,只有当做改变时才需要写权限。为了进一步的安全,当不需要做改动时,能设置这些目录对所有的用户包括所有者都只开放读和执行的权限。用命令chmod加上数字555和目录名将设置对所有的用户为读和执行权限。
对于目录/home/ftp/bin中文件的权限和其他指定的ftp目录的权限有时需要更多的限制。一些文件需要执行,而另一些文件只要被读。目录 /home/ftp/bin或/home/ftp/lib中的文件ls和rld需要执行,可以设置权限为555。在目录/home/ftp/etc中的文件象passwd和group可以设置权限为111,即只读的权限。
4)监测和记录
用ftpwho命令可以显示通过FTP正在与系统连接的所有用户的进程信息。下面是ftpwho输出的一个例子:
Service class all
10448?S0:00
ftpd:vestax.domain.com:anonymouws/sshah@domain.com:DLE
10501?S0:00
ftpd:toybox.domain.com:heidi:PETR mklinux-ALL.sit.bin-2 user(-1 maximum)
在这里,可以看到有两个用户登录进入系统(本例没有对用户数进行限制)。第一个用户是一个称sshah@domain.com的匿名用户,他目前没有执行任何操作;第二个用户名为heidi,他目前正在获取mklinux-ALL.sit.bin文件。用ftpcount命令可以查看当前每个组的用户个数。显示信息如下:
Serviceclassall-2user(-1maximum)
最后,建议详细记载ftp登录,以防不测。
适度隔离保证安全
FTP被我们广泛应用,自建立后其主框架相当稳定,二十多年没有什么变化,但在Internet迅猛发展的形势下,其安全问题日益突出,因此对于FTP的使用首先应做到正确地配置FTP,防止系统文件被窃取或者目录下程序进程被启动。
其次,有条件的地方将FTP服务器与网络上的其他应用隔离,这样即便被攻击也不会影响整个系统。最后注意定期观察FTP服务器的运行情况,检查硬盘的大小,并做出相应处理。
上述对FTP服务器的安全性能分析在一定程度上缓解了FTP服务的安全问题,而RFC2228.txt中提出的FTP扩展,提供了强大的认证和集成,并引入新的可选命令、应答和文件传输加密,使得控制和数据连接中的安全性大大提高。