通常情况下人们在服务器端采用各种冗余磁盘阵列(RAID)技术来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器。对于资金实力有限的中小企业来讲,在Linux下通过软件来实现硬件的RAID
功能,这样既节省了投资,又能达到很好的效果。何乐而不为呢?

作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID的支持(关于 RAID的背景知识请见附文),这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本。下面就让我们看一个Redhat Linux AS 4下的软件RAID配置实例吧。

系统配置情况

假设某单位新上了一套使用Oracle数据库的能量采集系统,该系统数据量极大并且读写非常频繁,实时性要求高,高峰时有近40名用户在线,对数据库服务器的磁盘子系统提出了很高的要求。由于预算比较紧张,经过多方比较,最终选择了采用Linux系统做软件RAID5的方案。

其配置情况如下:

● 操作系统为RedHat Linux AS 4;

● 内核版本为2.6.9-5.EL;

● 支持RAID0、RAID1、RAID4、RAID5、RAID6;

● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。

在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期 Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。

实现过程

1.创建分区

五块SCSI磁盘分别对应/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一块磁盘/dev/sda分两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且将分区类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。

# fdisk /dev/sdb

进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。

2.创建RAID 5

这里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下:

# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1

命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、 5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB;“/dev/sd[b, c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。

3.查看阵列状态

当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]

[>………………..] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec

unused devices:

当新建或重构完成后,再次查看/proc/mdstat文件:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减1;“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成 [_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于 n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F)。 
 
 

4.生成配置文件

mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚

 

持把这一步做完。

在mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

以上的这些信息可以通过扫描系统的阵列来获取,命令为:

# mdadm -Ds

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件

# vi /etc/mdadm.conf

5.创建文件系统并挂接(mount)使用

RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:

# mkfs -t ext3 /dev/md0

当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:

# mount /dev/md0 /mnt/raid

为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:

/dev/md0 /mnt/raid ext3 defaults 0 0

故障模拟

上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。

我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。

1.将/dev/sdb1标记为已损坏的设备

# mdadm /dev/md0 -f /dev/sdb1

查看当前阵列状态

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]

[=>……………….] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec

unused devices:

因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。

经过几分钟后,再次查看当前阵列状态。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。

2.移除损坏的设备

# mdadm /dev/md0 -r /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

损坏的sdb1已经从阵列中移掉。

3.将新设备添加到阵列中

因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1。

# mdadm /dev/md0 -a /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

这时sdb1作为备份设备再次出现在阵列中

常用阵列维护命令

1.启动阵列

# mdadm -As /dev/md0

该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。

#mdadm -As

该命令指启动mdadm.conf文件中的所有阵列。

#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1

如果没有创建mdadm.conf文件则可以采用上面这种启动方式。

2.停止阵列

# mdadm -S /dev/md0

3.显示指定阵列的详细信息

# mdadm -D /dev/md0

链接

RAID简介

RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。

磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。

1.RAID 0

特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。

磁盘利用数:n(假设有n个磁盘)。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。

2.RAID 1

特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。

磁盘利用数:n/2。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。

3.RAID 5

特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。

磁盘利用数:n-1。

配置条件:最低三块硬盘,且分区大小尽量相同。

应用领域:适合于事务处理环境,例如民航售票处、销售系统等。

生活中,有些食物的搭配组合已经是由来已久,其美妙的口味也被人们所接受,习惯上也觉得这些种搭配是顺理成章的了。但从健康的角度讲,还是不科学的,人家健康专家可是有着充足的理由呢。这里给您列出12种被健康专家列为错误的(我认为该是:不科学的)菜肴搭配。不过,不这样吃,有的东西还真不好吃,我想少这么吃也许问题不大吧。如果您很重视健康,还是听从专家们的忠告,别跟我似的,总是傻吃、贪吃。
  
1.土豆烧牛肉:由于土豆和牛肉在被消化时所需的胃酸的浓度不同,就势必延长食物在胃中的滞留时间,从而引起胃肠消化吸收时间的延长,久而久之,必然导致肠胃功能的紊乱。   

2.小葱拌豆腐:豆腐中的钙与葱中的草酸,会结合成白色沉淀物——草酸钙,同样造成人体对钙的吸收困难。

3.豆浆冲鸡蛋:鸡蛋中的粘液性蛋白会与豆浆中的胰蛋白酶结合,从而失去二者应有的营养价值。   

4.茶叶煮鸡蛋:茶叶中除生物碱外,还有酸性物质,这些化合物与鸡蛋中的铁元素结合,对胃有刺激作用,且不利于消化吸收。   

5.炒鸡蛋放味精:鸡蛋本身含有许多与味精成分相同的谷氨酸,所以炒鸡蛋时放味精,不仅增加了鲜味,反而会破坏和掩盖鸡蛋的天然鲜味。   

6.红白萝卜混吃:白萝卜中的维生素C含量极高,但红萝卜中却含有一种叫抗坏血酸的分解酵素,它会破坏白萝卜中的维生素C。一旦红白萝卜配合,白萝卜中的维生素C就会丧失殆尽。不仅如此,在与含维生素C的蔬菜配合烹调时,红萝卜都充当了破坏者的角色。还有胡瓜、南瓜等也含有类似红萝卜的分解酵素。   

7.萝卜水果同吃:近年来科学家们发现,萝卜等十字花科蔬菜进入人体后,经代谢很快就会产生一种抗甲状腺的物质———硫氰酸。该物质产生的多少与摄入量成正比。此时,如果摄入含大量植物色素的水果如橘子、梨、苹果、葡萄等,这些水果中的类黄酮物质在肠道被细菌分解,转化成羟苯甲酸及阿魏酸,它们可加强硫氰酸抑制甲状腺的作用,从而诱发或导致甲状腺肿。   

8.海味与水果同食:海味中的鱼、虾、藻类,含有丰富的蛋白质和钙等营养物质,如果与含有鞣酸的水果同食,不仅会降低蛋白质的营养价值,且易使海味中的钙质与鞣酸结合成一种新的不易消化的物质,这种物质会刺激胃而引起不适,使人出现肚子痛、呕吐、恶心等症状。含鞣酸较多的水果有柿子、葡萄、石榴、山楂、青果等。因此这些水果不宜与海味菜同时食用,以间隔两个小时为宜。   
9.牛奶与橘子同食:刚喝完牛奶就吃橘子,牛奶中的蛋白质就会先与橘子中的果酸和维生素C相遇而凝固成块,影响消化吸收,而且还会使人发生腹胀、腹痛、腹泻等症状。

