跳到正文

天亮了,你不再属于我

又看到他了,那种火热的眼光穿过网络,落在我唇边,如果不是我自作多情的话,此时的他应该想着更直白的内容,他的眼里写满落寂,或者是因为这样的夜晚太寂寞。如果他就在我身边,或者不远的地方,也许就会有些什么发生,我想。

  从最早的喜欢那个名字,到讨厌这样的名字,再到喜欢上这个名字所代表的人,经历了两个季节,在那些个漫漫寒冬里,我一直渴望有个名字可以让我抱着取暖,而那个缠绵的名字总让我在黑夜感到孤独。

[separator]  我想我的心就是那冰山,等着什么人来融化,他的手,隔着网络,拂过我的黑发,就那么一瞬间让我感到了温柔,我如一个弥水的孩子,抓住浮过我生命的稻草,从此,深深的网络里,我有了牵挂与温柔。

  一个男人,他的不定时的问候,和问候后面所显示出来的温柔,让我沉沦,而我,只能像一个可怜的孩子,望着橱窗里各式琳琅满目的点心,感觉心痛的原因是因为不能把它带回家,不能自己品尝,最多也只能在睡不着的夜晚,把他拿出来想一遍。

  我开始在日记里乱写,乱发感慨,我说我喜欢上一个男人,然后又开始否认,只因为我叫他哥哥,我怕因为我的喜欢,而让我们连最委屈的兄妹都做不成,我怕因为我的走近,而让距离更遥远。
 我不是一个成功的猎人,但我相信有一天,他会知道我是怎么样守株待兔的。不知道能不能让他自己说出来,我想我需要时间,需要耐心,需要坚持。喜欢上他的那一刻,天是蓝色的,于是爱上一抹蓝。

  沉默了许久过后,我走进一家网吧,我还是想那一抹蓝色,然后遇上他,他说他喝多了,他说他爱上了一个女子,他说他开着一部桑塔拉轿车,他说他总是在开车的时候,想着一个像妖精一样,迷着他的女子。

  有那么几秒钟,我们都沉默了,谁也不说话,本来只是隔着薄薄的窗纸,就在这么一瞬间,捅破了,尴尬的同时,觉得羞涩。他说你爱我吗?爱,爱吗,爱,却不敢回车,我知道,只要我一回车,那就是堕落,可是我却偏偏受不起他的诱惑,也许是酒精的作用,他涨满红潮的脸,有着一种勾引。

  悄悄的伸出手,摸索他显示在我银屏上的图像,不说话,不敢说话,怕我的语气出卖我,他也怔怔的看着我,眼睛有些红,突然感觉他心里一定在想某些事情,这样一想,才发现原来我对他也是心术不正。因为我的脸有些躁热。

  脸上泛起的红潮让我尴尬,我迅速逃离网吧,此刻我需要安静,需要沉睡,就在进门的一瞬间,电话响起来。他说我想你,我是真的爱上你了……

  后来我开始躺在床上接他的电话,突然有一种暧昧的感觉,我知道有些什么事情要发生,只是我不想去阻拦,我看到一片汪洋,却心甘情愿的沉浮。他急促的呼吸透过话筒传到我的耳边,那一刻,所有的坚持都崩溃了,任凭他的话语指导我,走进那片海洋。

  闭上眼,感觉那眼神又出现了,好近好近的直视着我,让我不能逃。我就任他的手抚过我的每一寸肌肤,好久好久不曾有过的感觉,再一次被他唤了回来,他在耳边不停的叫着我的名字,漆黑的夜里,感觉着他的体温。

  那些个只有在某些时候才应该有的呢喃,温馨的响起,我能感觉他那些语言所表达的身体,是怎样的疯狂,我就像一个探险者,总是想知道前面是什么。我的感觉从清醒到沉沦,最后,开始堕落,那一刻,我绝对不是什么好女人,我想我坏的透彻心扉……

  他说我就这样抱着你睡吧,希望和你一起进入梦乡,可是那一夜,他没有进入我的梦,因为那一夜我没有梦,那一夜,我闭上眼,却不曾入睡,脑子里,总是那一幕,他那个可以吃掉我的眼神,他在我耳边温柔的话语,他那些急促的呼吸,就这么些简单的东西,轻而易举的把我的心占有了。

  后来我终于还是不胜娇羞的病倒了,他一再的道歉,我只是说爱不要抱歉来弥补。我已经拥有了他一个夜晚,有什么权利需要一生?我在那次电话将挂断的时候说,天亮了,你就不属于我了。我能拥有的,只是你的今夜。

  我想我不能做一个贪吃的小孩,因为我根本就不可能把那些我爱的糖果抱回家,就如他,在我心上烙了道很深的印痕,可是我却没有能力把他烙在我的生命里,一种无能为力的痛,让我在后来的很多个可以再次缠绵的夜晚,开始逃避。

  在那些寂寞的夜晚,轻轻的挂断了他的电话,抱着被子一个人哭,我想,我必须要约束自己,冲动的只是那一刻,过后却是漫漫长夜的思念。我宁愿他相信我的无情,也不要残忍的让他陪我堕落。

  一个人坐在电脑前,任他千呼万唤,就是不肯出来,我只敢隐身,我说怕更深的想他,我知道他怎么也不会相信这样牵强的理由,他只是不明白,想一个人,到不能再深的地步,那是一种怎样的煎熬。

  而我,却隔着银屏,一直陪着他,直到他的头像暗淡才离开,我知道他是含着委屈离开的,那一刻他的眼里写满失望,他怎么知道,他的爱我抓不住,我的爱却收不回。那一夜的温情,在很多个寂寞的夜晚,成了我的慰籍,他如一颗流星划过我的天空,却留下了很深的印痕。

  你说怕想我这就是你的理由?他在那边苦苦的追问,我没有说话,迅速的推出了聊天,然后沉默着想那个眼神穿过我心扉,有一种痛悄悄蔓延……

  “宝贝儿,激情不过几秒钟,怎么能敌的过爱上你,夜夜思念你的煎熬,你怎么知道爱一个人到不能再深的地步,那是一种蚀骨的痛……”

  轻轻的按了发送键,就在那一刻,突然就看到了他在我身边离开的背影……

女孩,珍惜男孩的眼泪吧

