jash's blog

Subscribe to RSS feed

开始考试拉~

今天考的东西,一点都不会。真不知道该如何去考?最好老师可以告诉我们重点在那里。最好题目是一样的。
对于不会读书的人来说最最可怕的就是考试拉。每次都是提心吊胆的过每天。愿所有的神灵都可以保佑我考试顺利吧~

WEB专用服务器的安全设置

IIS的相关设置:
删除默认建立的站点的虚拟目录,停止默认web站点,删除对应的文件目录c:inetpub,配置所有站点的公共设置,设置好相关的连接数限制,

带宽设置以及性能设置等其他设置。配置应用程序映射,删除所有不必要的应用程序扩展,只保留asp,php,cgi,pl,aspx应用程序扩展。对

于php和cgi,推荐使用isapi方式解析,用exe解析对安全和性能有所影响。用户程序调试设置发送文本错误信息给客户。对于数据库,尽量采

用mdb后缀,不需要更改为asp,可在IIS中设置一个mdb的扩展映射,将这个映射使用一个无关的dll文件如C:WINNTsystem32inetsrvssinc.dll

来防止数据库被下载。设置IIS的日志保存目录,调整日志记录信息。设置为发送文本错误信息。修改403错误页面,将其转向到其他页,可防

止一些扫描器的探测。另外为隐藏系统信息,防止telnet到80端口所泄露的系统版本信息可修改IIS的banner信息,可以使用winhex手工修改或

者使用相关软件如banneredit修改。
对于用户站点所在的目录,在此说明一下,用户的FTP根目录下对应三个文件佳,wwwroot,database,logfiles,分别存放站点文件,数据库

备份和该站点的日志。如果一旦发生入侵事件可对该用户站点所在目录设置具体的权限,图片所在的目录只给予列目录的权限,程序所在目录

如果不需要生成文件(如生成html的程序)不给予写入权限。因为是虚拟主机平常对脚本安全没办法做到细致入微的地步,更多的只能在方法

用户从脚本提升权限:

ASP的安全设置:
设置过权限和服务之后,防范asp木马还需要做以下工作,在cmd窗口运行以下命令:
regsvr32/u C:\WINNT\System32\wshom.ocx
del C:\WINNT\System32\wshom.ocx
regsvr32/u C:\WINNT\system32\shell32.dll
del C:\WINNT\system32\shell32.dll
即可将WScript.Shell, Shell.application, WScript.Network组件卸载,可有效防止asp木马通过wscript或shell.application执行命令以及

使用木马查看一些系统敏感信息。另法:可取消以上文件的users用户的权限,重新启动IIS即可生效。但不推荐该方法。
另外,对于FSO由于用户程序需要使用,服务器上可以不注销掉该组件,这里只提一下FSO的防范,但并不需要在自动开通空间的虚拟商服务器

上使用,只适合于手工开通的站点。可以针对需要FSO和不需要FSO的站点设置两个组,对于需要FSO的用户组给予c:winntsystem32scrrun.dll

文件的执行权限,不需要的不给权限。重新启动服务器即可生效。
对于这样的设置结合上面的权限设置,你会发现海阳木马已经在这里失去了作用!

PHP的安全设置:
默认安装的php需要有以下几个注意的问题:
C:\winnt\php.ini只给予users读权限即可。在php.ini里需要做如下设置:
Safe_mode=on
register_globals = Off
allow_url_fopen = Off
display_errors = Off
magic_quotes_gpc = On [默认是on,但需检查一遍]
open_basedir =web目录
disable_functions =passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod
默认设置com.allow_dcom = true修改为false[修改前要取消掉前面的;]

MySQL安全设置:
如果服务器上启用MySQL数据库,MySQL数据库需要注意的安全设置为:
删除mysql中的所有默认用户,只保留本地root帐户,为root用户加上一个复杂的密码。赋予普通用户updatedeletealertcreatedrop权限的时

候,并限定到特定的数据库,尤其要避免普通客户拥有对mysql数据库操作的权限。检查mysql.user表,取消不必要用户的shutdown_priv,relo

ad_priv,process_priv和File_priv权限,这些权限可能泄漏更多的服务器信息包括非mysql的其它信息出去。可以为mysql设置一个启动用户,

该用户只对mysql目录有权限。设置安装目录的data数据库的权限(此目录存放了mysql数据库的数据信息)。对于mysql安装目录给users加上读

取、列目录和执行权限。

Serv-u安全问题:
安装程序尽量采用最新版本,避免采用默认安装目录,设置好serv-u目录所在的权限,设置一个复杂的管理员密码。修改serv-u的banner信息

,设置被动模式端口范围(4001—4003)
在本地服务器中设置中做好相关安全设置:包括检查匿名密码,禁用反超时调度,拦截“FTP bounce”攻击和FXP,对于在30秒内连接超过3次

的用户拦截10分钟。域中的设置为:要求复杂密码,目录只使用小写字母,高级中设置取消允许使用MDTM命令更改文件的日期。
更改serv-u的启动用户:在系统中新建一个用户,设置一个复杂点的密码,不属于任何组。将servu的安装目录给予该用户完全控制权限。建立

一个FTP根目录,需要给予这个用户该目录完全控制权限,因为所有的ftp用户上传,删除,更改文件都是继承了该用户的权限,否则无法操作

文件。另外需要给该目录以上的上级目录给该用户的读取权限,否则会在连接的时候出现530 Not logged in, home directory does not

exist。比如在测试的时候ftp根目录为d:soft,必须给d盘该用户的读取权限,为了安全取消d盘其他文件夹的继承权限。而一般的使用默认的s

ystem启动就没有这些问题,因为system一般都拥有这些权限的。

数据库服务器的安全设置

对于专用的MSSQL数据库服务器,按照上文所讲的设置TCP/IP筛选和IP策略,对外只开放1433和5631端口。对于MSSQL首先需要为sa设置一个强

壮的密码,使用混合身份验证,加强数据库日志的记录,审核数据库登陆事件的”成功和失败”.删除一些不需要的和危险的OLE自动存储过程(会

造成企业管理器中部分功能不能使用),这些过程包括如下:
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop
去掉不需要的注册表访问过程,包括有:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue
Xp_regenumvalues Xp_regread Xp_regremovemultistring
Xp_regwrite
去掉其他系统存储过程,如果认为还有威胁,当然要小心Drop这些过程,可以在测试机器上测试,保证正常的系统能完成工作,这些过程包括


xp_cmdshell xp_dirtree xp_dropwebtask sp_addsrvrolemember
xp_makewebtask xp_runwebtask xp_subdirs sp_addlogin
sp_addextendedproc
在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例可防止对1434端口的探测,可修改默认使用的1433端口。除去数据库的guest

账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。另外注意设置好各个数据库用户的

权限,对于这些用户只给予所在数据库的一些权限。在程序中不要用sa用户去连接任何数据库。网络上有建议大家使用协议加密的,千万不要

这么做,否则你只能重装MSSQL了。

第二部分 入侵检测和数据备份

§1.1 入侵检测工作

作为服务器的日常管理,入侵检测是一项非常重要的工作,在平常的检测过程中,主要包含日常的服务器安全例行检查和遭到入侵时的入侵检

查,也就是分为在入侵进行时的安全检查和在入侵前后的安全检查。系统的安全性遵循木桶原理,木桶原理指的是:一个木桶由许多块木板组

成,如果组成木桶的这些木板长短不一,那么这个木桶的最大容量不取决于长的木板,而取决于最短的那块木板。应用到安全方面也就是说系

统的安全性取决于系统中最脆弱的地方,这些地方是日常的安全检测的重点所在。

日常的安全检测

日常安全检测主要针对系统的安全性,工作主要按照以下步骤进行:
1.查看服务器状态:
打开进程管理器,查看服务器性能,观察CPU和内存使用状况。查看是否有CPU和内存占用过高等异常情况。
2.检查当前进程情况
切换“任务管理器”到进程,查找有无可疑的应用程序或后台进程在运行。用进程管理器查看进程时里面会有一项taskmgr,这个是进程管

理器自身的进程。如果正在运行windows更新会有一项wuauclt.exe进程。对于拿不准的进程或者说不知道是服务器上哪个应用程序开启的进程