10.酒与胡萝卜同食:最近,美国食品专家告诫人们:酒与胡萝卜同食是很危险的。专家指出,因为胡萝卜中丰富的β胡萝卜素与酒精一同进入人体,就会在肝脏中产生毒素,从而引起肝病。特别是在饮用胡萝卜汁后不要马上去饮酒。   

11.白酒与汽水同饮:因为白酒、汽水同饮后会很快使酒精在全身挥发,并生产大量的二氧化碳,对胃、肠、肝、肾等器官有严重危害,对心脑血管也有损害。   

12.吃肉时喝茶:有的人在吃肉食、海味等高蛋白食物后,不久就喝茶,以为能帮助消化。殊不知,茶叶中的大量鞣酸与蛋白质结合,会生成具有收敛性的鞣酸蛋白质,使肠蠕动减慢,从而延长粪便在肠道内滞留的时间。既容易形成便秘,又增加有毒和致癌物质被人体吸收的可能性。

生病不能吃的东西:

感    冒: 香蕉,橘子,芦荀汁,冰,羊肉,姜母鸭,烟酒

咳   嗽: 冰淇淋,橘子,炸,烤,辣,花生,酒,甜食 急

性 胃 炎 : 油炸食物,酒,辣椒,糯米

慢 性 胃 炎 : 生冷食物,酸酵食物,甜食

肠   炎 : 香蕉,蕃石榴

胃 肠 胀 闷 : 花生,蕃薯,蛋发酵类,豆类

急慢性肝炎 : 鹅(鸡,鸭)肉皮,肥猪肉,烟酒,不熬夜心
 
脏 病 : 暴饮暴食,高胆固醇,太咸食物

肾 脏 病 : 啤酒,汽水,咸鱼,笋干,咸菜

糖 尿 病 : 甜,酒,油腻,炸烤,高热量食物

低 血 压 : 芹菜,宜早睡多运动

高 血 压 :太咸食物,蛋黄,动物内脏,乳酪,动物性油,脑髓

消化性溃疡:豆类,竹笋,咸菜,糯米类品,酒,菠萝,辣椒,
番石榴

怀 孕 时 : 酒,烟,咖啡

跌打骨膜炎 : 香蕉,竹笋,酒,酸菜,

辣椒 跌 打 损 伤 :猪头骨肉,醋,花生,甜食,香蕉,啤酒

痔 疮 便 血 :烟,酒,辣椒,油炸物

风湿性关节炎:啤酒,香蕉,肉类,避寒露雨水

敏性体质: (荨麻疹,湿疹,哮喘,过敏性鼻炎)海产,芋头,芒果, 冰,桂圆 ,荔枝

脑神经衰弱(失眠症): 辣椒,酒,咖啡,葱,蒜

1.在陷入情网的时候,有些人丢了头脑,另一些人丢了心。When falling in love, some lose their head, others lose their heart.

2.幸福是良好的健康加上糟糕的记性。

Happiness is good health and a bad memory.

3.唯有爱可以把黑暗囚在波港湾里。

Love is the only thing that holds the dark at bay.

4.爱是两个人玩的双赢游戏。

Love is a game that two can play and both win.

5.爱不是从相互凝视之中获得的,倒是可以由同朝一个方向眺望而产生。这是生活给予我们的教训。

Life has taught us that love does not consist in gazing at each other but in looking outward together in the same direction .

6.一位父亲能为他的孩子做的最要紧的事是爱他们的母亲。

The most important thing a father can do for his

children is loving their mother.

7.爱是无尽的宽恕,是惯常的温柔目光。

Love is an act of endless forgiveness, a tender look which becomes a habit.

8.人在爱中超越自我。

To be in love is to surpass oneself.

9.男人的爱情门户在眼睛,女人则是在耳朵。

Love enters a man through his eyes; a woman through her ears.

10. (对女人来说) 有三类男人:智慧的情人,尊荣的情人,势利的情人。

There are three classes of men: lovers of wisdom, lovers of honor, lovers of gain.

11.女人定规是要让人爱,而不是让人理解。

Women are meant to be loved, not to be understood.

12.没有丑女人,只有不懂得如何使自己显出美丽的女人。

There are no ugly women; there are only women who not know how to look pretty.

13.想要别人爱你的话,就要去爱别人,做一个可爱的人。

If you would be loved, love and be lovable.

14.如果有人爱你,你就该做个值得人爱的人。

If you be loved, be worthy of love.

15.具备爱的无知和笨拙胜过缺乏爱的智慧和技巧。

Ignorance and bungling with love are better than wisdom and skill without love.

16.不成熟的爱说:“我爱你,因为我需要你。”成熟的爱说:“我需要你,因为我爱你。”

Immature love says:“I love you because I need you。”Mature love says:“I need you because I love you”

17.爱不在深厚,乃在久长。

Love me little, love me long.

18.没有信任就没有爱。

Where there is no trust, there is no love.

19.总结过去,放眼未来,把握现在。

Learn from the past, look to the future.Live in the present.
20.快乐起来吧!快乐才是明智的。

Be happy. It is a way of being wise.

21.喜剧是悲剧加上时间。

Comedy is tragedy plus time.

22.爱是春天有植物,用它的生机使一切散发出芬芳气息,即使是它所处身的废墟,也充满了希望。

Love is a springtime plant that perfumes everything with its hope, even the ruins to which it clings

23.不要轻视那无论何时总显得快乐无忧的人,有些事情是你所不懂的,而他懂。

Do not scorn the person who is perpetually happy. He does know something you don’t。

24.我是一个理想主义者,我不知道将往何处,但我正在赶路。

I’m an idealist。I don’t know where I’m going, but I’m on my way。

25.我只晓得一个责任,那就是施爱。

I know of only one duty, and that is to love.

26.对于人类生存问题,唯一令人满意的答案是:爱。

Love is the only satisfactory answer to the problem of human existence.