若有个男孩为你哭 他应该可以陪你走一生

  一个朋友告诉我,他哭了,为了一个女孩。

  “你一定很爱很爱她吧。”
  “是爱到不知道怎么办才好。”
  “是吗?”
  “男孩在你面前哭说明他已经快要窒息了
  如果你拉住他的手,他真的可以陪你走完一生
  如果你放弃了他,他会很难再回到以前的自己。”

  他的话音刚落,我心中突然很压抑……

 [separator] 想到了他——那个曾经为我哭泣的男孩。

  第一次,我决定离开他。他对我说,只要我幸福。我看见他强忍着泪水,我知道,转身时,他哭了。

  第二次,我告诉他,我欺骗了他。他告诉我,会原谅我,因为他爱我。他抱着我哭了,我知道他一定很失望。

  第三次,情人节。他紧紧地抱着我,对我说,不要离开他。他不让我看他的脸,我知道他哭了。

最终,是他选择了离开。我知道,他是对我感到绝望了。也许是我错的太多,一切都无法挽回。我,也选择了离开。离开这个城市,逃避 这里的一切。电话里,他哭泣着哀求我留下,但我却毅然决定离开。他哭了,也是最后一次为我哭……

  如今,我们都变了。他变了,变得陌生,过去,对他而言,也许只是很傻。我变了,变得麻木,过去,对我而言,也许只是遗憾。

  过去我的任性,曾无数次伤害了他。现在的他,已不会像过去那样对感情认真。我知道,一切都已改变。如果,一切可以重新来过, 我一定不会离开。不会离开值得一辈子去爱的人。

  男孩,不轻易哭泣,只有面对最爱的人时,才会变得脆弱。

  男孩,不轻易哭泣,只有在太爱你的时候,才会放下自尊。

  女孩,如果有个男孩为你哭,请拉住他的手,他真的可以陪你走完一生。

  女孩,如果有个男孩为你哭,请不要放弃他,也许一个选择会毁掉一个人…

失恋后人的感受

找点空闲
  找点时间
  独自在家
  把电视看看
  带上倦容
  带上心烦
  打开书柜
  把小说翻翻
  荧屏出现了拳击柔道
  书中开始了华山论剑
  书中的烦恼
  向泰森说说
  作业的事情
 [separator] 向金庸淡谈
  把电视看看
  小说翻翻
  哪怕被爸爸发现被妈妈看见
  我们不图电视小说占多长时间
  长时间总学习也得暂时消遣

  找点空闲
  找点时间
  找个朋友
  到商场转转
  带上球鞋
  带上护腕
  套上队服
  到球场玩玩
  球场展开了龙争虎斗
  商场出现了砍价“集团”
  考试的烦恼
  向球场发泄
  作业的事情
  和同伴侃侃
  看球赛开战
  去商场转转
  要是被老师发现家访准完蛋
  我们不图玩耍把学习的时间占
  一星期总做题也要放松舒坦 

深夜,你会为谁开着手机

凌晨的时候听到手机响了一声便断了,我打回去,朋友说在逐个拨电话,想知道这时候还会有谁不关机,我说你无聊。挂了电话看到手机上的信号灯兀自闪烁着,在寂静的黑夜中,不知疲倦。不知道这个城市有多少人像我一样从不关机。
  为了什么,是为了她曾经的一句话吗?她说你怎么总是关机,其实我想说你怎么总是半夜给我打电话,可是那时候的我不会说,从此以后我的电话24小时开机。
  因为她会在任何时候找我,她会在小鸟还没有醒来的时候叫我起床,懒帽你起来,出来跑步;她会在朋友聚会之后给我打电话,懒帽你来接我;她会在晚饭过后叫我出来吃饭,懒帽我饿了你出来陪我吃饭;她也会在深夜酒醉时把我叫醒,电话那头的声音嘈杂,她沉默,然后一直叫我的名字。
 [separator] 那时候我的背包里永远有一块充满电的备用电池,我不敢怠慢,只是怕她想我的时候找不到我。
  而今那个神话的时代早已结束,我身边也有了新的她。她是有生活规律的人,11点之后一定会关机。而我是闲散任性的人,总是在失眠的夜里给她发去一个个短信,有时候是因为一本书,一个片子,或者一个半夜惊醒的梦,像和自己说话,并不需要回答。
  忽然某天发现她不再关机,凌晨的时候下意识地给她拨去电话,没有想到是接通的声音,我慌忙要挂掉,这时候听见她迷迷糊糊的声音,懒帽你怎么了,又睡不着吗。
  我说你怎么不关机呢。她说我以后都不关机了。
  我说为什么啊。她说我怕你想找我的时候找不到我。
  仍然是那样,会被一句话轻轻地打动。
  喜欢被人守候,深深夜里,像有人为你燃着一盏灯,留着一扇门,寂寞是有出口的。每个不关机的人们,是否都存着一份随时随地的守候和企盼。

拿什么吸引你,我的爱人

