分享
 
 
 

Web服务器大扫除

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

一、概述

应该说,安装一个带有Apache的BSD或者Linux系统并让它开始处理页面请求并不困难。通常,从启动安装CD到得到一个运行系统之间的所有工作只需一个小时就可以全部完成。如果Web网站已经制作完毕,域名已经正确地指向IP地址,那么几秒钟之后一个新的Web网站就可以开始运行。由于这些工作是如此简单,即使没有Unix或者相关经验的人也能够运作自己的Web网站。

然而,许多Unix类操作系统的默认安装都会启动一大堆后台运行程序(它们通常被称作daemon),这些后台运行的程序有的有用,有的可能有用,有的完全没用。或者,你可能要接管一个原先由别人管理的系统,这个系统上安装了许多软件,但从未进行过清理。

此时,你可能会发现提供Web服务的系统上还运行着打印队列、邮件服务器(它可能被垃圾邮件发送者利用)、控制台鼠标程序以及其他许多软件,甚至你还有可能在早就拆除了显示器的Web服务器上发现一个图形视窗系统。

随着时间的推移,你对系统的性能要求会日益提高;与此同时,更多的安全漏洞会被发现并更正。本文主要面向初级Web管理员,介绍如何减少Web服务器上运行的多余进程,从而提高服务器效率、简化管理,并有望提高系统的安全性。

二、哪些程序在运行

要找出服务器当前运行着哪些程序,请执行“ps auxw”或者“ps -ef”。命令的输出结果中,最右边的信息是正在运行的进程名字。例如,下面是一个进程名字的清单:sshd,init,kpiod,khubd,klogd,atd,crond,inetd,gpm,xfs,xdm,kflushd,kupdated,kpiod,kswapd,ippd,iprofd,portmap,syslogd,xinit,esd,sawmill,panel,gmc,grekllm,imwheel,xmms,mdrecoveryd,lockd,rpciod,rpc.statd,apmd,automount,lpd,papd,sendmail,afpd,pptpd,identd,randomd,numlock,autofs,keytable,named,snmpd,xinetd 以及X。

但愿你的服务器没有运行这么多的进程——但也有可能比这更多。你或许会怀疑:“这又有什么关系呢?”,“内存和CPU利用率还很低,所以进程多少应该没有关系的!”,或者“既然默认安装方式认为应该启动这些程序,所以它应该是最合理的方案。”

但在作出判断之前,你应该好好想一想自己得花多少时间来管理服务器。如果服务器上运行的程序有那么多,你会乐意对所有这些运行着的程序逐一进行测试和检验吗?你会积极地关注安全公告,或者为了重要的安全补丁而定期地升级所有这些软件吗?你还能够快速地指出潜在的隐患所在吗?

那些被你遗忘但却在后台运行的程序可能会带来安全问题。例如,怀有恶意的用户可能会向这些程序发送请求,从而使得系统的效率降低;或者这些程序存在漏洞,入侵者能够利用这些漏洞危及系统安全或者登录系统。

如果你的Web服务器只用于提供Web服务,那么你应该把它清理一番。至于关闭各种服务的具体方法,你可以有许多种选择,例如你可以在启动时禁止这些服务,可以删除执行文件,还可以把某些软件包从系统彻底卸载。

三、必须运行的进程

那么,系统清理工作应该从哪里开始呢?这些系统上运行着的程序都有些什么用处?在过去的几年中,我曾经使用过各种各样的Unix类系统,看到了这些系统上运行着数量庞大但各不相同的进程。我得承认,我不清楚所有这些进程都是些什么或者为什么需要它们。因此,对你来说,你应该先决定自己需要些什么,这样会使问题更简单一点。列出一个系统运行的进程清单,然后开始检查自己是否需要它们,这一工作可能需要耗费不少时间。

毫无疑问,你肯定需要apache进程或httpd进程。此外,init进程也是不可缺少的——这个进程也被称为“一切进程之父”。init通常启动系统的多用户服务。另外,init还要启动getty供用户登录。不同的内核会启动各种不同的系统进程或者线程,它们在ps列出的结果中通常以加圆括号或者方括号的形式显示。但本文不讨论这些特殊的进程,也不准备讨论如何关闭它们。

接下来两个重要的进程是cron和syslogd。cron用于按照计划执行任务。通过crontab(或者/etc/crontab)配置cron,我们能够启动各种重要的系统任务,例如:每晚进行安全检查,生成Web网站分析报表,轮换旧的日志文件,以及进行备份。对于执行特定程序完成某个任务来说,cron可以避免让程序一直在内存中运行,它是很有用的。