27.真理一从人的嘴里说出来就走了样。

Truth is fiction when spilled from the lips of a man.

28.一个对爱保持清醒的人无法去爱。

People who are sensible about love are incapable of it.

29.争吵总比寂寞好。

Contention is better than loneliness.

30.当面刺痛你的是你的好朋友。

Good friends stab you in the front.

31.如果有什么事情比被爱着更好的话,那就是爱着。

If there is anything better than being loved, it’s loving.

32.结婚是两个人的结合:其中一个总是忘了生日而另一个从来不会忘记。

Marriage is the alliance of two people, one of whom never remembers birthdays and the other who never forgets.

33.爱情就象一个砂漏,当脑子倒空的时候心就被填满了。

Love is like an hourglass, with the heart filling up as the brain empties.

34.匮乏压抑了人的一些小欲望而强化了重大的欲望,就如风吹灭蜡烛而煽旺篝火。

Absence extinguishes small passions and increases great ones, as the wind blows out a candle,and fans a bonfire.

35.我给你的忠告是:结婚吧!如果你找到一个好妻子,你是幸福的;如果妻子不贤,你则会成为哲学家。

My advice to you is to get married. If you find a good wife, you’ll be happy; if not, you’ll become a philosopher.

36.但愿坏习惯象心一样易碎。

If only bad habits could be broken as easily as hearts!

37.当爱被沾污时,金钱成了代用品。

When love turns into dust, money becomes the substitution.

38.爱使人健全;奉献或接受皆然。

Love cures people; both the ones who give it, and the ones who receive it.

39.浪漫植根于幻觉之上,而当我们爱上某个人时,我们也爱上他为我们营造的幻觉。

Romance is built on illusion, and when we love someone, we love the illusion they have created for us.

40.恋爱与咳嗽无法掩藏。

Love and a cough cannot be hidden.

41.爱是一笔财富。

Love is wealth.

42.爱情和理智不能并存。

It is impossible to love and be wise.

43.男人喜欢追逐那些象弄湿了的香皂般令人难以捉摸的女人——哪怕是讨厌洗澡的男人。

Men like to pursue an elusive woman like a cake of wet soap——even men who hate baths.

44.世上没有女人的话,男人可以活得象神仙。

Were there no women, men might live like gods.

45.寻求男女平等的女性缺乏雄心壮志。

Women who seek to be equal with men lack ambition.

46.女性泪眼矇眬之时,视线受阻的是男性。

When a female has tears in her eyes, the one who cannot see is the male

47.想象力比知识更重要。

Imagination is more important than knowledge.

48.当你出生时,你啼哭而世界欣喜。善度你的一生,使得你离世的时候,世界哭泣而你欣喜。

When you were born, you cried and the world rejoiced. Live your life so that when you die, the world cries and you rejoice.

49.很早以前我就懂得,永远不要与猪争斗。因为你会弄得很脏,而猪就喜欢你这样。

I learned long ago, never to wrestle with a pig. You get dirty, and besides, the pig likes it.

        我是一个广播电台的节目主持人,一家被老百姓誉为党的喉舌的广播电台。作为这个电台的主持人我深得听众的追捧和信任。可是最近我却萌发要向我的听众做一次深刻的忏悔的念头,而这个念头在心中愈演愈烈,终于到了我不得不说的程度。特别是电台的卖药节目被tiange垄断后,更加黑暗,一些主持人和主任更加不要脸………
    前几个月我帮同事代班,做了一段时间的医药专题节目。我早知道电台的医药类节目名声在听众中口碑不好,但我万万没想到这类节目中居然有那么多的可怕黑幕,今天我一定要把这些黑幕告诉大家,让大家不要再上那些骗子的当,这样做也许可以减轻一些我助纣为虐的罪过。
     在电台中做的医药类节目大多数为治疗男性病、妇科病、肝病、性病等难以启齿的疾病为主。形式嘛大家也听到过,就是一个医生在电台喋喋不休的讲述这类病的危害、他们生产的药效果如何如何好……可是你们是否知道那些坐在直播室中大肆讲解医学原理并为那些得病的人进行诊断的都是些什么人吗?这点作为节目主持人是最清楚不过了。他们中的大多数都自称是某某医院的主任,或者是医学顾问,甚至自称是某某医科大学(其实是一个根本就不存在的医科大学)毕业的博士,发表过多少多少论文、得到过多少奖……
     他们要求主持人在节目中帮他们撒谎:今天我们为您请来的专家是XX教授,他毕业于北京第四军医大学,获得博士学位,他发表的XXXX论文在2000年亚洲性学会上获得各国专家的一致认同……(其实这个所谓的教授今年才23岁,高中毕业学历,至于什么亚洲性学会纯属无稽之谈)。其实这些人根本没有受过正规的医学教育,更谈不上是什么医生啊专家啊……你要他拿出行医执照看看……根本没有!!
    有一天,一个做医药节目的嘉宾一高兴向我透露了一个秘密:他们这种到电台来做医药节目的嘉宾主持已经形成了一个产业,他一个初中生,培训了15天就开始上岗了,他们这行已经形成了专业培训制度,而他的师傅,就是*卖这种假药,当初带着几万块钱来到这个城市,一不小心一年就赚了一千万……
    再来说说那些打进热线的听众吧,不幸听过这类节目的朋友一定有印象吧:在这些节目中总是有些听众打来电话说:XX教授,我吃了你们的药以后,我的病好多了……你们的药效果很好……我原来怎样怎样,自从吃了你们的药以后啊,全好了!!真的有那么多人吃了他们的药日见好转吗?错!那些都是“托”!简称“药托”。这些人都是那些假药的生产厂家花钱雇来的。打一个电话从10–20元劳务费不等……而这些药托也已经形成了一种职业了,所以你留意的话会发现,同一天中,不同的卖药节目中会出现同一个声音,刚刚还说自己是吃XX丸吃好的,下一分钟做另一个药托就说自己是吃XX胶囊吃好的了。今天也许说自己是29岁,明天说不定就变成40岁的中年人了。其实就那么几个人在电台里换着口气做托……
   这类节目在我们台的收费是15分钟3000块,一个月就十万,一年100多万。
      我继续来说说自己做这类节目的遭遇吧。就在前些日子,一个卖叫做什么黄金生命的男性病药的骗子坐在直播室里唾沫四溅的吹嘘她的药如何如何了得可以增长多少多少长度,延长多少多少时间,冷不丁一个可怜巴的打工者打进热线(那天他们没有安排药托,估计药托那天业务比较忙),他们自己的导播把电话给接进直播室了,听众问:XX主任,我得了肝病,请问你们的药可以治吗?还没等我说话,那位什么所谓的XX主任就立刻抢过话头说:可以可以!!完全可以!!你需要服用我们的黄金生命5个疗程!!就可以痊愈了!
      !!!!!!!
      我当时真是气愤之至!对那个听众说:你得的是肝病,应该去医院治疗!这个药对你是没有作用的,再见!
      当时那个什么主任就气的脸色变了。本来我平时和她做节目就不爱理会她,对这样的骗子我一直是鄙视的,但从此这个卖假药的就开始和我过不去,三番五次的到我们的台长那里去投诉我,说我对他们态度恶劣,不给他们服务好,做节目不专心……等等……要知道,这些骗子可是我们电台的衣食父母,一年好一百多万的广告,不伺候好他们可是犯了领导大忌咯,于是我三番五次的被通报批评,扣罚奖金……尽管这样我还是对他们热情不起来,我同事劝我说:为了自己的饭碗你装也要装一下的……但是我还是装不好……一想到他们在电台里每天胡言乱语,假话连篇我就觉得恶心……这帮人渣……