一、真实。
  实话最好说,不假思索,怎么表达都是真的;谎话最难讲,怎么编也编不严实,不小心就说漏了。故意做作也是很难的,怎么做也不象真事儿。因此,丈夫大可不必自己找罪受,自己为难自己,到头来也失去了妻子的信任。所以说男子要有真实,真实,是最有力量的表现,最有信心的表现。

  二、深刻。

  许多知识分子和大龄男女青年,都与我同感:正因为深刻的男性少有,所以才显得男性的深刻最有魅力。“思想深刻”要比1.80的大个儿、比研究生的学力、比处长部长的头衔、比万元户的钞票更有吸引力。

 [separator] 三、胸怀。

  有胸怀的丈夫,让妻子感到放心,感谢到安全,所以平时生活比较轻松,很少惧怕什么,能够完全展示自己的内心世界,因为她们自信即使自己想错了,做错了,丈夫也不会抓住不放,不会不谅解。

  四、敢为。

  一个男子汉至关重要的品质是敢做敢为。男人的哲学是行动哲学,男人嘛,要敢于把自己的想法付诸行动,不能象瘸子打围-----坐着喊;也不能象书生,只会纸上谈兵。敢为包括:敢想、敢讲、敢做、敢胜、敢败、敢爱、敢恨、敢于战斗,又特别能战斗,“大丈夫敢做敢为”嘛。

  五、风度。

  这一点也是很重要的,品德再好,作风再正,内心世界再高尚,若没有风度也难打动女人的心,但风度并不排斥个性,风度与人的气质相联系,是依赖于生理素质的,代表着一个人的人格倾向,而且与职业也有很大关系的。对于男人来说风度是一种成熟美,女性最欣赏男人的成熟。

  六、机灵。

  好女人都喜欢“坏男人”。越是嘎小子、越是机灵鬼儿,越有人爱。不是有句传统话叫“男人不坏女人不爱”吗,“坏”小子的魅力,还在于他们的神秘,他们做事奇特,也不多做解释,思考问题的过程不合盘托出,而只是给人最后的结论。这样的机灵的丈夫使妻子感到深奥,男性的这股“鬼精灵”劲儿再加上他们的好品质,将是对女性有力的吸引。

  七、幽默。

  英国首相丘吉尔有一名名言:“除非你理解世上最令人发笑的趣事,否则你便不能解决最为棘手的难题。”很有风趣的丈夫,大多是十分乐观的人。具有积极向上的人生态度和百折不回的精神,这样的丈夫,受到挫折,遇到逆境,也决不愁眉苦脸,仍然是打趣、逗笑别人,使人不感到逆境的压力,使沉重的生活显示出轻松,减少烦恼。

  八、进取。

  俗话说,人往高处走,水往低处流,这也是讲进取心的问题。人活在世上,总要干点事业,成就尤其是男人。有位大哲学家曾说过:聪明人创造的机会,比他们找到的机会多。男子汉的进取性,应该表现在生命的每时每刻。铺成人生大道的每一块砖上,都写着三个字:起跑点。男子汉,什么时候起跑都不算晚,关键是要有进取心。

  九、浪漫。

  卡耐基著的《成功之路》一书中,有这样一段名言:许多罗曼蒂克的梦想破天了百分之五十以上的婚姻不幸福。不是常说“婚姻是爱情的坟墓”吗,婚后夫妻生活和恋爱时很大的区别在于缺少浪漫,我认为好丈夫应该具有浪漫色彩,这种浪漫型的丈夫非常有吸引力。

  十、冒险。

  有人说,成功的模式只有一个:冒险。女性和男性相比,女性更缺少冒险精神,但她们却希望自己和丈夫敢于冒险,妻子喜欢冒险的丈夫,因为那将有一种神秘、危险、探索的意味,令人神往,这样可以使妻子的“好奇心”得到满足,还会感到“够刺激”从而使女性迷恋。

男人偷情为性,女人偷情为什么?

在所有的婚外恋当中,男人偷情,目的为性,女人偷情性情交融。 偷情对于男人来说,偷的就是偷的,偷到以后便不觉得那么珍惜了。 而女人则往往错位,她们往往希望拥有偷的东西。  


  一个男人如果对一个女人产生了特别的情感,那么他刚开始的时候,接受的是你的上半身, 但日子久了,处心积虑想到的是如何得到身体。而女人呢,她最开始的感情也是从上半身开始的, 她付出的纯粹是自己最真挚的东西。  

[separator]
  男人得到女人后,会觉得累,那是因为男人得手后爱情开始变冷, 而女人的爱情感觉则刚刚开始。  


  男人想得是如何结束情缘, 女人则想得如何天长地久。 把性与情分开,对男人是一种人性的浪漫,而对女人则是一种人性的折磨。  


  女人需要浪漫情怀,没有性的爱恋让她们感到圣洁,而有性的浪漫才让女人刻骨铭心、迷失自己。 女人沦为了爱的俘虏,任何人也改变不了为奴隶的命运。 为了情,女人甘愿当牛做马。女人都希望男人对他们好,但好的的标准则是情与性的统一。  


  聪明的女人因为太聪明,所以不把男人放在心上, 她们便寂寞,痴心的女人伤痛后才知满心的伤痕无一处值得眩耀。  


  女人没有爱情时会嫌自己被浪费,怕错过了人生恋爱的好时光,被男人用旧才懂得爱情不过是春梦一场,那个让她死去活来的人不过是个再俗不过的人,于是后悔,于是就恨。  


  女人用真心去爱,换来总是伤害,像男人那样以采花摘草的心情去爱,又霾坏健? 男人往往有了新的目标以后,遗弃老情人,这对他们来说,是很随意的事情。  


  男人始终自私,他会选择对自己最有利的选择。也许他曾经爱过,但那是过去的事。谁会为了百分百的爱而放弃千分之千的新恋情呢?但是对于痴情的女人来说,这很可能是最残忍的事情。 痴情是女人的大敌。女人总是被动的, 被引诱的女人一旦为情人抛弃或全部的理想在一夜之间化成泡影之后,就会深深地陷入一种绝望,滋生出的变态的报复心理。  


  有些傻女人,用自己的生命去留住他;有些女人天真的用身体去留住他,结果这两种女人都失败了。 男人接纳一个女人的开始是因为他爱你的上半身,他喜欢的是你的性格你的智慧你的学识你带给他的不同的感受,但是当他对你没有了旧日的情感,他用上半身说分手,而对下半身的渴望已经淡漠。  


  如果一个女人渴望用自己的下半身去挽留一段逝去的爱情,那么她未免太高估这个男人对她的迷恋。男人可以长久的倾慕一个女人,因为他对女人上半身的渴望超过了下半身。在这个疯狂的年代里,毕竟是少数。男人的猎取的本性是改变不了的。  


  所以聪明女人用身体思考,平庸女人用脸蛋思考,最笨的女人用下半身思考。  


  有人说人的一生要爱过三个人才算是真正的记住了爱情。既然如此,就不必用超出的那份痛苦去缅怀。留着你剩下的精力和时间,耐心的等待那即将出现的两个,也许那才是最完美的爱情!但不管是怎样的故事,请千万记住:爱情,从上半身开始!

对Web服务进行压力测试

Web 服务处于分布式计算的核心位置,它们之间的交互通常很难测试。分布式开发、大型的开发者团队以及对代码日益组件化的期望都有可能使 Web 服务的开发变得越来越容易隐藏错误。这些类型的错误极难检测出来。压力测试是检测这类代码错误的一种有效方法,但是只有在压力系统设计得比较有效的情况下才能发挥作用。本文将让您深入了解一下这种压力系统的基本要求。