syslogd是一个daemon,它监听着日志信息,通常还要把这些信息写入特定的文件(在/var/log/下)。一般地,Apache按照配置自己记录日志信息,但syslogd对于记录其他系统信息来说非常重要,比如登录企图、email活动以及其他许多信息。syslogd daemon在不同的系统上会有不同的名字,例如nsyslogd或者syslogd-ng。另外,系统还要运行klogd,这是一个为记录系统内核信息提供的daemon。

另外,你还要有一种让用户登录系统的方法。虽然getty已经运行,但它很可能配置成了仅供本地终端访问。因此,这里建议你运行sshd(作为一个独立的daemon运行,或由另外的程序调用)。sshd对于文件传输也很有用。

其余的程序通常没有持续运行的必要。这些经常被默认安装且持续运行的程序有很多,其中包括:inetd,atd,gpm(或者moused),apmd,lpd,sendmail以及portmap。

||||||四、不可运行的进程

inetd常常被称作“超级服务器”,它监听着网络连接,并根据配置中指定的要求启动相应的通信程序。inetd有许多类似的程序,它们经常被用来替代inetd,比如xinetd和tcpserver。inetd常常用于监听FTP、telnet和POP3连接。默认情况下,这三者都是不安全的,而且对于Web服务来说它们都不是必需的。(注意,inetd还能够提供其他一些简单的服务,比如显示时间和echo)。值得指出的是,许多操作系统提供的inetd配置文件没有启用任何选项(即,所有功能都被注释掉)。如果你确实想要使用inetd(或者类似的程序),请确保关闭了所有不需要的功能。

inetd还经常用于启动identd,但identd也可以作为一个独立的服务运行。identd(注意这是identd而不是inetd)主要用于返回运行该进程的用户的信息。有些人相信,对于跟踪和识别滥用系统、发垃圾邮件的人以及实现更好的身份认证来说,identd是必不可少的;但是,默认情况下identd是不安全的,因此它所报告的信息是不可完全信任的。通常情况下,我们可以认为identd并非必需,我曾经在没有任何ident服务的情况下成功地管理过许多Web服务器。

atd类似于cron,它们都具有按照计划执行任务的功能。因此,除非你一定要用到“at”功能,否则请不要使用atd——用cron替代它。

gpm(或者moused)是一个让我们在控制台屏幕上通过鼠标剪切和粘贴文本的程序。应该说这个功能很实用,但Web服务器真的需要这个功能吗?坐在控制台前面时,你会经常使用鼠标吗?

apmd是一个为那些基于高级电源管理(Advanced Power Management,APM)BIOS接口的系统提供的daemon。如果你愿意让服务器进入休眠或暂停模式,或者你需要监视电池使用情况,那么你可以使用apmd。实际上,apmd只对便携式机器和绿色环保的机器有用,对于一台必须24小时不间断运行的Web服务器来说,运行apmd是没有必要的。

lpd是一个打印机daemon,它主要通过管理打印队列来管理打印机工作。如果你不需要在服务器上安装持续稳定运行的打印机,lpd也是不应该运行的。如果你要打印一些东西,可以把它拷贝到其它机器上打印,或者临时地启动一下lpd(请确保它的配置正确,不可被外面的机器访问)。

Sendmail是一个MTA(mail transfer agent,邮件传输代理)。其他流行的MTA程序还包括Exim、qmail以及postfix。MTA程序可以作为邮件服务器使用,负责监视传入的email或者将email传递到其他的服务器。如果你的服务器不提供email服务——或者说它不是一个邮件服务器,那么sendmail也没有必要一直运行。如果配置不适当,sendmail可能被滥用。例如,垃圾邮件发送者可能会通过你的服务器发出垃圾邮件(有些管理员通过inetd运行MTA程序,这也是有必要关闭inetd的原因之一)。

但是,请不要删除MTA,系统仍旧需要它来向外发送email(你可以考虑配置MTA,使其不再监听网络)。有些管理员认为sendmail必须始终处于运行状态以便管理邮件队列。事实上,除非需要服务器处理的email数量非常巨大,否则你可以通过cron让sendmail一天运行几次以处理邮件队列(这并不意味着sendmail一天之内只发送几次email。sendmail将在首次被调用时尝试发送email——只有当遇到问题时,sendmail才会将邮件放入队列)。

portmap(或者rpc.portmap)是一个将RPC程序号转换成DARPA协议端口号的服务器。portmap主要用于辅助RPC类的服务,如NFS(Network File System)(rpcbind也和portmap相似)。因此,除非你使用NFS,否则一般无需运行portmap。系统中可能还有一些运行着的进程提供RPC或NFS服务,例如:nfsd,rpc.mountd,rpc.nfsd,rpc.statd 以及rpc.lockd。同样地,如果你不需要用到它们,则应该将它们关闭。