再来看看他们在节目中的谎言吧:
      
      今天在这里为大家诊断的是:XX生命与睾丸保养首席医学顾问XX主任;
      今天我国生殖泌尿学会高级顾问XX教授会为您解答疑难
      XX教授在新西兰举行的2003年世界性学会上发表的《XXXXXX》论文受到各国专家的一致认同……
      
    还有一个可笑的情节就是:这类假药通常都是长年累月的搞优惠,什么买8盒送3盒,买两个疗程送价值1000多元的药……优惠活动只有5天时间,一定要抓紧时间购买,否则就享受不到优惠了。可是事实却是;优惠活动我给他们播了半个月,还在优惠……今天说优惠只有3天,明天说只有2天,一个月后,还是买8送3,但我却永远要帮他们说:优惠只有5天!只有5天!大家赶紧买!
    谎言之三:我们的XX丸脱销了!!
      找一个药托打进电话说:怎么回事啊,XX主任,我今天去买你们的药结果营业员说断货了!!
      XX主任会说:不要着急,因为我们的药物疗效太好了,所以大家都抢着买,造成断货,不要着急我们已经在组织货源,你明天一早8点到XXX指定药店去买,一定会有的!
  这些卖假药的通常都有一篇背的滚瓜烂熟的稿子,每天都是颠来倒去重复同样的内容,普通听众的热线基本不接,都是安排好的托,一旦有听众打进热线真的向他们咨询,一般这些卖假药的也都有准备好的一套内容答复,通常是问:你这个毛病多少时间了啊?哦,你这个病是典型的XXX障碍呀,要抓紧时间治疗啊(管你是什么病,反正他的药能治什么病就说是什么病)不要着急,你服用我们的XXXX丸五个疗程就可以痊愈了,现在我们正在搞优惠呢,你要赶紧去买呀
      !!
      有一次我问他们:你们怎么那么厉害?不看到病人就能知道他是什么病?吃坏了药怎么办?
      他说:放心吃不坏的,我们的药治不好病但也吃不坏人,他的病嘛,不看也能猜个8、9不离10,都差不多的……
      
       我晕*……
      通常这些骗子是打一枪换一个地方,一旦工商啊,卫生部门来查了他们马上搬家换一种药,当然也有把上边摆平的,就一点事情没有。
      一个卖假药的亲口对我说:我们之所以能赚钱是中国国情决定的,中国是个人制的国家,不是法制的国家,我知道我们卖这些假药 是违法的,但是只要把人搞定照样做……工商局卫生部都不会来查电台的这类广告的。
      我无语…………原来这些卖假药的之所以能公然的招摇撞骗是我们的国情决定的……
  
  
  
  有人说你发这个帖子不是在搬起石头砸自己的脚吗?那些骗子可是你们的衣食父母啊,你怎么胳膊肘往外拐呢?不想要自己的饭碗了?不错我们的广告收入有三分之一是来源于这类广告。

       可是写这个忏悔录我考虑的正是我的饭碗问题,我很喜欢我从事的职业,从小这个行业在心目中就是神圣的,纯洁的……我还想要一辈子做这个职业,但是看到这个行业被糟蹋成这样我很心痛,担心自己会因为这个原因而不得不选择离开我喜欢的岗位,担心所有的人都象楼上那位一样不再听广播了,到那时我们哪里还有什么饭碗可言呢?

7.62mm突击步枪AK—47式7.62mm突击步枪是前苏联著名枪械设计师卡拉什尼科夫设计的,俗称冲锋枪,从研制到装备部队时间很短。   在第二次世界大战期间,前苏联在与德国战争中深感托卡列夫 CBT—–38 半自动步枪火力不足,且有底缘的7.62mm枪弹无法保证可靠的全自动射击。因此,研制新型弹药和与之匹配的突击步枪成为当时苏联迫在眉睫的事情。

  二次大战结束前,N·M·耶里萨罗夫和B·V·瑟明研制成一种名为M43式7.62mm中间型枪弹。为发射此弹,有许多枪械设计师设计了样枪,其中有西蒙诺夫、苏达耶夫、斯帕金、布尔金、捷格加廖夫等。西蒙诺夫的样枪叫CKC 45式,是第一支发射M43式7.62mm新枪弹的步枪。苏达耶夫于1944年也研制出了他的样枪。卡拉什尼科夫于1946年才研制出样枪。经过多次评审试验,卡氏样枪击败了所有对手而被采纳,并于1947年定型,1949年装备部队。前苏军摩托化步兵部队、空军和海军的警卫、勤务人员使用木制或塑料制固定枪托型,伞兵、坦克乘员和特种分队使用折叠金属枪托型。

  现在,AK47式突击步枪是世界上最著名,装备范围最为广泛的步枪,除前苏外,也装备前华约各国以及许多第三世界国家。目前世界上有30多个国家的军队装备中都在使用,有的还进行了仿制或特许生产。以色列的加利尔7.62步枪、芬兰的瓦尔梅特M 60式、M 62式、M 82式的7.62mm步枪,就是参照AK–47式设计的;波兰的 PMK—-DGM—-60式和前南斯拉夫的M 64式7.62mm步枪也是它的仿制品。中国也于1956年仿制AK47制造出名为56式7.62毫米冲锋枪,在当时全军范围内装备,这支仿制步枪是我军装备时间最长的武器,直到80年代初,才停止生产。

  椐不完全统计,AK47突击步枪以及由它发展或仿制的系列步枪在全世界的用量近9000千万支,后来该枪于50年代末期由其改进型AKM7.62mm突击步枪取代。