[separator]  测试方法

  传统的测试方法包括某种形式的简单单元测试 ,通常由开发人员执行。设计这些测试需要了解软件的内部知识,并且这些测试几乎总是针对产品的非常小的、特定的部分。这些类型的测试非常适合与其他代码组件极少交互,甚至没有交互的简单 Web 服务。

  功能验证(Functional Verification) 也 是一种测试过程,在这个过程中,对产品源代码了解有限的设计者进行测试以确认产品或服务的核心功能。设计这种测试是为了证明这个核心功能符合某个规范。举 个例子,我的在线拍卖显示的是输入的正确出价吗? 我的保险经纪人系统找到最便宜的报价了吗?如果这些测试失败,通常就意味着检测到了产品的一个基本问题(这个问题通常是可以直接修复)。这种测试也是适合 简单的 Web 服务,使您可以检查服务是否能够正确执行它的各个功能。

  系统测试(System Test) 通常是在功能验 证阶段完成,验证了核心功能后进行。它倾向于把整个系统作为一个整体来查找问题 — 弄清 Web 服务作为系统的一部分怎样运作,以及 Web 服务相互之间如何交互。由于系统测试是在开发生命周期快结束时才进行,所以通常不能给它分配足够的时间来完成。又因为紧张的发行日程安排以及开发的各个重 要阶段的后移,系统测试阶段经常被忽略,并且一些通常都可以发现的、少见的错误都不能被检测到。即使发现了这种错误,这时也来不及确定错误的原因并设法修 复它们了。因此,在查找代码错误时,必需把系统测试应用设计得尽可能高效。系统测试通常由三部分组成,它们是:

  性能(Performance): 这涉及到确定相关的产品统计数据的过程。例如:每秒有多少条消息?一个服务可同时接受多少个用户?

  案例(Scenario): 这是重新创建客户所需的确切配置的过程。因此在案例中发现的任何问题都可以在客户使用该产品之前被检测出来。

  压力(或称工作负载平衡): 它 与另两个部分不同,因为它被设计为通过应用很大的工作负载来使软件超负荷运转。如果压力测试通过对产品保持高强度的使用(但不超过性能统计数字确定的限 制)能有效地执行,那么它就经常能够发现许多隐蔽的错误,而这些错误用上面提到的任何其他技术都是发现不了的(这些错误也经常是最难修复的)。

  从检测代码错误这方面来说,可以证明这三个系统测试组件中效率最高的是压力测试部分。但由于这个过程经常跟系统的其他要素或功能测试混淆在一起,所以这个过程涉及到的方法还没有被正确着手处理或实现。

  压力下的错误

  使用压力测试,您有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:

  内存泄漏(Memory leak): 一种极难检测的现象。内存泄漏经常发生在已发行的产品中,原因很简单,很难设计测试 用例来检测它们。使用简单的功能测试,几乎发现不了内存泄漏问题,因为在产品完成之前测试没对产品进行足够多的使用。内存泄漏通常要求操作要重复非常多的 次数以使内存消耗达到能引起注意的程度。尽管与其它编程语言(如 C/C++)相比,Java 程序更难引入内存泄漏错误,但只要程序仍保持着对对象的引用,该对象仍有可能被实例化并且它占用的内存永远不会被释放。

  并发与同步(Concurrency and Synchronization): 压 力测试在查找并发性问题上非常出众,这是因为在任何一个测试生命周期中,它都应用了许多不同的代码路径和定时条件。一般的规则是,压力测试运行的时间越 长,涉及并应用的代码路径组合和定时条件就越多。当然,这也的确使得这些问题很难再现(错误可以在 5 分钟或 5 天后发生)。死锁、线程泄漏以及任何一般的同步问题通常只能在压力测试阶段被检测出来。这些类型的问题很难通过执行单元测试来发现。开发人员不会一直考虑 他或她的代码将与其他地方的代码(在执行单元测试时这些代码可能还没写出来)进行交互。

  现有的压力测试工具

  有许多声称能够对 产品进行压力测试的可用工具目前正在开发中。被广泛应用的是针对 Web 服务的那些工具。然而,这些工具中有许多只是简单的 HTML/SOAP 生成器,它们模拟许多客户机连接,并因此对 Web 服务器生成高负载(这对于查找 Web 服务器的问题很有用,但对于查找 Web 服务的问题就没那么有用了)。这些工具对基本的压力测试比较有用,但它们经常是仅仅扩展功能验证阶段来重复地执行相同的功能任务。如果足够的时间和资源可 用,就可以通过创建定制构建的压力测试系统来实现更有效的测试。由于压力系统的设计者通常对要测试的产品和 Web 服务有更多的了解,所以他们将能够确保压力系统可以用于哪些具体的代码区域。

  设计压力应用

  设计试图对 Web 服务进行压力测试的压力测试系统时,要让它们以某种特定的方式运行代码。这些风格超越了功能验证,目的是要弄清楚被测试的 Web 服务是不是不仅能做我们认为它能做的事,而且在被施加了某些高强度压力的情况下仍然继续正常运行。压力测试必须对 Web 服务应用四个基本条件。许多已建立的压力系统应用了这些条件。有效的压力测试系统将应用以下这些关键条件:

  重复(Repetition): 或许最明显的且最容易理解的压力条件就是测试的重复。换句话说,测试的重复就是一遍又一遍地执行某个操作或功能,比如重复调用一个 Web 服务。功能验证测试可以用来被弄清楚一个操作能否正常执行。而压力测试将确定一个操作能否正常执行,并且能否继续在每次执行时都正常。这对于推断一个产品 是否适用于某种生产情况至关重要。客户通常会重复使用产品,因此压力测试应该在客户之前发现代码错误。许多最简单的压力系统只实现这一个条件,但简单地扩展功能验证测试来多次重复并不能构成一个有效的压力测试。当与下面的一些原则结合起来使用时,重复就可以发现许多隐蔽的代码错误。

  并发(Concurrency): 并 发是同时执行多个操作的行为。换句话说,就是在同一时间执行多个测试,例如在同一个服务器上同时调用许多 Web 服务。这个原则不一定适用于所有的产品(比如无状态服务),但是多数软件都具有某个并发行为或多线程行为元素,这一点只能通过执行多个代码示例才能测出 来。功能测试或单元测试几乎不会与任何并发设计结合。压力系统必须超越功能测试,要同时遍历多条代码路径。至于怎么做到这一点取决于具体的产品。例如,一个 Web 服务压力测试需要一次模拟多个客户机。Web 服务(或者任何多线程代码)通常会访问多个线程实例间的一些共享数据。因额外方面的编程而增加的复杂性通常意味着代码会具有许多因并发引起的错误。由于引入并发性意味着一个线程中的代码有可能被其他线程中的代码中断,所以错误只在一个指令集以特定的顺序(例如以特定的定时条件)执行时才会被发现。把这个原 则与重复原则结合在一起,您可以应用许多代码路径和定时条件。

  量级(Magnitude): 压力系统应该应用于产品的另一个条件考虑到了每个操作中的负载量。压力测试可以重复执行一个操作,但是操作自身也要尽量给产品增加负担。例如,一个 Web 服务允许客户机输入一条消息,您可以通过模拟输入超长消息的客户机来使这个单独的操作进行高强度的使用。换句话说就是,您增加了这个操作的量级。这个量级 总是特定于应用的,但是可以通过查找产品的可被用户计量和修改的值来确定它。例如,数据的大小、延迟的长度、资金数量的转移、输入速度以及输入的变化等等。单独的高强度操作自身可能发现不了代码错误(或者仅能发现功能上的缺陷), 但与其他压力原则结合在一起时,您将可以增加发现问题的机会。

  随机变化: 最后一点,任何压力系统都多多少少具有一些随机性。如果您随机使用前面的压力原则中介绍的无数变化形式,您就能够在每次测试运行时应用许多不同的代码路径。下面是几个关于怎样在测试生 命周期内改变测试的示例。使用重复时,在重新启动或重新连接服务之前,您可以改变重复操作间的时间间隔、重复的次数,或者也可以改变被重复的 Web 服务的顺序。使用并发,您可以改变一起执行的 Web 服务、同一时间运行的 Web 服务数目,或者也可以改变关于是运行许多不同的服务还是运行许多同样的实例的决定。量级或许是最容易更改的 — 每次重复测试时都可以更改应用程序中出现的变量(例如,发送各种大小的消息或数字输入值)。如果测试完全随机的话,因为很难一致地重现压力下的错误,所以一些系统使用基于一个固定随机种子的随机变化。这样,用同一个种子,重现错误的机会就会更大。

  一个压力测试通常会结合上述的所 有原则,并且在允许的范围内尽可能长时间地运行。测试被允许的执行时间越长,就可以遍历越多的代码路径,并且发现的错误也越多。当然,一旦找到错误就必须诊断并修复它。由于一个代码错误可以在压力测试运行多日以后自己显示出来,所以系统必须保证当出现错误时所有可用的调试信息都被生成,否则可能就必须花费同样多的时间来重现这个错误。

  结束语

  测试是软件开发过程中至关重要的部分,并且一个重要的、经常被曲解或忽略的部分是压力测试。遵循上面详细说明的原则,您就可以设计并实现有效的压力测试系统,用来查找一些与您的代码相关的、比较隐蔽的问题。无论是利用预先写好的工具,还是创建一个完全专用的压力系统,压力测试都是用于查找 Web 服务(或其他任何程序)问题的本质方法,并能最终提高您的软件产品质量。