当然,系统中可能还运行着其它许多程序。xfs、fvwm、xinit和X都属于没有必要在Web服务器上运行的程序。

如果你使用webmin和Comanche之类的远程管理工具,你可能需要运行inetd或者其他daemon以便这些管理工具能够运行。另外,请不要忘了阅读这些管理工具的文档。通过软件手册、系统文档和搜索引擎(比如Google的Usenet Search)了解所有其他daemon,这将有助于你作出正确的决定。

五、禁止程序运行

要让程序在系统启动时就开始执行,两种常用的方法是通过/etc/rc以及通过System V类型的启动脚本。通常,如果你的系统是BSD系统,它将从/etc/rc启动;而大多数的Linux类系统使用/etc/init.d/(或/etc/rc.d/init.d,或其他类似名字的目录)下面的脚本。

例如,在某些Linux系统上,cron通过/etc/init.d/cron脚本启动,Apache通过/etc/init.d/httpd启动,syslogd通过/etc/init.d/syslogd启动,而sshd则通过/etc/init.d/sshd脚本启动。

一般地,这些System V脚本通过来自特定rc.d目录的符号连接运行。为了配置从哪个rc.d目录运行脚本,Linux系统提供了许多不同的工具,同时你也可以手工进行配置。应该存在一个包含所有实际启动脚本的目录,例如它可能是/etc/init.d/或者/etc/rc.d/rc.d。同时,对应每一个运行级别(runlevel)又有一个另外的目录,例如它们可能是/etc/rc2.d或者/etc/rc.d/rc2.d,这些目录中的文件通常是指向实际脚本文件的符号连接。标准的运行级别通常是2、3、4或5。在Linux平台上,你可以在/etc/inittab文件中搜索“initdefault”找出它的默认运行级别。

因此,用手工方法禁用某个启动脚本时,你只需删除相应的符号连接即可(忽略符号连接名字前面的“S”或“K”以及数字)。进行这方面管理的工具包括:update-rc.d,chkconfig,以及一些GUI应用。例如,执行“/usr/sbin/update-rc.d -f lpd remove”就可以删除lpd的启动符号连接。如果你的系统也有这些命令,要了解更多信息请参见它们的文档和手册。

单一的/etc/rc脚本就要简单得多,此时系统不是用多个脚本来启动各种不同的程序,而是只通过一个脚本启动。有时/etc/rc会调用另外一个脚本/etc/rc.local,后者会启动其他一些任务(有些使用/etc/rc的系统还可能用到System V风格的/etc/rc.d/脚本)。要在/etc/rc脚本内禁止某个daemon启动,只需注释掉启动该daemon的代码即可。

有些BSD系统会提供一个配置文件,如/etc/rc.conf,使用这个配置文件你可以避免编辑/etc/rc文件。例如,如果这个配置文件指定了“inetd=YES”,而你想禁止inetd在系统启动时自动启动,只需把这行内容改为“inetd=NO”即可。

六、卸载不需要的软件

彻底卸载那些不需要或者不使用的软件,系统会变得更容易管理。如果系统是用软件包管理器安装的(例如RPM或者Debian dpkg格式),直接卸载不需要的软件是一种很好的选择。例如,在一个使用.deb包格式的系统上,你可以用“dpkg --remove gpm”命令卸载gpm。

手工卸载软件就要复杂得多。例如,如果你不需要任何X服务器和X客户程序,此时你就得从/usr/X11R6/bin/等目录删除它们。有些完美主义者把所有不需要的工具、配置文件和程序都从系统中清理了出去,但我认为你没有必要做得如此彻底和极端。

判断哪些程序不再需要并保证这些程序不会在系统启动的时候自动运行,这需要不少时间。然而,即使你已经将这些软件配置成了不再启动,但它们可能还在运行之中。通过适当的System V脚本加上“stop”命令行选项,你可以关闭这些程序。(假设你还没有删除这些脚本,被删除的只是符号连接。)例如,要停止sendmail,你可以执行“/etc/rc.d/rc.d/sendmail stop”。当然,你还可以用ps找出PID,然后用kill关闭进程;或者,如果你的系统有killall命令,你可以用进程名字作为参数关闭进程。

如果你为了保证系统启动时,只有那些必需的程序启动、所有其他程序都没有启动,为此对系统作了重大修改,那么再次对系统进行测试是较为稳妥的做法。测试方法包括重新启动,或者关闭所有进程再执行适当的rc脚本启动各个进程,或者用init切换运行模式(或运行级别)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有