AK47突击步枪的结构原理极其性能特点
1、AK–47的枪械结构和发射原理
  该枪枪管与机匣螺接在一起,其膛线部分长369mm枪管镀铬。无论是在高温还是低温条件下,射击性能都很好。机匣为锻件机加工而成。弹匣用钢或轻金属制成,不管在什么气候条件下都可以互换。
  击发机构为击锤回转式,发射机构直接控制击锤。
  快慢机位于枪的右侧。当快慢机装定于自动位置时,单发阻铁的后突出部被快慢机下突出部压住,不能转动,故扣不住击锤。此时,击发阻铁扣住击锤而成待击状态。扣压扳机后,阻铁解脱击锤,击锤回转击发。此后,只要扣住扳机不放,击发阻铁和单发阻铁都扣不住击锤,只有不到位保险阻铁卡笋能抵住击锤卡槽。当机框复进到位压下不到位保险阻铁传动杆时,卡笋即脱离击锤卡槽,击锤回转击发。以后则重复上述动作,实现连发射击。
  当快慢机装定于半自动位置时,首发弹击发前,阻铁扣住击锤而成待击状态。扣压扳机后,阻铁解脱击锤,单发阻铁也一同向前回转。若扣住扳机不放,则击发后击锤被机框压倒的同时即被单发阻铁扣住。此时,由于机框未复进到位,不到位保险阻铁传动杆向上抬起,卡笋和击锤卡槽之间有少许间隙。当机框复进到位,再次解脱不到位保险阻铁时,击锤被单发阻铁扣住,若再次发射,必须先松开扳机,使单发阻铁解脱击锤,击锤随之被击发阻铁扣住再次成待击状态。
  如果机框复进不到位,枪机闭锁就不确实。此时,机框的解脱突笋没有压下不到位保险,故保险阻铁卡笋不能脱离击锤卡槽。因此,即使扣压扳机,击锤仍不能向前回转,于是形成不到位保险。
  快慢机柄在最上方位置时,其下突出部顶住单发阻铁后突出部和扳机后端突出部的右侧,故扣不动扳机,实现保险。若此时击锤在待击位置,弹膛内有枪弹,因扣不动扳机,击锤不能解脱,所以形成后方保险。若此时击锤在击发位置,因扣不动扳机,阻铁不能向前回转,击锤后倒时即被阻铁挡住,机框只能后坐一很短的距离,不能将弹匣内的枪弹推进弹膛,故形成前方保险

2、AK–47的特点和主要的性能参数

  AK47式突击步枪动作可靠,勤务性好;坚实耐用,故障率低,尤其在风沙泥水中使用,性能可靠;结构简单,分解容易。但是连发射击时枪口上跳严重,影响精度;与小口径步枪相比,系统质量较大,携行不便。该枪采用导气式自动原理,枪机回转闭锁机构,其突出特点是动作可靠,故障小,能在各种恶劣的条件下使用,而且武器操作简便,连发时火力猛。在这里我举一个小小的例子,美国越战期间,有许多美国士兵仍掉M16步枪改用缴获的AK47突击步枪来对付敌人,由此可见,AK47在实战中的威力以及好用之处。
  下面我在列出AK47突击步枪的一些主要参数以供参考
    口 径—-7.62mm
    初 速—-710m/s
    有效射程—-300m
    枪口动能—-1980J
    理论射速—-600发/min
    自动方式—-导气式
    闭锁方式—-枪机回转式
    发射方式—-单发、连发
    供弹方式—-弹匣
    容 弹 量—-30发
    全 枪 长—-699mm
    固定式枪托—-870mm
    折叠式枪托—-860mm
    枪托打开—-870mm
    枪托折叠—-645mm
    枪 管 长—-415mm
    膛 线—-4条,右旋,缠距240mm
    全枪质量(不含弹匣)—-4.3kg
    准 星—-柱形
    照 门—-U形缺口式

深夜,寺里一人一佛,佛坐人站。

人:圣明的佛,我是一个已婚之人,我现在狂热地爱上了另一个女人,我真的不 知道该怎么办。

佛:你能确写你现在爱上的这个女人就是你生命里唯一的最后一个女人吗?

人:是的。

佛:你离婚,然后娶她。

人:可是我现在的爱人温柔,善良,贤惠,我这样做是否有一点残忍,有一点不 道德。

佛:在婚姻中没有爱才是残忍和不道德的,你现在爱上了别人已不爱她了,你这样做是正确的。

人:可是我爱人很爱我,真的很爱我。

佛:那她就是幸福的。

人:我要与她离婚后另娶她人,她应该是很痛苦的又怎么会是幸福的呢?

佛:在婚姻里她还拥有她对你的爱,而你在婚姻中已失去对她的爱,因为你爱上了别人,正谓拥有的就是幸福的,失去的才是痛苦的,所以痛苦的人是你。

人:可是我要和她离婚后另娶她人,应该是她失去了我,她应该才是痛苦的。

佛:你错了,你只是她婚姻中真爱的一个具体,当你这个具体不存在的时候,她 的真爱会延续到另一个具体,因为她在婚姻中的真爱从没有失去过。所以她才是幸福的而你才是痛苦的。

人:她说过今生只爱我一个,她不会爱上别人的。

佛:这样的话你也说过吗?

人:我。我。。我。。。

佛:你现在看你面前香炉里的三根蜡烛,哪根最亮。