珍惜野蛮女生

[img]http://blog.21sta.com/up/mygirl.jpg[/img]
珍惜你身旁那个爱生气,不讲理的女生~~~
 会发脾气的女生最可爱
[separator] 女生的脾气常被归类为无理取闹,
 或是任性刁蛮,但是女生的脾气也是很可爱的。
 永远不会发脾气的女生就如同一杯白开水─解渴,却无味。
 你迟归,她向你发脾气,是因为她紧张你,她怕你出了什么意外。
 你喝酒抽烟,她向你发脾气,
 是因为她担心你的身体健康,她希望跟你长长久久,白头到老。
 你身上被发现有别的女人香,她向你发脾气,
 是因为她在乎你,你是她的所有,她不想跟别人分享你。
 你臭袜子乱扔,她向你发脾气,
 是因为她关心你,她怕有一天你会被自己的臭袜子淹没,所以她要先把你训练好。
 你忘记她的生日,她向你发脾气,
 是因她对你有所期待,她并不会要求一个陌生人记住她的生日。
 女人是最讲理的动物,她的脾气往往导因于各式各样的理由;
 女人也是最不讲理的动物,她的理由经常令人无法理解。
 女人可以为了一件小得不能再小的事,发一场大得不能再大的脾气。
 因为女人对身边的男人有所要求,有所期望,
 所以常常会失望、失落,因此,女人容易对男人发脾气。
 身边有个会向你发脾气的女人,其实是一件多么幸福的事!
 而身边有一个会让自己发脾气的男人,
 是对女人最大的折磨,也是莫大的幸福!

DLL 木马揭秘

相信经常玩木马的朋友们都会知道一些木马的特性,也会有自己最喜爱的木马,不过,很多朋友依然不知道近年兴起的“DLL木马”为何物。什么是“DLL木马”呢?它与一般的木马有什么不同?

一、从DLL技术说起

要了解DLL木马,就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都是独立的,有时候为了实现一个功能,就要为此写很多代码,后来随着编程技术发展,程序员们把很多常用的代码集合(通用代码)放进一个独立的文件里,并把[separator]这个文件称为“库”(Library),在写程序的时候,把这个库文件加入编译器,就能使用这个库包含的所有功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。静态链接技术让劳累的程序员松了口气,一切似乎都很美好。可是事实证明,美好的事物不会存在太久,因为静态链接就像一个粗鲁的推销员,不管你想不想要宣传单,他都全部塞到你的手上来。写一个程序只想用到一个库文件包含的某个图形效果,就因为这个,你不得不把这个库文件携带的所有的图形效果都加入程序,留着它们当花瓶摆设,这倒没什么重要,可是这些花瓶却把道路都阻塞了——静态链接技术让最终的程序成了大块头,因为编译器把整个库文件也算进去了。

时代在发展,静态链接技术由于天生的弊端,不能满足程序员的愿望,人们开始寻找一种更好的方法来解决代码重复的难题。后来,Windows系统出现了,时代的分水岭终于出现。Windows系统使用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是使用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。动态链接本身和静态链接没什么区别,也是把通用代码写进一些懒⑽募铮窃诒嘁敕矫妫⑷砣屏烁鋈ψ樱⒚挥胁扇“芽馕募咏绦虻姆椒ǎ前芽馕募龀梢丫嘁牒玫某绦蛭募强鼋换皇莸慕涌冢绦蛟毙闯绦虻氖焙颍坏┮褂媚掣隹馕募囊桓龉δ芎低尘桶颜飧隹馕募魅肽诖妫由险飧龀绦蛘加械娜挝窠蹋缓笾葱谐绦蛞玫墓δ芎呀峁祷馗绦蛳允境隼矗谖颐强蠢矗拖袷浅绦蜃约捍械墓δ芤谎M瓿尚枰墓δ芎螅飧鯠LL停止运行,整个调用过程结束。微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的调用声明就能使用它的全部功能。最重要的是,DLL绝对不会让你多拿一个花瓶,你要什么它就给你什么,你不要的东西它才不会给你。这样,写出来的程序就不能再携带一大堆垃圾了——绝对不会让你把吃剩的东西带回家,否则罚款,这是自助餐。

