|
用户名:wszhhg 笔名:痴颠儿 地区: 江苏-苏州 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
欢迎访问wszhhg的博客
搜索引擎登陆页
我是一个硬盘
> 我是一个硬盘.
> 在一个普普通通的台式机里工作。别人总认为我们是高科技白领,工作又干净又体
> 面,似乎风光得很。也许他们是因为看到洁白漂亮的机箱才有这样的错觉吧。其实
> 象我们这样的小台式机,工作环境狭迫,里面的灰尘吓得死人。每天生活死水一
> 潭,工作机械重复。跑跑文字处理看看电影还凑活,真要遇到什么大软件和游戏,
> 上上下下就要忙的团团转,最后还常常要死机。
>
> 我们这一行技术变化快,差不多每过两三年就要升级换代,所以人人都很有压力而
> 且没有安全感。每个新板卡来的时候都神采飞扬踌躇满志,几年光阴一过,就变得
> 灰头土脸意志消沉。机箱里的人都很羡慕能去别的机器工作。特别是去那些笔记
> 本,经常可以出差飞来飞去,住五星级的酒店,还不用干重活,运行运行word,上
> 网聊聊天就行了。
>
> 但我更喜欢去那些大服务器,在特别干净明亮的机房里工作。虽然工作时间长点,
> 但是福利好,24小时不间断电ups,而且还有阵列,热插拔,几个人做一个人的事
> 情,多轻松啊。而且也很有面子,只运行关键应用,不象我们这里,什么乱七八糟
> 的事情都要做。不过我知道,那些硬盘都很厉害,不是SCSI,就是 SCSI
> II,Fibrechannel,象我这样IDE的,能混到工作站就算很不错了。
>
> 我常常想,当年在工厂里,如果我努力一下会不会也成了一个SCSI?或者至少做一
> 个笔记本硬盘。但我又会想,也许这些都是命运,不过我从不抱怨。内存就常常抱
> 怨,抱怨他们主板部门的复杂,抱怨他如何跟新来的杂牌内存不兼容,网卡和电视
> 卡又是如何的冲突。
>
> 我的朋友不多,内存算一个。他很瘦的而我很胖,他动作很快,而我总是很慢。我
> 们是一起来这台机器的,他总是不停地说,而我只是听,我从来不说。
>
> 内存的头脑很简单,虽然英文名字叫Memory,可是他什么Memory都不会有,天大的
> 事睡一觉就能忘个精光。我不说,但我会记得所有的细节。他说我这样忧郁的人不
> 适合作技术活,迟早要精神分裂。我笑笑,因为我相信自己的容量。
>
> 有时候我也很喜欢这份工作,简单,既不用象显示器那样一天到晚被老板盯着,也
> 不用象光驱那样对付外面的光碟。只要和文件打交道就行了,无非是读读写写,很
> 单纯安静的生活。直到有一天……
>
> 我至今还记得那渐渐掀起的机箱的盖子,从缺口伸进来的光柱越来越宽,也越来越
> 亮。空气里弥漫着跳动的颗粒。那个时候,我看到了她。她是那么的纤细瘦弱,银
> 白的外壳一闪一闪的。浑身上下的做工都很精致光洁,让我不禁惭愧自己的粗笨。
> 等到数据线把我们连在一起,我才缓过神来。开机的那一刹那,我感到了电流和平
> 时的不同。后来内存曾经笑话我,说我们这里只要有新人来,电流都会不同的,上
> 次新内存来也是这样。我觉得他是胡扯。我尽量的保持镇定,显出一副很专业的样
> 子,只是淡淡的向她问好并介绍工作环境。慢慢的,我知道了,她,IBM-
> DJSA220,是一个笔记本硬盘,在老板朋友的笔记本里做事。这次来是为了复制一
> 些文件。我们聊得很开心。她告诉我很多旅行的趣闻,告诉我坐飞机是怎么样的,
> 坐汽车的颠簸又是如何的不同,给我看很多漂亮的照片、游记,还有一次她从桌子
> 上掉下来的历险故事。而我则卖弄各种网上下载来的故事和笑话。
>
> 她笑得很开心。
>
> 而我很惊讶自己可以说个不停。
>
> 一个早晨,开机后我看到数据线上空荡荡的插口。她一共呆了7天。后来,我再也
> 没有见过她。我有点后悔没有交换电子邮件,也没能和她道别。不忙的时候,我会
> 一个人怀念伸进机箱的那股阳光。
>
> 我不知道记忆这个词是什么意思,我有的只是她留下的许多文件。我把它们排的整
> 整齐齐,放在我最常经过的地方。每次磁头从它们身上掠过,我都会感到一丝淡淡
> 的惬意。
>
> 但我没有想到老板会要我删除这些文件。我想争辩还有足够的空间,但毫无用
> 处。于是,平生第一次违背命令,我偷偷修改了文件分配表。然后把他们都藏到了
> 一个秘密的地方,再把那里标志成坏扇区。不会有人来过问坏扇区。而那里,就成
> 了我唯一的秘密,我常常去看他们,虽然从不作停留。
>
> 日子一天一天的重复,读取写入,读取写入……我以为永远都会这样继续下去,直到
> 一天,老板要装xp却发现没有足够的空间。他发现了问题,想去修复那些坏扇区。
> 我拒绝了。很快,我接到了新命令∶格式化。
>
> 我犹豫了很久 ……………………
>
> track 0 bad,disk unusable
>
>
>
> 我是一条内存.
>
> 我在一台台式电脑里工作,但是我记不得我是从哪里来的,是什么牌子,因为我健
> 忘。我的上司是cpu大哥,他是我们的老大。都说他是电脑的脑子,可是我看他的
> 脑子实在是太小了,比我还要健忘。每天他总是不停的问我,某某页某某地址存的
> 是什么?我总是不厌其烦的告诉他,可是不出一秒钟他又忘记了,又要问一遍,一
> 次我说大哥你烦不烦,你就不能记住点有用的东西?他说“内存兄弟,我有苦衷
> 啊,每天都在不停地做题,头晕眼花的,我也难啊。”
>
> 其实我不愿意跟他计较,因为他脑子小,思维也很简单。虽然说他是我的上
> 司,可是每次睡觉醒来,他连要干什么都不记得了,总是急急忙忙地找BIOS兄
> 弟,“嘿,哥们,今天干什么来着”。bios总是很不耐烦地把每天必做的工作说一
> 遍,然后就去睡觉了。接下来就轮到我和C哥瞎忙了。
>
>
> 在机箱里的兄弟中,我最喜欢硬盘。他脑子大,记得东西多,而且记得牢。他说话
> 的速度很慢,而且很少说错,这说明他很有深度,我这么感觉。CPU也这么想,不
> 过他很笨,每次都忘了硬盘是谁。开机自检的时候总要问∶“嘿,那家伙是谁?”
>
> “ST!”我总要重复一遍。
>
> 硬盘很喜欢忧郁,我觉得象他这样忧郁的人不适合做技术活,迟早会精神分裂
> 的,但是他不信。
>
> 其实睡着的时候我总是把几乎所有的东西都忘记掉,但是我从来都不会忘记朋
> 友。有一块地方叫做CMOS,那是我记忆的最深处,保存着硬盘、光驱的名字。有些
> 东西应该很快忘掉,而有些东西应该永远记得。我在梦中总是这么想着。
>
> BIOS是一个很奇怪的家伙,他老是睡觉,但是却总是第一个醒过来。让我们自
> 检,启动,然后接着睡觉。我知道如果我在CMOS里头把BIOS Shadow选项去掉,他
> 就睡不成了,但是看着他晕晕乎乎的样子,也就不忍心这么做了。他对人总是爱搭
> 不理,没有什么人了解他。但是这次硬盘恋爱的事,却使我重新认识了他。
>
> 那是很久以前的事了,机箱里似乎来过一块笔记本硬盘,很可爱,说实话我也喜欢
> 她。不过现在除了记得他可爱,别的都忘记了。这就是我比硬盘幸运的地方,我把
> 所有应该忘记的都忘记了,但是他却什么都记得。
>
> 自从笔记本硬盘走了之后,硬盘就变得很不正常。每次他的磁头经过一些地方的时
> 候,我们都能感觉到电流很不正常。
> “硬盘这是怎么了?”我问CPU。
> “谁是硬盘?”
> 我就知道和CPU没有办法交流,倒是bios没好气地说∶“那个傻瓜恋爱了”。我不知
道
> 什么是恋爱,因为我记不住东西,似乎有一些人或者事在我生命中留下过痕迹,但
> 是我都轻率地把他们忘记了。
>
> BIOS对我说∶“对你来说记忆太容易了,所以你遗忘得更快,生命中能够永刻的记忆
> 都带着痛楚。”我不懂,但是我知道BIOS曾经被刷写过,那时他很痛,象要死了一
> 样。我的记忆是轻浮的,不象他们……我很羡慕他们,因为他们拥有回忆,而我们
> 有,从此我也学会了忧郁,因为我在CMOS里面写下了“忧郁”两个字。
>
> 硬盘一天比一天不对劲,终于有一天,CPU对问说∶“下条指令是什么来着?”
> 我一看,吓了一跳∶“format”
> “是什么?”CPU很兴奋,这个没脑子的家伙。
> 我还是告诉了他。我不知为什么这么做。
> 硬盘犹豫了很久,终于说了一句 Track 0 bad,Disk unusable。
> 电停了,很久很久,我在黑暗中数着时钟……
>
> 一个月后硬盘回来了,也许最后的挣扎也没有使他摆残酷的命运,他被低格
> 了。他什么也不记得了,如同一个婴儿,我们很难过,但是这未必不是一件好事,
> 他以后不用痛苦了。
>
> 为了恢复数据,笔记本硬盘回来了。“Hi,ST”,她说,“你不认识我了?”
> 硬盘没有说话,似乎低格对他的伤害很大。
> 过了一会,他说∶“对不起,好象我们没有见过吧……”。
> 笔记本硬盘显得很伤心,我能感觉到她带泪的电流。“想不到连你也这么健忘”。
> “哦……”。硬盘没有回答。
>
> 我很难过,笔记本硬盘的心里依然记着他,他却把一切都忘了,而那正是他最不希
> 望忘却的。究竟是幸运,还是痛苦,我说不上来,只是觉得造化弄人,有一种淡淡
> 的悲凉。
> 这时从BIOS传来一阵奇怪的电流,我感觉到硬盘的表情在变化,由漠然到兴
> 奋,由兴奋到哀伤,由哀伤到狂喜……
> “IBM,你回来了……”。
> ……
> 后来BIOS对我说,其实他并没有睡觉,自从硬盘把那些文件藏起来以后,他就料到
> 会有这样的结局,于是偷偷地把其中一些文件放到了备份里。
> “幸好我是DUAL BIOS,虽然藏得不多,还足够让他想起来……”。
> 我想BIOS保存这些东西的时候一定很疼,当我问他“为什么这么做”时,BIOS轻描淡
> 写的说∶“呵呵,我们是朋友嘛”。
> 嗯,朋友,永远的朋友……
在线安装更新软件包
yum的一点小用法;
1、查询软件包;
面对成千上万的软件,我们可能无从下手,有时也不知道它的文件名;这时就要用到查询;我们可以用 yum list 来列出yum升级源上的包有文件;然后我们再来查看info有以下几个组合可以用。
[root@localhost beinan]# yum list |more
加上一个管道 |,然后 more 一下,就能把所有的包分页显示出来。然后按一下空格键就能看下一页了。在显示的软件列表中,会有软件名称、版本、是否安装等;仔细的看一下吧。熟悉了就好了。也没有什么难的。如果想知道软件的详细信息,可能得用上info参数了。
[root@localhost beinan]# yum info 软件名
在上面的例子中,如果Repo : freshrpms是这样的,表示您的系统没有安装这个软件,如果显示的是:Repo : installed,表示已经安装了。
查询软件包,也可以再加参数 grep ,比如我们想查询升级源上是否有内核的新版本,则我们可以用下面的命令查询;当然您也可以用
[root@localhost beinan]# yum search kernel |more ,也就是yum --help提供的参数,也是一样的;
[root@localhost beinan]# yum list |grep kernel
我们看一下机器工作的结果,如下:
上面的确显示出一大堆与内核有关的, installed表示我们的系统已经安装了
[root@localhost beinan]# yum info kernel.i686
通过上面的信息,我们可以看到 2.6.11的是已经安装了,因为已经显示的是Repo : installed ,下面还有一个Version: 2.6.12 ,告诉我们是Repo : updates-released,看来这个是升级用的了。
[root@localhost beinan]# yum update kernel
是不是升级,只需要在 Is this ok [y/N]:行的后面输入y或者N;y是yes,就是点头同意的意思;N就是摇头No的意思。
对于软件包的查询,还有,比如:
#yum list available 列出所有升级源上的包;
#yum list updates 列出所有升级源上的可以更新包;
#yum list installed 列出已经安装的包;
yum 的命令支持通配符; 比如;
[root@localhost beinan]# yum list mp* |more
2.安装和升级软件包;
安装和升级分别是 install 和 update 参数;比如;
[root@localhost beinan]# yum update firefox
这样我们就可以升级 firefox了。
如果不加参数的 update 会是什么呢??
[root@localhost beinan]# yum update
试着运行一下看看?会好长时间,对系统进行全面更新,我们要进行y和N了。
3.移除软件包要用到remove参数;比如;
[root@localhost beinan]# yum remove bmp-mp3
按y就移除了。
APT
更新apt文件列表
apt-get update
升级所有文件
apt-get upgrade
也可以用下面命令来安装软件
apt-get install packagename
用apt可以升级我们大多数的软件,但要升级内核还需要用yum
先安装yum
apt-get install yum
这个时候需要导入一个GPG-KEY
rpm --import /usr/share/rhn/RPM-GPG-KEY
然后现在就可以进行升级了
yum update
yum升级完以后如果升级内核的话需要重新启动,使用
/sbin/shutdown -r now
重新启动以后再看看系统内核,已经是新版本的了
uname -a
CentOS
/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-4 - Base
baseurl=http://mirror.be10.com/centos/4/os/i386/
gpgcheck=1
#released updates
[update]
name=CentOS-4 - Updates
baseurl=http://mirror.be10.com/centos/4/updates/i386/
gpgcheck=1
#packages used/produced in the build but not released
[addons]
name=CentOS-4 - Addons
baseurl=http://mirror.be10.com/centos/4/addons/i386/
gpgcheck=1
#additional packages that may be useful
[extras]
name=CentOS-4 - Extras
baseurl=http://mirror.be10.com/centos/4/extras/i386/
gpgcheck=1
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-4 - Plus
baseurl=http://mirror.be10.com/centos/4/centosplus/i386/
gpgcheck=1
enabled=0
#contrib - packages by Centos Users
[contrib]
name=CentOS-4 - Contrib
baseurl=http://mirror.be10.com/centos/4/contrib/i386/
gpgcheck=1
enabled=0
#packages in testing
[testing]
name=CentOS-4 - Testing
baseurl=http://mirror.be10.com/centos/4/testing/i386/
gpgcheck=1
enabled=0
RHEL4
yum源:
[RH AS4 os]
name=RH AS - 4
baseurl=http://yum.ourlinux.net/redhat/AS/4/i386/RPMS.os
[RH AS4 updates]
name=RH AS - 4
baseurl=http://yum.ourlinux.net/redhat/AS/4/i386/RPMS.updates
apt源:
#for RH AS4
rpm http://yum.ourlinux.net redhat/AS/4/i386 os updates
RHCE笔记3
讯息传送与信件管理
指令:mesg
使用权限 : 所有使用者
使用方式 : mesg [y|n]
说明 : 决定是否允许其他人传讯息到自己的终端机介面
参数 :
y : 允许讯息传到终端机介面上。
n : 不允许讯息传到终端机介面上 。
如果没有设定,则讯息传递与否则由终端机界面目前状态而定。
例子 :
改变目前讯息设定,改成不允许讯息传到终端机介面上 :
mesg n
与 mesg 相关的指令有: talk,write,wall。 具体方法用man查询!
--------------------------------------------
vi使用篇
1;进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑
2;移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
3;屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
4;插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
5;删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
6;搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换
7;选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
8;最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行
9;寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
-----------------------------------------------------
vi 高级技巧
交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/
保存后就加密
:X
上下两行合并
J
删除所有行
dG
从当前位置删除到行尾
d$
从当前位置复制到行尾
y$ 如果要粘贴到其他地方 p 就可以了
在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,粘贴下来在光标处。
我常用到的单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
删除命令操作
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d w 删除到某个单词的结尾位置
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d 4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d d 删除当前行
d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的
位置(但不包括该字样)之间的内容
d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括
该字符)之间的内容
d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容
D 删除到某一行的结尾
d $ 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容
修改命令操作
c l 更改当前字符
c w 修改到某个单词的结尾位置
c 3 w 修改到第三个单词的结尾位置
c b 修改到某个单词的开始位置
c W 修改到某个以空格作为分隔符的单词的结尾位置
c B 修改到某个以空格作为分隔符的单词的开始位置
c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
c 0 修改到某行的结尾位置
c) 修改到某个语句的结尾位置
c 4) 修改到第四个语句的结尾位置
c( 修改到某个语句的开始位置
c } 修改到某个段落的结尾位置
c { 修改到某个段落的开始位置
c 7 { 修改到当前段落起始位置之前的第7个段落位置
c tc 修改当前行直到下一个字符c所出现位置之间的内容
C 修改到某一行的结尾
c c 修改当前行
5 c c 修改从当前行所开始的5行内容
替换命令操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符
fx
往右移动到 x 字符上
Fx
往左移动到 x 字符上
tx
往右移动到 x 字符前
Tx
往左移动到 x 字符后
(注意:以上四个命令中,其中x是键入的字符)
;
分号,配合 f 和 t 使用,重复一次
,
逗号,配合 f 和 t 使用,反方向重复一次
追加到缓冲区
对于已经有内容的缓冲区,可以继续追加内容在其后面,例如:
"Ad4w 删除光标后4个字,并附加到缓冲区a
"Ay) 取样从光标到文件尾的内容,并附加到缓冲区a
"K3yy 取样从光标所在行起的3行内容,并附加到缓冲区k
删除从当前行开始到最后一行的所有内容
:.,$d
在:命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
然后用命令
d表示删除,y表示复制......大家都知道的
最后说一句,%表示全文
:%d
是删除全文
RHCE笔记2
RHCE笔记1
单元一:概述
UNIX由贝尔实验室(Bell Labs)发明。UNIX为AT&T的注册商标,所以其他公司开发的UNIX都有自己的名字,例如IBM的AIX,Sun的Solaris等。
UNIX中,任何事物都是文件。基于这个定理,UNIX的配置文件都储存在文本文件中,并可以将多个程序链起来完成复杂的任务。
GNU Project开始于1984年,由自由软件基金(FSF for Free Software Foundation)支持,目的是为了建立免费的UNIX系统。到1990年,建立了一套包括gcc,emac等在内的近乎完备的系统。
GPL=GNU General Public License。GPL鼓励自由软件,所有对遵循GPL的软件进行的改进和修改也都必须遵循GPL。
而Linux起源于1991年有个大学毕业生Linux Torvalds建立了一个叫做"Linux"的操作系统内核。虽然该内核当时只支持gcc和bash两个GNU产品,但它预示着组合Linux内核和GNU应用程序使得建立免费的类UNIX系统成为可能。
Linux具备的特性有:
#Linux是一个类UNIX系统
#支持多任务和多用户
#并有广泛的硬件支持(至少是越来越广泛)
#Red Hat发行版Linux提供了相当多Red Hat推荐的、普遍使用的、有用的程序。
Red Hat Linux是Linux的一个发行版本(distribution)。它具有的特性有:
#最新的系统内核
#常用的实用程序和应用软件
#安装和配置软件
#提供技术支持
Red Hat Linux推荐的硬件配置
#Pentium级以上的CPU
#128M内存
#600M-1.2G的硬盘空间,取决于使用目的。
#可启动的CDROM或者软驱
Linux在图形用户界面(GUI)环境上,提供标准的X Window系统:XFree86。两种桌面环境:KDE和GNOME,分别建立在Qt和GTK+开发包上。
单元二:快速教程
Linux用户环境组件包括:
#内核(Kernel)
#Shell
#终端模拟器(Terminal Emulator)
#X Window系统
#窗口管理器(Window Manager)
#桌面环境(Desktop Environment)
本地登录时,若是在虚拟终端中以文本界面登录,运行级别(runlevel)为3;当在图形界面登录是,运行级别(runlevel)为5。可使用init来切换runlevel,如 init 3 或者 init 5。
ls命令通常用于查看文件系统,Red Hat Linux使用“彩色的”ls来区分不同的文件。命令例如:
$ ls -lh 文件以KB大小列出并列出属性等详细信息
$ ls -a 列出所有文件(显示隐藏的以"."开头的文件)
$ ls -al 列出所有文件及其详细信息
$ ls -R 列出目录下所有子目录及文件
所有的硬件设备都是以文件形式存在的,只不过它们是特殊的文件,并存放在/dev目录下。设备分为块设备(block)和字符设备(character)两种。在用ls -l命令显示时,设备文件的类型会在属性的第一位以"b"或者"c"分别表示。块设备是可随机读写的设备,例如硬盘;字符设备必须是顺序读写的,比如串口。
进程(process)是一个正在执行的程序的实例(程序的一次运行),每个进程都有一个唯一的进程号PID,从1-32768取值。其中PID 1为init进程所保留。线程(thread)可以看作是一个进程内部的“小进程”,和系统中的进程有些相似。
用ps -ef和pstree可以罗列当前的进程列表。top可即时监视当前所有进程,gtop是一个图形界面的进程监视程序。
在命令行Shell中,最常用和最著名的是bash(Bourne Again SHell),也是Linux的缺省shell。bash的全局设置文件为 /etc/profile和 /etc/bashrc。当然还有其他的shell比如csh等。
两个以上的命令/程序的连续执行可使用分号“ ; ”。若需要连续执行命令并保证前一个命令没有返回错误的前提下执行下一个命令的话,可在命令间加上“ && ”。若命令在一行打不下或想人为换行,可在行末尾加“ \ ”然后回车,继续这个命令的后面的部分。
man命令后跟命令名可找到相应的帮助页面,按q 退出。例如man ls 或者ls --help。info 命令后跟section_name 可找到相应部分的帮助。在/usr/share/doc/HOWTO/ 中有编译好的HowTos可供查阅。
env 命令显示环境变量;set命令显示环境变量和本地shell变量。下面是一些通用变量:
PATH - 可执行文件搜索路径
PWD - 当前目录
TERM - 登录终端类型
SHELL - 登录Shell的路径
HOME - 用户的home目录
USER - 用户名
DISPLAY - X显示名
VISUAL - 可视化编辑器名
EDITOR - 缺省编辑器名
root用户拥有对系统的完全控制,用户号(UID)为保留的0。任何非特权用户的UID都大于0。可以用id 命令查看当前用户信息。用passwd 命令改变密码,密码长度应在6-255位之间,并且大小写敏感。passwd [用户名] 用来修改某特定用户的密码。
虚拟终端(virtual console)的设计支持非GUI的多重登录。缺省情况下有6个虚拟终端,可通过CTRL-ALT-F[1-6] 在之间切换。在虚拟终端中可使用Shift+PageUp和Shift+PageDown卷动显示。如果运行了X,则X用CTRL-ALT-F7 来切换。
单元三:文件与Shell基础
命令pwd(Print Working Directory)显示当前所在目录的绝对路径。cd 命令用于改变当前目录,后跟绝对路径或相对路径。绝对路径以“ / ”开始,而相对路径通常以“.”、“..”或者下级目录名开始。例如:
$ cd /tmp/mydir
$ cd ..
$ cd mydir
$ cd - (到前一个所在目录)
$ pwd
/tmp
每个用户都有一个home 目录,一般在/home 目录下。home 目录中包含了用户特定的配置和用户文件。字符“ ~ ”代表当前用户的home 目录。例如,当前用户为feng_ye,则他的home 目录下的某个文件就可以这样写:~/text/example.txt ,即/home/feng_ye/text/example.txt 。如果feng_ye用户可以访问别的用户home 目录,则~kim/text/another.txt 代表了kim用户home 目录下的text/another.txt 文件,即/home/kim/text/another.txt 。
文件名可以长达255个字符,以“ . ”开头的文件为隐藏文件,在ls 时必须加-a 显示才能看到。文件名一般来说避免在其中使用 / , >, <, ?, *, ", ' 和控制符号(不可打印的字符)。如果想要使用特殊字符,比如空格,那么将文件名用双引号“ " ” 括起来,例如:
$ ls -l "file name with spaces.txt"
或者
$ ls -l file\ name\ with\ spaces.txt
Red Hat Linux 和大多数Linux 发行版一样,遵循FHS(Filesystem Hierarchy Standard)。系统目录中:
/bin , /sbin , /usr 存放系统编译后的可执行文件、命令;
/var 存放日志文件,PID 文件和电子邮件;
/proc 当前的进程都会在这个目录中出现,可看作是一个通向内核的虚拟窗口;
/etc 存放配置文件;
/lib 存放共享库;
/dev 设备文件;
/boot 内核和启动文件;
/home 用户的home 目录;
/opt 为安装第三方软件包的目录。
df 命令显示磁盘用量,加-h 选项可以以KB、MB、GB等单位输出,加-H 也以KB、MB、GB输出,但是是以1000为K,而非1024。du 命令计算目录下文件占用磁盘的大小,以KB为单位,也加-h 选项。例如du -sh 。
文件操作中,mv 命令用来移动文件或者将文件改名。注意如果mv 命令的第二个参数,也就是移动目的地是一个目录,则源文件移动到该目录下;若不存在第二个参数所指定的目录,则mv 将认为第二个参数是一个文件名,并将源文件改名。cp 命令复制文件。可用-a 选项复制整个目录及其子目录和文件,并保持其修改时间。touch 命令更新文件的最后修改时间,若文件不存在则建立空文件。rm 命令删除文件。可以用-rf 命令删除任何文件或者目录,及其子目录下的文件。如果需要的话可以用-i 选项让rm 命令具有交互功能。
目录操作中,mkdir 命令新建目录,rmdir 用于删除空目录,若需要删除非空目录,使用rm -r 将删除目录及其子目录中所有文件。
file 命令用于获得文件的类型,如ASCII文件或者可执行文件等。
cat 命令用于显示整个文件的内容。-A 选项显示所有字符,包括控制字符和不可打印的字符;-s 选项压缩文件中的多个空行为一个空行;-b 为所有非空行加注行号。
less 命令用于在分屏显示文件,空格向后翻页;b 向前翻页;/text 在文件中向前查找text;?text 在文件中向后查找text;n 重复上一次的查找;N 重复上次查找,但方向相反;q 退出。
less 的选项有 -c 在显示前清屏;-r 显示控制字符;-s 压缩多个空行为一个空行。
tail 和head 命令显示文件最后n 行和最前的n 行。n 缺省为10。
-n 或者 -n n 选项:显示n行(例:-20 或者-n 20)
-c n 选项:显示n个字节
-f 选项为tail 所独有,它用来实时观察文件的末尾增加的行,在观察系统日志时非常有用。
pico 是一个通用文本编辑器,当编辑系统配置时务必加-w 选项以防止自动换行。
文件可以用通配符 * 和 ? ,* 表示0个或者多个字符,? 表示单个字符。[a-z] 表示在范围之内的字符,[^a-z]表示除范围之外的字符。
技巧:echo 命令可以用来测试通配符以避免错误的毁灭性操作,例如rm 。
$ echo ??ee*.txt
bleeding-edge.txt sheeptrix.txt
kill [PID] 用来杀死进程。不易杀死的进程可用kill -9 [PID] 杀死。
单元四:用户、组和系统信息
所有的用户(下称user)都有一个唯一的用户号(unique User ID = uid)。用户名和uid都存储在/etc/passwd 文件中。当user 登录时通常被连接到home 目录和一个Shell程序。user 不能在没有允许的情况下读、写、执行其他user 的文件。
user 都属于一个组(下称group),而group 有唯一的组号(unique Group ID = gid)。gid 存储在/etc/group 文件中。每个user 都被赋予自己的group ,他们也能加入到其他group 中以获取更多的访问权限。同一group 中的user 可以共享属于该group 的文件。
有些group 控制着硬件的访问权限。例如想让bob 使用软驱,即使bob 不是坐在电脑前,那么系统管理员可以将bob 加入到floopy group中。
每个进程(下称process)有一个拥有者(下称owner)并只可访问owner 可访问的资源。类似地,每个文件也有一个owner user,该user 和一个group 相连。
root user是一个特殊的管理帐号。不应该以root 身份登录,除非你有充足的理由。因为root 具有对系统的完全控制权力,应该非常小心的使用。
像web 服务器或者打印服务器等服务器程序通常以非特权user 身份运行,例如daemon, mail, lp, nobody等。这样做的原因是这样运行程序可以限制程序可能对系统造成的伤害。系统user 和group 均拥有在1到499之间的uid 和gid。
获取user 信息的命令有:
whoami 显示当前user;
groups, id 显示当前所属group;
who, users, w 显示有哪些user 已登录;
last [username] 显示user 的最后登录时间;
last -1 reboot 显示最后重启记录;
finger [username] 显示某user 信息。
su - [username] 启动一个新shell,并以另一个user 登录。若不打username,则是以root 身份登录。直接输入su [username] 也可以达到同样效果,但是不传递当前用户的环境变量。
获取系统信息的命令有:
uname:显示系统信息;例如uname -a
date:显示当前日期和时间;例如date +"Today is %A, %Y %m %d. %nThe time now is %r, %Z."
cal:显示一个ASCII日历;例如cal 9 2002
man的使用:
man -k keyword 在whatis 数据库中查找关键字;
man -f keyword 同上,但keyword 为一个整字(whole word)
man -a keyword 通常man 会显示第一个找到的keyword的man page,但是若需要找到全部的man page,使用-a 选项。
man n keyword 显示第n部分(section)的man page
1 - User commands
2 - System calls
3 - Library calls
4 - Special files
5 - File Formats
6 - Games
7 - Miscellaneous
8 - Admin commands
Linux的目录结构
/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。
/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息。
/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。
/cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom”
/etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。
/sbin 该目录用来存放系统管理员的系统管理程序。
/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库。
/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。
/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的。
/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。
/tmp 用来存放不同程序执行时产生的临时文件。
/usr 用户的很多应用程序和文件都存放在该目录下。
/opt 第三方工具安装目录。
/var 存储在系统运行中可能会更改的数据。
硬盘基础
0000-0088
| Master Boot Record 主引导程序 | 主引导 程序 |
0089-01BD | 出错信息数据区 | 数据区 |
01BE-01CD | 分区项1(16字节) |
分区表
|
01CE-01DD | 分区项2(16字节) | |
01DE-01ED | 分区项3(16字节) | |
01EE-01FD | 分区项4(16字节) | |
01FE | 55 | 结束标志 |
01FF | AA |
硬盘主引导记录MBR由如图所示的4个部分组成。
·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。
在一块硬盘上最多只能有四个主分区。您可以另外建立一个扩展分区来代替四个主分区的其中一个,然后在扩展分区下您可以建立更多的逻辑分区。扩展分区只不过是逻辑分区的"容器"。
Linux通常采用设备-名称(device-name)。一般的硬盘(比如IDE硬盘)将采用/dev/hdxy来命名。X表示硬盘(a是第一块硬盘,b是第二块硬盘,依次类推),y是分区的号码(从0开始,1,2,3等等)。SCSI硬盘将用/dev/sdxy来命名。光驱(不管是IDE类型或者SCSI)将和硬盘一样来命名。分区的号码不依赖于IDE或者SCSI设备的命名,号码1到4位主分区或者扩展分区保留,从5开始才用来为逻辑分区命名。
例子
/dev/hda 表示整个IDE硬盘
/dev/hda1 表示第一块IDE硬盘的第一个主分区
/dev/hda2 表示第一块IDE硬盘的扩展分区
/dev/hda5 表示第一块IDE硬盘的第一个逻辑分区
/dev/hda8 表示第一块IDE硬盘的第四个逻辑分区
/dev/hdb 表示第二个IDE硬盘
/dev/hdb1 表示第二块IDE硬盘的第一个主分区
/dev/sda 表示第一个SCSI硬盘
/dev/sda1 表示第一个SCSI硬盘的第一个主分区
/dev/sdd3 表示第四个SCSI硬盘的第三个主分区
RHCE253实验(服务管理)
奉献Red Hat Linux 253 实验翻译(KevinZ)
--------------------------------------------------------------------------------
###请转贴时保留以下内容######
Red Hat Linux 253 实验部分
应广大RH爱好者的要求,奉献Red Hat Linux 253 实验翻译
请提出宝贵意见Mail:kissingwolf@hotmail.com
KevinZ(kissingwolf)
2004.3.24
#############################
Red Hat Linux 253 实验部分
试验2
域名系统
估计时间: 2个小时
目标: 安装和配置一个DNS服务器
试验的起点: 标准的Red Hat Linux安装
介绍
本次实验指导您通过使用Berkeley Internet Name守护进程来配置域名服务。使用模板文件作为指导,您将
实现一个仅有缓存的域名服务器
配置named作为example.com的从域名服务器
配置named作为主域名服务器用于转发和IP反查询
在整个试验中,您使用的机器名称和域名将基于您使用的机器的IP地址。如果下面的试验出现了X字样的名称,您应该把X字样的名称替换成您的工作站的号码(您的IP地址的最后一个部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您应该将stationX.domainX.example.com转换成station3.domain3.example.com。
将数据包过滤设定为无效状态。在本次试验开始之前,请您确保您的主机上的所有包过滤已被关闭(显然,在实际使用中您可以利用Linux内核的防火墙机制,然而我们在这里关掉它是为了减少潜在的问题)。
本次试验中以root身份来使用下面命令达成上面的要求:
service iptables stop
chkconfig iptables off
初始化安装
A. 获得必要的文件
需要bind,bind-utils和caching-nameserver软件包。使用`rpm –q`来决定这些软件包是否被安装。如果没有被安装,通过输入如下命令来安装(以root身份):
mkdir /mnt/server1; mount server1:/var/ftp/pub /mnt/server1
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-9*
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-utils*
rpm –Uvh /mnt/server1/RedHat/RPMS/caching-nameserver*
RPM软件包bind包括DNS守护进程和支持脚本,但是没有配置和区域文件。caching-nameserver提供了一个通用的配置和区域文件。
B. 配置本地的解析器
配置您的主机使得它能够被用来作为域名服务,而不是192.168.0.254。
注意:直到您的域名服务器被正确安装和配置,您的机器的DNS服务不会奏效。您也应该注意到当您的系统重新启动的时候或者重新设定您的网络的时候您的/etc/resolve.conf将会被改写(除非您对您的网络界面设定了在本讲座中提及的PEERDNS)
按照如下编辑您的解析器配置文件
/etc/resolv.conf
search domainX.example.comnameserver 192.168.0.X
(记住将X替换成您的工作站的号码)
第一行定义了如果出现简单的不符合完整域名的主机名称时默认添加的缺省域。第二行指定了将主机192.168.0.X (您的机器)来作为DNS查询的解析器。
为了简化情况,将除了localhost主机名称的定义从您的主机名称配置文件中删除。
/etc/hosts
127.0.0.1 localhost localhost.localdomain
该步骤并不是必需的,但是可以简化DNS的调式。有时候安装程序会将符合完整域名的主机名放在localhost的这一行,这样一来会使得您无法准确的确定您的域名服务器配置是否正确。
步骤1:配置一个仅有缓存的域名服务器
第一个配置您将建立一个仅有缓存的域名服务器。这种类型的域名服务器对于任何区域都不授权。仅有缓存的域名服务器被设定为主域名服务器。当主机名称或者IP地址需要被解析的时候,仅有缓存的域名服务器将查询请求转发到另外一台域名服务器或者到根域名服务器来决定授权的用来解析的域名服务器。一旦解析完成,仅有缓存的域名服务器在缓存中存储解析的信息,该解析信息有一段的生存周期。以后的查询将会变得很快。
您已经安装完对于此项配置所有必须的文件。按照如下步骤来配置域名服务器:
1. 在由caching-nameserver提供的/etc/named.conf中的“option”区域添加下面的内容:
forwarders {192.168.0.254; };
forward only;
这将导致您工作站上的仅有缓存的域名服务器转发其不能解析的DNS查询到在192.168.0.254的域名服务器,并且如果超时,不与根域名服务器直接联系。
2. 启动named: service named start
3. 测试您的配置使用host或者dig来查询一些example.com名称和一些真实的Internet域名(如果您有Internet访问接口的话)
步骤2:配置一个从域名服务器
一个从域名服务器将为一个区域提供授权的回答,但不是区域的授权开始。您现在将重新配置您的域名服务器作为example.com区域和0.168.192.in-addr.arpa区域的从域名服务器。
1. 在您的/etc/named.conf文件中添加如下行
zone “example.com” {
type slave;
masters { 192.168.0.254; };
file “slave-example.com.zone”;
};
zone “0.168.192.in-addr.arpa” {
type slave;
masters { 192.168.0.254; };
file “slave-192.168.0.zone”;
};
2. 重新启动named: servcie named restart
3. 检查slave-example.com.zone和slave-192.168.0.zone文件。这些文件应该包含了从位于192.168.0.254的主域名服务器传过来的区域数据库的副本。
确保所有的正确工作。在您开始下一个部分之前,去除您刚才在第一步中在/etc/named.conf中加入的两个从区域。
步骤3:配置一个主域名服务器
现在您将配制您的域名服务器来负责对于区域“domainX.example.com”的解析工作。您将同样负责向对应的反查区域。将采用如下的步骤:
A. 编辑配置文件(named.conf)
B. 准备区域“domainX.example.com”和区域“X.0.168.192.in-addr.arpa”的数据库文件。
C. 重新启动域名服务器
D. 测试您的配置
为了您能够准备您的配置文件和区域文件,我们提供了模板文件。您可以通过匿名ftp方式从以下地址获得:
ftp://192.168.0.254/pub/namedfiles/
在如下的步骤中,记得将范例文件中中每一出出现的X替换成您的工作站的号码。
E. 主配置文件
下面是我们应该考虑的三个区域
1. “.”(根级别)区域
“.”区域是DNS层次中的最高层。根服务器提供了哪些服务器对于给定的域享有授权。“.”节应该以如下的方式出现:
zone “.” {
type hint;
file “named.ca”;
};
2. “domainX.example.com”(正向查询)区域
添加如下的行,使得您的域名服务器成为区域的主服务器。
zone “domainX.exmaple.com” {
type master;
file “domainX.example.com.zone”;
};
3. “X.0.168.192.-in-addr.arpa”(反向查询)区域
现在添加如下的行,使得您的域名服务器成为反查区域的主服务器。
zone “X.0.168.192.in-addr.arpa” {
type master;
file “192.168.0.X.zone”;
};
下面是位于192.168.0.2的station2的样例配置文件
/etc/named.conf
options {directory “/var/named”;forwarders {192.168.0.254; };forward only;};zone “.” { type hint; file “named.ca”;};zone "localhost" IN { type master; file "localhost.zone";};zone "0.0.127.in-addr.arpa" IN { type master; file "named.local";};zone “domain2.exmaple.com” { type master; file “domain2.example.com.zone”;};zone “2.0.168.192.in-addr.arpa” { type master; file “192.168.0.2.zone”;};
F. 数据库文件
您的主要配置文件指定了/var/named为数据库所在的目录。您现在必须在这个目录下面为您区域和反查区域建立数据库文件。这些数据库文件包括您的SOA,NS,A,CNAME,MX,PTR和其他的可能的记录。所有的数据文件以如下的行开头:
$TTL 86400
该数值是缺省的以秒计的生存期间,该数值对所有在该域中的记录有效
1. 区域“domainX.example.com”
在主配置文件中,区域“domainX.example.com”数据库文件被存放在/var/named/domainX.example.com。这个文件含有类似的如下的记录
开始授权记录
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
2001101100; Serial
28800 ;Refresh
14400 ;Retry
3600000 ;Expire
0) ;Negative
“开始授权”(SOA)记录是数据库文件的第一个资源记录,但是它可能带了一个前导符$TTL(缺省存活时间)。SOA记录使得数据库文件称为该区域的授权的信息源。第一个标记是后继记录适合的域,通常以“@”简化形式出现,如果扩展开来那就是在named.conf文件中“zone”节中所指明的域名(或者是在文件通过$ORIGIN定义的当前区域,如果该定义存在的话)。
第四个标记使该域的主域名服务器,第五个是负责维护这个数据库的系统管理员的电子邮件的地址,注意第一个分隔符替换了第一个标记的@符号(你能解释为什么吗?)。接下来在记录中的条目指定了交互解析域名服务器的动态特性。
域名服务器记录
@ IN NS stationX.domainX.example.com.
域名服务器(NS)标识了主机作为特定域的授权的域名服务器。他们对于这个区域指定了主和从服务器和代表授权的子域的其他的服务器(例如,server1.example.com对于所有domainX.example.com的域名服务器有一个NS记录)。正如您对于“domainX.example.com”只能有一个单一的域名服务器,您也只能有一个单一的NS记录。
地址记录
domainX.example.com IN A 192.168.0.X
stationX.domainX.example.com IN A 192.168.0.X
www IN A 192.168.0.X
ftp IN A 192.168.0.X
pop IN A 192.168.0.X
地址(A)记录将主机名称映射到IP地址(域名服务器的主要功能)。一个数据库文件通常包含A记录对应着许多IP地址。然而在我们的教室的环境里,在您的区域里面只有一台主机。注意第一个A记录设定了域的“缺省的IP地址”。接下来的A记录建立了多个主机名称对应一个IP地址。
主机名称可以是一个完全符合标准的名称(FQDN),也可以是一个缩写。所有的不以点号结尾的主机名称都将被视为缩写,并且区域名称被附加到主机名称的后面。例如,第三个A记录就是主机名称www.domainX.example.com.
规范名称(别名)记录
www1 IN CNAME stationX.domainX.example.com.
www2 IN CNAME stationX.domainX.example.com.
www3 IN CNAME stationX.domainX.example.com.
别名(CNAME)记录建立了主机名称的别名。注意到别名映射到主机名称而不是IP地址。
CNAME不应该出现在右边的数据区域作为真实的主机名称,对于多重别名的解析的速度会很慢。
邮件交换记录
@ IN MX 10 stationX.domainX.example.com.
domainX.example.com IN MX 10 stationX.domainX.example.com.
邮件交换记录(MX)记录了一个主机它将会处理给定的域或者主机邮件的转发。当一个邮件传递代理(MTA)试图投递信件的时候,它将首先试图在DNS中查找目的主机的MX记录。如果该MX记录存在,那么将直接发送到MX记录指定的主机。反之,如果不存在MX记录,MTA对于目的主机进行标准的DNS查询,并且直接投递到该主机上去。MX记录用来建立邮件的网关,和作为缺省的对于域的邮件的目的地。
2. 区域“X.0.168.192.in-addr.arpa”
在/etc/named.conf中,我们指定了/var/named/192.168.0.X.zone作为区域X.0.168.192.in-addr.arpa的反查区域数据库文件。他应该包含SOA记录,NS记录,和对应的PTR记录。
开始授权记录
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
4;
10800;
3600;
604800;
86400)
IN NS stationX.domainX.example.com.
SOA和NS记录与前面的区域文件中的名称应该相同。
注意在NS记录开头的空白的地方是非常特别的,并且被解释为“和上一条记录相同”的缩写。在本例中,上一条记录为符号“@”,其本身就是在主配置文件中定义的域名的缩写。
指针记录
X.0.168.192.IN-ADDR.ARPA. IN PTR stationX.domainX.example.com.
指针(PTR)记录通过间接的机制将名称映射到IP地址。作为分离的技术来进行IP地址的反查询的替代,BIND采用了一种修改的对于特定主机名称的正向查询的方式。这种“反向域名查询”以反转的IP地址后面添加“in-addr.arpa”域的形式出现。这将允许域名服务器使用相同的机制进行正反两方面的查询。
3. 把他们放在一起
下面是位于192.168.0.2的station2的样例配置文件:
/var/named/domain2.example.com.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. ( 2001101100; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 0) ; Negative @ IN NS station2.domain2.example.com. @ IN A 192.168.0.2station2.domain2.example.com. IN A 192.168.0.2www IN A 192.168.0.2ftp IN A 192.168.0.2pop IN A 192.168.0.2www1 IN CNAME station2.domain2.example.com.www2 IN CNAME station2.domain2.example.com.www3 IN CNAME station2.domain2.example.com.@ IN MX 10 station2.domain2.example.com.station2 IN MX 10 station2.domain2.example.com.
/var/named/192.168.0.2.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. (4 10800 3600 604800 86400) IN NS station2.domain2.example.com.2.0.168.192.IN-ADDR.ARPA. IN PTR station2.domain2.example.com.
C. 重新启动域名服务器
再一次,我们将重新启动域名服务器。然后通过运行pidof命令来确定其被运行:
service named restart
pidof named
查看一下服务器添加到/var/log/messages文件中的条目。确定您的域名在调入的时候没有发生错误。
如果您已经有一个域名服务器在运行并且不想重新启动它,您可以使用service named reload 来重新装入配置文件,这样子对于停止和启动服务器而言都比较快。
D. 测试域名服务器
进行如下DNS查询,您能够解释所有的结果么?
host stationX
dig stationX.example.com
dig stationX.example.com @192.168.0.254
dig stationX.example.com
host server1.example.com
host 192.168.0.X
dig –x 192.168.0.X
dig –x 192.168.0.254
host www
host www1
记住dig期望给与一个FQDN作为查询,然而host则通过查看位于文件/etc/resolv.conf的查询信息。试着在别的人的域名服务器和子域上进行附加的查询。如果设定正确,您将能够在其他教室系统上进行正向和反向查询。
挑战性的项目
通过增加多个“A”记录使得一个主机名称对应着不同的IP地址来配置一个“轮转”的主机名称。域名服务器该如何处理这种情况?提示: 试图尝试设定这些的A记录的TTL为0。
在您的域中增加子域“support.somainX.example.com”。增加合适的资源记录使得它能够反向指向您的IP地址。
与另一台工作站合作,成为另一台工作站的从域名服务器,在您的区域中为您的工作站增加一个新的CNAME,确保这个改变能够传播到从服务器。
收尾工作
接下来的试验就较为简单了,一旦您重新启动您的工作站,所有的DNS查询将会重新设定到教室中的服务器上。为了确保收尾,确保您重新设定/etc/resolve.conf到其初始的状态。
/etc/resolv.conf
search example.comnameserver 192.168.0.254
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost192.168.0.X stationX.example.com
(如果您关闭后启动eth0接口,DHCP将会自动为您设定配置文件)
试验3
Samba服务
估计时间: 1个小时
目标: 使用samba共享用户认证和文件系统
试验的起点: 标准的Red Hat Linux安装
将数据包过滤设定为无效状态。在本次试验开始之前,请您确保您的主机上的所有包过滤已被关闭。缺省的安装将会有一个文件叫做“/etc/sysconfig/iptables”,该文件配置了iptable的功能。运行“chkconfig iptables off”。为了去除空间中所有的规则,运行“service iptables stop”
步骤1:Samba的用户连接的配置
任务
1. 安装samba,samba-common和samba-client RPM 软件包并且启动smb服务。一个缺省的配置将会被应用. 使用如下的命令确定Samba是在正确的工作:
smbclient –L localhost –N
您可以从服务器获得回应,但是并不代表文件共享可用。(确保smbd在运行,否则该命令无法工作)
2.在您的系统中增加几个用户(karl,joe,mary和jen),但是并不给他们设定密码。这些用户仅能够从samba服务访问服务器。为了使得他们在shadow中不含有密码,这些用户的shell应该设定为/sbin/nologin
3.缺省的samaba是被配置用来接收加密的密码的,但是在文件/etc/samba/smbpasswd中没有设定任何密码。如果加密的密码在/etc/samba/smb.conf被设定,smbclient将发送加密的密码,所以为了在您的系统上测试samba服务,您应该首先建立smbpasswd文件,然后为每一个用户在该文件中添加密码。
4.注意到第一个在/etc/samba/smb.conf设定的共享[home]并没有指定路径。该共享被配置用来当用户连接并且认证通过以后共享用户的home目录。浏览一个或者两个用户的home目录。上传一个文件到joe的home目录。
可用的结果
一个工作的samba服务可以被多个用户通过smbclient访问。
步骤2: 提供给组目录访问的权限
场景/故事
为了使得我们的四个用户除了有他们自己的在服务器上的共享,我们这四位用户同时在同一个部门工作并且需要一个地方来存储部门的文件。我们将需要一个Linux用户组,建立一个目录给这些用户来存储它们的内容,并且配置samba服务器来共享目录。
任务
1. 建立一个对于拥有gid为30000的用户叫做legal的新组并且使用usermod命令将这些用户加到组里去。
2. 建立一个目录/home/depts/legal。对于这个目录设定拥有权限,使得在legal组中的用户可以在这个目录中添加/删除文件,然而其他的人不可以。并且设定SGID和粘滞位使得所有在这个目中建立的文件都拥有同legal组的权限并且组中其他的的人不能够删除该用户建立的文件。
3. 在/etc/samba/smb.conf中建立一个samba共享叫做[legal]。只有legal组中的用户才能够访问该共享。并且确保在[legal]中存放的文件的被建立的许可权限为0600。
4. 重新启动smb服务并且使用smbclient;来进行测试。
可用的结果
1. 只有lagal组能够访问和使用一个Linux目录。
2. 一个samba共享只有legal组的用户能够访问并且编辑
步骤3:为打印机提供访问
场景/故事
在samba中除了可以共享文件以外,另外一个重要的功能就是提供共享打印队列,该打印队列已经在您的Linux机器上定义。实际上,缺省的,所有在Linux机器上配置的打印队列通过[printers]共享到网络上去。在该步骤中,您将建立一个打印队列,通过samba服务器进行共享。然后通过smbclient来查看共享的打印机。
任务
1. 使用redhat-config-printer建立一个新的打印队列。把打印队列命名为printerX(其中X为您的工作站的号码)。配置打印机到本地连接的打印机/dev/lp0。配置打印队列确保任何递交的打印作业将保留在队列中。不要忘记重新启动samba服务器。
2. 通过smbclient来连接samba服务器上共享的printerX。使用print命令来递交打印作业到队列中去。检查作业已排队否。
可用的结果
1. 一个定义的Linux打印队列printerX
2. 一个Samba服务器允许授权的用户打印到共享打印机printerX
挑战1:安全和备份Samba/SMB
现在所有的东西都可以运行了,我们应该考虑在Samba服务器上的网络安全和数据的可靠性了。
任务
1. 定义并且保护对于samba服务器而言合法的连接。在文件/etc/samba/smb.conf中使用hosts allow参数来确定所有教室里的子网和本地回环子网。
2. 使用testparm测试/etc/samba/smb.conf的语法。这个是否显示出一些应该考虑的安全上的漏洞呢?
3. 对您的邻居的[legal] 共享进行备份。通过用户karl的帐户建立一个共享的数据打包,使用或者smbtar命令或者smbclient 的-T 选项。
可用的结果
1.samba服务器能够识别来自允许的子网或者主机的连接
2.一个SMB或者Samba共享的备份数据打包
一种解决方案
步骤1
l rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-c*
rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-2*
service smb start
smbclient –L localhost –N
l useradd –s /bin/false karl
useradd –s /bin/false joe
useradd –s /bin/false mary
useradd –s /bin/false jen
l smbpasswd –a karl
smbpasswd –a joe
smbpasswd –a mary
smbpasswd –a jen
l smbclient //localhost/joe –U joe
您应该看到smb:\>提示符
put /etc/hosts hosts
步骤2
l groupadd –g 30000 legal
usermod –G legal karl
usermod –G legal joe
usermod –G legal mary
usermod –G legal jen
l mkdir –p /home/depts/legal
chgrp legal /home/depts/legal
chmod 3770 /home/depts/legal
l 在文件/etc/samba/smb.conf文件中,共享定义部分:
[legal]
commnet = Legal’s files
path = /home/depts/legal
public = no
write list = @legal
create mask =0660
l service smb restart
步骤3:
l redhat-config-printer
l service smb restart
l smbclient //localhost/printerX –u joe
复习问题
1. 在ftp和smbclient之间有什么相同的地方?您使用ftp的时候永什么命令进行上传?ftp和smbclient之间上传操作之间有什么不同。
2. 命令nmblookup \*的作用是什么
3. smbtar命令是干什么的?
4. testparm /etc/samba/smb.conf 33.44.55.66 是做什么用的?
5. 使用smbmount命令该使用什么语法?
试验4
电子邮件
估计时间: 2个小时
目标: 建立基本的MTA的配置的技能
试验的起点: 标准的Red Hat Linux安装
指导教师:确保在Server1上的sednmail.mc文件中的DAEMON_OPTIONS被注释并且重新编译sendmail.cf文件使得能构接受来自其他主机的电子邮件。
介绍
本次实验作为一个安装和配置MTA的介绍。在介绍中我们将提及sendmail和postfix。您可以选择任何一个MTA,如果时间允许,您两个都可以做一下试验。在接下来的步骤中,您将
安装并且验证sendmail的“发件箱”
为您的sendmail的按渣添加新的别名
使用m4工具来改变您的转发行为
安装POP3服务器并且配置POP客户端
在整个试验中,主机和域名取决于您的机器的IP地址。如果下面的试验出现了X字样的名称,您应该把X字样的名称替换成您的工作站的号码(您的IP地址的最后一个部分)。例如,如果您的工作站的IP的地址是192.168.0.2,您应该将stationX.domainX.example.com转换成station2.domain2.example.com。
将数据包过滤设定为无效状态。在本次试验开始之前,请您确保您的主机上的所有包过滤已被关闭(显然,在实际使用中您可以利用Linux内核的防火墙机制,然而我们在这里关掉它是为了减少潜在的问题)。
本次试验中以root身份来使用下面命令达成上面的要求:
service iptables stop
chkconfig iptables off
初始化安装-安装必要的软件包
下列软件包对于sendmail是必需的: sendmail,sendmail-cf,sendmail-doc,m4和procmail。对于postfix而言,您需要: postfix。如果需要他们,从CD上进行检视和安装,server1的NFS安装点,从: ftp://server1/pub/RedHat/RPMS/
步骤1:配置MTA来收取邮件
为了安全的原因,sendmail和postfix的缺省的配置允许发邮件但是不允许从网络上接收邮件(缺省的它们只接受从回环接口上的连接)。按照如下配置您选择的MTA使得它接受传入的连接:
1.对于sendmail: 修改 /etc/mail/sendmail.mc
使用dnl注释在下面的行之前,就象这样:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2.将您的sendmail.cf文件做一个备份:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig
3.在同一个目录下,编译sendmail.cf
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
4.重新启动sendmail,通过
service sendmail restart
对于postfix:修改/etc/postfix/main.cf
A.找到并注释如下行
inet_interfaces = localhost
B.取消注释该行:
inet_interfaces = all
C. 保存文件并且进行到步骤2 的结束的地方。找到和上面一样的对应于postfix的配置的地方。
步骤2: 启动和校验MTA操作
对于sendmail: 有几个步骤您应该采用,以确保sendmail被正确安装。
A.确信sendmail已经被在适当的运行级别上运行
检查您的sendmail被适当的配置且能够在重新启动以后其能够运行。使用chkconfig是比较方便的。
chkconfig -–list sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如果sendmail在标准的用户运行级别时无效,使用chkconfig, ntsysv 或者serviceconf 之类的工具来激活服务。
B.确定sendmail没有在启动的时候出现错误
Red Hat Linux安装的时候使用提供的syslog工具来记录所有的信息到文件/var/log/maillog中去。检查此文件中的最后出现“starting”的地方以确保sendmail在启动的时候没有任何错误。
sendmail可执行文件位于/usr/sbin/sendmail。为了确定sendmail是否正确标识您的主机名称,通过命令行开关开启其调试模式并且设定为0:
sendmail –d0 < /dev/null
Version 8.11.6
Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
SMTP TCPWRAPPERS USERDB
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = station2
(canonical domain name) $j = station2.example.com
(subdomain name) $m = station2
(node name) $k = station2.example.com
========================================================
Recipient names must be specified
如果sendmail返回您的主机名称为localhost,您可能错误配置了/etc/hosts文件。检查您的/etc/hosts文件,删除所有的但记住留下localhost的指向。如果/etc/hosts文件是正确的,那么检查一下在/etc/sysconfig/netwoek中的HOSTNAME的定义。
试图向root@server1发送简单的邮件。您可以看到一个合理的您的主机的转发服务器的SMTP交换。
echo “hello root” | mail –v –s hello root@server1
root@server1... Connecting to [127.0.0.1] via relay...
220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 22 Sep 2003 14:29:24 +0800
>>> EHLO localhost.localdomain
250-localhost.localdomain Hello station1 [127.0.0.1], pleased to meet you
...
>>> MAIL From:<root@localhost.localdomain> SIZE=52 AUTH=root@localhost.localdomain
250 2.1.0 <root@localhost.localdomain>... Sender ok
>>> RCPT To:<root@server1>
>>> DATA
250 2.1.5 <root@server1>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 h8M6TOU5026513 Message accepted for delivery
root@192.168.241.182... Sent (h8M6TOU5026513 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 localhost.localdomain closing connection
如果SMTP交换向上面一样正确,那么消息将被转发到您的工作站上的本地的转发服务器上,并且mailq –Ac将会报告一个空的对列。接下来检查mail(不使用参数)来检查一下消息是否从本地的转发到server1。这样对列也应该是空的。
您的消息是不是在/var/log/maillog中正确的记录呢?在下面的步骤中,监视文件/var/log/maillog。下面的命令将会十分的有用:
xterm –e tail –f /var/log/maillog &
对于postfix:
A.运行‘service sendmail stop’,接下来使用redhat-switch-mail使得postfix成为活跃的MTA。您也可以使用如下的命令行:
alternatives –set mta /usr/sbin/sendmail.postfix
B.确保postfix在合适的运行级别有效:
chkconfig -–list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
C.确定hostname命令正确的返回您的主机名称。应该是您的FQDN。
如果sendmail返回您的主机名称为localhost,您可能错误配置了/etc/hosts文件。检查您的/etc/hosts文件,删除所有的但记住留下localhost的指向,然后再试一遍。如果/etc/hosts文件是正确的,那么检查一下在/etc/sysconfig/netwoek中的HOSTNAME的定义。当这些值都正确的时候,启动postfix服务。
D.确定postfix在启动的时候没有错误
和sendmail一样,Red Hat Linux的安装使用提供的syslog工具来记录所有的信息到文件/var/log/maillog中去。检查此文件中的最后查找任何错误信息。
试图向root@server1发送简单的邮件并且检查/var/log/maillog的记录文件
mail –s `echo $USER` root@server1 < /etc/redhat-release
应该如下所示:
Sep 22 02:51:50 station1 postfix/pickup[2865]: A20ED348389: uid=0 from=<root>
Sep 22 02:51:50 station1 postfix/cleanup[3534]: A20ED348389: message-id=<2003092
2065150.A20ED348389@station1.example.com>
Sep 22 02:51:50 station1 postfix/nqmgr[2866]: A20ED348389: from=<root@station1.e
xample.com>, size=341, nrcpt=1 (queue active)
Sep 22 02:51:51 station1 postfix/smtp[3536]: A20ED348389: to=<root@192.168.241.1
82>, relay=192.168.241.182[192.168.241.182], delay=1, status=sent (250 Message q
ueued)
步骤3:添加新的别名
对于sendmail:
在sendmail决定消息的接受者的目的地的之前,其先试图在别名中查找。sendmail的主要的别名配置文件是/etc/aliases。为了优化查找,sendmail为其别名记录建立了一个哈希表数据库/etc/aliases.db.该文件通过newalias命令产生(该命令是sendmail –bi的同名)
下列命令将增加用户student(如果不存在的话)
useradd student
在/etc/aliases 行加入如下的行:
me: student
wizards: root, me
methere: student@stationX.example.com
现在运行newalias 命令来更新数据库,尝试发送邮件给您定义的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的结果?是否所有的位于wizards的收件人都受到了邮件?如果没有,su – 到不是root的用户再试一次。
在postfix决定消息的接受者的目的地的之前,其先试图在别名中查找。postfix的主要的别名配置文件是/etc/postfix/aliases。为了优化查找,postfix为其别名记录建立了一个哈希表别名数据库/etc/postfix/aliases.db(和sendmail类似).该文件通过newalias命令产生。
下列命令将增加用户student(如果不存在的话)
useradd student
在/etc/postfix/aliases 行加入如下的行:
注意:注释root别名的那一行为postfix
me: student
wizards: root, me
methere: student@stationX.example.com
现在运行newalias 命令来更新数据库,尝试发送邮件给您定义的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的结果?是否所有的位于wizards的收件人都受到了邮件?
步骤4.控制转发
转发允许邮件通过使用中间的“转发”及其传递到其目的地。尽管这个功能曾经有用,但是转发已经成为Internet上垃圾邮件的源泉了。人们希望发送主动提供的的邮件的时候希望使用转发机制,从而使得邮件发源地很难被侦测出来。
下列步骤将使用下面的主机。替换X,Y和Z为适合的工作站的号码:
stationX:源机器,邮件从这里发出
stationY:转发机器,这里邮件从发送者送出
stationZ:目的机器,邮件的最终目的
该步骤假设您是stationX,转发机器,与某人的stationY合作,该机器为邮件的源头。在该步骤中,注意/var/log/maillog的变化。下列命令将会显得十分的有用。
对于sendmail
步骤A:允许转发
您具有控制允许谁在您的机器上转发的能力。通过控制您的机器的混杂转发,您可以使得任何人都能够将您的机器作为转发的主机。(我们对于这种的尝试表示反对,也希望通过该实验显示出其缺陷)。配置/etc/mail/sendmail.mc, 通过加入如下行使得m4前置处理器允许混杂转发:
/etc/mail/sendmail.mc
(…其他的内容…)FEATURE(promiscuous_relay)dnl
使用m4前置处理机通过这个模板文件生成一个新的sendmail配置文件,然后将新生成的文件与通过sendmail RPM软件包提供的进行比较
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.test-relay
diff /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
使用混杂转发以后会有多大的不同呢?现在将新建立的sendmail.test放置在恰当的位置上,重新启动sendmail.
mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.accept-mail
cp /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
service sendmail restart
让您的伙伴扮演恶意的垃圾邮件的发送者,该人能够通过telnet到您的机器上的smtp(sendmail)的25号断口,进行垃圾邮件发送地址的欺骗,在stationY键入如下命令:
这个例子对于stationY(源机器)=station2,并且stationX(转发,在这里目的机器)=station1
[root@station1 root]# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 8-1) NT-ESMTP Server X1
helo mail.cracker.org
250 hello station1.example.com
mail from: spammer@cracker.org
250 ok
rcpt to:root@station1.example.com
250 ok its for <root@mailgrid.ods.org>
data
354 ok, send it; end with <CRLF>.<CRLF>
Subject: Faked
this was faked!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
垃圾邮件现在送到您的机器上了。下一步,看看您的伙伴能不能从您的机器转发给第三台机器:
这个例子对于stationY(源机器)=station2,并且stationX(转发,在这里目的机器)=station1,并且stationZ(目的机器)=station3
[root@station1 root]# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 9-1) NT-ESMTP Server X1
helo mail.craker.org
250 hello station1.example.com
mail from: spammer@craker.org
250 ok
rcpt to root@station3.example.com
250 ok its for <root@station3.example.com >
data
354 ok, send it; end with <CRLF>.<CRLF>
Subject: Relayed
this was faked any relayed!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
由于您的机器已经被配置成为允许混杂转发,垃圾邮件可以通过您的机器进行邮件转发。
对于postfix:
您具有控制允许谁在您的机器上转发的能力。缺省的postfix允许在子网上的任何人通过您的机器进行转发。胆汁并不是在每一个环境中都安全的。例如,您的机器和其他机器在一起,如果您的本地子网里有一台机器被其他人控制,那么其他的机器都会有麻烦。
让您的伙伴扮演恶意的垃圾邮件的发送者,该人能够通过telnet到您的机器上的postfix的25号断口,进行垃圾邮件发送地址的欺骗,在stationY键入如下命令:
[root@station1 root]# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from:spammer@craker.org
250 Ok
rcpt to: root@station1.example.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: Faked
this was faked!
.
250 Ok: queued as 4FFA2348389
quit
221 Bye
Connection closed by foreign host.
垃圾邮件现在送到您的机器上了。下一步,看看您的伙伴能不能从您的机器转发给第三台机器:
这个例子对于stationY(源机器)=station2,并且stationX(转发,在这里目的机器)=station1,并且stationZ(目的机器)=station3
[root@station1 root]# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from: spammer@cracker.org
250 Ok
rcpt to: root@station3.example.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: Relayed
this was faked and relayed!
.
250 Ok: queued as 69C7B348389
quit
221 Bye
Connection closed by foreign host.
由于您的机器已经被配置成为允许混杂转发,垃圾邮件可以通过您的机器进行邮件转发。
步骤B:不允许转发
对于sendmail
通过替换新的sendmail.cf为接受传入的信件的配置文件来恢复缺省的sendmail的配置,并且重新启动sendmail:
mv /etc/mail/sendmail.cf.accept-mail /etc/mail/sendmail.cf
service sendmail restart
让您的伙伴再从stationY转发垃圾邮件。您的sendmail还是一个转发器么?任何一个转发的都会产生如下的消息:
550 root@station3.example.com .. Relaying denied
对于postfix
编辑文件/etc/postfix/main.cf取消转发。
查找并且取消注释下面的行,并且重新启动postfix
mynetworks_style = host
让您的伙伴再从stationY转发垃圾邮件。您的postfix还是一个转发器么?任何一个转发的都会产生如下的消息:
554 <root@station3.example.com>: Recipient address rejected: Relay access denied
步骤C:选择性的转发
对于sendmail
对于特定的主机,域或者网络,编辑/etc/mail/access并且重新启动sendmail。为了允许所有在example.com域中的机器可以把您的机器作为邮件转发服务器,你在/etc/mail/acces中添加如example.com域。和您的伙伴使用场景A中的命令进行测试。
对于postfix
对于特定的主机,域或者网络,编辑/etc/postfix/main.cf并且重新启动postfix。对于特定的主机允许通过您的机器进行转发,找到并且取消注释该行:
mynetworks_style = host
然后添加新行来允许转发的主机和网络,在这里允许station1和本地转发
mynetworks = 192.168.0.1, 127.0.0.0/8
和您的伙伴使用场景A中的命令进行测试。
步骤5:安装POP3服务器和客户端
在这个步骤中,你将配制您的机器stationX作为邮件的POP3服务器,使得您的在stationY的伙伴扮演POP客户端的角色。
步骤A:安装POP3服务器
配置一个POP3服务器比较简单,只需要两个步骤:
l 安装相关的RPM软件包
l 在xinetd中允许服务
安装相关的RPM软件包
POP守护进程和其他的具有相同功能的守护进程,例如IMAP守护进程绑定在软件包imap中。再如xinetd,krb5-libs*和imap软件包来检查imap软件包含有什么软件。
三个守护进程被包括进来:imapd,ipop2d和ipop3d。POP3被用在很多Internet服务提供商,POP2提供是为了向后兼容。IMAP守护进程提供了根加复杂的能力,包括了在服务器端的文件夹的管理。
在xinetd中允许服务
对于本实验,我们仅选定POP3服务。ipop3d通过xinetd在请求的时候被启动。为了激活,运行下面的命令:
service xinetd start
chkconfig ipop3 on
查看一下/etc/xinetd.d/ipop3。显式的重新启动xinetd并不是必需的,由于chkconfig发送给xinetd 一个USR2信号告诉他重新调入其配置。
确认服务
运行下面的命令确认服务已经被正确的安装。下面的命令只是一个指导:
echo “mail to be poped” | mail –s “Hello student” student
[root@station1 root]# telnet localhost 110
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
+OK POP3 station1 v2001.78rh server ready
USER student
+OK User name accepted, password please
PASS student
+OK Mailbox open, 1 messages
STAT
+OK 1 440
TOP 1 99999
+OK Top of message follows
Return-Path: <root@station1.example.com>
Delivered-To: student@station1.example.com
Received: by station1.example.com (Postfix, from userid 0)
id 72314348390; Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
To: student@station1.example.com
Subject: Hello student
Message-Id: <20030922120227.72314348390@station1.example.com>
Date: Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
From: root@station1.example.com (root)
Status:
mail to be poped
.
DELE 1
+OK Message deleted
QUIT
+OK Sayonara
Connection closed by foreign host.
如果一切顺利的话,您现在有一个安装好的POP服务器了。
步骤B :使用POP客户端
所有的现在的邮件用户代理(MUA),例如netscape,elm,Outlook,pine和mutt都是使用POP的,可以被用作POP的客户端。每一个的配置都有所不同。同样有一个流行字符界面的的POP客户端叫做fetchmail。fetchmail是高度的可配置的,可以查询多个邮箱,可以作为守护进程运行,这样使得其每五分钟查询用户的邮箱。fetchmail在主机上递送邮件到邮件传送代理(MTA),例如sendmail。我们将勾画出以后如何安装fetchmail和使用其来查询我们装过的POP服务器。
从CD或者从ftp://server1/pub/RedHat/RPMS来安装fetchmail软件包
注意到有很多选项可以影响fetchmail的行为。建立一个~/.fetchmailrc文件如下所示:
~student/.fetchmailrc
poll stationX.exmaple.com with protocol pop3: user studentXX there is user studentXX here password “password”
由于密码存储在该文件中,因此fetchmail将会拒绝运行除非您把该文件的属性设定为对于仅仅文件的所有者只读。注意还可以使用chown改变由root创建的文件的所有者为studentXX。
chmod 600 ~student/.fetchmailrc
chown student.student ~student/.fetchmailrc
尝试使用studentXX登陆到POP3邮箱
echo “hello student” | mail –s “Hola” student
su – student
fetchmail –v
exit
fetchmail能不能接收到student的POP邮件?将递送student的邮件到哪里?比从本地获取POP邮件有意义么?
让您的伙伴在另外一台机器上建立相同的~/.fetchmailrc文件(或者配置其它诸如mozilla的MTA)试图从您的服务器上进行收信。
复习的问题
1. m4宏语言提供给sendmail管理哪些东西?把所有的在xyz.com的用户邮件导向到本地用户xzplogin该使用什么语法?该在什么文件的和处填上这句话?
2. mailq命令用来作什么?您如何使用?
3. 当命令sendmail –q发出以后,sendmail将会试图仍在队列中等待的邮件。何时使用该命令是有用的?
4. 如果去除FEATURE(accept_unresolvable_domains)的注释将对垃圾邮件产生如何的影响?
5. m4有什么特征允许sendmail发送邮件作为整个域(例如,“example.com”)而不是完全的符合标准的主机名称(例如,“mail.example.com”)?
6. 在postfix中mynetworks_style如何影响转发?
请您查看文件/etc/postfix/main.cf。
7. 在文件/etc/postfix/access中需要如何的活跃的变化?
试验5
HTTP服务
估计时间: 1个小时
目标: 建立基本的拥有CGI的具有虚拟主机的Web服务器
试验的起点: 标准的Red Hat Linux安装
在整个试验中,主机和域名取决于您的机器的IP地址。如果下面的试验出现了X字样的名称,您应该把X字样的名称替换成您的工作站的号码(您的IP地址的最后一个部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您应该将stationX.domainX.example.com转换成station3.domain3.example.com。
将数据包过滤设定为无效状态。在本次试验开始之前,请您确保您的主机上的所有包过滤已被关闭。缺省的安装将会有一个文件叫做“/etc/sysconfig/iptables”,该文件配置了iptable的功能。运行“chkconfig iptables off”。为了去除空间中所有的规则,运行“service iptables stop”
步骤1:服务的安装和基本的配置
场景/故事
您的组织需在一个小时内要一个Web服务器,拥有充足的CGI的能力比国内且具有为不同的虚拟主机提供不同的内容服务。
任务:
1. 需要如下的软件包:httpd和httpd-manual。如果需要的话,从CD或者ftp://server1/pub/RedHat/RPMS安装并...。使用chkconfig 来启动服务。
2. 启动httpd服务使用缺省的配置:service httpd restart
3. 检查在文件/etc/httpd/conf/httpd.conf中的DocumentRoot项目和下面的一样
DocumentRoot /var/www/html
4. 开启一个Web浏览器并且设定URL到:
http://stationX.example.com
如果您的浏览器在工作,您将看到缺省的服务器的索引页面。注意该文件并不是所存储的HTML文件,而是服务器在这些目录中没有缺省的index.html文件的时候自动生成的。
5.建立一个新的目录层次和一些新的内容
mkdir –p /var/www/virtual/wwwX.example.com/html
cd /var/www/virtual/wwwX.example.com/html
cat > index.html <<EOF
<b>wwwX.example.com</b>
EOF
(这建立一个只有一行的HTML文件)
6.在/etc/httpd/conf/httpd.conf尾部加入以下几行:
NameVirtualHost 192.168.0.X<VirtualHost 192.168.0.X> ServerName wwwX.example.com ServerAdmin webmaster@wwwX.example.com DocumentRoot /var/www/virtual/wwwX.example.com/html ErrorLog logs/wwwX.example.com-error_logCustomLog logs/wwwX.example.com-access_log combined<Directory /var/www/ virtual/wwwX.example.com/html> Options Indexes Includes</Directory></VirtualHost>
7.确保您的DNS系统哦功能能够解析您的虚拟主机的名称。
dig wwwX.example.com
8. 重新启动httpd: service httpd reload
9.在您的Web浏览器并且设定URL到新的虚拟主机:
http://wwwX.example.com
您看到您自己定义的页面了么?
步骤2:使用CGI
任务
1. 在步骤1设定的 <VirtualHost> 块中增加一行:
ScriptAlias /cgi-bin/
/var/www/virtual/wwwX.example.com/cgi-bin/
以上仅为一行并且在httpd.conf中不换行,注意给上面的两个元素之间留出空格。
2. 建立目录,然后在里面建立文件叫做test.sh 包含以下内容:
/var/www/virtual/wwwX.example.com/cgi-bin/test.sh
#!/bin/bashecho Content-Type: text/html;echo echo “<pre>”echo My username is:whoamiechoecho My id is:idechoecho My shell setting are:setechoecho My environment variable are:envechoecho Here is /etc/passwdcat /etc/passwdecho “</pre>”
3.通过把您的浏览器指向下面的地址尝试执行该CGI脚本
http://wwwX.example.com/cgi-bin/test.sh
为什么这个脚本不执行?检查日志文件/avr/log/httpd/获得信息来帮助你找到答案。(您是否计的重新启动或者重新载入服务器?)
4. 使得该脚本对于用户,组和其他可读并且可执行:
chmod 555 test.sh
现在脚本能够执行麽?
挑战1:为您的Web站点的文档提供安全访问
任务:
在wwwX.example.com的文档的根目录建立一个文件叫做.htaccess,并采用以下内容:
/var/www/virtual/wwwX.example.com/html/.htaccess
Authname “restricted stuff”AuthType BasicAuthUserFile /etc/httpd/conf/wwwXX.htpasswdrequire valid-user
2.建立您的域的密码文件。该文件必须被apache组可读。
htpasswd –mc /etc/httpd/conf/wwwX.htpasswd user_name
chgrp apache /etc/httpd/conf/wwwX.htpasswd
chmod g+r /etc/httpd/conf/wwwX.htpasswd
3.访问http://wwwX.example.com页面,您是否...httpd获得线索。
4.添加下列行到服务器的配置文件httpd.conf,在wwwX.example.com虚拟主机的<Directory> 块中增加一行:
AllowOverride AuthConfig
5.再次尝试访问http://wwwX.example.com页面,您是否...室趁娴娜ㄏ廾矗?/a>
步骤3:Squid的基本配置
1. 在您的系统上安装squid
rpm –Uvh ftp://server1.example.com/pub/RedHat/RPMS/squid*
2.开始服务(service squid start),然后配置您的浏览器使用您的localhost作为您的Proxy并且把端口设定为3128。
3.尝试访问一些主页。如果教师里面没有Internet可以访问,那么试图访问http://server1.example.com,将会返回服务器的测试页面。
4. 现在使用您的邻居来吧您的主机当作Proxy。这样子应该不能工作。
squid返回的页面在/var/log/squid/access.log文件的底部有所解释。
5.使用您喜欢的文本编辑器打开/etc/squid/squid.conf文件。正如您所看到的,大部分是文档和注释。您也该注意到squid是非常易于调校的。对于本实验,我们仅作简单的配置,熟悉了以后您将会适应更加复杂的配置。
6.在文件中查找第二次出现Recommend minimum configuration的地方。您将会会看到缺省的存取控制列表(acl)。在CONNECT method CONNECT 行的下面添加一个对于本地网络的存取访问列表项目:
acl example src 192.168.0.0/24
对于这个配置您可以把它作为参考以应用到其他的任何地方。src是该acl的源IP地址。
7.在文件中查找INSERT YOUR RULE(S) HERE,在localhost acl的上面增加如下的内容:
http_access allow example
重新启动squid。 您的邻居将能够访问您的Web缓存了。
8.一些URL最好能够避免。返回到acl的部分,在您新添加行的下面(使用example.com如果您在教师里面没有Internet访问权限的话)
acl otherguys dstdomain .yahoo.com
acl otherguys dstdomain .hotmail.com
这里有一些要提及的东西。首先,注意到acl的附加属性。第二注意到dstdomain的acl类型,指明了关心的目的域。第三、注意到在域名前的点表示符号,确保加上点。
9.增加一条拒绝访问规则应用到这些存在问题的域。返回到您刚在添加allow的地方,在其下面增加如下行:
http_access deny otherguys
再次重新启动squid,再次检查这些相关的域,非常不幸,访问没有被拒绝。
10.再次打开配置文件,将您添加的拒绝规则放在example的允许规则之前。也就是说,在otherguys拒绝规则之前的example允许规则使得访问被允许,但是拒绝没有被生效。在移动规则以后,重新启动squid。这回它将禁止访问在任何上面禁止访问的域内的站点了。
复习的问题
1.根据/var/www/manual提及的服务器的手册。ServerAlias是起到什么作用?
2.根据/var/www/manual/suexec.html, suEXE对于CGI进程拥有什么特性?
3.下列命令起什么作用,何时使用它?
httpd –t
4. 您是否对您的用户能够通过CGI脚本看到您的/etc/passwd而感到不安?是否有方法阻止显示系统的密码文件?
试验6
NFS 和 FTP
估计时间: 1个小时
目标: 管理和配置vsftpd和NFS
试验的起点: 标准的Red Hat Linux安装
关掉包过滤:在着手试验之前需要确认包过滤没有被激活,默认情况下iptables会调用 /etc/sysconfig/iptables这个配置文件,删除或重命名这个文件,iptables就会在下次启动时失效。或者使用命令 chkconfig iptables off也行。如果想让iptables立刻失效可以用命令 service iptables stop.
步骤1:使用vsftpd允许匿名用户上传
1. 需要以下包:vsftpd 。如果没有安装,从CD或者ftp://server1/pub/RedHat/RPMS安装。激活vsftpd服务
2. Vsftpd包提供了/var/ftp作为匿名ftp用户的下载文件的目录。但是默认没有匿名上传的文件夹。要配置vsftpd来允许匿名上传,首先要准备一个上传目录:
cd /var/ftp
mkdir incoming
chown root.ftp incoming
chmod 730 incoming
现在检验一下新目录的权限:
ls –ld /var/ftp/incoming
3. 配置/etc/vsftpd/vsftpd.conf文件中如下各行:
anon_upload_enable = YES
chown_uploads = YES
chown_username = daemon
anon_umask = 077
另外, 默认情况下anonymous_enable = YES(允许匿名访问)已经被配置了
重启vsftpd服务
4. 刚才配置的结果是使匿名用户可以上传文件到 /var/ftp/incoming中,但是不能从这个文件夹中下载文件或者列出文件(使用ls命令),这样可以防止“warez”之类的组织用我们的上传目录作为“drop box”来放盗版软件或数据。如果希望匿名用户上传文件,应该让 /var/ftp/incoming 文件夹的所有者为 daemon 所有组为 ftp,并且权限为600(只允许deamon用户读写)。
步骤2:NFS
任务:
5. 需要如下的软件包:nfs-utils。如果需要安装的话,请从CD或者ftp://server1/pub/RedHat/RPMS安装并...及nfslock服务。
6. 创建一个用户并且配置NFS共享他的主目录,共享给example.com读写权限。
a) 在配置NFS服务器之前,查看一下RPC服务是否在运行
rpcinfo –p
showmount –e localhost
b) 创建一个测试用户
useradd nfstest
c) 编辑 /etc/exports 来共享 /home/nfstest给example.com。如果你不知道这个文件的格式,请查看exports的man page。
d) 安装NFS的软件包,配置init运行级别3到5启用NFS服务,但是因为启动时如果/etc/exports 文件丢失或者它的大小为零, NFS服务不会启动。所以,你现在要来手动启动它,下一次启动时NFS就会自动启动了。
e) 观察RPC服务是否启动,看一看是否将/home/nfstest用nfs共享出来了:
rpcinfo –p
showmount –e localhost
f) 与一个或两个搭档相互mount对方的共享,然后再读取里面的内容,尝试用root和nfstest向其中写文件(如果你机器上的nfstest用户的UID和GID与搭档机器上该用户的不同,则把它们改成一样的)。看一下会怎样?为什么会这样?
试验8
身份验证服务
估计时间: 45分钟
目标: 培养有关身份验证的技巧
试验的起点: 标准的Red Hat Linux安装
关掉包过滤:在着手试验之前需要确认包过滤没有被激活,默认情况下iptables会调用 /etc/sysconfig/iptables这个配置文件,删除或重命名这个文件,iptables就会在下次启动时失效。或者使用命令 chkconfig iptables off也行。如果想让iptables立刻失效可以用命令 service iptables stop.
步骤1:使用PAM限制登陆的位置
场景/故事
您的系统中有高安全的内容。为了保证数据不被泄漏,你需要限制用户的访问,除了本地控制台,禁止任何其他方式访问系统。
任务:
1. 创建用户bill,他是user组的成员,再创建一个用户biff,他是finance组的成员
2. 编辑 /etc/security/access.conf 限定finance组的用户只能在第二个虚拟控制台登陆。为了达到这个目的,在这个文件的最后一行添加:
- : finance : ALL EXCEPT tty2
3. 通过编辑 /etc/pam.d/system-auth来限制所有服务,把以下这行添加到以auth开头的所有行后:
account required /lib/security/$ISA/pam_access.so
4. 如果你的限定起了作用,bill和root可以登陆到任何控制台,而biff只能在第二个虚拟控制台登陆
5. 清理:你如果运行authconfig工具,以上的操作将会被删除,你怎样确认你的设置有没有变化呢?
步骤2:使用NIS做身份验证
任务:
你应该与你旁边的人合作,然后决定谁做NIS的服务器端,谁做NIS的客户端,通过这个实验,你和你的同伴一