人:我真的不知道,好像都是一样的亮。

佛:这三根蜡烛就好比是三个女人,其中一根就是你现在所爱的那个女人,芸芸众生,女人何止千百万万,你连这三根蜡烛那根最亮都不知道,都不能把你现在爱的人找出来,你为什么又能确定你现在爱的这个女人就是你生命里唯一的最后一
个女人呢?

人:我。我。。我。。。

佛:你现在把一根蜡烛拿到你眼前,看看哪根最亮

人:当然是眼前的这根最亮。

佛:你现在把它放回原处,再看看哪根最亮

人:我真的还是看不出哪根最亮。

佛:其实你刚拿的那根蜡烛就是好比是你现在爱的那个最后的女人,所谓爱由心生,当你感觉你爱她时,你用心去看就觉的它最亮,当你把它放回原处,你却找不到最亮的一点感觉,你这种所谓的最后的唯一的爱只是镜花水月,到头来终究是一场空。

人:哦,我懂了,你并不是要我与我的爱人离婚,你是在点化我,

佛:看破不说破,你去吧。

人:我现在真的知道我爱的是谁了,她就是我现在的爱人。

佛:阿弥陀佛,阿弥陀佛。

『一生只要守好一只蜡烛就可以了,看多了会眼花的~~~~』

原文:http://javascriptkit.com/howto/robots.shtml
译者:Tony Qu,BluePrint翻译团队

    有一种力量其实一直在渗入大量的网站和页面,我们通常看不到它们,而且它们通常也很蛮横,大部分人甚至不知道它的存在,大家不要误会,其实我说得是搜索引擎爬虫和机器人。每天,上百个这样的爬虫会出来对网站进行快速的搜索。不管是不是google打算对整个网络进行索引,还是spam机器人打算收集大量的 email地址,通常它们这样的寻找是漫无目的的。作为网站拥有者,我们可以通过一个叫做robots.txt的文件来控制哪些动作是机器人可以做的。

创建robots.txt文件

好,现在我们开始行动。创建一个叫robots.txt的文本文件,请确保它的文件名是正确的。该文件必须上传到在您的网站的根目录下,而不是二级目录下(例如,应该是http://www.mysite.com,而不是http: //www.mysite.com/stuff),只有满足以上两点,即文件名正确和路径正确,搜索引擎才会根据该文件中的规则工作,否则 robots.txt仅仅只是个常规文件而已,没有任何作用。

现在,你已经知道如果这个文件该如何命名,以及应该把它上传在何处,接下来你会学习在这个文件中键入命令,搜索引擎会遵循一个叫做“机器人排除协议”(Robots Exclusion Protocol)的协议。其实,它的格式很简单,并且能够满足大多数的控制需要。首先是一行USERAGENT用来识别爬虫类型,紧跟着的是一行或者多行DISALLOW,这些行是用来限制爬虫访问网站的一些部分的。

1) robots.txt基本设置

Useragent: *
Disallow: 
/

根据以上的声明,所有的爬虫(这里用*表示出来)均不允许对您的网站的任何部分进行索引,这里的/表示所有页面。通常情况下这不是我们需要的,但这里仅仅是让大家有个概念而已。
2) 现在让我们做一些小小的改动。尽管每个站长都喜欢Google,但是你可能不希望Google的镜像机器人挖掘你的网站,也不希望它把你的网站的镜像放在网上,实现在线搜索,如果仅仅是为了节省你的网站所在的服务器的带宽,下面的声明可以做到这一点

Useragent: GooglebotImage
Disallow: 
/

3) 以下代码不允许任何一个搜索引擎和机器人挖掘目录和页面信息

Useragent: *
Disallow: 
/cgibin/
Disallow: 
/privatedir/
Disallow: 
/tutorials/blank.htm

4) 你还可以对多个机器人设置不同的目标,看看下面的代码

Useragent: *
Disallow: 
/
User
agent: Googlebot
Disallow: 
/cgibin/
Disallow: 
/privatedir/

这个设置很有趣,这里我们禁止了所有的搜索引擎对于我们的网站的挖掘操作,除了google,在这里Google被允许访问除了/cgi-bin/和/privatedir/以外的所有站点。这里说明,规则是可以定制的,但不是继承而来的。
5) 有另外一种使用Disallow的方法:即允许访问网站所有内容,其实只要冒号后不输入任何东西就可以了

Useragent: *
Disallow: 
/
User
agent: ia_archiver
Disallow:

在这里,除了alex以外的所有爬虫都不允许搜索我们的网站
6) 最后,一些爬虫现在支持Allow规则,最著名的就是Google。正如这个规则的名字所说,”Allow:”允许你精确的控制那些文件或者文件夹是可以被访问的。然而,这个文件目前还不是robots.txt协议的组成部分,所以我建议只有在必须使用时才使用它,因为一些不够聪明的爬虫可能认为它是错误的。
下面的内容来自于Google’s的FAQs for webmasters,如果你希望除了Google以外的爬虫都不挖掘你的网站,那么以下的代码是做好的选择

Useragent: *
Disallow: 
/
User
agent: Googlebot
Allow: 
/

 

有客户要NC,去拿硬盘。天气不错,乘在小钱的车里,感受到了阳光的暖意,没想到IDE淘汰得这么快,本地的宏图三包都没货了,没办法,只能去金沙江路去看看又没有库存,还好找到一80G容量WD的,看着我们公司的NC主板,同事说:“这还有AGP加速啊”,看着它,我回忆起家里的古董,只支持4X的东东,9600pro和Geforce4mx440插上去连机器都点不亮,本想发挥一下MCE的多媒体优势的,哎。。。欲哭无泪啊。。

通过quota进行磁盘配额,可以控制用户对磁盘空间和文件的控制,我们以一个实例作为说明,对2个用户user01、user02分别进行磁盘使用空间和创建文件的限制。
首先,创建一个新的分区,将/tmp挂载在新的分区。
#fdisk /dev/hda创建后执行:

#partprobe
 

重新写分区表

#mkfs –t ext3 /dev/hda7 格式化分区
#mount /dev/hda7 /tmp 将/tmp挂载到hda7分区

修改分区表