DLL技术的诞生,使编写程序变成一件简单的事情,Windows为我们提供了几千个函数接口,足以满足大多数程序员的需要。而且,Windows系统自身就是由几千个DLL文件组成,这些DLL相互扶持,组成了强大的Windows系统。如果Windows使用静态链接技术,它的体积会有多大?我不敢想。

二、应用程序接口API

上面我们对DLL技术做了个大概分析,在里面我提到了“接口”,这又是什么呢?因为DLL不能像静态库文件那样塞进程序里,所以,如何让程序知道实现功能的代码和文件成了问题,微软就为DLL技术做了标准规范,让一个DLL文件像奶酪一样开了许多小洞,每个洞口都注明里面存放的功能的名字,程序只要根据标准规范找到相关洞口就可以取得它要的美味了,这个洞口就是“应用程序接口”(Application Programming Interface),每个DLL带的接口都不相同,尽最大可能的减少了代码的重复。用Steven的一句话:API就是一个工具箱,你根据需要取出螺丝刀、扳手,用完后再把它们放回原处。在Windows里,最基本的3个DLL文件是kernel32.dll、user32.dll、gdi32.dll。它们共同构成了基本的系统框架。

三、DLL与木马

DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。那么,DLL与木马能扯上什么关系呢?如果你学过编程并且写过DLL,就会发现,其实DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为什么还要多此一举写成DLL呢?这是为了隐藏,因为DLL运行时是直接挂在调用它的程序的进程里的,并不会另外产生进程,所以相对于传统EXE木马来说,它很难被查到。

四、DLL的运行

虽然DLL不能自己运行,可是Windows在加载DLL的时候,需要一个入口函数,就如同EXE的main一样,否则系统无法引用DLL。所以根据编写规范,Windows必须查找并执行DLL里的一个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。DllMain函数使DLL得以保留在内存里,有的DLL里面没有DllMain函数,可是依然能使用,这是因为Windows在找不到DllMain的时候,会从其它运行库中找一个不做任何操作的缺省DllMain函数启动这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。

五、DLL木马技术分析

到了这里,您也许会想,既然DLL木马有那么多好处,以后写木马都采用DLL方式不就好了吗?话虽然是这么说没错,但是DLL木马并不是一些人想象的那么容易写的。要写一个能用的DLL木马,你需要了解更多知识。

1.木马的主体

千万别把木马模块写得真的像个API库一样,这不是开发WINAPI。DLL木马可以导出几个辅助函数,但是必须有一个过程负责主要执行代码,否则这个DLL只能是一堆零碎API函数,别提工作了。
如果涉及一些通用代码,可以在DLL里写一些内部函数,供自己的代码使用,而不是把所有代码都开放成接口,这样它自己本身都难调用了,更不可能发挥作用。
DLL木马的标准执行入口为DllMain,所以必须在DllMain里写好DLL木马运行的代码,或者指向DLL木马的执行模块。

2.动态嵌入技术

Windows中,每个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,但是,实际上我们仍然可以利用种种方法进入并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。动态嵌入有很多种,最常见的是钩子、API以及远程线程技术,现在的大多数DLL木马都采用远程线程技术把自己挂在一个正常系统进程中。其实动态嵌入并不少见,罗技的MouseWare驱动就挂着每一个系统进程-_-

远程线程技术就是通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间。在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。但是,很多时候我们只能束手无策——它和Explorer.exe挂在一起了,你确定要关闭Windows吗?

3.木马的启动

有人也许会迫不及待的说,直接把这个DLL加入系统启动项目不就可以了。答案是NO,前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。要想让木马跑起来,就需要一个EXE使用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调用这个DLL的DllMain函数,激发木马运行,最后启动木马的EXE结束运行,木马启动完毕。

启动DLL木马的EXE是个重要角色,它被称为Loader,如果没有Loader,DLL木马就是破烂一堆,因此,一个算得上成熟的DLL木马会想办法保护它的Loader不会那么容易被毁灭。记得狼狈为奸的故事吗?DLL木马就是爬在狼Loader上的狈。

Loader可以是多种多样的,Windows的rundll32.exe也被一些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的方法(rundll32.exe [DLL名],[函数] [参数])像调用API一样去引用这个DLL的启动函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,一个最常见的例子就是3721中文实名,虽然它不是木马。

注册表的AppInit_DLLs键也被一些木马用来启动自己,如求职信病毒。利用注册表启动,就是让系统执行DllMain来达到启动木马的目的。因为它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,所以很少看到这种木马。

有一些更复杂点的DLL木马通过svchost.exe启动,这种DLL木马必须写成NT-Service,入口函数是ServiceMain,一般很少见,但是这种木马的隐蔽性也不错,而且Loader有保障。

4.其它

到这里大家也应该对DLL木马有个了解了,是不是很想写一个?别急,不知道大家想过没有,既然DLL木马这么好,为什么到现在能找到的DLL木马寥寥无几?现在让我来泼冷水,最重要的原因只有一个:由于DLL木马挂着系统进程运行,如果它本身写得不好,例如没有防止运行错误的代码或者没有严格规范用户的输入,DLL就会出错崩溃。别紧张,一般的EXE也是这样完蛋的,但是DLL崩溃会导致它挂着的程序跟着遭殃,别忘记它挂接的是系统进程哦,结局就是……惨不忍睹。所以写一个能公布的DLL木马,在排错检查方面做的工作要比一般的EXE木马多,写得多了自己都烦躁……

六、DLL木马的发现和查杀

经常看看启动项有没有多出莫名其妙的项目,这是Loader的所在,只要杀了狼,狈就不能再狂了。而DLL木马本体比较难发现,需要你有一定编程知识和分析能力,在Loader里查找DLL名称,或者从进程里看多挂接了什么陌生的DLL,可是对新手来说……总之就是比较难啊比较难,所以,最简单的方法:杀毒软件和防火墙(不是万能药,切忌长期服用)。

必学的Linux系统安全命令