,可以在网络上搜索一下该进程名加以确定[进程知识库:http://www.dofile.com/]。通常的后门如果有进程的话,一般会取一个与系统进程

类似的名称,如svch0st.exe,此时要仔细辨别[通常迷惑手段是变字母o为数字0,变字母l为数字1]
3.检查系统帐号
打开计算机管理,展开本地用户和组选项,查看组选项,查看administrators组是否添加有新帐号,检查是否有克隆帐号。
4.查看当前端口开放情况
使用activeport,查看当前的端口连接情况,尤其是注意与外部连接着的端口情况,看是否有未经允许的端口与外界在通信。如有,立即关

闭该端口并记录下该端口对应的程序并记录,将该程序转移到其他目录下存放以便后来分析。打开计算机管理==》软件环境==》正在运行任务[

在此处可以查看进程管理器中看不到的隐藏进程],查看当前运行的程序,如果有不明程序,记录下该程序的位置,打开任务管理器结束该进程

,对于采用了守护进程的后门等程序可尝试结束进程树,如仍然无法结束,在注册表中搜索该程序名,删除掉相关键值,切换到安全模式下删

除掉相关的程序文件。
5.检查系统服务
运行services.msc,检查处于已启动状态的服务,查看是否有新加的未知服务并确定服务的用途。对于不清楚的服务打开该服务的属性,查

看该服务所对应的可执行文件是什么,如果确定该文件是系统内的正常使用的文件,可粗略放过。查看是否有其他正常开放服务依存在该服务

上,如果有,可以粗略的放过。如果无法确定该执行文件是否是系统内正常文件并且没有其他正常开放服务依存在该服务上,可暂时停止掉该

服务,然后测试下各种应用是否正常。对于一些后门由于采用了hook系统API技术,添加的服务项目在服务管理器中是无法看到的,这时需要打

开注册表中的HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices项进行查找,通过查看各服务的名称、对应的执行文件来确定是否是后门

、木马程序等。
6.查看相关日志
运行eventvwr.msc,粗略检查系统中的相关日志记录。在查看时在对应的日志记录上点右键选“属性”,在“筛选器”中设置一个日志筛选

器,只选择错误、警告,查看日志的来源和具体描述信息。对于出现的错误如能在服务器常见故障排除中找到解决办法则依照该办法处理该问

题,如果无解决办法则记录下该问题,详细记录下事件来源、ID号和具体描述信息,以便找到问题解决的办法。
7.检查系统文件
主要检查系统盘的exe和dll文件,建议系统安装完毕之后用dir *.exe /s >1.txt将C盘所有的exe文件列表保存下来,然后每次检查的时候

再用该命令生成一份当时的列表,用fc比较两个文件,同样如此针对dll文件做相关检查。需要注意的是打补丁或者安装软件后重新生成一次原

始列表。检查相关系统文件是否被替换或系统中是否被安装了木马后门等恶意程序。必要时可运行一次杀毒程序对系统盘进行一次扫描处理。
8.检查安全策略是否更改
打开本地连接的属性,查看“常规”中是否只勾选了“TCP/IP协议”,打开“TCP/IP”协议设置,点“高级”==》“选项”,查看“IP安全

机制”是否是设定的IP策略,查看“TCP/IP”筛选允许的端口有没有被更改。打开“管理工具”=》“本地安全策略”,查看目前使用的IP安全

策略是否发生更改。
9.检查目录权限
重点查看系统目录和重要的应用程序权限是否被更改。需要查看的目录有c:;c:winnt;
C:winntsystem32;c:winntsystem32inetsrv;c:winntsystem32inetsrvdata;c:documents and
Settings;然后再检查serv-u安装目录,查看这些目录的权限是否做过变动。检查system32下的一些重要文件是否更改过权限,包括:cmd,

net,ftp,tftp,cacls等文件。
10.检查启动项
主要检查当前的开机自启动程序。可以使用AReporter来检查开机自启动的程序。

发现入侵时的应对措施

对于即时发现的入侵事件,以下情况针对系统已遭受到破坏情况下的处理,系统未遭受到破坏或暂时无法察觉到破坏先按照上述的检查步骤检

查一遍后再酌情考虑以下措施。系统遭受到破坏后应立即采取以下措施:
视情况严重决定处理的方式,是通过远程处理还是通过实地处理。如情况严重建议采用实地处理。如采用实地处理,在发现入侵的第一时间通

知机房关闭服务器,待处理人员赶到机房时断开网线,再进入系统进行检查。如采用远程处理,如情况严重第一时间停止所有应用服务,更改I

P策略为只允许远程管理端口进行连接然后重新启动服务器,重新启动之后再远程连接上去进行处理,重启前先用AReporter检查开机自启动的

程序。然后再进行安全检查。

以下处理措施针对用户站点被入侵但未危及系统的情况,如果用户要求加强自己站点的安全性,可按如下方式加固用户站点的安全:

站点根目录----只给administrator读取权限,权限继承下去。
wwwroot ------给web用户读取、写入权限。高级里面有删除子文件夹和文件权限
logfiles------给system写入权限。
database------给web用户读取、写入权限。高级里面没有删除子文件夹和文件权限

如需要进一步修改,可针对用户站点的特性对于普通文件存放目录如html、js、图片文件夹只给读取权限,对asp等脚本文件给予上表中的权限

。另外查看该用户站点对应的安全日志,找出漏洞原因,协助用户修补程序漏洞。

§1.2 数据备份和数据恢复

数据备份工作大致如下:
1. 每月备份一次系统数据。
2. 备份系统后的两周单独备份一次应用程序数据,主要包括IIS、serv-u、数据库等数据。
3. 确保备份数据的安全,并分类放置这些数据备份。因基本上采用的都是全备份方法,对于数据的保留周期可以只保留该次备份和上次备

份数据两份即可。

数据恢复工作:
1.系统崩溃或遇到其他不可恢复系统正常状态情况时,先对上次系统备份后发生的一些更改事件如应用程序、安全策略等的设置做好备份,恢

复完系统后再恢复这些更改。
2.应用程序等出错采用最近一次的备份数据恢复相关内容。

第三部分 服务器性能优化

§3.1 服务器性能优化

系统性能优化
整理系统空间:
删除系统备份文件,删除驱动备份,刪除不用的輸入法,刪除系统的帮助文件,卸载不常用的组件。最小化C盘文件。
性能优化:
删除多余的开机自动运行程序;减少预读取,减少进度条等待时间;让系统自动关闭停止响应的程序;禁用错误报告,但在发生严重错误时通知

;关闭自动更新,改为手动更新计算机;
启用硬件和DirectX加速;禁用关机事件跟踪;禁用配置服务器向导; 减少开机磁盘扫描等待时间;将处理器计划和内存使用都调到应用程序

上;调整虚拟内存;内存优化;修改cpu的二级缓存;修改磁盘缓存。

IIS性能优化
1、调整IIS高速缓存
HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\InetInfoParametersMemoryCacheSize
MemoryCacheSize的范围是从0道4GB,缺省值为3072000(3MB)。一般来说此值最小应设为服务器内存的10%。IIS通过高速缓存系统句柄、目录

列表以及其他常用数据的值来提高系统的性能。这个参数指明了分配给高速缓存的内存大小。如果该值为0,那就意味着“不进行任何高速缓存

”。在这种情况下系统的性能可能会降低。如果你的服务器网络通讯繁忙,并且有足够的内存空间,可以考虑增大该值。必须注意的是修改注

册表后,需要重新启动才能使新值生效。

2.不要关闭系统服务: “Protected Storage”

3.对访问流量进行限制
A.对站点访问人数进行限制
B.站点带宽限制。保持HTTP连接。
C.进程限制, 输入CPU的耗用百分比

4.提高IIS的处理效率
应用程序设置”处的“应用程序保护”下拉按钮,从弹出的下拉列表中,选中“低(IIS进程)”选项,IIS服务器处理程序的效率可以提高20%

左右。但此设置会带来严重的安全问题,不值得推荐。

5.将IIS服务器设置为独立的服务器
A.提高硬件配置来优化IIS性能
硬盘:硬盘空间被NT和IIS服务以如下两种方式使用:一种是简单地存储数据;另一种是作为虚拟内存使用。如果使用Ultra2的SCSI硬盘,可以

显著提高IIS的性能
B.可以把NT服务器的页交换文件分布到多个物理磁盘上,注意是多个“物理磁盘”,分布在多个分区上是无效的。另外,不要将页交换文件放

在与WIndows NT引导区相同的分区中
C.使用磁盘镜像或磁盘带区集可以提高磁盘的读取性能
D.最好把所有的数据都储存在一个单独的分区里。然后定期运行磁盘碎片整理程序以保证在存储Web服务器数据的分区中没有碎片。使用NTFS有

助于减少碎片。推荐使用Norton的Speeddisk,可以很快的整理NTFS分区。

6.起用HTTP压缩
HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。可

使用pipeboost进行设置。

7.起用资源回收
使用IIS5Recycle定时回收进程资源。

§3.2 服务器常见故障排除

1. ASP“请求的资源正在使用中”的解决办法:
该问题一般与杀毒软件有关,在服务器上安装个人版杀毒软件所致。出现这种错误可以通过卸载杀毒软件解决,也可尝试重新注册vbscript.dl

l和jscript.dll来解决,在命令行下运行:regsvr32 vbscript.dll 和regsvr32 jscript.dll即可。

2.ASP500错误解决办法:
首先确定该问题是否是单一站点存在还是所有站点存在,如果是单一站点存在该问题,则是网站程序的问题,可打开该站点的错误提示,把IE

的“显示友好HTTP错误”信息取消,查看具体错误信息,然后对应修改相关程序。如是所有站点存在该问题,并且HTML页面没有出现该问题,

相关日志出现“服务器无法加载应用程序‘/LM/W3SVC/1/ROOT‘。错误是 ‘不支持此接口‘”。那十有八九是服务器系统中的ASP相关组件出

现了问题,重新启动IIS服务,尝试是否可以解决该问题,无法解决重新启动系统尝试是否可解决该问题,如无法解决可重新修复一下ASP组件

:首先删除com组件中的关于IIS的三个东西,需要先将属性里的高级中“禁止删除”的勾选取消。
命令行中,输入“cd winnt\system32\inetsrv”字符串命令,单击回车键后,再执行“rundll32 wamreg.dll,CreateIISPackage”命令,接着

再依次执行“regsvr32 asptxn.dll”命令、“iisreset”命令,最后重新启动一下计算机操作系统,这样IIS服务器就能重新正确响应ASP脚本

页面了。

3. IIS出现105错误:
在系统日志中“服务器无法注册管理工具发现信息。管理工具可能无法看到此服务器” 来源:w3svc ID:105
解决办法:在网络连接中重新安装netbios协议即可,安装完成之后取消掉勾选。

4.MySQL服务无法启动【错误代码1067】的解决方法
启动MySQL服务时都会在中途报错!内容为:在 本地计算机 无法启动MySQL服务 错误1067:进程意外中止。
解决方法:查找Windows目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含
basedir,datadir这两个基本的配置。
[mysqld]
# set basedir to installation path, e.g., c:/mysql
# 设置为MYSQL的安装目录
basedir=D:/www/WebServer/MySQL
# set datadir to location of data directory,
# e.g., c:/mysql/data or d:/mydata/data
# 设置为MYSQL的数据目录
datadir=D:/www/WebServer/MySQL/data
注意,我在更改系统的temp目录之后没有对更改后的目录给予system用户的权限也出现过该问题。

5.DllHotst进程消耗cpu 100%的问题
服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。

查看任务管理器,可以发现是DLLHOST.EXE消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,奇怪的是,重新启动IIS

服务后一切正常,但可能过了一段时间后,问题又再次出现了。
直接原因:
有一个或多个ACCESS数据库在多次读写过程中损坏, MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其他线程只能等

待,IIS被死锁了,全部的CPU时间都消耗在DLLHOST中。
解决办法:
把数据库下载到本地,然后用ACCESS打开,进行修复操作。再上传到网站。如果还不行,只有新建一个ACCESS数据库,再从原来的数据库中导

入所有表和记录。然后把新数据库上传到服务器上。

6.Windows installer出错:
在安装软件的时候出现“不能访问windows installer 服务。可能你在安全模式下运行 windows ,或者windows installer 没有正确的安

装。请和你的支持人员联系以获得帮助” 如果试图重新安装InstMsiW.exe,提示:“指定的服务已存在”。
解决办法:
关于installer的错误,可能还有其他错误提示,可尝试以下解决办法:
首先确认是否是权限方面的问题,提示信息会提供相关信息,如果是权限问题,给予winnt目录everyone权限即可[安装完把权限改回来即可

]。如果提示的是上述信息,可以尝试以下解决方法:运行“msiexec /unregserver”卸载Windows

Installer服务,如果无法卸载可使用SRVINSTW进行卸载,然后下载windows

installer的安装程序[地址:http://www.newhua.com/cfan/200410/instmsiw.exe],用winrar解压该文件,在解压缩出来的文件夹里面找到ms

i.inf文件,右键单击选择“安装”,重新启动系统后运行“msiexec /regserver”重新注册Windows Installer服务。

第四部分 服务器管理

§4.1 服务器日常管理安排

服务器管理工作必须规范严谨,尤其在不是只有一位管理员的时候,日常管理工作包括:
1.服务器的定时重启。每台服务器保证每周重新启动一次。重新启动之后要进行复查,确认服务器已经启动了,确认服务器上的各项服务均恢

复正常。对于没有启动起来或服务未能及时恢复的情况要采取相应措施。前者可请求托管商的相关工作人员帮忙手工重新启动,必要时可要求

让连接上显示器确认是否已启动起来;后者需要远程登陆上服务器进行原因查找并根据原因尝试恢复服务。
2.服务器的安全、性能检查,每服务器至少保证每周登陆两次粗略检查两次。每次检查的结果要求进行登记在册。如需要使用一些工具进行检

查,可直接在e:tools中查找到相关工具。对于临时需要从网络上找的工具,首先将IE的安全级别调整到高,然后在网络上进行查找,不要去任

何不明站点下载,尽量选择如华军、天空等大型网站进行下载,下载后确保当前杀毒软件已升级到最新版本,升级完毕后对下载的软件进行一

次杀毒,确认正常后方能使用。对于下载的新工具对以后维护需要使用的话,将该工具保存到e:tools下,并在该目录中的readme.txt文件中做

好相应记录,记录该工具的名称,功能,使用方法。并且在该文件夹中的rar文件夹中保留一份该工具的winrar压缩文件备份,设置解压密码。
3.服务器的数据备份工作,每服务器至少保证每月备份一次系统数据,系统备份采用ghost方式,对于ghost文件固定存放在e:ghost文件目录

下,文件名以备份的日期命名,如0824.gho,每服务器至少保证每两周备份一次应用程序数据,每服务器至少保证每月备份一次用户数据,备

份的数据固定存放在e:databak文件夹,针对各种数据再建立对应的子文件夹,如serv-u用户数据放在该文件夹下的servu文件夹下,iis站点数

据存放在该文件夹下的iis文件夹下。
4.服务器的监控工作,每天正常工作期间必须保证监视所有服务器状态,一旦发现服务停止要及时采取相应措施。对于发现服务停止,首先检

查该服务器上同类型的服务是否中断,如所有同类型的服务都已中断及时登陆服务器查看相关原因并针对该原因尝试重新开启对应服务。
5.服务器的相关日志操作,每服务器保证每月对相关日志进行一次清理,清理前对应的各项日志如应用程序日志、安全日志、系统日志等都应

选择“保存日志”。所有的日志文件统一保存在e:logs下,应用程序日志保存在e:logsapp中,系统程序日志保存在e:logssys中,安全日志保

存在e:logssec中。对于另外其他一些应用程序的日志,也按照这个方式进行处理,如ftp的日志保存在e:logsftp中。所有的备份日志文件都以

备份的日期命名,如20050824.evt。对于不是单文件形式的日志,在对应的记录位置下建立一个以日期命名的文件夹,将这些文件存放在该文

件夹中。
6.服务器的补丁修补、应用程序更新工作,对于新出的漏洞补丁,应用程序方面的安全更新一定要在发现的第一时间给每服务器打上应用程序

的补丁。
7.服务器的隐患检查工作,主要包括安全隐患、性能等方面。每服务器必须保证每月重点的单独检查一次。每次的检查结果必须做好记录。
8.不定时的相关工作,每服务器由于应用软件更改或其他某原因需要安装新的应用程序或卸载应用程序等操作必须知会所有管理员。
9.定期的管理密码更改工作,每服务器保证至少每两个月更改一次密码,对于SQL服务器由于如果SQL采用混合验证更改系统管理员密码会影响

数据库的使用则不予修改。

相关建议:对每服务器设立一个服务器管理记载,管理员每次登陆系统都应该在此中进行详细的记录,共需要记录以下几项:登入时间,退出

时间,登入时服务器状态[包含不明进程记录,端口连接状态,系统帐号状态,内存/CPU状态],详细操作情况记录[详细记录下管理员登陆系统

后的每一步操作]。无论是远程登陆操作还是物理接触操作都要进行记录,然后将这些记录按照各服务器归档,按时间顺序整理好文档。
对于数据备份、服务器定时重启等操作建议将服务器分组,例如分成四组,每月的周六晚备份一组服务器的数据,每周的某一天定时去重启一

组的服务器,这样对于工作的开展比较方便,这些属于固定性的工作。另外有些工作可以同步进行,如每月一次的数据备份、安全检查和管理

员密码修改工作,先进行数据备份,然后进行安全检查,再修改密码。对于需要的即时操作如服务器补丁程序的安装、服务器不定时的故障维

护等工作,这些属于即时性的工作,但是原则上即时性的工作不能影响固定工作的安排。

§4.2 管理员日常注意事项

在服务器管理过程中,管理员需要注意以下事项:
1.对自己的每一次操作应做好详细记录,具体见上述建议,以便于后来检查。
2.努力提高自身水平,加强学习。

江湖经验:喝酒的学问技巧

来源:天涯社区

规矩一,酒桌上虽然“感情深,一口闷;感情浅,舔一舔”但是喝酒的时候决不能把这句话挂在嘴上。
    
    规矩二,韬光养晦,厚集播发,切不可一上酒桌就充大。
  
    规矩三,领导相互喝完才轮到自己敬。
  
    规矩四,可以多人敬一人,决不可一人敬多人,除非你是领导。
  
    规矩五,自己敬别人,如果不碰杯,自己喝多少可视乎情况而定,比如对方酒量,对方喝酒态度,切不可比对方喝得少,要知道是自己敬人。
  
    规矩六,自己敬别人,如果碰杯,一句,我喝完,你随意,方显大肚。
  
    规矩七,自己职位卑微,记得多给领导添酒,不要瞎给领导代酒,就是要代,也要在领导确实想找人代,还要装作自己是因为想喝酒而不是为了给领导代酒而喝酒。比如领导甲不胜酒力,可以通过旁敲侧击把准备敬领导甲的人拦下。
  
    规矩八,端起酒杯(啤酒杯),右手扼杯,左手垫杯底,记着自己的杯子永远低于别人。自己如果是领导,知趣点,不要放太低,不然怎么叫下面的做人?
  
    规矩九,如果没有特殊人物在场,碰酒最好按时针顺序,不要厚此薄彼。
  
    规矩十,碰杯,敬酒,要有说词,不然,我tmd干吗要喝你的酒?
  
    规矩十一,桌面上不谈生意,喝好了,生意也就差不多了,大家心里面了了然,不然人家也不会敞开了跟你喝酒。
  
    规矩十二,不要装歪,说错话,办错事,不要申辩,自觉罚酒才是硬道理。
  
    规矩十三,假如,纯粹是假如,遇到酒不够的情况,酒瓶放在桌子中间,让人自己添,不要傻不垃圾的去一个一个倒酒,不然后面的人没酒怎么办?
  
    规矩十四,最后一定还有一个闷杯酒,所以,不要让自己的酒杯空着。跑不了的~

    规矩十五,注意酒后不要失言,不要说大话,不要失态,不要吐沫横飞,筷子乱甩,不要手指乱指,喝汤噗噗响,不要放屁打嗝,憋不住去厕所去,没人拦你。
  
    规矩十六,不要把“我不会喝酒”挂在嘴上(如果你喝的话),免得别人骂你虚伪,不管你信不信,人能不能喝酒还真能看出来。
  
    规矩十七,领导跟你喝酒,是给你face,不管领导怎么要你喝多少,自己先干为敬,记着啊,双手,杯子要低。
  
    规矩十八,花生米对喝酒人来说,是个好东西。保持清醒的头脑,酒后嘘寒问暖是少不了的,一杯酸奶,一杯热水,一条热毛巾都显得你关怀备至。
  

    如果你酒量不怎么样,给你一些诀窍:
  
    1、不要主动出击,实行以守为攻战略;
  
    2、桌前放两个大杯,一杯放白酒,一杯放矿泉水,拿小酒盅干杯,勤喝水,到酒桌上主客基本都喝8分醉时,可以以水代酒,主动出击;(这条不建议用)
  
    3、干杯后,不要马上咽下去,找机会用餐巾抹嘴,把酒吐餐巾里;(适用女性)
    4、上座后先吃一些肥肉类、淀粉类食品垫底,喝酒不容易醉;
  
    5、掌握节奏,不要一下子喝得太猛;
  
    6、不要几种酒混着喝,特别容易醉;
  
    7、领导夹菜时,千万不要转酒桌中间的圆盘,领导夹菜你转盘是酒桌上大忌;
  
    8、喝到六分醉时,把你面前的醋碟中的醋喝下,再让服务员添上……
  
    9.每次干杯时,倒满,然后在喝前假装没有拿稳酒盅,尽量洒出去一些,这样每次可以少喝进去不少。

再来讲几条通用的~~
  
  少喝酒技术之一:若非必要,决不主动出击;情况允许的条件下,多出去走动走动(至于出去干嘛,随你选,WC也可,扣吐也可,打电话也可等等,放心,你出去的时间越久,别人喝的越多),到你再次入座时,如果有人挑衅你,端起大杯吓唬他~~
  
  如果是在南方,最好在旁边放个可以盛酒的器物,比如烟筒,茶杯最好要两个,一个用来不经意间吐酒,衣服最好穿深色的,长袖,把酒往自己袖口里吐,上万说的吐在餐纸那条实践中很不中用,容易穿帮,吐在自己衣袖内就比较方便了大不了回去洗洗。
  还要记住,就算自己不喝茶,也不要杯浓茶摆着,并且不要太满,以方便一次吐一小口进去。

  第二:吐酒技巧,除非是到厕所等没人的地方去,否则一定不要一次性把大口的酒吐完,容易穿帮,要小口小口的分批吐。
 
 技巧三:而且的饭碗底下一定要有个小托盘,不要把它拿掉,是好东西,上面说的那条餐纸抹嘴吐酒虽在实践中不管用,但可以转化成不经意间把餐纸垫付在下面,然后再把酒故意的一次晃泼一点。

  技巧四:敬酒时在多说话,说话期间要把手一次次的抖动,把酒抖掉一些,方便的时候,就起身走过去,一表示亲敬,二是为了走过期间,把酒又晃泼一些~~`

用源码包安装php-4.4.0+mysql-4.1.9+apache-2.0.54

操作环境:(Redhat linux 9.0)
主要讲如何用源码包安装php4.4.0+mysql4.1.9+apache-2.0.54,这些版本
其中我建议初学者安装最好用源码包编译这样相对比较稳定。
目前你可以去mysql,php,apache 网站下载最新最稳定的版本;我讲的是最简单的安装操作;也就是说让一个新手,能建一个支持由apache 来运行的简单的网站,并支持php和mysql和各种语言 ;

假如你对apache熟悉的情况下,可以更多的关心扩展功能,比如对asp, jsp的支持等。
可以去apache官方网站看下手册

一、如果你原来是采用rpm包安装的apache和php以及mysql,现在可以完全卸掉它。我们要用rpm -qa 这个命令,查询我们安装过的相应的php、mysql以及apache的RPM,然后把这些包一个一个的卸掉
1. 卸载mysql ;

[root@bugkill root]# rpm -qa | grep mysql
libdbi-dbd-mysql-0.6.5-7
php-mysql-4.3.3-6
mysql-3.23.58-4
mysql-bench-3.23.58-4
mysql-server-3.23.58-4
mysql-devel-3.23.58-4
上面是我系统里有的,呵呵安装的时候看你需要什么服务了,反正各种系统上是不一样的
[root@bugkill root]#

卸载过程建议:最好从最下面的一个包开始,因为有些东西是有顺序的。所以这是要注意的。
在这里,我们应该先应该把mysql-devel-3.23.58-4卸掉,然后才是mysql-server-3.23.58-4等, 要一个一个的来;

方法是:
[root@bugkill root]#rpm -e mysql-devel

再举一例:比如我们想卸载php-mysql-4.3.3-6,应该用下面的办法

[root@bugkill root]#rpm -e php-mysql

如果有卸不掉的,就是有顺序,比如和php相关的,当然要先卸php的了;

2.卸载apache ,和卸载mysql的方法是一样的。

[root@bugkill root]# rpm -qa | grep httpd
redhat-config-httpd-1.1.0-5
httpd-devel-2.0.47-10
httpd-manual-2.0.47-10
httpd-2.0.47-10

3.卸载php,和mysql的方法是一样的;
[root@bugkill root]# rpm -qa | grep php
php-mysql-4.3.3-6
php-4.3.3-6
php-xmlrpc-4.3.3-6
php-imap-4.3.3-6
php-pgsql-4.3.3-6
php-devel-4.3.3-6
php-ldap-4.3.3-6
php-snmp-4.3.3-6

注意:如果有卸不掉的包,应该加参数来卸载,比如我们卸载php-snmp-4.3.3-6,有困难,就要用找出相依赖的包,先卸掉那个包,然后再来卸这个包。可能有实在也卸不掉的。应该用--nodeps这个参数。但是如果实在卸载不掉,那也没必要非得卸载。编译是可以的
[root@bugkill root]# rpm -e php-snmp-4.3.3-6 –nodeps

二、通过源码包安装mysql
========================================================
1.下载:当前版本是mysql-4.1.9 ,比如我们在/usr/local目录下建一个临时的安装目录mysql,把下载下来的mysql-4.1.9.tar.gz,放到/usr/local/mysql/目录中;

[root@bugkill root]# mkdir /usr/local/mysql

http://www.mysql.com/get/Downloads/....ihostunit.com/

2.解压、编译和安装:

1]解压
[root@bugkill root]# cd /usr
[root@bugkill usr]# cd /local/mysql

[root@bugkill mysql]# ls
mysql-4.1.9.tar.gz

[root@bugkill mysql]#tar zxvf mysql-4.1.9.tar.gz

2]编译和安装:这个地方注意的是,我们要把mysql-4.1.9安装到我们指定的目录中,为了系统和安全和优化,建议把自己用源码包安装的服务器类软件都放在/usr/local 目录里。
[root@bugkill mysql]# cd mysql-4.1.9
[root@bugkill mysql-4.1.9]#
./configure --prefix=/usr/local/mysql --with-mysqld-user=bugkill --with-extra-charsets=all --with-unix-socket-path=/usr/local/mysql/var/mysql.sock

[注]关于configure的选项的一点说明:

--prefix=/opt/mysql 把mysql-4.1.9指定安装到/usr/local/mysql目录中;
--with-extra-charsets=all 对多语言的支持;
--with-unix-socket-path=/usr/local/mysql/var/mysql.sock 这个是指定mysql服务器启动后,联机套接字文件所处的位置和文件名,也就是说,如果mysql服务器成功启动后,就能在/usr/local/mysql/var目录中看到mysql.sock文件。如果看不到,肯定是mysql启动不了。
--with-mysqld-user=bugkill 这个是让mysql服务器也能让系统中普通用户bugkill也能启动mysql服务器。你也可以把bugkill换成你的系统中已经存在的普通用户,比如您的系统中已经存在hancs这个用户,那就把bugkill替换成hancs就行了。用普通用户来启动mysql的好处是:mysql的进程会自己死掉自动退出。当然root用户也可以,不过有时mysql有些进程死了,但不会自动退出,root自己也杀不掉。所以用普通用户就有这样的好处,大多不会出现mysql进程已死,但不会退出的情况;

[root@bugkill mysql-4.1.9]# make

[root@bugkill mysql-4.1.9]# make install

这样就安装完了

3]配制mysql:安装只是第一步,我们还要对mysql进行相应的配制;

一般的情况下mysql要找配制文件my.cnf,位置在/etc目录下,所以我们得把文件my.cnf文件放到/etc/目录下。让mysql服务器启动时能找到它。

我们安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,比如my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf
,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。一般的情况下,my-medium.cnf这个配制文件就可以了;

进入/usr/local/mysql这个目录,看一下是不是已经安装好了?

[root@bugkill mysql-4.1.9]# cd /usr/local/mysql/
[root@bugkill mysql]# ls
bin include info lib libexec man mysql-test share sql-bench

我们把/usr/local/mysql/share/mysql这个目录下的my-medium.cnf,复制为my.cnf到/etc目录下。
[root@bugkill mysql-4.1.9]# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

还得创造MySQL授权表, 否则数据库也是启动不了。mysql_install_db,这个命令的用途就是做这个的。mysql的命令都安装到了/usr/local/mysql/bin这个目录中。

[root@bugkill mysql-4.1.9]# /usr/local/mysql/bin/mysql_install_db

运行mysql_install_db命令过后,我们查看/usr/local/mysql就会发现,有个var的目录。这个目录,就是用来装所有数据库的位置,比如我们创建了bugkill的数据库后,就会在/usr/local/mysql/var目录中有bugkill的目录。

4]启动mysql服务器,看下好了没,有时会出现权限方面的错误。

mysql服务器启动,应该是/usr/local/mysql/share/mysql目录中的 mysql.server
启动方法是:
[root@bugkill mysql-4.1.9]# /usr/local/mysql/share/mysql/mysql.server start

启动过后,我们要查看mysql是否启动了,应该用下面的命令;

[root@bugkill mysql-4.1.9]# ps -aux | grep mysqld

如果出现的仅仅是如下的一行,那mysql是没有启动成功。

root 3345 0.0 0.1 5812 648 pts/2 S 17:41 0:00 grep mysqld

我们如何查看错误信息呢?在哪里查看呢?应该到/usr/local/mysql/var目录中去找一个带有.err后缀的文件;
[root@bugkill var]# cd /usr/local/myql/var
[root@bugkill var]# more *.err

可能会出现存在下面的错误信息:

031203 14:49:10 mysqld started
031203 14:49:10 Can't start server : Bind on unix socket: Permission denied
031203 14:49:10 Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
031203 14:49:10 Aborting

031203 14:49:10 /usr/local/mysql/libexec/mysqld: Shutdown Complete

031203 14:49:10 mysqld ended

其实这是权限方面的事,我们把权限设置一下就OK了。我们要设置的权限是/usr/local/mysql/var的目录。要设置为777。

方法是:
[root@bugkill mysql-4.1.9]# chmod 755 /usr/local/mysql/var
另外我们要用beinan这个用户来启动mysqld服务器,当然也得改变一下 /usr/local/mysql/var的属性

[root@bugkill mysql-4.1.9]# chown -R bugkill:bugkill /usr/local/mysql/var

[root@bugkill mysql-4.1.9]# su bugkill

然后再重启mysql服务器。

[root@bugkill mysql-4.1.9]#
/usr/local/mysql/share/mysql/mysql.server start

[root@bugkill mysql-4.1.9]# ps -aux | grep mysql


5]为了让mysql也能让我们刚才编译是指定的普通用户bugkill也能启动mysql服务器。所以我们还要把/usr/local/mysql目录归属到bugkill这个用户手下,在这里,我们要用到chown命令。

[root@bugkill mysql-4.1.9]# chown -R bugkill:bugkill /usr/local/mysql/

如果您编译时,比如用的是系统中已经存在的hancs用户,应该是下面的办法,
[root@bugkill mysql-4.1.9]# chown –R hancs:hancs /usr/local/mysql/

至此mysql已经编译安装完成,下面我们要介绍一点mysql的基本管理,以及最基本的用法。如果您想学的更多的,应该找一下mysql的手册.

3.mysql的一点用法,最基础的的基础



1]如何创建mysqld数据库的管理用户??

数据库安装好后,我们应该为mysql数据库创建一个管理帐号。要把root用户设置为管理员,我们应该运行下面的命令;

[root@bugkill mysql-4.1.9]#
/usr/local/mysql/bin/mysqladmin -u root password 198009
[root@bugkill mysql-4.1.9]#
通过上面的命令,我们可以知道,mysql数据库的管理员是root,密码是198009。

2]如何进入mysql数据库?以mysql数据库管理员root,密码为198009为例;

[root@bugkill mysql-4.1.9]# /usr/local/mysql/bin/mysql -uroot -p198009

输出上面的命令后,出现的是如下的提示;

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>;

注意:操作这些命令的时候,应该把mysqld服务器打开。这些新手兄弟早就知道了吧:)
3]如何在数据库中操作命令呢,我想这是mysql手册都有的,我主要说几个要注意的地方。其实我也会不了几个命令。如果自己想学的弟兄,也不是什么难事;在windows中操作过mysql的,其实在这里也是一样的,mysql是跨平台的数据库,用法都是相同的。


1]查看mysql中都有哪些数据库?
代码:
mysql>; show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)

mysql>;

在mysql安装好,设置好管理员后,第一次进入系统,我们用show databases;命令查看数据库的列表,发现有两个数据库,mysql和test,这是系统自建的.


三、安装apache-2.0.54

1.下载:版本是httpd-2.0.54,比如我们在/usr/local目录下建一个临时的安装目录apache,把下载下来的httpd-2.0.54.tar.gz,放到/usr/local/apache/目录中;


也可以wget 后面是你要下载的网址
2.解压:

[root@bugkill local]# cd /usr/local/apache
[root@bugkill apache]# ls

mysql-4.1.9 httpd-2.0.54.tar.gz mysql-4.1.9.tar.gz
[root@bugkill apache]# tar zxvf httpd-2.0.54.tar.gz

3.编译:
[root@bugkill apache]# cd httpd-2.0.54

[root@bugkill httpd-2.0.54]# ./configure --prefix=/usr/local/apache --enable-track-vars --enable-cgi --with-config-file-path=/usr/local/apache/conf

解释:
--prefix=/opt/apache 指定把apahce安装到/usr/local/apache目录中;
--enable-cgi 支持CGI;
--with-config-file-path=/usr/local/apache/conf 指定把apache的配制文件放在/usr/local/apache/conf中;比如httpd.conf配制文件就在这个目录中;
--enable-track-vars 为启动cookie的get/post等追踪功能

如果需要更多的选项,可能通过下面的命令来查看;

[root@bugkill httpd-2.0.54]# ./configure --help

下一步就是make 和make install

[root@bugkill httpd-2.0.54]# make

[root@bugkill httpd-2.0.54]# make install

安装完成后,会在/usr/local目录下生成/usr/local/apache

4.启动apache;如果编译成功后,我们首先想到的是如何启动apache,在这里,我们要明白apache的守护进程是 /opt/apache/bin目录中 apachectl ;

启动apache守护进程;
[root@bugkill httpd-2.0.54]# /usr/local/apache/bin/apachectl start

打开浏览器,输入 http://localhost ;就能看到一个apache的欢迎页面了,这表示我们已经成功解决了apache的安装。
5.配制apache,我只做简单的说明,一个网站能简单运行起来就OK

1]配制文件是/usr/local/apache/conf/httpd.conf,如果是用rpm包安装的,应该在/etc/httpd/conf中,如果是其它方法安装的,用locate httpd.conf或find来查找。

2]编译安装的apache默认存放主页的位置应该是/usr/local/apache/htdocs


3]改配制文件时,我们要对原文件进行备份.

[root@bugkill httpd-2.0.54]# cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.confBAK

3.一些重要配制选项的说明:


ServerRoot "/usr/local/apache"
[注]这是ServerRoot指定apache程序所在的的目录,比如日志文件、配制文件等目录,这个不要改动。


Listen 80 [注]apache 默认端口80,如果您想改在别的端口访问,就改一下。最好还是不要改了。比如我要改为8080,那访问网址时,应该用如下的格式

http://10.0.2.30:8080 ;



ServerAdmin root@localhost 注:在这里,把管理员的信箱放上去,比如我的管理信箱是 bugkill@ioz.ac.cn 那就改这句为

ServerAdmin bugkill@ioz.ac.cn




#ServerName new.host.name:80 注:前面有#号就是注销掉了,我们要在下面加一行。比如我没有域名,我就用自己本地机的IP设置为10.0.2.30,所以我在这里就设置了相同的;应该是:当然,这个得与自己机器所设置的IP地址一致,在这里,我的网卡的IP地址,我已经设置成了10.0.2.30

ServerName 10.0.2.30:80



DocumentRoot "/usr/local/apache/htdocs" 这个是存放网页的目录,也就是说,我们应该把网页的目录指定到哪里,这样当访问网址时,就调用这个目录的文件。比如我把存放网页的目录指定到了/usr/local/apache/htdocs,那应该这样写

DocumentRoot "/usr/local/apache/htdocs "

<Directory "/usr/local/apache/htdocs ">; 注:这句应该和DocumentRoot 的目录保持一致。比如我在上面设置的是/usr/local/apache/htdocs,那在这句中,也应该用这/usr/local/apache/htdocs

也就是:
<Directory "/usr/local/apache/htdocs ">;

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

</Directory>;



AddDefaultCharset ISO-8859-1
注:这句是指定网页的默认语言的,如果网页出乱中文乱码,应该改AddDefaultCharset 后面的值为GB2312。也就是改成下面这样的。

AddDefaultCharset GB2312


找到下面的一行在后面加上index.php ,让网站的默认页是index.php也行;

DirectoryIndex index.html index.html.var index.php

其它的都默认就好了,这是最简单的了。其它的也不要改动什么,可以研究下。比如设置请求时间,进程数,这些都比较简单,改一下数字就行了。还有就是设置log存放位置,里面也有选项,其实看一下就明白了,如果我们以实践为基础的话,想把LOG文件放在哪,就放在哪。还有cgi的存放位置等,也可以自己定义;
配制好后,我们就重启apache后,我们就进行相应的处事处事阶段,比如我们要设置存放主页的目录等。

比如我们上面已经把主页目前设置为/usr/local/apache/htdocs,那我们就应该建一个目录到/usr/local/apache/htdocs中
[root@bugkill htodcs]# mkdir grouphome
[root@bugkill htodcs]# chmod 755 grouphome
然后我们把index.html的文件放入到/usr/local/apache/htdocs/grouphome目录中的时候,可能访问不到的情况,这时不要忘记设置权限。
[root@bugkill htodcs]# chmod -R 755 /usr/local/apache/htdocs/grouphome
然后就重启apache的守护进程httpd

[root@bugkill htodcs]# /usr/local/apache/bin/apachectl restart

查看是否已经启动了apache服务器??

[root@bugkill htodcs]# ps aux | grep httpd


在浏览器的地址栏中输入10.0.2.30 或者是localhost,这样应该能看到页面了

注:如果是通过root用户,或者其它用户把相应的网站文件复制到网站存放的目录下的,要改变网站存放目录中所有文件的权限,就是上面所说的chmod -R 755 目录名,OK

四、安装php

1.下载php的版本php-4.4.0,可以自己选下载地址还是放到/usr/local/php下面
在/usr/local下建立文件夹php,不要忘记看有权限没。

2.解压:
[root@bugkill php]# ls
php-4.4.0.tar.bz2

[root@bugkill php]# tar zxvf php-4.4.0.tar.bz2

3.编译和安装:注意,本文是通过动态编译安装的php;

[root@bugkill php]# cd php-4.4.0
[root@bugkill php]#
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --enable-track-vars --enable-force-cgi-redirect --with-config-file-path=/usr/local/php/etc

一点说明:

--prefix=/usr/local/php 指定把php-4.4.0安装到/usr/local/php目录中;
--with-mysql=/usr/local/mysql 指定mysql数据服务器安装的位置;
--with-apxs2=/usr/apache/bin/apxs 这是加入apache中为DSO模块的位置;
-enable-track-vars 为启动cookie的get/post等追踪功能
--with-config-file-path=/usr/local/php/etc 指定php的配制文件存放的目录是/usr/local/php/etc目录,我们安装完成后,也要把php.ini复制到这个目录中来。


安装:

[root@bugkill php-4.4.0]# make

[root@bugkill php-4.4.0]# make install

复制php.ini-dist为php.ini,并存放到/usr/local/php/etc/目录下

[root@bugkill php-4.4.0]# cp php.ini-dist /usr/local/php/etc/php.ini

编辑/usr/local/php/etc/php.ini文件,找到如下的一行
;default_charset = "iso-8859-1"
在这行下面加一行
default_charset = "gb2312"

4.更改apache的配制文件:得加一行,目的是让apache能解释php程序。
找到#AddType application/x-tar .tgz 这行,在下面加一行。前面不要加#号。

AddType application/x-httpd-php .php


找到下面一行在后面加上index.php,这表示网站的默认页也能够为index.php

DirectoryIndex index.html index.html.var index.php

注意:改变了http.conf后,要重启apache服务器,否则不会生效!!


5]然后我们在网站存放的目录下建一个index.php的文件。我们还是用前面apache自己指定网站存放的位置,/usr/local/apache/htdocs/目录。在这个目录中建一个文件index.php,内容是如下的

<? phpinfo(); ?>;

然后改变这个文件的权限

chmod 755 index.php

在浏览器中打入 http://localhost/index.php ;,就能看到php的信息了。如果还是出现的是 <? phpinfo(); ?>; 字样的页面,那就是没有成功 ,可能是您改变了apache的配制文件,忘记了重启apache服务器了,要重启一下试试看。


把apache mysql php 配制好后,就重启httpd 和mysql 服务.


———————————————————————————————————————
在增加一个apache服务器实现用户验证

apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。大家只要跟着我一步步做下来就应该能轻松实现用户验证。


第1步
我们编辑httpd.conf 先找到
<Directory “/usr/local/apache/htdocs”>;
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>;

在下面添加
Alias /phpmyadmin "/usr/local/apache/htdocs/phpmyadmin"
<Directory "/usr/local/apache/htdocs/phpmyadmin">;
AllowOverride AuthConfig #表示进行身份验证
Options Indexes MultiViews
Order allow,deny
Allow from all
</Directory>;

#AllowOverride AuthConfig 表示进行身份验证 这是关键的设置

第2步

在/usr/local/apache/htdocs/phpmyadmin创建.htaccess文件
vi /usr/local/apache/htdocs/phpmyadmin/.htaccess
AuthName " haoyufu share web"
AuthType Basic
AuthUserFile /usr/local/apache/htdocs/phpmyadmin/.htpasswd
require valid-user

#AuthName 描述,随便写
#AuthUserFile /usr/local/apache/htdocs/.htpasswd
#require valid-user 或者 require user haoyufu 限制是所有合法用户还是指定用户

#密码文件推荐使用.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一点。

第4步

就是创建apache的验证用户 (这一步你首先要找到你安装apache时候的.htpasswd这个文件)我的机器是安装在/usr/local/apache/conf/bin/

进到这个目录下执行./htpasswd -c /usr/local/apache/htdocs/phpmyadmin/.htpasswd webadmin
webadmin是你想用的用户名
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数

如果你们想修改密码,可以如下

htpasswd -m .htpasswd webadmin

第5步:

ok,重启apache服务,然后访问 http://你的网站地址/phpmyadmin 如果顺利的话,应该能看到一个用户验证的弹出窗口,只要填入第4步创建的用户名和密码就行

后话,为了服务器的性能,一般不推荐使用AllowOverride AuthConfig或者AllowOverride ALL,因为这会使服务器会不断的去寻找.htaccess,从而影响服务器的效能,一般我们把一些后台管理界面或者其他特殊目录可能需要加验证这个需求。

如果要对AuthUserFile中的用户再进行筛选,比如有两个用户 webadmin
Paul,则要在.htaccess加上
AuthGroupFile /usr/local/apache/htdocs/phpmyadmin/.htgroup
Require group admin
其中.htgroup为用户组的文件名,文件内容格式为
admin:webadmin
Require group admin的意思是当用户属于admin组的时候才允许访问

手机里暗含的秘密 让我大吃一惊(世界人民震惊了!)

手机里暗含的秘密 让我大吃一惊(世界人民震惊了!)首先声明:这是我的一个朋友发给我的,我觉得现在有很多人可能都有以下列举的习惯,包括我在内(说的这五条我是全都有),最让我感到气愤的是第 4条,如果我的朋友不告诉我,我可能就一直被蒙在鼓里,多花冤枉钱。所以我很希望看到此帖的人一定要注意对比自己是否也有这样的习惯,并且尽可能的告诉自己的朋友,少让人上当。
  
  1、手机电池不要等到没电才充电。
  一般我们都会有一种想法就是手机的电池电力要全部放完再充电比较好基本上是没错的,因为我们在以前使用的充电电池大部分是镍氢( NiH )电池,而镍氢电池有所谓的记忆效应若不放完电再充的话会导致电池寿命急速减少。因此我们才会用到最后 一滴电才开始 充电。但现在的手机及一般IA产品大部分都用锂(Li)电池,而锂电池的话就没有记忆效应的问题。若大家还是等到全部用完电后再充的话反而会使得 锂 电池内部的化学物质无法反应而寿命减少。最好的方法就是没事就充电让它随时随地保持最佳 满格状态 ,这样你的电池就可用的又长又久喔。这是从厂商那得到的 讯息 ,并经过本身测试而得。
  
  2、 当手机正在充电时,请勿接电话!!
  原因是手机在充电时,来电接听的话会有潜在的危险。印度有一个31岁在保险公司任职业务经理的年轻人,十几天前在手机还接着充电器的时候接听电话,过了几秒大量的电流经过手机,这个年轻人被摔落到地面,家人发现时,手指烧伤,心跳微弱,并且已经失去意识。经紧急送到医院后,医生宣布到院死亡。行动电话是目前大家最常使用的现代发明。然而,我们也必须要警觉到仪器致死的危险。
  
  3、手机剩一格时不要使用
  收讯满格 与只剩一格时相比,发射强度竟然相差1000倍以上.所以……常讲手机的人……要 注意哦 ……^0^、昨天从一位交大教授那儿获得一项很重要的 讯息 ,那就是当你发现手机的 收讯强度 只剩下一格的时候,宁可挂断不谈或者是改用公用电话。千万不要再滔滔不绝、口沫横飞、浓情蜜意、欲罢不能、没完没了……为什么呢? 大家都知道手机的电磁波一直是让人担心的问题。而手机的设计为了在 收讯较差 的地区仍能保有相当的通话质量, 会加强手 机的电磁波发射强度. 当收讯满格 与只剩一格时相比,发射强度竟然相差1000倍以上。
  
  4.17951+电话号码=陷阱
  我也向1860查询过了. 如果你把17951+电话号码储存在电话号码本里?而不是单独拨?收费就会从0.7元每分钟变成1.3元每分钟.他们的解释是如果储存在电话号码本里?系统将无法识别。所以获得资费优惠,必须每次在键盘上直接按17xxx。神州 行用户如此? 动感地带用户, 全球通也一样 。如果你是一个中国移动用户,当你知道中国移动为你设置以下的陷阱的时候,便不再惊讶于你的话费为何会像长了翅膀一样的飞走。用17951+电话号码可以优惠,但如果你预先将"17951+电话号码"存在手机的电话本,使用的时候调出来然后拔打出去,这时中国移动不承认你使用了17951这种优惠的 拔打方式 ,而按照直接拔打的方式计费。如果你是在漫游,两种计费方式可以相差7倍之多!当我得知如此计费之后,我真的不知如何表达我的愤怒,后来打1860咨询时,如果不是主动冶询问这个问题,工号为6608的小姐根本就不告诉我这样的计费。
  
  5、手机费的寄生虫
  手机莫名其妙定置了无用短信,强烈建议大家都看一下自己有没有中招,最简单方法退订每月偷你手机费的寄生虫! 中国移动在3.15被迫退出一项新业务,如果您是中国移动的手机用户,键入数字"0000",发送短信至186201,数秒钟内将自动回复一条短信列表,显示您的手机上究竟订制了哪些短信服务,究竟是哪些短信 服务商明着 、暗着每月扣除您的手机费;键入数字"00000",发送短信至186201,即可退 订所有 短信服务 。
  补充一点~
  我们打电话的时候常常会为了正好赶在1:00前结束而庆幸,但其实并不是这样的,据一位中国移动的工作人员说,其实在你通话到0:55的时候就已经算一分钟了,所以0:55~1:00的通话时间其实是算你2分钟的钱~

在Windows2000下进行远程关机!

这方法可能不是很多人会,其实大家用的方法比我用的还好一些,不过我的比较有技术含量


拿个U盘到XP系统上把syste32\目录下面的shutdown.exe文件拷过来,把它放在win2000系统的system32目录下面去,就可以用了,比如说我要在机房用的话,把它拷到要执行的目标机上的system32目录下面,\\computername\c$\winnt\system32\,computername为目标机的计算机名,后面为默认共享的路径,把文件拷过去之后,我们打开计算机管理,在操作菜单上选择“连接到另外一台计算机”,在名称里面输入目标机的计算机名如:Aptech1,确定后,跳出输入用户名和密码的对话框,因为每台机子的管理员用户名都为administrator,密码为空,我们只要输入用户名就可以了,确定后,过一会就连接上去了,在左边选择“服务和应用程序”,接着在选"服务",在右边找到telnet服务,在把telnet服务启动,启动成功后,打开“运行”,输入“CMD”,打开DOS操作界面,,输入"telnet \\computername" 在次强调computername为目标计算机名,输入之后,将telnet成功,可以进行远程管理了,我们直接输入,shutdown,将会跳出shutdown程序的参数帮助,因为shutdown命令必须带有参数才能执行,参数:

-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)

英语骂人 你会几句

1. Stop complaining! 别发牢骚!
    2. You make me sick! 你真让我恶心!
    3. What’s wrong with you? 你怎么回事?
    4. You shouldn’t have done that! 你真不应该那样做!
    5. You’re a jerk! 你是个废物/混球!
    6. Don’t talk to me like that! 别那样和我说话!
    7. Who do you think you are? 你以为你是谁?
    8. What’s your problem? 你怎么回事啊?
    9. I hate you! 我讨厌你!
    10. I don’t want to see your face! 我不愿再见到你!
    11. You’re crazy! 你疯了!
    12. Are you insane/crazy/out of your mind? 你疯了吗?(美国人绝对常用!)
    13. Don’t bother me. 别烦我。
    14. Knock it off. 少来这一套。
    15. Get out of my face. 从我面前消失!
    16. Leave me alone. 走开。
    17. Get lost.滚开!
    18. Take a hike! 哪儿凉快哪儿歇着去吧。
    19. You piss me off. 你气死我了。
    20. It’s none of your business. 关你屁事!
    21. What’s the meaning of this? 这是什么意思?
    22. How dare you! 你敢!
    23. Cut it out. 省省吧。
    24. You stupid jerk! 你这蠢猪!
    25. You have a lot of nerve. 脸皮真厚。
    26. I’m fed up. 我厌倦了。
    27. I can’t take it anymore. 我受不了了!(李阳老师常用)
    28. I’ve had enough of your garbage. 我听腻了你的废话。
    29. Shut up! 闭嘴!
    30. What do you want? 你想怎么样?
    31. Do you know what time it is? 你知道现在都几点吗?
    32. What were you thinking? 你脑子进水啊?
    33. How can you say that? 你怎么可以这样说?
    34. Who says? 谁说的?
    35. That’s what you think! 那才是你脑子里想的!
    36. Don’t look at me like that. 别那样看着我。
    37. What did you say? 你说什么?
    38. You are out of your mind. 你脑子有毛病!
    39. You make me so mad.你气死我了啦。
    40. Drop dead. 去死吧!
    41. **** off. 滚蛋。
    42. Don’t give me your ****. 别跟我胡扯。
    43. Don’t give me your excuses/ No more excuses. 别找借口。  
44. You’re a pain in the ass. 你这讨厌鬼。
    45. You’re an asshole. 你这缺德鬼。
    46. You bastard! 你这杂种!
    47. Get over yourself. 别自以为是。
    48. You’re nothing to me. 你对我什么都不是。
    49. It’s not my fault. 不是我的错。
    50. You look guilty. 你看上去心虚。
    51. I can’t help it. 我没办法。
    52. That’s your problem. 那是你的问题。
    53. I don’t want to hear it. 我不想听!
    54. Get off my back. 少跟我罗嗦。
    55. Give me a break. 饶了我吧。
    56. Who do you think you’re talking to? 你以为你在跟谁说话?
    57. Look at this mess! 看看这烂摊子!
    58. You’re so careless. 你真粗心。
    59. Why on earth didn’t you tell me the truth? 你到底为什么不跟我说实话?
    60. I’m about to explode! 我肺都快要气炸了!
    61. What a stupid idiot! 真是白痴一个!
    62. I’m not going to put up with this! 我再也受不了啦!
    63. I never want to see your face again! 我再也不要见到你!
    64. That’s terrible. 真糟糕!
    65. Just look at what you’ve done! 看看你都做了些什么!
    66. I wish I had never met you. 我真后悔这辈子遇到你!
    67. You’re a disgrace. 你真丢人!
    68. I’ll never forgive you! 我永远都不会饶恕你!
    69. Don’t nag me! 别在我面前唠叨!
    70. I’m sick of it. 我都腻了。
    71. You’re such a bitch! 你这个婊子!
    72. Stop screwing/ fooling/ messing around! 别鬼混了!
    73. Mind your own business! 管好你自己的事!
    74. You’re just a good for nothing bum! 你真是一个废物!/ 你一无是处!
    75. You’ve gone too far! 你太过分了!
    76. I loathe you! 我讨厌你!
    77. I detest you! 我恨你!
    78. Get the hell out of here! 滚开!
    79. Don’t be that way! 别那样!
    80. Can’t you do anything right? 成事不足,败事有余。
    81. You’re impossible. 你真不可救药。
    82. Don’t touch me! 别碰我!
    83. Get away from me! 离我远一点儿!
    84. Get out of my life. 我不愿再见到你。/ 从我的生活中消失吧。
    85. You’re a joke! 你真是一个小丑!
    86. Don’t give me your attitude. 别跟我摆架子。
    87. You’ll be sorry. 你会后悔的。
    88. We’re through. 我们完了!
    89. Look at the mess you’ve made! 你搞得一团糟!
    90. You’ve ruined everything. 全都让你搞砸了。
    91. I can’t believe your never. 你好大的胆子!
    92. You’re away too far. 你太过分了。
    93. I can’t take you any more! 我再也受不了你啦!
    94. I’m telling you for the last time! 我最后再告诉你一次!
    95. I could kill you! 我宰了你!
    96. That’s the stupidest thing I’ve ever heard! 那是我听到的最愚蠢的事!
    (比尔·盖茨常用)
    97. I can’t believe a word you say. 我才不信你呢!
    98. You never tell the truth! 你从来就不说实话!
    99. Don’t push me ! 别逼我!
    100. Enough is enough! 够了够了!
    101. Don’t waste my time anymore. 别再浪费我的时间了!
    102. Don’t make so much noise. I’m working. 别吵,我在干活。
    103. It’s unfair. 太不公平了。
    104. I’m very disappointed. 真让我失望。
    105. Don’t panic! 别怕!
    106. What do you think you are doing? 你知道你在做什么吗?
    107. Don’t you dare come back again! 你敢再回来!
    108. You asked for it. 你自找的。
    109. Nonsense! 鬼话!

世界排名第二?

这个杀毒软件主要没有中文版,导致操作起来特别的麻烦。这也是为什么这样的软件不会在中国火一把的重要原因。不过更新病毒库似乎满及时的。动不动就去下最新的病毒库文件。不过这个升级的次数和时间是可自由选择的。不过前提是懂德文。我删除了它~总体来说这个软件杀毒能力还行。只是个人感觉机器配置差的电脑不推荐使用。似乎比较占用资源。

杀毒软件实时杀毒的奥秘

作者:LuLin

市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加密,文件加密等,也采用了雷同的技术.
由于代码十分简单,不分析了.
//=============================================================================
//
//By Lu Lin 2000.5.10
// Apply with VtoolsD 3.01
// DDK version is available if requested.
//Abstract:
// Install a IFS hook, monitoring any read and write access
//
//=============================================================================
// IFSHOOK.c - main module for IFSHOOK

#define  DEVICE_MAIN
#include "ifshook.h"
#undef  DEVICE_MAIN 

//typedef EventHdl(pevent pev,pioreq pir);

typedef struct _Monitored_Files{
struct _Monitored_Files *pNext_Monitored_Files;//pointer to next struct
struct _Monitored_Files *pPre_Monitored_Files;//pointer to previous struct
int sfn;//system file number
int open_count;
char path[260]; //ansi path name
}_Monitored_Files,*pMonitored_Files;

//
//Declare virtual device
//
Declare_Virtual_Device(IFSHOOK)

_Monitored_Files Monitored_Files;
ppIFSFileHookFunc PrevHook;

DefineControlHandler(SYS_VM_INIT, OnSysVMInit);
DefineControlHandler(SYS_DYNAMIC_DEVICE_INIT, OnSysDynamicDeviceInit);
DefineControlHandler(SYS_DYNAMIC_DEVICE_EXIT, OnSysDynamicDeviceExit);
DefineControlHandler(SYS_VM_TERMINATE, OnSysVMTerminate);

PCHAR ConvertPath( int drive, path_t ppath, PCHAR fullpathname )
{
  int i = 0;
  _QWORD result;

  //
  // Stick on the drive letter if we know it.
  //
  if( drive != 0xFF ) {

    fullpathname[0] = drive+"A"-1;
    fullpathname[1] = ":";
    i = 2;
  }
  UniToBCSPath( &fullpathname, ppath->pp_elements, 260 , BCS_WANSI, &result );
  return( fullpathname );
}

pMonitored_Files IsFileOpened(int i){
pMonitored_Files p=&Monitored_Files;

while (p){
 if (i==p->sfn){
  return p;
 }
 p=p->pNext_Monitored_Files;
}
return 0;
}

BOOL ControlDispatcher(
DWORD dwControlMessage,
DWORD EBX,
DWORD EDX,
DWORD ESI,
DWORD EDI,
DWORD ECX)
{
START_CONTROL_DISPATCH

 ON_SYS_VM_INIT(OnSysVMInit);
 ON_SYS_DYNAMIC_DEVICE_INIT(OnSysDynamicDeviceInit);
 ON_SYS_DYNAMIC_DEVICE_EXIT(OnSysDynamicDeviceExit);

END_CONTROL_DISPATCH

return TRUE;
}

int _cdecl MyIfsHook(pIFSFunc pfn, int fn, int Drive, int ResType,
 int CodePage, pioreq pir)
{
int retvar,i;
char fullpathname[260];
_Monitored_Files *FileEntry;
switch(fn){
 case IFSFN_OPEN:{
  retvar=(*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);
  ConvertPath( Drive, pir->ir_ppath, fullpathname );
  FileEntry=IsFileOpened(pir->ir_sfn);
  if (FileEntry){
  FileEntry->open_count++;
  }else{
  FileEntry=&Monitored_Files;
  while(1){
   if (FileEntry->pNext_Monitored_Files){
   FileEntry=FileEntry->pNext_Monitored_Files;
   }
   else{
   break;
   }
  }
  FileEntry->pNext_Mon_itored_Files=\
   HeapAllocate( sizeof(_Monitored_Files),HEAPZEROINIT);
  FileEntry->pNext_Monitored_Files->pPre_Mon_itored_Files=FileEntry;
  FileEntry=FileEntry->pNext_Monitored_Files;
  FileEntry->sfn=pir->ir_sfn;
  FileEntry->open_count=1;
  memcpy(FileEntry->path,fullpathname,260);
  }
  return retvar;
 }

 case IFSFN_READ:{
  //Do something here,
  //eg. Decrypt the file.
  char *str;
  int j;
  str=pir->ir_data;
  j=pir->ir_length;
  retvar=(*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);
  FileEntry=IsFileOpened(pir->ir_sfn);
  if (!stricmp("c:\\test.txt",FileEntry->path)){
  for (i=0;i<j;i++){
   str--;
  }
  }
  return retvar;
 }

 case IFSFN_WRITE:{
  //Do something here
  //eg. Encrypt the file
  FileEntry=IsFileOpened(pir->ir_sfn);
  if (FileEntry){
  if (!stricmp("c:\\test.txt",FileEntry->path)){
   for (i=0;i<pir->ir_length;i++){
   (((char*)pir->ir_data))++;
   }
  }
  }
  return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);
 }

 case IFSFN_CLOSE:{
  FileEntry=IsFileOpened(pir->ir_sfn);
  if (FileEntry){ 
  FileEntry->open_count--;
  if (!FileEntry->open_count){
   FileEntry->pPre_Monitored_Files->pNext_Mon_itored_Files=\
   FileEntry->pNext_Monitored_Files;
   FileEntry->pNext_Monitored_Files->pPre_Mon_itored_Files=\
   FileEntry->pPre_Monitored_Files;
   HeapFree(FileEntry,0);
   }
  }
  return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);
 }

} 

return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);
}

BOOL OnSysVMInit(VMHANDLE hVM){
return OnSysDynamicDeviceInit();
}

BOOL OnSysDynamicDeviceInit()
{
PrevHook = IFSMgr_InstallFileSystemApiHook(MyIfsHook);
Monitored_Files.pNext_Mon_itored_Files=0;
Monitored_Files.pPre_Mon_itored_Files=0;
Monitored_Files.sfn=-1;
Monitored_Files.open_count=0;
Monitored_Files.path[0]=0;

return TRUE;
}

BOOL OnSysDynamicDeviceExit()
{
IFSMgr_RemoveFileSystemApiHook(MyIfsHook);
return TRUE;
}

void OnSysVMTerminate(VMHANDLE hVM){
return OnSysDynamicDeviceExit();
}

利用IP地址欺骗突破防火墙深层技术解析

利用IP地址欺骗突破防火墙深层技术解析

一般的访问控制主要在防火墙中进行设置,制定一些安全策略:如内部局域网的资源不允许外部网上的用户使用;不设防区(又称非军事区)可以为内部或外部局域网,其中的资源允许外部网的用户有限度地使用;可以使外部用户访问非军事区(DMZ区)的WEB服务器等等。

深入分析研究防火墙技术,利用防火墙配置和实现的漏洞,可以对它实施攻击。通常情况下,有效的攻击都是从相关的子网进行的,因为这些网址得到了防火墙的信赖,虽说成功与否尚取决于机遇等其他因素,但对攻击者而言很值得一试。

突破防火墙系统最常用的方法是IP地址欺骗,它同时也是其他一系列攻击方法的基础。之所以使用这个方法,是因为IP自身的缺点。IP协议依据IP头中的目的地址项来发送IP数据包。如果目的地址是本地网络内的地址,该IP包就被直接发送到目的地。如果目的地址不在本地网络内,该IP包就会被发送到网关,再由网关决定将其发送到何处。这是IP路由IP包的方法。

IP路由IP包时对IP头中提供的IP源地址不做任何检查,并且认为IP头中的IP源地址即为发送该包的机器的IP地址。当接收到该包的目的主机要与源主机进行通讯时,它以接收到的IP包的IP头中IP源地址作为其发送的IP包的目的地址,来与源主机进行数据通讯。IP的这种数据通讯方式虽然非常简单和高效,但它同时也是IP的一个安全隐患,很多网络安全事故都是因为IP这个的缺点而引发的。

黑客或入侵者利用伪造的IP发送地址产生虚假的数据分组,乔装成来自内部站的分组过滤器,这种类型的攻击是非常危险的。关于涉及到的分组真正是内部的还是外部的分组被包装得看起来象内部的种种迹象都已丧失殆尽。只要系统发现发送地址在其自己的范围之内,则它就把该分组按内部通信对待并让其通过。

通常主机A与主机B的TCP连接(中间有或无防火墙)是通过主机A向主机B提出请求建立起来的,而其间A和B的确认仅仅根据由主机A产生并经主机B验证的初始序列号ISN。具体分三个步骤:

主机A产生它的ISN,传送给主机B,请求建立连接;B接收到来自A的带有SYN标志的ISN后,将自己本身的ISN连同应答信息ACK一同返回给A;A再将B传送来ISN及应答信息ACK返回给B。至此,正常情况,主机A与B的TCP连接就建立起来了。

B ---- SYN ----> A

B <---- SYN+ACK ---- A

B ---- ACK ----> A

假设C企图攻击A,因为A和B是相互信任的,如果C已经知道了被A信任的B,那么就要相办法使得B的网络功能瘫痪,防止别的东西干扰自己的攻击。在这里普遍使用的是SYN flood。攻击者向被攻击主机发送许多TCP- SYN包。这些TCP-SYN包的源地址并不是攻击者所在主机的IP地址,而是攻击者自己填入的IP地址。当被攻击主机接收到攻击者发送来的TCP-SYN包后,会为一个TCP连接分配一定的资源,并且会以接收到的数据包中的源地址(即攻击者自己伪造的IP地址)为目的地址向目的主机发送TCP-(SYN+ACK)应答包。

由于攻击者自己伪造的IP地址一定是精心选择的不存在的地址,所以被攻击主机永远也不可能收到它发送出去的TCP-(SYN+ACK)包的应答包,因而被攻击主机的TCP状态机会处于等待状态。如果被攻击主机的TCP状态机有超时控制的话,直到超时,为该连接分配的资源才会被回收。因此如果攻击者向被攻击主机发送足够多的TCP-SYN包,并且足够快,被攻击主机的TCP模块肯定会因为无法为新的TCP连接分配到系统资源而处于服务拒绝状态。并且即使被攻击主机所在网络的管理员监听到了攻击者的数据包也无法依据IP头的源地址信息判定攻击者是谁。

当B的网络功能暂时瘫痪,现在C必须想方设法确定A当前的ISN。首先连向25端口,因为SMTP是没有安全校验机制的,与前面类似,不过这次需要记录A的ISN,以及C到A的大致的RTT(round trip time)。这个步骤要重复多次以便求出RTT的平均值。一旦C知道了A的ISN基值和增加规律,就可以计算出从C到A需要RTT/2 的时间。然后立即进入攻击,否则在这之间有其他主机与A连接,ISN将比预料的多。

C向A发送带有SYN标志的数据段请求连接,只是信源IP改成了B。A向B回送SYN+ACK数据段,B已经无法响应,B的TCP层只是简单地丢弃A的回送数据段。这个时候C需要暂停一小会儿,让A有足够时间发送SYN+ACK,因为C看不到这个包。然后C再次伪装成B向A发送ACK,此时发送的数据段带有Z预测的A的ISN+1。如果预测准确,连接建立,数据传送开始。

问题在于即使连接建立,A仍然会向B发送数据,而不是C,C仍然无法看到A发往B的数据段,C必须蒙着头按照协议标准假冒B向A发送命令,于是攻击完成。如果预测不准确,A将发送一个带有RST标志的数据段异常终止连接,C只有从头再来。随着不断地纠正预测的ISN,攻击者最终会与目标主机建立一个会晤。通过这种方式,攻击者以合法用户的身份登录到目标主机而不需进一步的确认。如果反复试验使得目标主机能够接收对网络的ROOT登录,那么就可以完全控制整个网络。

C(B) ---- SYN ----> A

B <---- SYN+ACK ---- A

C(B) ---- ACK ----> A

C(B) ---- PSH ----> A

IP欺骗攻击利用了RPC服务器仅仅依赖于信源IP地址进行安全校验的特性,攻击最困难的地方在于预测A的ISN。攻击难度比较大,但成功的可能性也很大。C必须精确地预见可能从A发往B的信息,以及A期待来自B的什么应答信息,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完成,必须写程序完成。当然在准备阶段可以用netxray之类的工具进行协议分析。

虽然IP欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往由这里开始。预防这种攻击还是比较容易的。IP本身的缺陷造成的安全隐患目前是无法从根本上消除的。我们只能采取一些弥补措施来使其造成的危害减少到最小的程度。防御这种攻击的最理想的方法是:每一个连接局域网的网关或路由器在决定是否允许外部的IP数据包进入局域网之前,先对来自外部的IP数据包进行检验。如果该IP包的IP源地址是其要进入的局域网内的IP地址,该IP包就被网关或路由器拒绝,不允许进入该局域网。

这种方法虽然能够很好的解决问题,但是考虑到一些以太网卡接收它们自己发出的数据包,并且在实际应用中局域网与局域网之间也常常需要有相互的信任关系以共享资源,这种方案不具备较好的实际价值。另外一种防御这种攻击的较为理想的方法是当IP数据包出局域网时检验其IP源地址。即每一个连接局域网的网关或路由器在决定是否允许本局域网内部的IP数据包发出局域网之前,先对来自该IP数据包的IP源地址进行检验。

如果该IP包的IP源地址不是其所在局域网内部的IP地址,该IP包就被网关或路由器拒绝,不允许该包离开局域网。这样一来,攻击者至少需要使用其所在局域网内的IP地址才能通过连接该局域网的网关或路由器。如果攻击者要进行攻击,根据其发出的IP数据包的IP源地址就会很容易找到谁实施了攻击。因此建议每一个ISP或局域网的网关路由器都对出去的IP数据包进行IP源地址的检验和过滤。如果每一个网关路由器都做到了这一点,IP源地址欺骗将基本上无法奏效。在当前并不是每一网关及路由器都能做到这一点的情况下,网络系统员只能将自己管理的网络至于尽可能严密的监视之下,以防备可能到来的攻击。