#vi /etc/fstab增加usrquota,grpquota
/dev/hda7   /tmp   ext3    defaults, usrquota,grpquota  0 0

创建用户

#useradd user01
#useradd user02
#cd /tmp
#mount –o remount /tmp
#quotacheck –cvug /tmp
#quotaon –vug /tmp    开启quota
Quota会在/tmp目录下自动创建quota.user quota.group

对用户user01进行磁盘空间使用限制

#edquota –u user01   修改quota配置文件
                     Block limits                              File limits
User            used   soft    hard     timeleft    used   soft   hard    timeleft
userq     —      0    5000   8000                         0      0      0

Block limits是对磁盘空间使用的限制,以字节为单位,soft是指软限制,hard是指硬限制,如例,soft限制为5MB,hard限制为8MB,当用户user01使用空间超过5MB时,系统会进行提示,但可以继续使用空间,而当用户user01使用空间达到8MB时,就会限制用户user01继续使用/tmp空间
我们可以进行一下测试,手动创建相对大的文件:

#dd if/dev/zero of=user01file bs=1M count=4  将创建成功
#dd if/dev/zero of=user01file bs=1M count=6 将创建成功,但会有提示
#dd if/dev/zero of=user01file bs=1M count=9 将创建失败,超出hard限制

对用户user02进行创建文件使用限制

#edquota –u user02   修改quota配置文件
                    Block limits                              File limits
User            used   soft    hard     timeleft    used   soft   hard    timeleft
userq     —      0       0       0                         0       50      80

File limits是对用户创建文件的限制,soft和hard同上是软限制和硬限制,分别是50、80,当用户user02创建文件超过50个时,系统会进行提示,但仍可以继续创建文件,而当用户user02创建文件超过80个文件时,就会限制用户user02继续创建文件,但要注意,因为用户user02是在/tmp目录下进行了磁盘配额限制,所以/tmp目录会算做一个文件,所以user02最多只能创建79个文件。

我们可以进行一下测试,手动创建文件:
#for i in $(seq 1 60);do echo “user02file$i”;touch user02file$i;done

创建60个文件,此时quota会进行提示,而当超过80个文件的时候,quota就会限制用户user02继续创建文件

#edquota –t

可以设置timeleft的值,在这里我们都设定为2分钟,重复上面的例子,用户user02创建60个文件,此时会出现quota的提示,但仍可以创建文件,但当我们等待2分钟后,你会发现,user02已经不能再进行创建文件了,这里就是timeleft的作用,就是当你超过soft限制时,设定有效的时间。
其他相关命令

#repquota       重载quota设置
#quota –v       察看quota设置
#quota on/off   quota开启/关闭

这样我们就可以对用户进行相应的限制了。

 

SSH的一些安全小技巧 —————————————————-

 

, 前言  

关于ssh 的好处, 相信不用我多说了吧?
简而言之, 之前的 rpc command telnet 都全可用 ssh 代替.
比方如下的这些常见功能:
远程登录
ssh
user@remote.machine
远程执行
ssh
user@remote.machine ‘command …’
远程复制
scp
user@remote.machine:/remote/path /local/path
scp /local/path
user@remote.machine:/remote/path
– X forward
ssh -X
user@remote.machine<
span lang=”EN-US” style=”FONT-SIZE: 10pt; COLOR: #2e2e2e; FONT-FAMILY: Arial”>

xcommand …
– Tunnel / Portforward
ssh -L 1234:remote.machine:4321
user@remote.machine
ssh -R 1234:local.machine:4321
user@remote.machine
ssh -L 1234:other.machine:4321
user@remote.machine  

至于详细的用法, 我这就不说了. 请读者自行研究吧.
我这里要说的, 是针对 ssh 服务为大家介绍一些安全技巧, 希望大家用得更安心些.  

, 实作 (

实作以 RedHat 9 为范例) 1)

禁止 root 登录
# vi /etc/ssh/sshd_config
PermitRootLogin no 2)

废除密码登录, 强迫使用 RSA 验证(假设 ssh 账户为 an> user1 )
# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys
PasswordAuthentication no
# service sshd restart
# su – user1
$ mkdir ~/.ssh 2>/dev/null
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys ————————————————–

转往 client
browser URL 输入:
http://server.machine/ssh_open/ssh_open.php?myip=1.2.3.4
(
若不指定 ?myip=1.2.3.4 则以 client 当时 IP 为准, 若没经 proxy 的话.)
如此, server 端的 ssh_open.txt 文件只有单一记录, 每次盖写.
接着:
$ telnet server.machine 1234
然后你有最多 5 分钟时间用 ssh 联机 server !
—————————  

转往 client :
$ ssh-keygen -t rsa
(
按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent )
$ scp ~/.ssh/id_rsa.pub
user1@server.machine:id_rsa.pub
(
若是 windows client, 可用 puttygen.exe 产生 public key,
然后复制到 server 端后修改之, 使其内容成为单一一行.)
—————————————————  

回到 server :
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub
$ exit 3)

限制 su / sudo 名单:
# vi /etc/pam.d/su
auth       required     /lib/security/$ISA/pam_wheel.so use_uid
# visudo
%wheel  ALL=(ALL)       ALL
# gpasswd -a user1 wheel 4)

限制 ssh 使用者名单
# vi /etc/pam.d/sshd
auth       required     pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
# echo user1 >> /etc/ssh_users 5)

封锁 ssh 联机并改用 web 控管清单
# iptables -I INPUT -p tcp –dport 22 -j Drop
# mkdir /var/www/html/ssh_open
# cat > /var/www/html/ssh_open/.htaccess <<END
AuthName “ssh_open”
AuthUserFile /var/www/html/ssh_open/.htpasswd
AuthType basic
require valid-user
END
# htpasswd -c /var/www/html/ssh_open/.htpasswd user1
(
最好还将 SSL 设起来, 或只限 https 联机更佳, 我这里略过 SSL 设定, 请读者自补.)
(
如需控制联机来源, 那请再补 Allow/Deny 项目, 也请读者自补.)
# cat > /var/www/html/ssh_open/ssh_open.php <<END
<?
//Set dir path for ip list
$dir_path=”.”; //Set filename for ip list
$ip_list=”ssh_open.txt”;