虽然Linux和Windows NT/2000系统一样是一个多用户的系统,但是它们之间有不少重要的差别。对于很多习惯了Windows系统的管理员来讲,如何保证Linux操作系统安全、可靠将会面临许多新的挑战。本文将重点介绍Linux系统安全的命令。
passwd
1.作用
asswd命令原来修改账户的登陆密码,使用权限是所有用户。
2.格式
asswd [选项] 账户名称
[separator]3.主要参数
-l:锁定已经命名的账户名称,只有具备超级用户权限的使用者方可使用。
-u:解开账户锁定状态,只有具备超级用户权限的使用者方可使用。
-x, --maximum=DAYS:最大密码使用时间(天),只有具备超级用户权限的使用者方可使用。
-n, --minimum=DAYS:最小密码使用时间(天),只有具备超级用户权限的使用者方可使用。
-d:删除使用者的密码, 只有具备超级用户权限的使用者方可使用。
-S:检查指定使用者的密码认证种类, 只有具备超级用户权限的使用者方可使用。
4.应用实例
$ passwd
Changing password for user cao.
Changing password for cao
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
从上面可以看到,使用passwd命令需要输入旧的密码,然后再输入两次新密码。
su
1.作用
u的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。
2.格式
u [选项]... [-] [USER [ARG]...]
3.主要参数
-f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
-l , --login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。
-m, -p ,--preserve-environment:执行su时不改变环境变数。
-c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
USER:欲变更的使用者账号,ARG传入新的Shell参数。
4.应用实例
变更账号为超级用户,并在执行df命令后还原使用者。    su -c df root
umask
1.作用
umask设置用户文件和目录的文件创建缺省屏蔽值,若将此命令放入profile文件,就可控制该用户后续所建文件的存取许可。它告诉系统在创建文件时不给谁存取许可。使用权限是所有用户。
2.格式
umask [-p] [-S] [mode]
3.参数
-S:确定当前的umask设置。
-p:修改umask 设置。
[mode]:修改数值。
4.说明
传统Unix的umask值是022,这样就可以防止同属于该组的其它用户及别的组的用户修改该用户的文件。既然每个用户都拥有并属于一个自己的私有组,那么这种“组保护模式”就不在需要了。严密的权限设定构成了Linux安全的基础,在权限上犯错误是致命的。需要注意的是,umask命令用来设置进程所创建的文件的读写权限,最保险的值是0077,即关闭创建文件的进程以外的所有进程的读写权限,表示为-rw-------。在~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后, 进程的umask权限都可以被正确设定。
5.应用实例
umask -S
u=rwx,g=rx,o=rx
umask -p 177
umask -S
u=rw,g=,o=
BR>
上述5行命令,首先显示当前状态,然后把umask值改为177,结果只有文件所有者具有读写文件的权限,其它用户不能访问该文件。这显然是一种非常安全的设置。
chgrp
1.作用
chgrp表示修改一个或多个文件或目录所属的组。使用权限是超级用户。
2.格式
chgrp [选项]... 组 文件...

chgrp [选项]... --reference=参考文件 文件...
将每个的所属组设定为。
3.参数
-c, --changes :像 --verbose,但只在有更改时才显示结果。
--dereference:会影响符号链接所指示的对象,而非符号链接本身。
-h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。
-f, --silent, --quiet:去除大部分的错误信息。
--reference=参考文件:使用的所属组,而非指定的。
-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:处理任何文件都会显示信息。
4.应用说明
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
5.应用实例
改变/opt/local /book/及其子目录下的所有文件的属组为book,命令如下:
$ chgrp - R book /opt/local /book
chmod
1.作用
chmod命令是非常重要的,用于改变文件或目录的访问权限,用户可以用它控制文件或目录的访问权限,使用权限是超级用户。
2.格式
chmod命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定);另一种是包含数字的数字设定法(绝对权限设定)。
(1)字符设定法
chmod [who] [+ | - | =] [mode] 文件名
◆操作对象who可以是下述字母中的任一个或它们的组合
u:表示用户,即文件或目录的所有者。
g:表示同组用户,即与文件属主有相同组ID的所有用户。
o:表示其它用户。
a:表示所有用户,它是系统默认值。
◆操作符号
+:添加某个权限。
-:取消某个权限。
=:赋予给定权限,并取消其它所有权限(如果有的话)。
◆设置mode的权限可用下述字母的任意组合
r:可读。
w:可写。
x:可执行。
X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性。
:文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t:保存程序的文本到交换设备上。
u:与文件属主拥有一样的权限。
g:与和文件属主同组的用户拥有一样的权限。
o:与其它用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
一个命令行中可以给出多个权限方式,其间用逗号隔开。
(2) 数字设定法
数字设定法的一般形式为: chmod [mode] 文件名
数字属性的格式应为3个0到7的八进制数,其顺序是(u)(g)(o)文件名,以空格分开的要改变权限的文件列表,支持通配符。
数字表示的权限的含义如下:0001为所有者的执行权限;0002为所有者的写权限;0004为所有者的读权限;0010为组的执行权限;0020为组的写权限;0040为组的读权限;0100为其他人的执行权限;0200为其他人的写权限;0400为其他人的读权限;1000为粘贴位置位;2000表示假如这个文件是可执行文件,则为组ID为位置位,否则其中文件锁定位置位;4000表示假如这个文件是可执行文件,则为用户ID为位置位。
3.实例
如果一个系统管理员写了一个表格(tem)让所有用户填写,那么必须授权用户对这个文件有读写权限,可以使用命令:#chmod 666 tem
上面代码中,这个666数字是如何计算出来的呢?0002为所有者的写权限,0004为所有者的读权限,0020为组的写权限,0040为组的读权限,0200为其他人的写权限,0400为其他人的读权限,这6个数字相加就是666(注以上数字都是八进制数),结果见图1所示。
[img]http://www.ttian.net/images/uploadimg/20050908/2155030.jpg[/img]
图1 用chmod数字方法设定文件权限
从图1可以看出,tem文件的权限是-rw-rw-rw-,即用户对这个文件有读写权限。
如果用字符权限设定使用下面命令:
#chmod a =wx tem
chown
1.作用
更改一个或多个文件或目录的属主和属组。使用权限是超级用户。
2.格式
chown [选项] 用户或组 文件
3.主要参数
--dereference:受影响的是符号链接所指示的对象,而非符号链接本身。
-h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。
--from=目前所有者:目前组只当每个文件的所有者和组符合选项所指定的,才会更改所有者和组。其中一个可以省略,这已省略的属性就不需要符合原有的属性。
-f, --silent, --quiet:去除大部分的错误信息。
-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:处理任何文件都会显示信息。

