星期一, 十二月 31, 2007
printf的常见格式字符
格式字符 含义
%c 单字符格式
%d 十进制整型
%e 指数形式
%f 十进制浮点数
%l 整型
%o 八进制整型
%p 地址指针
%s 字符串
%x 十六进制整型
%n 将已经输出的字节数保存到相应指针指向的内存地址中
在格式字符的中间加上一个整数,printf函数就会把这个数值作为输出宽度。
如果输出的实际宽度大于指定宽度,则仍然按照实际宽度输出;如果小于指定宽度,则按指定宽度输出。
有漏洞的printf语句可以将任意数值写到任意地方,这就是漏洞的根源,只要将main的返回地址改为攻击
代码,控制权就会跳转到攻击代码而造成恶意的攻击。
星期四, 十二月 13, 2007
【转】一些不错的心理测验
转自http://www.lupaworld.com/bbs/redirect.php?tid=31413&goto=newpost
1,Question:请选择你的爱情果: 1柚子 2石榴 3苹果 4西瓜 5柠檬 6菠萝 7火龙果 8樱桃 9香蕉 10椰
子.(只能选择一个哦)
Answer:1初恋式的爱 2童话般的爱情 3情人式 4老土式的爱情 5同性恋 6丑却甜的爱情 7贵族式 8一夜
情 9常人式的爱情 10暴力式的爱(超准心理测试题)
2,Question:用第一感觉:我在你心中像哪种冰淇淋?1巧克力口味 2奶油口味 3香草口味 4香芋口味 5草
莓口味 6蓝莓口味 7荔枝口味 8红豆口味 9咖啡口味.
Answer:1心爱的人 2依赖的人 3知己 4暗恋的人 5亲密好友 6牵挂的人 7普通朋友 8讨厌的人 9尊敬的
人(超准心理测试题)
3,Question:如果你参加一个吃西红柿比赛你认为怎么吃会获胜1)西红柿夹蜜饯 (2)西红柿炒蛋 (3)光
吃 (4)西红柿色拉 (5)番茄汁 (6)糖拌西红柿
Answer:婚后偷情率: (1)60% (2)40% (3)0% (4)20% (5)99%(6)200%(超准心理测试题)
4,Question:给你做个测试:你现在想想自己想到的第一个异性是谁,再给"日"字添一笔成为另一个字,想
好这个字
Answer:甲:崇拜的人目:未来老婆或老公田:没关系白:最爱的人电:暗恋者申:讨厌的人旧:普通朋友由:不
信赖的人旦:喜欢的人.(超准心理测试题)
5,Question:在冬日的下午,你一个人在散步,这时你最希望看到什么景色?A在沙滩上晒太阳的螃蟹 B
风中摇曳的红枫 C美丽善良的采茶姑娘 D在空中飞行的一对黑鹤
Answer:A白痴 B弱智 C智障 D傻瓜因为这些景象不会在冬天出现(超准心理测试题)
6,Question:测验:以下几种方便面你最喜欢哪种1.鲜虾鱼板面 2.红烧牛肉面 3香菇炖鸡面 4.梅菜扣肉
面 5.番茄牛肉面 6.红烧排骨面
Answer:1不太成熟,爱吃醋,占有欲强 2见异思迁 3感情专一,始志不渝 4看破红尘,遁入空门 5.占有欲强
6专喜欢做第三者!(超准心理测试题)
7,Question:当你赶路累了,一好心的女巫说送你到以下哪或者谁家里休息,你选哪个1红磨坊 2七个小矮
人 3美人鱼 4一休 5饼屋 6茱利叶 7附近亲戚家 8不理她
Answer:1花心 2纯情 3对爱充满幻想 4心如止水 5实在 6渴望浪漫悲壮的爱情 7顺从父母之命媒妁之言
8暂时不想谈恋爱(超准心理测试题)
8,Question:给你做一个?情人节那天你与男(女)友在公园遇到了海洋动物义买.请你选择一个你喜欢的
海洋动物 1海星 2花斑鱼 3海龟 4海葵 5海马 6鲸 7珊瑚
Answer:爱情观分析 1尊重所爱的人值得托付终身 2极为依赖恋人 3情圣野心很大 4不太成熟爱吃醋占有
欲强 5感情专一保守 6不专一 7色情狂(超准心理测试题)
9,Question:给你测试一道心理题:有金,银,铜,铁,玉,玛瑙,翡翠,草及石头共九种戒指,让你选,你会选
哪个?
Answer:金.代表花心. 银是坚持. 铜是顽固. 铁是无情. 玉是温柔. 玛瑙是依靠. 翡翠是真心. 草是纯
真. 石头是永恒. 这是人对感情的态度.准吧?(超准心理测试题)
10,Question:给你做道心理题:有一个生鸡蛋和一个熟鸡蛋,有四个环境:水.口袋.树上.土里,你可以把
两个鸡蛋一起放,也可以分开放,你会怎么放?
Answer:生鸡蛋代表婚前, 熟鸡蛋代表婚后. 水里:花心口袋:专一树上:眼光高土里:随缘这题很准,是正
宗心理学的题目(超准心理测试题)如今的社会,每个人都有密码,领钱不能没有密码,手机也有密码,
每天用的电脑更有密码。你是如何“制造”出你的密码的?这可是会泄露你的感情特征的呀!
A:生日或自家电话号码
B:身份证号码
C:三天两头就视心情而更换
D:精心设计,谁也猜不出的奇怪组合测试结果:
A:选用生日或自家电话号码来当密码的人其实是很好搞定的爱人,不难追,挑战性也不强,因为他(她)
心里在打什么主意,相处一段时间,就可以掌握到八九分。
B:身份证号码这类人戒心很重,所以建立在二人情感关系上的信任,将是最重要的关键。喜欢观察对方
,甚至出些测试来考验对方,不时考虑双方的适合程度,如果没有得到信任,两人的关系就无法有进一步
的突破。
C:三天两头就视心情而更换这类人变化没有规则可言,连他自己都无法控制,今天适用的招数,明天可
能就失效了。所以要对付这种爱人,最好的对策就是以不变应万变,管他如何变,反正总有一天又会变回
来,而你的不变,就巧妙地创造了安全感。
D:精心设计,谁也猜不出的奇怪组合这类人内心较为复杂,想得很多,老是会想如何让人猜不透。想要
追上他,欲擒故纵就对了。如果你还有本事,能在下半生常常出点花招,使他猜不透你的想法,那你就成
功大半了。如果你是童话故事中想吃掉3只小猪的大野狼,你觉得用哪一种方法可以吃掉它们?
A.模仿猪妈妈声音骗开门
B.用锤子把门整个砸坏
C.从烟囱偷偷爬进屋去
D.等小猪没戒心自己出来
E.用烟把小猪熏到晕倒*********************************选择A
:你的幼稚指数40%
这类型的人会用言语做沟通的方式,跟人家做进一步的交谈,处理事情的时候会很有耐心而且能够抓住人
性。选择B:你的幼稚指数80%
这类型的人比较大男人或大女人,表面上很成熟,其实内心是非常幼稚的。选择C:你的幼稚指数55%
这类型的人知道做事情要利用方法,在人生的路途中会慢慢地让自己学习成长。选择D:你的幼稚指数20%
这类型的人对很多事情已经懂得放手,知道争取强求其实是没有用的,因此会用等待的方式来做任何事情
,不管是工作或者是爱情。选择E:你的幼稚指数99%
这类型的人凭着感觉走,想要做什么就做什么。请你做以下八道心理素质测试题,每题只能一个选择,然
后根据括号内的分数累加起来,看看总分是多少,就能大致了解你的心理素质和应付能力。
1.你骑车闯红灯,被警察叫住;后者知道你急着要赶路,却故意拖延时间,这时你———
a.急得满头大汗,不知怎么办才好
b.十分友好地、平静地向警察道歉
c.听之任之,不作任何解释
2.在朋友的婚礼上,你未料到会被邀请发言,在毫无准备的情况下,你———
a.双手发抖,结结巴巴说不出话来
b.感到很荣幸,简短地讲几句
c.很平淡地谢绝了
3.你在餐馆刚用过餐,服务员来结账,你忽然发现身上带的钱不够,此刻,你会———
a.感到很窘迫,脸发红
b.自嘲一下,马上对服务员实话实说
c.在身上东摸西摸,拖延时间
4.假如你乘坐公共汽车时忘了买票,被人查到,你的反应是———
a.尴尬,出冷汗
b.冷静,不慌不忙,接受处理
c.强作微笑
5.你独自一人被关在电梯内出不来,你会———
a.脸色发白,恐慌不安
b.想方设法自己出去
c.耐心地等待救援
6.有人像老朋友似的向你打招呼,但你一点也记不起他(她)是谁,此时你———
a.装作没听见似的不答理
b.直率地承认自己记不起来了
c.朝他(她)瞪瞪眼,一言不发
7.你从超市里走出来,忽然意识到你拿着忘记付款的商品,此时一个很像保安人员的人朝你走过来,你
会怎么办?
a.心怦怦跳,惊慌不措
b.诚实、友好地主动向他解释
c.迅速回转身去补付款
8.假设你从国外回来,行李中携带了超过规定的烟酒数量,海关官员要求你打开提箱检查,这时你会—
——
a.感到害怕,两手发抖
b.泰然自若,听凭检查
c.与海关官员争辩,拒绝检查心理素质测试题答案:选a得0分,选b得5分,选c得2分
1.(0~25分)你承受压力的心理素质比较差,很容易失去心理平衡,变得窘促不安,甚至惊慌失措。
2.(25分~32分)你的心理素质比较强,性情还算比较稳定,遇事一般不会十分惊慌,但有时往往采取消极
应付的态度。
3.(32~40分)你的心理素质很好,几乎没有令你感到尴尬的事,尽管偶尔会失去控制,但惫自来说,你的
应变能力很强,是一个能经常保持镇静,从容不迫的人
[转]关于硬盘坏道不错的资料
转自http://hi.baidu.com/myssc/blog/item/2204e550b1c0075e1138c214.html
跳出硬盘认识的误区
多年来一直误导着高朋的几个常识性问题是:
1.硬盘逻辑坏道可以修复,而物理坏道不可修复。实际情况是,坏道并不分为逻辑坏道和物理坏道,不知道谁发明这两个概念,反正厂家提供的技术资料中都没有这样的概念,倒是分为按逻辑地址记录的坏扇区和按物理地址记录的坏扇区。
2.硬盘出厂时没有坏道,用户发现坏道就意味着硬盘进入危险状态。实际情况是,每个硬盘出厂前都记录有一定数量的坏道,有些数量甚至达到数千上万个坏扇区,相比之下,用户发现一两个坏道算多大危险?
3.硬盘不认盘就没救,0磁道坏可以用分区方法来解决。实际情况是,有相当部分不认的硬盘也可以修好,而0磁道坏时很难分区。
如此误导,如不是自己搜集研究外文资料并长期实践,说不准还长期拿来作信条呢。在国外有许多的专业的硬盘维修论坛,在那里你可以发现有一些国家的硬盘维修技术达到了很高水准。我敢肯定,他们的一些技术会令众多硬盘厂家头痛不已。和世界上众多专业硬盘修理高手交流,使高朋受益菲浅。这三年来,高朋辞去教师工作,专门从事硬盘修复工作,经手修复的硬盘已超过万个。
总结起来,高朋的技术来源有三方面:
1.搜集国外技术资料与国外专业人士交流;
2.购买专业工具软件(有同步技术更新支持);
3.自己的实践经验。
很遗憾,我没有找到教我修复硬盘的老师,也不认为哪本教科书对我修硬盘有太大帮助。
硬盘修复人士需要弄明白的几个基本概念
在研究硬盘修复和使用专业软件修复硬盘的过程中,必将涉及到一些基本的概念。在这里,高朋根据自己的研究和实践经验,试图总结并解释一些与“硬盘缺陷”相关的概念,与众位读者交流。
Bad sector (坏扇区)
在硬盘中无法被正常访问或不能被正确读写的扇区都称为Bad sector。一个扇区能存储512Bytes的数据,如果在某个扇区中有任何一个字节不能被正确读写,则这个扇区为Bad sector。除了存储512Bytes外,每个扇区还有数十个Bytes信息,包括标识(ID)、校验值和其它信息。这些信息任何一个字节出错都会导致该扇区变“Bad”。例如,在低级格式化的过程中每个扇区都分配有一个编号,写在ID中。如果ID部分出错就会导致这个扇区无法被访问到,则这个扇区属于 Bad sector。有一些Bad sector能够通过低级格式化重写这些信息来纠正。
Bad cluster (坏簇)
在用户对硬盘分区并进行高级格式化后,每个区都会建立文件分配表(File Allocation Table, FAT)。FAT中记录有该区内所有cluster(簇)的使用情况和相互的链接关系。如果在高级格式化(或工具软件的扫描)过程中发现某个 cluster使用的扇区包括有坏扇区,则在FAT中记录该cluster为Bad cluster,并在以后存放文件时不再使用该cluster,以避免数据丢失。有时病毒或恶意软件也可能在FAT中将无坏扇区的正常cluster标记为Bad cluster, 导致正常cluster不能被使用。这里需要强调的是,每个cluster包括若干个扇区,只要其中存在一个坏扇区,则整个cluster中的其余扇区都一起不再被使用.
Defect (缺陷)
在硬盘内部中所有存在缺陷的部分都被称为Defect。 如果某个磁头状态不好,则这个磁头为Defect head。如果盘面上某个Track(磁道)不能被正常访问,则这Track为Defect Track. 如果某个扇区不能被正常访问或不能正确记录数据,则该扇区也称为Defect Sector. 可以认为Bad sector 等同于 Defect sector. 从总的来说,某个硬盘只要有一部分存在缺陷,就称这个硬盘为Defect hard disk.
P-list (永久缺陷表)
现在的硬盘密度越来越高,单张盘片上存储的数据量超过40Gbytes. 硬盘厂家在生产盘片过程极其精密,但也极难做到100%的完美,硬盘盘面上或多或少存在一些缺陷。厂家在硬盘出厂前把所有的硬盘都进行低级格式化,在低级格式化过程中将自动找出所有defect track和defect sector,记录在P-list中。并且在对所有磁道和扇区的编号过程中,将skip(跳过)这些缺陷部分,让用户永远不能用到它们。这样,用户在分区、格式化、检查刚购买的新硬盘时,很难发现有问题。一般的硬盘都在P-list中记录有一定数量的defect, 少则数百,多则数以万计。如果是SCSI硬盘的话可以找到多种通用软件查看到P-list,因为各种牌子的SCSI硬盘使用兼容的SCSI指令集。而不同牌子不同型号的IDE硬盘,使用各自不同的指令集,想查看其P-list要用针对性的专业软件。
G-list (增长缺陷表)
用户在使用硬盘过程中,有可能会发现一些新的defect sector。按“三包”规定,只要出现一个defect sector,商家就应该为用户换或修。现在大容量的硬盘出现一个defect sector概率实在很大,这样的话硬盘商家就要为售后服务忙碌不已了。于是,硬盘厂商设计了一个自动修复机制,叫做Automatic Reallcation。有大多数型号的硬盘都有这样的功能:在对硬盘的读写过程中,如果发现一个defect sector,则自动分配一个备用扇区替换该扇区,并将该扇区及其替换情况记录在G-list中。这样一来,少量的defect sector对用户的使用没有太大的影响。
也有一些硬盘自动修复机制的激发条件要严格一些,需要用某些软件来判断defect sector,并通过某个端口(据说是50h)调用自动修复机制。比如常用的Lformat, ADM,DM中的Zero fill,Norton中的Wipeinfo和校正工具,西数工具包中的wddiag, IBM的DFT 中的Erase等。这些工具之所以能在运行过后消除了一些“坏道”,很重要的原因就在这Automatic Reallcation(当然还有其它原因),而不能简单地概括这些“坏道”是什么“逻辑坏道”或“假坏道”。如果哪位被误导中毒太深的读者不相信这个事实,等他找到能查看G-list的专业工具后就知道,这些工具运行过后,G-list将会增加多少记录!“逻辑坏道”或“假坏道”有必要记录在G-list中并用其它扇区替换么?
当然,G-list的记录不会无限制,所有的硬盘都会限定在一定数量范围内。如火球系列限度是500,美钻二代的限度是636,西数BB的限度是508,等等。超过限度,Automatic Reallcation就不能再起作用。这就是为何少量的“坏道”可以通过上述工具修复(有人就概括为:“逻辑坏道”可以修复),而坏道多了不能通过这些工具修复(又有人概括为:“物理坏道”不可以修复)。
Bad track (坏道)
这个概念源于十多年前小容量硬盘(100M以下),当时的硬盘在外壳上都贴有一张小表格,上面列出该硬盘中有缺陷的磁道位置(新硬盘也有)。在对这个硬盘进行低级格式化时(如用ADM或DM 5.0等工具,或主板中的低格工具),需要填入这些Bad track的位置, 以便在低格过程中跳过这些磁道。现在的大容量硬盘在结构上与那些小容量硬盘相差极大,这个概念用在大容量硬盘上有点牵强。
读者们还可能发现国内很多刊物和网上文章中还有这么几个概念:物理坏道,逻辑坏道,真坏道,假坏道,硬坏道,软坏道等。高朋在国外的硬盘技术资料中没有找到对应的英文概念,也许是中国人自己概括的吧?既然有那么多的人能接受这些概念,也许某些专家能作出一些的合理解释。高朋不习惯使用这些概念,不想对它们作牵强的解释,读者们看看是谁说的就去问谁吧。
深入了解硬盘参数
正常情况下,硬盘在接通电源之后,都要进行“初始化”过程(也可以称为“自检”)。这时,会发出一阵子自检声音,这些声音长短和规律视不同牌子硬盘而各不一样,但同型号的正常硬盘的自检声音是一样的。有经验的人都知道,这些自检声音是由于硬盘内部的磁头寻道及归位动作而发出的。为什么硬盘刚通电就需要执行这么多动作呢?简单地说,是硬盘在读取的记录在盘片中的初始化参数。
一般熟悉硬盘的人都知道,硬盘有一系列基本参数,包括:牌子、型号、容量、柱面数、磁头数、每磁道扇区数、系列号、缓存大小、转速、S.M.A.R.T值等。其中一部分参数就写在硬盘的标签上,有些则要通过软件才能测出来。但是,高朋告诉你,这些参数仅仅是初始化参数的一小部分,盘片中记录的初始化参数有数十甚至数百个!硬盘的CPU在通电后自动寻找BIOS中的启动程序,然后根据启动程序的要求,依次在盘片中指定的位置读取相应的参数。如果某一项重要参数找不到或出错,启动程序无法完成启动过程,硬盘就进入保护模式。在保护模式下,用户可能看不到硬盘的型号与容量等参数,或者无法进入任何读写操作。近来有些系列的硬盘就是这个原因而出现类似的通病,如:FUJITSU MPG系列自检声正常却不认盘,MAXTOR美钻系列认不出正确型号及自检后停转,WD BB EB系列能正常认盘却拒绝读写操作等。
不同牌子不同型号的硬盘有不同的初始化参数集,以较熟悉的Fujitsu硬盘为例,高朋简要地讲解其中一部分参数,以便读者理解内部初始化参数的原理。
通过专用的程序控制硬盘的CPU,根据BIOS程序的需要,依次读出初始化参数集,按模块分别存放为69个不同的文件,文件名也与BIOS程序中调用到的参数名称一致。其中部分参数模块的简要说明如下:
DM硬盘内部的基本管理程序
- PL永久缺陷表
- TS缺陷磁道表
- HS实际物理磁头数及排列顺序
- SM最高级加密状态及密码
- SU用户级加密状态及密码
- CI 硬件信息,包括所用的CPU型号,BIOS版本,磁头种类,磁盘碟片种类等
- FI生产厂家信息
- WE写错误记录表
- RE读错误记录表
- SI容量设定,指定允许用户使用的最大容量(MAX LBA),转换为外部逻辑磁头数(一般为16)和逻辑每磁道扇区数(一般为63)
- ZP区域分配信息,将每面盘片划分为十五个区域,各个区域上分配的不同的扇区数量,从而计算出最大的物理容量。
这些参数一般存放在普通用户访问不到的位置,有些是在物理零磁道以前,可以认为是在负磁道的位置。可能每个参数占用一个模块,也可能几个参数占用同一模块。模块大小不一样,有些模块才一个字节,有些则达到64K字节。这些参数并不是连续存放的,而是各有各的固定位置。
读出内部初始化参数表后,就可以分析出每个模块是否处于正常状态。当然,也可以修正这些参数,重新写回盘片中指定的位置。这样,就可以把一些因为参数错乱而无法正常使用的硬盘“修复”回正常状态。
如果读者有兴趣进一步研究,不妨将硬盘电路板上的ROM芯片取下,用写码机读出其中的BIOS程序,可以在程序段中找到以上所列出的参数名称。
硬盘修复之低级格式化
熟悉硬盘的人都知道,在必要的时候需要对硬盘做“低级格式化”(下面简称“低格”)。进行低格所使用的工具也有多种:有用厂家专用设备做的低格,有用厂家提供的软件工具做的低格,有用DM工具做的低格,有用主板BIOS中的工具做的低格,有用Debug工具做的低格,还有用专业软件做低格……
不同的工具所做的低格对硬盘的作用各不一样。有些人觉得低格可以修复一部分硬盘,有些人则觉得低格十分危险,会严重损害硬盘。高朋用过多种低格工具,认为低格是修复硬盘的一个有效手段。下面总结一些关于低格的看法,与广大网友交流。
大家关心的一个问题:“低格过程到底对硬盘进行了什么操作?”实践表明低格过程有可能进行下列几项工作,不同的硬盘的低格过程相差很大,不同的软件的低格过程也相差很大。
A. 对扇区清零和重写校验值
低格过程中将每个扇区的所有字节全部置零,并将每个扇区的校验值也写回初始值,这样可以将部分缺陷纠正过来。譬如,由于扇区数据与该扇区的校验值不对应,通常就被报告为校验错误(ECC Error)。如果并非由于磁介质损伤,清零后就很有可能将扇区数据与该扇区的校验值重新对应起来,而达到“修复”该扇区的功效。这是每种低格工具和每种硬盘的低格过程最基本的操作内容,同时这也是为什么通过低格能“修复大量坏道”的基本原因。另外,DM中的Zero Fill(清零)操作与IBM DFT工具中的Erase操作,也有同样的功效。
B. 对扇区的标识信息重写
在多年以前使用的老式硬盘(如采用ST506接口的硬盘),需要在低格过程中重写每个扇区的标识(ID)信息和某些保留磁道的其他一些信息,当时低格工具都必须有这样的功能。但现在的硬盘结构已经大不一样,如果再使用多年前的工具来做低格会导致许多令人痛苦的意外。难怪经常有人在痛苦地高呼:“危险!切勿低格硬盘!我的硬盘已经毁于低格!”
C. 对扇区进行读写检查,并尝试替换缺陷扇区
有些低格工具会对每个扇区进行读写检查,如果发现在读过程或写过程出错,就认为该扇区为缺陷扇区。然后,调用通用的自动替换扇区(Automatic reallocation sector)指令,尝试对该扇区进行替换,也可以达到“修复”的功效。
D. 对所有物理扇区进行重新编号
编号的依据是P-list中的记录及区段分配参数(该参数决定各个磁道划分的扇区数),经过编号后,每个扇区都分配到一个特定的标识信息(ID)。编号时,会自动跳过P-list中所记录的缺陷扇区,使用户无法访问到那些缺陷扇区(用户不必在乎永远用不到的地方的好坏)。如果这个过程半途而废,有可能导致部分甚至所有扇区被报告为标识不对(Sector ID not found, IDNF)。要特别注意的是,这个编号过程是根据真正的物理参数来进行的,如果某些低格工具按逻辑参数(以 16heads 63sector为最典型)来进行低格,是不可能进行这样的操作。
E. 写磁道伺服信息,对所有磁道进行重新编号
有些硬盘允许将每个磁道的伺服信息重写,并给磁道重新赋予一个编号。编号依据P-list或TS记录来跳过缺陷磁道(defect track),使用户无法访问(即永远不必使用)这些缺陷磁道。这个操作也是根据真正的物理参数来进行。
F. 写状态参数,并修改特定参数
有些硬盘会有一个状态参数,记录着低格过程是否正常结束,如果不是正常结束低格,会导致整个硬盘拒绝读写操作,这个参数以富士通IDE硬盘和希捷SCSI硬盘为典型。有些硬盘还可能根据低格过程的记录改写某些参数。
下面我们来看看一些低格工具做了些什么操作:
1. DM中的Low level format
进行了A和B操作。速度较快,极少损坏硬盘,但修复效果不明显。
2. Lformat
进行了A、B、C操作。由于同时进行了读写检查,操作速度较慢,可以替换部分缺陷扇区。但其使用的是逻辑参数,所以不可能进行D、E和F的操作。遇到IDNF错误或伺服错误时很难通过,半途会中断。
3. SCSI卡中的低格工具
由于大部SCSI硬盘指令集通用,该工具可以对部分SCSI硬盘进行A、B、C、D、F操作,对一部分SCSI硬盘(如希捷)修复作用明显。遇到缺陷磁道无法通过。同时也由于自动替换功能,检查到的缺陷数量超过G-list限度时将半途结束,硬盘进入拒绝读写状态
好久没有写博客了,看到一篇很好的文章,转一下。
其实事实上是没有软坏道(逻辑坏道)的概念的,那是文件系统的问题,和硬盘无关。只是我们都习惯了这个概念,一直都是这么叫而已,心里都清楚,高格一下就行了。片头的几个常识性的问题也好知道,对于硬盘也算是花过心思的。一直没有找到G-list的详细资料,这篇文章不错,保存起来。
星期二, 十二月 11, 2007
【转】《Linux防火墙及NAT》练习题
1.1)设定INPUT为ACCEPT
1.2)设定OUTPUT为ACCEPT
1.3)设定FORWARD为ACCEPT
参考答案:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
2)定制源地址访问策略
2.1)接收来自192.168.0.3的IP访问
2.2)拒绝来自192.168.0.0/24网段的访问
参考答案:
iptables -A INPUT -i eth0 -s 192.168.0.3 -j ACCPET
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
3)目标地址192.168.0.3的访问给予记录,并查看/var/log/message
参考答案:
iptables -A INPUT -s 192.168.0.3 -j LOG
4)定制端口访问策略
4.1)拒绝任何地址访问本机的111端口
4.2)拒绝192.168.0.0/24网段的1024-65534的源端口访问SSH
参考答案:
iptables -A INPUT -i eth0 -p tcp --dport 111 -j DROP
iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --sport 1024:65534 --dport ssh -j DROP
5)定制CLIENT端的防火墙访问状态
5.1)清除所有已经存在的规则;
5.2)设定预设策略,除了INPUT设为DROP,其他为ACCEPT;
5.3)开放本机的lo可以自由访问;
5.4)设定有相关的封包状态可以进入本机;
参考答案:
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPTLUPA
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
6)定制防火墙的MAC地址访问策略
6.1)清除所以已经存的规则
6.2)将INPUT设为DROP
6.3)将目标计算机的MAC设为ACCEPT
参考答案:
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -A INPUT -m mac --mac-source 00-C0-9F-79-E1-8A -j ACCEPT
7)设定ICMP包,状态为8的被DROP掉
参考答案:
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
8)定制防火墙的NAT访问策略
8.1)清除所有策略LUPA开源社区
8.2)重置ip_forward为1
8.3)通过MASQUERADE设定来源于192.168.6.0网段的IP通过192.168.6.217转发出去
8.4)通过iptables观察转发的数据包
参考答案:
iptables -F
iptables -X
iptables -Z
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.6.0 -o 192.168.6.217 -j MASQUERADE
iptables -L -nv
9)定制防火墙的NAT访问策略
9.1)清除所有NAT策略
9.2)重置ip_forward为1
9.3)通过SNAT设定来源于192.168.6.0网段通过eth1转发出去
9.4)用iptables观察转发的数据包
参考答案:
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.6.217
iptables -L -nv
10)端口转发访问策略
10.1)清除所有NAT策略
10.2)重置ip_forward为1LUPA
10.3)通过DNAT设定为所有访问192.168.6.217的22端口,都访问到192.168.6.191的22端口
10.4)设定所有到192.168.6.191的22端口的数据包都通过FORWARD转发
10.5)设定回应数据包,即通过NAT的POSTROUTING设定,使通讯正常
参考答案:
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 192.168.6.217 -p tcp --dport 22 -j DNAT --to-destination
192.168.6.191:22
iptables -A FORWARD -p tcp -d 192.168.6.191 --dport 22 -j ACCEPT
iptables -t nat -I POSTROUTING -p tcp --dport 22 -j MASQUERADE
星期四, 十二月 06, 2007
[转] Linux操作系统下RPM软件包的使用技巧
转自
http://linux.chinaitlab.com/administer/734524.html
1.如何安装rpm软件包
rmp软件包的安装可以使用程序rpm来完成。执行下面的命令rpm -i package_name.rpm
(package_name.rpm是你要安装的rpm包的文件名,一般置于当前目录下)安装过程中可能出现下面的提
示:…… conflict with …… 可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情
况下是无法正确安装的可以用 rpm ——force -i 强制安装即可…… is needed by …… …… is not
installed …… 此包需要的一些软件你没有安装可以用rpm ——nodeps -i 来忽略此信息也就是说,rpm
-i ——force ——nodeps 可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软
件包不能保证完全发挥功能
2.如何安装。src.rpm软件包
有些软件包是以。src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这
类软件包有两种安装方法:
方法一:
1)。执行rpm -i your-package.src.rpm
2)。 cd /usr/src/redhat/SPECS
3)。 rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4)。 cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5)。 ./configure 这一步和编译普通的源码软件一样,可以加上参数
6)。 make
7)。 make install
方法二:
1)。执行rpm -i you-package.src.rpm
2)。 cd /usr/src/redhat/SPECS
前两步和方法一相同
3)。 rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件这时,
在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等)在这个目录下,有一
个新的rpm包,这个是编译好的二进制文件。执行rpm -i new-package.rpm即可安装完成。
3.如何卸载rpm软件包
使用命令 rpm -e 包名,包名可以包含版本号等信息,但是不可以有后缀。rpm
比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
而不是:pm -e proftpd-1.2.8-1.i386.rpm
要是不能确定已经安装的包名是什么,只是记得一部分名子(如:ftp),可以用:rpm -qa | grep
ftp来查询准确名字
有时会出现一些错误或者警告:
…… is needed by …… 这说明这个软件被其他软件需要,不能随便卸载 可以用rpm -e ——
nodeps强制卸载。
4.如何不安装但是获取rpm包中的文件
使用工具rpm2cpio和cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio ——extract ——make-DirectorIEs
参数i和extract相同,表示提取文件。v表示指示执行进程,d和make-directory相同,表示根据包中
文件原来的路径建立目录,m表示保持文件的更新时间。
5.如何查看与rpm包相关的文件和其他信息
下面所有的例子都假设使用软件包mysql-3.23.54a-11
a.我的系统中安装了那些rpm软件包
rpm -qa 讲列出所有安装过的包
如果要查找所有安装过的包含某个字符串sql的软件包
rpm -qa |grep sql
b.如何获得某个软件包的文件全名
rpm -q mysql 可以获得系统中安装的mysql软件包全名,从中可以获得
当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11
c.一个rpm包中的文件安装到那里去了?
rpm -ql 包名注意这里的是不包括。rpm后缀的软件包的名称也就是说只能用mysql或者mysql-
3.23.54a-11而不是mysql-3.23.54a -11.rpm.如果只是想知道可执行程序放到那里去了,也可以用which
,比如which mysql,或whereis 比如:whereis mysql.
d.一个rpm包中包含那些文件
一个没有安装过的软件包,使用rpm -qlp ****.rpm:一个已经安装过的软件包,还可以使用rpm -ql
****.rpm
e.如何获取关于一个软件包的版本,用途等相关信息?
一个没有安装过的软件包,使用rpm -qip ****.rpm;一个已经安装过的软件包,还可以使用rpm -qi
****.rpm
f.某个程序是哪个软件包安装的,或者哪个软件包包含这个程序
rpm -qf `which 程序名` 返回软件包的全名;rpm -qif `which 程序名` 返回软件包的有关信息;
rpm -qlf `which 程序名` 返回软件包的文件列表。注意,这里不是引号,而是`,就是键盘左上角的那
个键。也可以使用rpm -qilf,同时输出软件包信息和文件列表
g.某个文件是哪个软件包安装的,或者哪个软件包包含这个文件
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也
可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者
which,然后使用rpm -qf例如:# whereis ftptop (结果为ftptop: /usr/bin/ftptop
/usr/share/man/man1/ftptop.1.gz)
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
星期一, 十二月 03, 2007
Inconsolable Backstreet boys 经典呀
偶然间从bt上down了个光盘下来look
没有别的发现 倒是发现这首曲子非常好听
也许偶是天蝎座的原因 也许这是backstreet比较伤感的曲子
但是真的很好听
本来想做成手机铃声 但是降噪的时候一直没有处理好
所以就在这里分享了
Inconsolable
I close the door
Like so many times, so many times before
Felt like a scene on the cutting room floor
When I let you walk away tonight
Without a word
I try to sleep, yeah
But the clock is stuck on thoughts of you and me
A thousand more regrets unraveling, ohh
If you were here right now, I swear,
I'd tell you this
Baby I don't want to waste another day
Keeping it inside it's killing me
Cause all I ever want, it comes right down to you
To you!
I'm wishing I could find the words to say
Baby I would tell you every time you leave
I'm inconsolable
I climb the walls,yeah
I can see the edge but I can't take the fall, no.
I've memorized the number
So why can't I make the call?
Maybe 'cause I know you'll always be with me
In the possibility
I don't want to be like this,
I just want to let you know,
Everything that I'm holding,
Is everything I can't let go, can't let go.
'Cause baby I don't want to waste another day
Don't you know it baby
I don't want to waste another day
Song:Inconsolable
Singer:Backstreet Boys
Backstreet Boys,2007年最新单曲,新专辑10月正式发行
End
原来还是10月的新单曲啊 哈
偶已经找好链接了
http://www.drip-music.com/bbs/uploadmp3/2007-8-19/inconsolable.mp3
欣赏一下吧
星期日, 十一月 25, 2007
星期五, 十一月 23, 2007
[转] 利用嗅探器之TcpDump分析网络安全
转自
http://www.lupaworld.com/bbs/thread-31348-1-1.html
前言:在如令网络系统中,随着网络重要性、复杂性的不断增长,作为一名网络工程师、监测者、分析者
或者是网络性能的评估者,您所扮演的角色对公司的成功是至关重要的。为了更好的完成工作,您需要透
视整个网络,识别关键的性能问题——从应用的响应时间到带宽的瓶颈以至于识别网络每一层所出现的问
题。在您每天的工作中,常常会着眼于未来用新的技术和应用扩展您的网络。网络探针分布在重要网段,
监视该网络线路上各协议,各计算机占用情况,监控网络上各种业务的网络流量及带宽,记录网络操作,
实现分布集中的网络分析Sniffer系统。本文将为你介绍如何利用嗅探器(sniffer)之网络数据采集分析工
具 TcpDump来详细网络及其安全分析。
一 嗅探器技术在网络中的应用
1 Sniffer简介
Sniffer即嗅探器的英文写法,嗅探器(sniffer)是最常见,也是最重要的技术之一。用过windows平台上
的sniffer工具(例如, netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用
sniffer工具简直可以对网络中的所有流量一览无余!Sniffer工具实际上就是一个网络上的抓包工具,同
时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,
只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不
应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的
效果。其实,sniffer工具既可以适合于黑客的使用,也同样有利于网络管理员和网络程序员。对于网络
管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过
sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过 sniffer工具来调试程序
。
它也可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。简
单一点解释:一部电话的窃听装置,可以用来窃听双方通话的内容,而计算机网络嗅探器则可以窃听计算
机程序在网络上发送和接收到的数据。可是,计算机直接所传送的数据,事实上是大量的二进制数据。因
此,一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据,嗅探器也就必须能够识别出那个
协议对应于这个数据片断,只有这样才能够进行正确的解码。计算机的嗅探器比起电话窃听器,有他独特
的优势:很多的计算机网络采用的是“共享媒体"。就是说,你不必中断他的通讯,并且配置特别的线路
,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。我
们称这种窃听方式为“基于混杂模式的嗅探”(promiscuousmode)。尽管如此,这种“共享”的技术发
展的很快,慢慢转向“交换”技术,这种技术会长期内会继续使用下去, 它可以实现有目的选择的收发
数据。
2 Sniffer在工作原理
以太网的数据传输是基于“共享”原理的:所有的同一本地网范围内的计算机共同接收到相同的数据包。
这意味着计算机直接的通讯都是透明可见的。正是因为这样的原因,以太网卡都构造了硬件的“过滤器”
这个过滤器将忽略掉一切和自己无关的网络信息。事实上是忽略掉了与自身MAC地址不符合的信息。嗅探
程序正是利用了这个特点,它主动的关闭了这个嗅探器,也就是前面提到的设置网卡“混杂模式”。因此
,嗅探程序就能够接收到整个以太网内的网络数据了信息了。
二 网络数据采集分析工具TcpDump的应用
1 网络数据采集分析工具TcpDump的简介
顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协
议、主机、网络或端口的过滤,并提供and、 or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是
一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护
和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂
模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中
存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。我们用尽量
简单的话来定义tcpdump,就是:dump the traffice on a network.,根据使用者的定义对网络上的数据
包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活
的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代
码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在
于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root
权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威
胁,而是对网络上的其他计算机的安全存在威胁。
2 网络数据采集分析工具TcpDump的安装
在linux下tcpdump的安装十分简单,一般由两种安装方式。一种是以rpm包的形式来进行安装。另外一种
是以源程序的形式安装。
rpm包的形式安装:这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通
过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下:
#rpm -ivh tcpdump-3_4a5.rpm
这样tcpdump就顺利地安装到你的linux系统中。怎么样,很简单吧。
源程序的安装:既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大
的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所
以我特别建议朋友们都采取这种源程序的安装方法。
第一步 取得源程序在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包,这种分发包有两种
形式,一种是tar压缩包(tcpdump- 3_4a5.tar.Z),另一种是rpm的分发包(tcpdump-3_4a5.src.rpm)。这两
种形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开:
#tar xvfz tcpdump-3_4a5.tar.Z
rpm的包可以使用如下命令安装:
#rpm -ivh tcpdump-3_4a5.src.rpm
这样就把tcpdump的源代码解压到/usr/src/redhat/SOURCES目录下.
第二步 做好编译源程序前的准备活动
在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpdump软件所需的库文件
。同样,你同时还要有一个标准的c语言编译器。在linux下标准的c 语言编译器一般是gcc。在tcpdump的
源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生 Makefile
文件。在Makefile.in文件中,可以根据系统的配置来修改BINDEST 和 MANDEST 这两个宏定义,缺省值是
BINDEST = @sbindir@
MANDEST = @mandir@
第一个宏值表明安装tcpdump的二进制文件的路径名,第二个表明tcpdump的man 帮助页的路径名,你可以
修改它们来满足系统的需求。
第三步 编译源程序
使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生
成Makefile文件,以便编译使用.make 命令则根据Makefile文件中的规则编译tcpdump的源程序。使用
make install命令安装编译好的tcpdump的二进制文件。
总结一下就是:
# tar xvfz tcpdump-3_4a5.tar.Z
# vi Makefile.in
# . /configure
# make
# make install
3 网络数据采集分析工具TcpDump的使用
普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
# tcpdump
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
^C
tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界
面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存
,等等。
然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都
截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数
据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地
址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man
tcpdump查看这些过滤规则的具体用法。
显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,
可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关
的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在
FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之
类的网络分析工具。
并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否
被用作攻击同网络的其他计算机的跳板。
May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled
虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行
分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据
包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲
更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、
udp等低层协议。
从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使
用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的
tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避
免捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow,它可以通过Packages
Collection来安装。
# pkg_add /cdrom/packages/security/tcpshow*
# tcpdump -c 3 -w tcpdump.out
tcpdump: listening on fxp0
# tcpshow < tcpdump.out
---------------------------------------------------------------------------
Packet 1
TIME:12:00:59.984829
LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>
---------------------------------------------------------------------------
Packet 2
TIME:12:01:01.074513 (1.089684)
LINK:00:A0:C9:AB:3CF -> FF:FF:FF:FF:FF:FF type=ARP
ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request
sender-MAC-addr=00:A0:C9:AB:3CF sender-IP-address=202.102.245.3
target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3
---------------------------------------------------------------------------
Packet 3
TIME:12:01:01.985023 (0.910510)
LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>
tcpshow能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择
最合适的参数对截获的数据包进行分析。从上面的例子中可以看出,tcpshow支持的协议也并不丰富,对
于它不支持的协议就无法进行解码。
除了tcpdump之外,FreeBSD的Packages Collecion中还提供了Ethereal和Sniffit两个网络分析工具,以
及其他一些基于网络分析方式的安全工具。其中Ethereal运行在 X Window 下,具有不错的图形界面,
Sniffit使用字符窗口形式,同样也易于操作。然而由于tcpdump对过滤规则的支持能力更强大,因此系统
管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底是
如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那个主
机最繁忙,网络瓶颈位于何处等等问题。因此网络分析工具是用于网络管理的宝贵系统工具。为了防止数
据被滥用的网络分析工具截获,关键还是要在网络的物理结构上解决。常用的方法是使用交换机或网桥将
信任网络和不信任网络分隔开,可以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网
络相互通信时的数据安全问题。如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使
用FreeBSD系统执行网桥任务。这需要使用option BRIDGE编译选项重新定制内核,此后使用bridge命令启
动网桥功能。
tcpdump采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
(1). tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 调用)和
snmp(简单 网络管理协议;)
(2). tcpdump的表达式介绍
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这
个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几
种类型的关键字。
第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是
一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类
型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传
输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明
目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数
据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地
址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协
议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻
辑运算,取非运算是 'not ' '! ', 与运算是'and','&&'或运算 是'or' ,'││';这些关键字可以组合
起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用
括号时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
(3). tcpdump的输出结果介绍
下面我们介绍几种典型的tcpdump命令的输出信息
A,数据链路层头信息
使用命令
#tcpdump --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如
下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表
示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数
据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP
数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主
机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大
小是8760.
B,ARP包的TCPDUMP输出信息
使用命令
#tcpdump arp
得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who
-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址
。
C,TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) ,
R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是
接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.
D,UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息是:
route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,
类型是UDP, 包的长度是lenth
三,利用网络数据采集分析工具TcpDump分析网络安全
作为IP网络的系统管理员,经常会遇到一些网络连接方面的故障,在排查这些接故障时,除了凭借经验外
,使用包分析软件往往会起到事半功倍的效果。
常用的包分析软件非常多,常见的如tcpdump,sniffer,windump,ettercap等。
1 网络数据采集分析工具TcpDump分析
(1)网络的数据过滤
不带任何参数的TcpDump将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一
定全都需要,而且数据太多不利于分析。所以,我们应当先想好需要哪些数据,TcpDump提供以下参数供
我们选择数据:
-b在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。例如:
server#tcpdump -b arp
将只显示网络中的arp即地址转换协议信息。
-i选择过滤的网络接口,如果是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接
口上通过的数据。例如:
server#tcpdump -i eth0
只显示通过eth0接口上的所有报头。src、dst、port、host、net、ether、gateway这几个选项又分别包
含src、dst、 port、host、net、ehost等附加选项。他们用来分辨数据包的来源和去向,src host
192.168.0.1指定源主机IP地址是192.168.0.1,dst net 192.168.0.0/24指定目标是网络192.168.0.0。
以此类推,host是与其指定主机相关无论它是源还是目的,net是与其指定网络相关的,ether后面跟的不
是IP地址而是物理地址,而gateway则用于网关主机。可能有点复杂,看下面例子就知道了:
server#tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头。
server#tcpdump ether src 00:50:04:BA:9B and dst……
过滤源主机物理地址为XXX的报头(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽
)。
server#Tcpdump src host 192.168.0.1 and dst port not telnet
过滤源主机192.168.0.1和目的端口不是telnet的报头。
ip icmp arp rarp和tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。例
如:
server#tcpdump ip src……
只过滤数据-链路层上的IP报头。
server#tcpdump udp and src host 192.168.0.1
只过滤源主机192.168.0.1的所有udp报头。
(2)网络的数据显示/输入输出
TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示:
-l可以将数据重定向。
如tcpdump -l>tcpcap.txt将得到的数据存入tcpcap.txt文件中。
-n不进行IP地址到主机名的转换。
如果不使用这一项,当系统中存在某一主机的主机名时,TcpDump会把IP地址转换为主机名显示,就像这
样:eth0<ntc9.1165> router.domain.net.telnet,使用-n后变成了:eth0<192.168.0.9.1165>
192.168.0.1.telnet。
-nn不进行端口名称的转换。
上面这条信息使用-nn后就变成了:eth0<ntc9.1165>router.domain.net.23。
-N不打印出默认的域名。
还是这条信息-N后就是:eth0<ntc9.1165>router.telnet。
-O不进行匹配代码的优化。
-t不打印UNIX时间戳,也就是不显示时间。
-tt打印原始的、未格式化过的时间。
-v详细的输出,也就比普通的多了个TTL和服务类型。
2 网络数据采集分析工具TcpDump分析详细例子
(1)网络邮件服务器(mail)在排障
我们先来看看故障现象,在一局域网中新安装了后台为qmail的邮件服务器server,邮件服务器收发邮件
等基本功能正常,但在使用中发现一个普遍的怪现象:pc机器上发邮件时连接邮件服务器后要等待很久的
时间才能开始实际的发送工作。我们来看,从检测来看,网络连接没有问题,邮件服务器server和下面的
pc性能都没有问题,问题可能出在哪里呢?为了进行准确的定位,我们在pc机client上发送邮件,同时在
邮件服务器server上使用 tcpdump对这个client的数据包进行捕获分析,如下:
server#tcpdump host client
tcpdump: listening on hme0
23:41:30.040578 client.1065 > server.smtp: S 1087965815:1087965815(0) win 64240 (DF)
23:41:30.040613 server.smtp > client.1065: S 99285900:99285900(0) ack 1087965816 win 10136
(DF)
23:41:30.040960 client.1065 > server.smtp: . ack 1 win 64240 (DF)
顺利的完成,到目前为止正常,我们再往下看:
23:41:30.048862 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
23:41:33.411006 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
23:41:40.161052 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
23:41:56.061130 server.33152 > client.113: R 99370917:99370917(0) win 8760 (DF)
23:41:56.070108 server.smtp > client.1065: P 1:109(108) ack 1 win 10136 (DF)
看出问题了,问题在:我们看到server端试图连接client的113identd端口,要求认证,然而没有收到
client端的回应,server 端重复尝试了3次,费时26秒后,才放弃认证请求,主动发送了reset标志的数
据包,开始push后面的数据,而正是在这个过程中所花费的26秒时间,造成了发送邮件时漫长的等待情况
。问题找到了,就可以修改了,我们通过修改服务器端的qmail配置,使它不再进行113端口的认证,再次
抓包,看到邮件 server不再进行113端口的认证尝试,而是在三次检测后直接push数据,问题得到完美的
解决。
(2)网络安全中的ARP协议的故障
先看故障现象,局域网中的一台采用solaris操作系统的服务器A-SERVER网络连接不正常,从任意主机上
都无法ping通该服务器。排查:首先检查系统,系统本身工作正常,无特殊进程运行,cpu,内存利用率
正常,无挂接任何形式的防火墙,网线正常。此时我们借助tcpdump来进行故障定位,首先我们将从B-
CLIENT主机上执行ping命令,发送icmp数据包给A-SERVER,如下:
[root@redhat log]# ping A-SERVER
PING A-SERVER from B-CLIENT : 56(84) bytes of data.
此时在A-SERVER启动tcpdump,对来自主机B-CLIENT的数据包进行捕获。
A-SERVER# tcpdump host B-CLIENT
tcpdump: listening on hme0
16:32:32.611251 arp who-has A-SERVER tell B-CLIENT
16:32:33.611425 arp who-has A-SERVER tell B-CLIENT
16:32:34.611623 arp who-has A-SERVER tell B-CLIENT
我们看到,没有收到预料中的ICMP报文,反而捕获到了B-CLIENT发送的arp广播包,由于主机B-CLIENT无
法利用arp得到服务器A- SERVER的地址,因此反复询问A-SERVER的MAC地址,由此看来,高层的出问题的
可能性不大,很可能在链路层有些问题,先来查查主机A- SERVER的arp表:
A-SERVER# arp -a
Net to Media Table
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
hme0 netgate 255.255.255.255 00:90:6d:f2:24:00
hme0 A-SERVER 255.255.255.255 S 00:03:ba:08:b2:83
hme0 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00
请注意A-SERVER的Flags位置,我们看到了只有S标志。我们知道,solaris在arp实现中,arp的flags需要
设置P标志,才能响应ARP requests。
手工增加p位
A-SERVER# arp -s A-SERVER 00:03:ba:08:b2:83 pub
此时再调用arp -a看看
A-SERVER# arp -a
Net to Media Table
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
hme0 netgate 255.255.255.255 00:90:6d:f2:24:00
hme0 A-SERVER 255.255.255.255 SP 00:03:ba:08:b2:83
hme0 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00
我们看到本机已经有了PS标志,此时再测试系统的网络连接恢复正常,问题得到解决。
(3)netflow软件的问题
先看故障现象,在新装的网管工作站上安装cisco netflow软件对路由设备流量等进行分析,路由器按照要
求配置完毕,本地工作上软件安装正常,无报错信息,但是启动netflow collector却收不到任何路由器
上发出的流量信息,导致该软件失效。排查现象,反复检查路由和软件,配置无误。采用逐步分析的方法
,首先先要定位出有问题的设备,是路由器根本没有发送流量信息还是本地系统接收出现了问题?突然想
到在路由器上我们定义了接收的client端由udp端口9998接收数据,可以通过监视这个端口来看路由器是
否确实发送了udp数据,如果系统能够接收到来自路由的数据包,那么路由方面的问题可能行不大,反之
亦然。
在网管工作站上使用tcpdump来看看:
nms#tcpdump port 9995
tcpdump: listening on hme0
18:15:34.373435 routea > nms.9995: udp 1464
18:15:34.373829 routea.50111 > nms.9995: udp 1464
18:15:34.374100 routea.50111 > nms.9995: udp 1464
马上我们就看到数据包确实从路由器上发过来了,问题出在路由器的可能性基本排除,重新核查系统,果
然,网管工作站上安装了防火墙,udp端口9998是被屏蔽的,调整工作站上的防火墙配置,netflow工作恢
复正常,故障得以排除。
结尾:上面我们通过3个实际的例子演示了网络数据采集分析工具TcpDump分析软件在故障解决中起到的作
用,通过这些例子,我们不难发现,用好包分析软件,对系统管理员快速准确定位网络故障,分析网络问
题有不可替代的作用。任何事情都具有两面性,事实上能够获得网络上传输的数据的工具对于维护网络运
行也非常重要,网络需要这些工具软件来帮助分析网络状态、解决各种网络故障,它们是网络工程师的好
帮手。
在市场上销售的有好几种专用的网络分析设备,来实现截获数据并进行分析的目的。虽然这些硬件实现的
设备虽然功能强大,但价格昂贵,而使用软件通过标准计算机的网络接口来实现这种功能,相对来讲对于
一般使用者还是可以承受的。
星期五, 九月 21, 2007
Windows自动启动程序十大藏身之处
转自http://windows.chinaitlab.com/administer/730404.html
Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,
实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八
个注册键。
一、当前用户专有的启动文件夹
这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户
启动文件夹一般在:\Documents and Settings\<用户名字>\「开始」菜单\程序\启动,其中“<用
户名字>”是当前登录的用户帐户名称。
二、对所有用户有效的启动文件夹
这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷
方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:\Documents and
Settings\All Users\「开始」菜单\程序\启动。
三、Load注册键
介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\ CurrentVersion\Windows\load。
四、Userinit注册键
位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个
userinit.exe,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)
。
五、Explorer\Run注册键
和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和
HKEY_LOCAL_MACHINE下都有,具体位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\
Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
\CurrentVersion\Policies\Explorer\Run。
六、RunServicesOnce注册键
RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册
键启动的程序。RunServicesOnce注册键的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\RunServicesOnce,
和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\RunServicesOnce。
七、RunServices注册键
RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录
之前。RunServices的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\RunServices。
八、RunOnce\Setup注册键
RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ RunOnce\Setup,
和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\RunOnce\Setup。
九、RunOnce注册键
安装程序通常用RunOnce键自动运行程序,它的位置在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。
HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指
定的程序之前。 HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内
容之后运行。如果是XP,你还需要检查一下
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\RunOnceEx。
十、Run注册键
Run是自动运行程序最常用的注册键,位置在:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。
HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“
启动”文件夹之前。
星期三, 九月 19, 2007
Linux安全设置手册
转自 http://linux.chinaitlab.com/safe/730219.html
本文讲述了如何通过基本的安全措施,使你的Linux系统变得可靠。
1、Bios Security
一定要给Bios设置密码,以防通过在Bios中改变启动顺序,而可以从软盘启动。这样可以阻止别
人试图用特殊的启动盘启动你的系统,还可以阻止别人进入Bios改动其中的设置(比如允许通过软盘启动
等)。
2、LILO Security
在"/etc/lilo.conf"文件中加入下面三个参数:time-out,restricted,password。这三个参数可
以使你的系统在启动lilo时就要求密码验证。
第一步:
编辑lilo.conf文件(vi /etc/lilo.comf),假如或改变这三个参数:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 #把这行该为00
prompt
Default=linux
restricted #加入这行
password= #加入这行并设置自己的密码
image=/boot/vmlinuz-2.2.14-12
label=linux
initrd=/boot/initrd-2.2.14-12.img
root=/dev/hda6
read-only
第二步:
因为"/etc/lilo.conf"文件中包含明文密码,所以要把它设置为root权限读取。
[root@kapil /]# chmod 600 /etc/lilo.conf
第三步:
更新系统,以便对"/etc/lilo.conf"文件做的修改起作用。
[Root@kapil /]# /sbin/lilo -v
第四步:
使用"chattr"命令使"/etc/lilo.conf"文件变为不可改变。
[root@kapil /]# chattr +i /etc/lilo.conf
这样可以防止对"/etc/lilo.conf"任何改变(以外或其他原因)
3、删除所有的特殊账户
你应该删除所有不用的缺省用户和组账户(比如lp, sync, shutdown, halt, news, uucp,
operator, games, gopher等)。
删除用户:
[root@kapil /]# userdel LP
删除组:
[root@kapil /]# groupdel LP
4、选择正确的密码
在选择正确密码之前还应作以下修改:
修改密码长度:在你安装linux时默认的密码长度是5个字节。但这并不够,要把它设为8。修改
最短密码长度需要编辑login.defs文件(vi /etc/login.defs),把下面这行
PASS_MIN_LEN 5
改为
PASS_MIN_LEN 8
login.defs文件是login程序的配置文件。
5、打开密码的shadow支持功能:
你应该打开密码的shadow功能,来对password加密。使用"/usr/sbin/authconfig"工具打开
shadow功能。如果你想把已有的密码和组转变为shadow格式,可以分别使用"pwcov,grpconv"命令。
6、root账户
在unix系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户,
系统会自动注销。通过修改账户中"TMOUT"参数,可以实现此功能。TMOUT按秒计算。编辑你的profile文
件(vi /etc/profile),在"HISTFILESIZE="后面加入下面这行:
TMOUT=3600
3600,表示60*60=3600秒,也就是1小时。这样,如果系统中登陆的用户在一个小时内都没有动
作,那么系统会自动注销这个账户。你可以在个别用户的".bashrc"文件中添加该值,以便系统对该用户
实行特殊的自动注销时间。
改变这项设置后,必须先注销用户,再用该用户登陆才能激活这个功能。
7、取消普通用户的控制台访问权限
你应该取消普通用户的控制台访问权限,比如shutdown、reboot、halt等命令。
[root@kapil /]# rm -f /etc/security/console.apps/
是你要注销的程序名。
8、取消并反安装所有不用的服务
取消并反安装所有不用的服务,这样你的担心就会少很多。察看"/etc/inetd.conf"文件,通过
注释取消所有你不需要的服务(在该服务项目之前加一个"#")。然后用"sighup"命令升级"inetd.conf"
文件。
第一步:
更改"/etc/inetd.conf"权限为600,只允许root来读写该文件。
[Root@kapil /]# chmod 600 /etc/inetd.conf
第二步:
确定"/etc/inetd.conf"文件所有者为root。
第三步:
编辑 /etc/inetd.conf文件(vi /etc/inetd.conf),取消下列服务(你不需要的):ftp,
telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth等等。把
不需要的服务关闭可以使系统的危险性降低很多。
第四步:
给inetd进程发送一个HUP信号:
[root@kapil /]# killall -HUP inetd
第五步:
用chattr命令把/ec/inetd.conf文件设为不可修改,这样就没人可以修改它:
[root@kapil /]# chattr +i /etc/inetd.conf
这样可以防止对inetd.conf的任何修改(以外或其他原因)。唯一可以取消这个属性的人只有
root。如果要修改inetd.conf文件,首先要是取消不可修改性质:
[root@kapil /]# chattr -i /etc/inetd.conf
别忘了该后再把它的性质改为不可修改的。
9、TCP_WRAPPERS
使用TCP_WRAPPERS可以使你的系统安全面对外部入侵。最好的策略就是阻止所有的主机
(在"/etc/hosts.deny" 文件中加入 "ALL: ALL@ALL, PARANOID" ),然后再在"/etc/hosts.allow"
文件中加入所有允许访问的主机列表。
第一步:
编辑hosts.deny文件(vi /etc/hosts.deny),加入下面这行
# Deny access to everyone.
ALL: ALL@ALL, PARANOID
这表明除非该地址包好在允许访问的主机列表中,否则阻塞所有的服务和地址。
第二步:
编辑hosts.allow文件(vi /etc/hosts.allow),加入允许访问的主机列表,比如:
ftp: 202.54.15.99 foo.com
202.54.15.99和 foo.com是允许访问ftp服务的ip地址和主机名称。
第三步:
tcpdchk程序是tepd wrapper设置检查程序。它用来检查你的tcp wrapper设置,并报告发现
的潜在的和真实的问题。设置完后,运行下面这个命令:
[Root@kapil /]# tcpdchk
10、禁止系统信息暴露
当有人远程登陆时,禁止显示系统欢迎信息。你可以通过修改"/etc/inetd.conf"文件来达到这
个目的。
把/etc/inetd.conf文件下面这行:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
修改为:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
-h
在最后加"-h"可以使当有人登陆时只显示一个login:提示,而不显示系统欢迎信息。
11、修改"/etc/host.conf"文件
"/etc/host.conf"说明了如何解析地址。编辑"/etc/host.conf"文件(vi /etc/host.conf),
加入下面这行:
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
第一项设置首先通过DNS解析IP地址,然后通过hosts文件解析。第二项设置检测是
否"/etc/hosts"文件中的主机是否拥有多个IP地址(比如有多个以太口网卡)。第三项设置说明要注意对
本机未经许可的电子欺骗。
12、使"/etc/services"文件免疫
使"/etc/services"文件免疫,防止未经许可的删除或添加服务:
[root@kapil /]# chattr +i /etc/services
13、不允许从不同的控制台进行root登陆
"/etc/securetty"文件允许你定义root用户可以从那个TTY设备登陆。你可以编
辑"/etc/securetty"文件,再不需要登陆的TTY设备前添加"#"标志,来禁止从该TTY设备进行root登陆。
14、禁止任何人通过su命令改变为root用户
su(Substitute User替代用户)命令允许你成为系统中其他已存在的用户。如果你不希望任何人
通过su命令改变为root用户或对某些用户限制使用su命令,你可以在su配置文件(在"/etc/pam.d/"目录
下)的开头添加下面两行:
编辑su文件(vi /etc/pam.d/su),在开头添加下面两行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/Pam_wheel.so group=wheel
这表明只有"wheel"组的成员可以使用su命令成为root用户。你可以把用户添加到"wheel"组,以
使它可以使用su命令成为root用户。
15、Shell logging
Bash shell在"~/.bash_history"("~/"表示用户目录)文件中保存了500条使用过的命令,这
样可以使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一
个".bash_history"文件。bash shell应该保存少量的命令,并且在每次用户注销时都把这些历史命令删
除。
第一步:
"/etc/profile"文件中的"HISTFILESIZE"和"HISTSIZE"行确定所有用户的".bash_history"文件
中可以保存的旧命令条数。强烈建议把把"/etc/profile"文件中的"HISTFILESIZE"和"HISTSIZE"行的值设
为一个较小的数,比如 30。编辑profile文件(vi /etc/profile),把下面这行改为:
HISTFILESIZE=30
HISTSIZE=30
这表示每个用户的".bash_history"文件只可以保存30条旧命令。
第二步:
网管还应该在"/etc/skel/.bash_logout" 文件中添加下面这行"rm -f
$HOME/.bash_history" 。这样,当用户每次注销时,".bash_history"文件都会被删除。
编辑.bash_logout文件(vi /etc/skel/.bash_logout) ,添加下面这行:
rm -f $HOME/.bash_history
16、禁止Control-Alt-Delete 键盘关闭命令
在"/etc/inittab" 文件中注释掉下面这行(使用#):
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改为:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
为了使这项改动起作用,输入下面这个命令:
[root@kapil /]# /sbin/init q
17、给"/etc/rc.d/init.d" 下script文件设置权限
给执行或关闭启动时执行的程序的script文件设置权限。
[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
这表示只有root才允许读、写、执行该目录下的script文件。
18、隐藏系统信息
在缺省情况下,当你登陆到linux系统,它会告诉你该linux发行版的名称、版本、内核版本、服
务器的名称。对于黑客来说这些信息足够它入侵你的系统了。你应该只给它显示一个"login:"提示符。
第一步:
编辑"/etc/rc.d/rc.local" 文件,在下面显示的这些行前加一个"#",把输出信息的命令注释
掉。
# This will overwrite /etc/issue at every boot. So, make any changes
you
# want to make to /etc/issue here or you will lose them when you
reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
第二步:
删除"/etc"目录下的"isue.net"和"issue"文件:
[root@kapil /]# rm -f /etc/issue
[root@kapil /]# rm -f /etc/issue.net
19、禁止不使用的SUID/SGID程序
如果一个程序被设置成了SUID root,那么普通用户就可以以root身份来运行这个程序。网管应
尽可能的少使用SUID/SGID 程序,禁止所有不必要的SUID/SGID程序。
查找root-owned程序中使用's'位的程序:
[root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec
ls -lg {} \;
用下面命令禁止选中的带有's'位的程序:
[root@kapil /]# chmod a-s [program]
根据上面这些安全指导方针设置后,系统管理员就会拥有一个基本安全的系统。上面这些工作有
些是个持续的过程,网管要不断进行这些工作,以保持系统的安全性。
星期一, 九月 10, 2007
root锁屏何必麻烦?用xlockmore轻松搞定
这让经常挂机的可不爽啦
其实可以用xlockmore搞定的
在FC6下装上个玩玩
yum install xlockmore
在装个主题和图形化工具
yum install xlockmore-motif
yum install xlockmore-gtk
这样点击Applications->Graphics->Xlock就可以锁屏了
最后来个单击锁屏:把Xlock的图标拖到任务栏,轻松搞定
星期日, 九月 09, 2007
安装snort-inline2
首先要装几个包,先卸掉libnet-devel,于libnet10冲突
安装libipq,似乎这个东西在iptables-devel里
所以先 yum install iptables-devel
然后 yum install libnet10
这样再./configure 就ok了。
至于libnetfilter-devel这个包,似乎无关紧要,有机会再试试,可能不同版本需要。
星期四, 八月 23, 2007
把man手册打印出来看的方法
COL(1) BSD General Commands Manual COL(1)
NAME
col - filter reverse line feeds from input
SYNOPSIS
col [-bfpx] [-l num]
DESCRIPTION
Col filters out reverse (and half reverse) line feeds so the output is in the correct order with only for-
ward and half forward line feeds, and replaces white-space characters with tabs where possible. This can
be useful in processing the output of nroff(1) and tbl(1).
Col reads from standard input and writes to standard output.
The options are as follows:
-b Do not output any backspaces, printing only the last character written to each column position.
-f Forward half line feeds are permitted (猬茆fine猬"猬" mode). Normally characters printed on a half line
boundary are printed on the following line.
-p Force unknown control sequences to be passed through unchanged. Normally, col will filter out any
control sequences from the input other than those recognized and interpreted by itself, which are
listed below.
-x Output multiple spaces instead of tabs.
-lnum Buffer at least num lines in memory. By default, 128 lines are buffered.
如果我们要把某个程序的man手册打印出来,可以这样
man ettercap |col -b >ettercap_man.txt
这样就可以再加工并打印出来了
哈哈
星期二, 八月 21, 2007
[转]在Linux操作系统下修改IP、DNS和路由配置
ifconfig eth0 新ip
然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip
一、修改IP地址
[aeolus@db1 network-scripts]$ vi ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=219.136.241.211
NETMASK=255.255.255.128
GATEWAY=219.136.241.254
二、修改网关
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Aaron
GATEWAY=192.168.1.1
三、修改DNS
[aeolus@db1 etc]$ vi resolv.conf
nameserver 202.96.128.68
nameserver 219.136.241.206
四、重新启动网络配置
/etc/init.d/network restart
修改ip地址
即时生效:
# ifconfig eth0 192.168.0.20 netmask 255.255.255.0
启动生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0
修改default gateway
即时生效:
# route add default gw 192.168.0.254
启动生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0
修改dns
修改/etc/resolv.conf
修改后可即时生效,启动同样有效
修改host name
即时生效:
# hostname fc2
启动生效:
修改/etc/sysconfig/network
星期五, 八月 17, 2007
Avril Lavigne——I Will Be (一直很喜欢这首)
Avril Lavigne不对外公开的单曲“I Will Be”只有美国的歌迷在iTunes网站上付费下载艾薇儿新专辑《The Best Damn Thing》后才可以收听,并不对外公开。确实好听呀。
I Will Be
There's nothin' I could say to you
Nothin' I could ever do to make you see
What you mean to me
All the pain, the tears I cried
Still, you never said good-bye
And now I know
How far you'd go
I know I let you down
But it's not like that now
This time I'll never let you go
[Chorus:]
I will be all that you want
And get myself together
'Cause you keep me from falling apart
All my life
I'll be with you forever
To get you through the day
And make everything okay
I thought that I had everything
I didn't know what life could bring
But now I see
Honestly
You're the one thing I got right
The only one I let inside
Now I can breathe
'Cause you're here with me
And if I let you down
I'll turn it all around
'Cause I will never let you go
[Chorus]
'Cause without you
I can't sleep
I'm not gonna ever, ever let you leave
You're all I got
You're all I want
Yeah
And without you I don't know what I'd do
I could never ever live a day without you here
With me
Do you see?
You're all I need
星期一, 八月 13, 2007
不小心又中灰鸽子病毒了,搞定它
昨天从bt上down了一个软件光盘,用Daemon tools一打开,Nortun就开始报警,当时没在意,本以为Nortun能搞定这个病毒,没仔细多关照。这是Nortun的历史记录
今天大清早起床,本来心情还不错,因为今天天气晴朗呀。可一开机居然发现又是一个SYSTEM用户运行的IEXPLORE,以前我中过招,这次有经验。灰鸽子又发作了,看来是个变种,而且免杀的。在NAT技术广泛使用的网络时代,放木马有意思麽?哎,又惹我老人家上火。
看来又要我亲自动手了。
首先run一下 services.msc 看看又添了哪个异常的服务了,现在的病毒和木马真烦,整天想着把自己弄成个服务伪装一下,能骗得过高手麽?
果然有一个不正常的
查看一下这个东西的properties,定位一下到底哪个文件在捣乱。原来是这个文件 C:\Program Files\Common Files\Microsoft Shared\MSInfo\face.exe
同时查了一下system32目录下,发现这个东西居然还自己备份了一下,_face.exe
在正常模式下是删不掉的,灰鸽子的技术含量还是蛮高的,只好到安全模式下搞定了。
到safe mode下,删删,然后运行regedit,到HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTRRLSET\SERVICES里把那个telligent transfer 的服务删掉。
最后,reboot
好了 ,正常了。
真实麻烦,大清早的美好时光折腾这个玩意了。
星期二, 八月 07, 2007
如何在rdesktop全屏和窗口模式中切换
ctrl+alt+enter 就可以来回切换了 ,哈 这下可方便了。
星期五, 五月 25, 2007
[转]解析“extern”
1、 声明外部变量
现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是
互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。创建一个工程,里面含有A.cpp和B.cpp两个简单的C++源文件:
//A.cpp int i; void main() { } |
//B.cpp int i; |
这两个文件极为简单,在A.cpp中我们定义了一个全局变量i,在B中我们也定义了一个全局变量i。
我们对A和B分别编译,都可以正常通过编译,但是进行链接的时候,却出现了错误,错误提示如下:
Linking... B.obj : error LNK2005: "int i" (?i@@ Debug/A.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe. A.exe - 2 error(s), 0 warning(s) |
这就是说,在编译阶段,各个文件中定义的全局变量相互是透明的,编译A时觉察不到B中也定义了i,同样,编译B时觉察不到A中也定义了i。
但是到了链接阶段,要将各个文件的内容“合为一体”,因此,如果某些文件中定义的全局变量名相同的话,在这个时候就会出现错误,也就是上面提示的重复定义的错误。
因此,各个文件中定义的全局变量名不可相同。
在链接阶段,各个文件的内容(实际是编译产生的obj文件)是被合并到一起的,因而,定义于某文件内的全局变量,在链接完成后,它的可见范围被扩大到了整个程序。
这样一来,按道理说,一个文件中定义的全局变量,可以在整个程序的任何地方被使用,举例说,如果A文件中定义了某全局变量,那么B文件中应可以该变量。修改我们的程序,加以验证:
//A.cpp void main() { i = 100; //试图使用B中定义的全局变量 } |
//B.cpp int i; |
编译结果如下:
Compiling... A.cpp C:\Documents and Settings\wangjian\桌面\try extern\A.cpp(5) : error C2065: 'i' : undeclared identifier Error executing cl.exe. A.obj - 1 error(s), 0 warning(s) |
编译错误。
其实出现这个错误是意料之中的,因为:文件中定义的全局变量的可见性扩展到整个程序是在链接完成之后,而在编译阶段,他们的可见性仍局限于各自的文件。
编译器的目光不够长远,编译器没有能够意识到,某个变量符号虽然不是本文件定义的,但是它可能是在其它的文件中定义的。
虽然编译器不够远见,但是我们可以给它提示,帮助它来解决上面出现的问题。这就是extern的作用了。
extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
我们为上面的错误程序加上extern关键字:
//A.cpp extern int i; void main() { i = 100; //试图使用B中定义的全局变量 } |
//B.cpp int i; |
顺利通过编译,链接。
2、 在C++文件中调用C方式编译的函数
C方式编译和C++方式编译
相对于C,C++中新增了诸如重载等新特性,对于他们的编译,必然有一些重要的区别。
我们将下面的小程序分别按C和C++方式编译,来探讨两种编译方式的区别。
int i; int func(int t) { return 0; } void main() { } |
以C方式编译的结果:
COMM _i : DWORD PUBLIC _func PUBLIC _main |
以C++方式编译的结果:
PUBLIC ?i@@ PUBLIC ?func@@YAHH@Z ; func PUBLIC _main |
可见,C方式编译下,变量名和函数名之前被统一加上了一个下划线,而C++编译后的结果却复杂的多,i变成了?i@@
多文件程序中的函数调用
一般情况下,工程中的文件都是CPP文件(以及头文件)。如下面的程序仅包含两个文件:A.CPP和B.CPP:
//A.CPP void func(); void main() { func(); } |
//B.CPP void func() { } |
程序的结构是这样的:在文件B.CPP中定义了一个函数void func(),main函数位于文件A.CPP,在main函数中调用了B中定义的函数func()。
要在A中调用B中定义的函数,必须要加上该函数的声明。如本例中的void func();就是对函数func()的声明。
如果没有声明的话,编译A.CPP时就会出错。因为编译器的目光只局限于被编译文件,必须通过加入函数声明来告诉编译器:“某个函数是定义在其它的文件中的,你要放行!”,这一点跟用extern来声明外部全局变量是一个道理。
需要注意的是,一般的程序都是通过包含头文件来完成函数的声明。拿本例来说,一般是创建一个头文件B.H,在头文件中加入声明语句void func(); 并且在A.CPP中加入包含语句:#include “B.H”。
在C++程序中,头文件的功能从函数声明被扩展为类的定义。
不同编译方式下的函数调用
如果在工程中,不仅有CPP文件,还有以C方式编译的C文件,函数调用就会有一些微妙之处。我们将B.CPP改作B.C:
//A.CPP void func(); void main() { func(); } |
//B.C void func() { } |
对A.CPP和B.C分别编译,都没有问题,但是链接时出现错误。
Linking... A.obj : error LNK2001: unresolved external symbol "void __cdecl func(void)" (?func@@YAXXZ) Debug/A.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. A.exe - 2 error(s), 0 warning(s) |
原因就在于不同的编译方式产生的冲突。
对于文件A,是按照C++的方式进行编译的,其中的func()调用被编译成了
call ?func1@@YAXXZ |
如果B文件也是按照C++方式编译的,那么B中的func函数名也会被编译器改成?func1@@YAXXZ,这样的话,就没有任何问题。
但是现在对B文件,是按照C方式编译的,B中的func函数名被改成了_func,这样一来,A中的call ?func1@@YAXXZ这个函数调用就没有了着落,因为在链接器看来,B文件中没有名为?func1@@YAXXZ的函数。
事实是,我们编程者知道,B文件中有A中调用的func函数的定义,只不过它是按照C方式编译的,故它的名字被改成了_func。因而,我们需要通过某种方式告诉编译器:“B中定义的函数func()经编译后命名成了_func,而不是?func1@@YAXXZ,你必须通过call _func来调用它,而不是call ?func1@@YAXXZ。”简单的说,就是告诉编译器,调用的func()函数是以C方式编译的,fun();语句必须被编译成call _func;而不是call ?func1@@YAXXZ。
我们可以通过extern关键字,来帮助编译器解决上面提到的问题。
对于本例,只需将A.CPP改成如下即可:
//A.CPP extern "C" { void func(); } void main() { func(); } |
察看汇编代码,发现此时的func();语句被编译成了call _func。
3、 补充
同2一样,仍然是C,C++混合编程的情形,考虑下面的程序:
//A.CPP extern int i; void main() { i = 100; } |
//B.C int i; |
程序很简单:在文件B.C中定义了一个全局变量i,在A.CPP中使用了这个全局变量。
编译没有问题,链接时却出现错误:
Linking... A.obj : error LNK2001: unresolved external symbol "int i" (?i@@ Debug/A.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. A.exe - 2 error(s), 0 warning(s) |
这是因为,在C方式编译下,i被重命名为_i,而在C++方式下,i会被重命名为?i@@
因而,我们只用extern int i;来声明还不够,必须告诉编译器,全局变量i是以C方式编译的,
它会被重命名为_i,而不是?i@@
我们修改A.CPP,如下:
//A.CPP extern "C" { int i; } void main() { i = 100; } |
程序正常通过编译和链接。
我们察看一下汇编代码,发现语句i = 100;被编译成了mov DWORD PTR _i, 100。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=401114