//Get client ip
$user_ip=$_SERVER[‘REMOTE_ADDR’];

//allow specifying ip if needed
if (@$_GET[‘myip’]) {
$user_ip=$_GET[‘myip’];
}

//checking IP format
if ($user_ip==long2ip(ip2long($user_ip))) {

//Put client ip to a file
if(@!($file = fopen(“$dir_path/$ip_list”,”w+”)))
{
       echo “Permission denied!!<br>”;
       echo “Pls Check your rights to dir $dir_path or file $ip_list”;
}
else
{
       fputs($file,”$user_ip”);
       fclose($file);
       echo “client ip($user_ip) has put into $dir_path/$ip_list”;
}
} else {
echo “Invalid IP format!!<br>ssh_open.txt was not changed.”;
class=”postbody”>}


?>
END
# touch /var/www/html/ssh_open/ssh_open.txt
# chmod 640 /var/www/html/ssh_open/*
# chgrp apache /var/www/html/ssh_open/*
# chmod g+w /var/www/html/ssh_open/ssh_open.txt
# chmod o+t /var/www/html/ssh_open
# service httpd restart
# mkdir /etc/iptables
# cat > /etc/iptables/sshopen.sh <<END
#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

list_dir=/var/www/html/ssh_open
list_file=$list_dir/ssh_open.txt
chain_name=ssh_rules
mail_to=root

# clear chain if exits, or create chain.
iptables -L -n | /bin/grep -q “^Chain $chain_name” && {
       iptables -F $chain_name
       true
} || {
       iptables -N $chain_name
       iptables -I INPUT -p tcp –dport 22 -j $chain_name
}

# clear chain when needed
[ “$1” = clear ] && {
       iptables -F $chain_name
       exit 0
}

# do nothing while list is empty
[ -s $list_file ] || exit 1

# add rule
iptables -A $chain_name -p tcp –dport 22 -s $(< $list_file) -j ACCEPT && \
echo “ssh opened to $(< $list_file) on $(date)” | mail -s “sshopen” $mail_to
END
# chmod +x /etc/iptables/sshopen.sh
# echo -e ‘sshopen\t\t1234/tcp’ >> /etc/services
# cat > /etc/xinetd.d/sshopen <<END
service sshopen
{
       disable = no
       socket_type     = stream
       protocol        = tcp
       wait            = no
       user            = root
       server          = /etc/iptables/sshopen.sh
}
# iptables -I INPUT -p tcp –dport 1234 -j ACCEPT
# cat > /etc/cron.d/sshopen <<END
*/5 * * * *     root    /etc/iptables/sshopen.sh clear
END

—————————

此步骤的基本构思如下:
5.1)
sshd firewall 联机全部 block .
5.2)
然后在 httpd 那设一个 directory, 可设 ssl+htpasswd+allow/deny control,
然后在目录内写一个 php browser ip 记录于一份 .txt 文字文件里.
视你的转写能力, 你可自动抓取 browser 端的 IP, 也可让 browser 端传入参数来指定.
文字文件只有单一记录, 每次盖写.
5.3)
修改 /etc/services , 增加一个新项目( xxx), 并指定一个新 port( 1234)
5.4)
再用 xinetd 监听该 port , 并启动令一只 script, 设定 iptables , step2 的清单里取得 IP, 为之打开 ssh 联机.
5.5)
crontab 每数分中清理 iptables 关于 ssh 联机的规则. 这并不影响既有联机, 若逾时再连, 则重复上述. 6)

要是上一步骤没设定, 你或许会担心过多的人来 try 你的 ssh 服务的话:
# cat > /etc/iptables/sshblock.sh <<END
#!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin

LOG_FILE=/var/log/secure
KEY_WORD=”Illegal user”
KEY_WORD1=”Failed password for root”
PERM_LIST=/etc/firewall/bad.list.perm
LIMIT=5
MAIL_TO=root
IPT_SAV=”$(iptables-save)”
bad_list=$(egrep “$KEY_WORD” $LOG_FILE | awk ‘{print $NF}’ | xargs)
bad_list1=$(egrep “$KEY_WORD1” $LOG_FILE | awk ‘{print $11}’ | xargs)
bad_list=”$bad_list $bad_list1″

for i in $(echo -e “${bad_list// /\n}” | sort -u)
do
       hit=$(echo $bad_list | egrep -o “$i” | wc -l)
       [ “$hit” -ge “$LIMIT” ] && {
               echo “$IPT_SAV” | grep -q “$i .*-j Drop” || {
                       echo -e “\n$i was dropped on $(date)\n” | mail -s “Drop by ${0##*/}: $i” $MAIL_TO
                       iptables -I INPUT -s $i -j Drop
               }
               egrep -q “^$i$” $PERM_LIST || echo $i >> $PERM_LIST
       }
done
END
# chmod +x /etc/firewall/sshblock.sh
# cat >> /etc/hosts.allow <<END
sshd: ALL: spawn ( /etc/firewall/sshblock.sh )& : ALLOW
END

 

这样, 那些乱 try SSH 的家伙, 顶多能试 5 (LIMIT 可调整), 然后就给 BLOCK 掉了.
此外, PERM_LIST ip, 也可提供给 iptables 的初始 script , 来个永久性封闭:
for i in $(< $PERM_LIST)
do
       /sbin/iptables -I INPUT -s $i -j Drop
done   7)

还有, 你想知道有哪些人对你做 full range port scan 的话: # iptables -I INPUT -p tcp –dport 79 -j ACCEPT
cat > /etc/xinetd.d/finger <<END
service finger
{
       socket_type     = stream
       wait            = no
       user            = nobody
       server          = /usr/sbin/in.fingerd
       disable         = no
}
END
# cat >> /etc/hosts.allow <<END
in.fingerd: ALL : spawn ( echo -e “\nWARNING %a was trying finger.\n$(date)” | mail -s “finger from %a” root ) & : DENY
END

 

这里, 我只是设为发信给 root.
事实上, 你可修改为起动 firewall %a 这个传回值给 ban 掉也行.
不过, 对方要是有选择性的做 port scan , 没扫到 finger 的话, 那当然就没用了 

, 结语 > security

有蛮多挺好玩的小技巧, 有空再跟大家做分享… ^_^