4.说明
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或用户ID;组可以是组名或组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限。
5.应用实例
1.把文件shiyan.c的所有者改为wan
$ chown wan shiyan.c
2.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users。
$ chown - R wan.users /hi
chattr
1.作用
修改ext2和ext3文件系统属性(attribute),使用权限超级用户。
2.格式
chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录
3.主要参数
-R:递归处理所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
-:失效属性。
+:激活属性。
= :指定属性。
A:Atime,告诉系统不要修改对这个文件的最后访问时间。
S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
D:检查压缩文件中的错误。
d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。
C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。
u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。
4.说明
chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。
5.应用实例
1.恢复/root目录,即子目录的所有文件
# chattr -R +u/root
2.用chattr命令防止系统中某个关键文件被修改
在Linux下,有些配置文件(passwd ,fatab)是不允许任何人修改的,为了防止被误删除或修改,可以设定该文件的“不可修改位(immutable)”,命令如下:
# chattr +i /etc/fstab
sudo
1.作用
udo是一种以限制配置文件中的命令为基础,在有限时间内给用户使用,并且记录到日志中的命令,权限是所有用户。
2.格式
sudo [-bhHpV] [-s ] [-u ] [指令]
sudo [-klv]
3.主要参数
-b:在后台执行命令。
-h:显示帮助。
-H:将HOME环境变量设为新身份的HOME环境变量。
-k:结束密码的有效期,即下次将需要输入密码。
-l:列出当前用户可以使用的命令。
-p:改变询问密码的提示符号。
-s :执行指定的Shell。
-u :以指定的用户为新身份,不使用时默认为root。
-v:延长密码有效期5分钟。
4.说明
udo命令的配置在/etc/sudoers文件中。当用户使用sudo时,需要输入口令以验证使用者身份。随后的一段时间内可以使用定义好的命令,当使用配置文件中没有的命令时,将会有报警的记录。sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果需要每天以超级用户的身份做一些日常工作,经常执行一些固定的几个只有超级用户身份才能执行的命令,那么用sudo是非常适合的。
ps
1.作用
显示瞬间进程 (process) 的动态,使用权限是所有使用者。
2.格式
[options] [--help]
3.主要参数
的参数非常多, 此出仅列出几个常用的参数。
-A:列出所有的进程。
-l:显示长列表。
-m:显示内存信息。
-w:显示加宽可以显示较多的信息。
-e:显示所有进程。
a:显示终端上的所有进程,包括其它用户的进程。
-au:显示较详细的信息。
-aux:显示所有包含其它使用者的进程。


4.说明
要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图2给出了ps-aux命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是u、a、x。下面就结合这三个参数详细说明ps命令的作用:ps aux
[img]http://www.ttian.net/images/uploadimg/20050908/2155031.jpg[/img]
图2 ps-aux命令详解
图2第2行代码中,USER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;RSS为进程占用的物理内存值;TTY为终端的次要装置号码。
STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;高优先序的进程;N低优先序的进程;L有内存分页分配并锁在内存体内 (实时系统或 I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。
4.应用实例
在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程的情况。除了可以使用top命令查看内存使用情况之外,还可以使用下面的命令:
aux | sort +5n
who
1.作用
who显示系统中有哪些用户登陆系统,显示的资料包含了使用者ID、使用的登陆终端、上线时间、呆滞时间、CPU占用,以及做了些什么。 使用权限为所有用户。
2.格式
who - [husfV] [user]
3.主要参数
-h:不要显示标题列。
-u:不要显示使用者的动作/工作。
-s:使用简短的格式来显示。
-f:不要显示使用者的上线位置。
-V:显示程序版本。
4.说明
该命令主要用于查看当前在线上的用户情况。如果用户想和其它用户建立即时通信,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。
动手练习
1.使用Linux命令检测系统入侵者
安装过Mandrake Linux和Red Hat Linux的用户都会知道,Linux系统会内置三种不同级别(标准、高、更高)的防火墙,当进行了Linux服务器的安装和一些基本的设置后,服务器应该说是比较安全的,但是也会有黑客通过各种方法利用系统管理员的疏忽侵入系统。如何快速查找黑客非常重要。一般来说,可以使用命令查询黑客是否入侵,见表1。
表1 查询黑客入侵现象的命令对应表
[img]http://www.ttian.net/images/uploadimg/20050908/2155032.jpg[/img]
举例说明,如果黑客嗅探网络,那么它必须使网卡接口处于混杂模式,使用下面命令进行查询:
#ifconfig -a
eth0  Link encap:Ethernet  HWaddr 00:00:E8:A0:25:86
     inet addr:192.168.1.7  Bcast:192.168.1.255  Mask:255.255.255.0
     UP BROADCAST RUNNING PROMISCUOUS  MTU:1500  Metric:1
......
从这个命令的输出中,可以看到上面讲到的这些概念。第一行的00:00:E8:A0:25:86是mac地址,第二行的192.168.1.7是IP地址,第四行讲的是接收数据状态,这时正在被黑客嗅探。一般而言,网卡有几种接收数据帧的状态,如Broadcast、Multicast、Promiscuous等。Broadcast是指接收所有类型为广播报文的数据帧;Multicast是指接收特定的组播报文;Promiscuous则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查、全部接收的工作模式。
2.限制su命令的滥用
我们知道,超级用户在Linux中有最大的权利,几乎所有黑客都想得到这个目标。Linux可以增加对切换到超级用户的限制。使用PAM(Pluggable Authentication Modules)可以禁止除在wheel组以外的任何人su成root,修改/etc/pam.d/su文件,除去屏蔽标识#。使用/usr/sbin/usermod G10 bjecadm将bjecadm这个账号加入gid为10的组,就是wheel组。命令如下:
/etc/pam.d/su   # 使用密码验证#
auth sufficient /lib/security/pam_wheel.so debug
# 限制只有wheel组用户才可以切换到root#
auth required /lib/security/pam_wheel.so use_uid
chmod -G10 bjecadm
另外,每当用户试图使用su命令进入系统用户时,命令将在/usr/adm/sulog文件中写一条信息,若该文件记录了大量试图用su进入root的无效操作信息,则表明了可能有人企图破译root口令。
Linux命令有着强大的功能。对于Linux系统管理员来说,往往只需要通过各种安全命令技巧,组合构成安全防线。从计算机安全的角度看,世界上没有绝对安全的计算机系统,Linux系统也不例外。