Perfil de zzzMagic 's Forest , ...FotosBlogListasMás Herramientas Ayuda

Blog


31 julio

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"  {
                               type master;
                               file "localhost.zone";};
zone "0.0.127.in-addr.arpa"  {
                               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.2
station2.domain2.example.com. IN A 192.168.0.2
www IN A 192.168.0.2
ftp IN A 192.168.0.2
pop IN A 192.168.0.2
www1 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页面,您�...��得线索。
4.添加下列行到服务器的配置文件httpd.conf,在wwwX.example.com虚拟主机的<Directory> 块中增加一行:
AllowOverride AuthConfig
5.再次尝试访问http://wwwX.example.com页面,您�...��权限么?


步骤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安装并且检查。这个包提供nfs及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的客户端,通过这个实验,你和你的同伴一起配置NIS的服务器端和客户端。你们要确定NIS的域名,还要注意每一个工作站的名字和IP地址,在开始以下的步骤之前,请确认以上内容。
1. 配置NIS服务器
a) 从ftp://server1/pub/RedHat/RPMS 、光盘安装ypserv,ypbind,和yptools的RPM包或者将server1的NFS共享mount到/mnt/server1上,从那里安装也可以。
b) 编辑 /etc/sysconfig/network ,添加这样一行:
NISDOMAIN = <你们的NIS域名>
下次启动时才会起作用,设置了NIS域名之后不要重新启动,运行命令:
domainname <你们的NIS域名>
c) 先将 /var/yp/Makefile 文件copy一份作为备份,编辑all部分只包含passwd和group:
all: passwd group
d) 打开portmap服务和ypserv服务
service portmap start
service ypserv start
e) 确保make包在你的系统中安装,(以下的命令是在 server1:/var/ftp/pub 已经被mount到/mnt/server1后才能使用)
rpm –Uvh /mnt/server1/RedHat/RPMS/make*
f) 使用ypinit产生NIS数据库(maps),注意可能出现的错误信息
/usr/lib/yp/ypinit -m
(注意:你不用在列表中添加任何主机,只要按 < CTRL - D > )
g) 启动NIS password升级进程
service yppasswdd start
h) 如果ypinit在第六步时没有错误,重新启动ypserv服务:
service ypserv restart
i) 使用ps auxf | grep yp确定ypserv服务运行,如果有错误的话查看日志 /var/log/messages
完成:正在正常工作的NIS服务器
2. 配置NIS客户端
到现在,任务只完成一半,你和你的同伴需要再配置这个NIS服务器的客户端。
a) 在客户端,确认已经安装以下几个包:portmap,ypbind,yp-tools和authconfig
b) 确认客户端可以看到服务器上的portmap服务
rpcinfo –p 你们的NIS服务器
c) 使用authconfig工具配置你的客户端使用NIS进行身份验证,选定“Use NIS”,在“Domain:”后指定你的NIS域,在“Server:”后指定你的NIS服务器。
d) 确认authconfig正确工作,当authconfig完成后,它会自动开启ypbind服务,是否有出错信息出现在控制台上或者 /var/log/messages中?
e) 测试你的NIS客户端,使用root用户登陆你的客户端,root用户是客户端上的root还是NIS服务器上的?测试 客户端----服务器的连接,使用:
ypcat passwd
这样会显示出NIS服务器上的password数据,(请记住,只有在服务器上/etc/passwd文件中UID大于等于500的用户才会被放进数据库中)
f) 使用useradd在客户端创建一个新的用户,然后在服务器端创建一个不同的用户,然后使用passwd设置他们的密码。
(在客户端): useradd -u 1024 localguy
passwd localguy
(在服务器): useradd -u 1025 nisuser
passwd nisuser
g) 确认使用localguy能在本地登陆,nisuser能在服务器上登陆。然后使用nisuser帐号在客户端上登陆,应该是不可以的。
h) 在服务器上的 /var/yp 目录,执行make命令,当命令完成,再使用nisuser从客户端上登陆,这回应该成功了,为什么?
i) 使用passwd改变nisuser的密码,是否改变了服务器上的 /etc/passwd 和 /etc/shadow 文件?NIS服务器中的文件是否改变了呢?你可以使用如下命令测试:
ypcat passwd | grep nisuser
j) 使用localguy登陆到客户端,是不是即时ypbind在运行仍然可以登陆?
k) 当你使用nisuser登陆到客户端时,你的主目录是什么?NIS仅仅提供验证信息,不提供客户端和服务器端的文件共享机制
完成:一个从NIS服务器上获得得验证信息的客户机


步骤3:限制NIS用户
任务:
我们的客户端现在是公司NIS体系的一部分,因为他储存了秘密数据,不是所有的用户都可以访问这台机器,只有特定的远程用户才能访问。
1. 这个测试需要添加一个NIS用户,使用useradd命令添加一个名叫baduser的用户。
useradd –u 1026 baduser
passwd baduser
2. 一个解决方案是使用pam_listfile,只允许nisuser访问我们的系统。打开 /etc/pam.d/system-auth ,紧接着auth开头的之后添加以下一行:
account required /lib/security/pam_listfile.so item=user sense=allow
file=/etc/nisusers onerr=fail
3. 假如测试目前的设置,你将会发现连root也不能登陆,所以千万不要关掉root的shell!你要创建 /etc/nisusers 然后把所有允许访问的用户添加到文件中,一行一个用户名,我们只想允许nisuser用户,所以我们的文件会非常短。
4. 现在如果你想登录到文本控制台,只有nisuser可以进入,因为其他人不在文件中,把root添加到 /etc/nisusers 中。
5. 我们的任务还是允许所有本地用户登陆的,我们可以把 passwd文件中的用户都添加到我们的列表中,但这不是最好的方法,我们可以使用PAM库中的pam_localuser来达到目的。添加以下这行到pam_localuser.so之后。
account required /lib/security/pam_localuser.so
6. 测试这样的配置,你会发现仍然只有root可以登陆,为什么呢?
7. 是因为required字段的关系,把上面添加的两行的required都改成sufficient,现在好了吧?如果改成requisite会怎么样?
8. 清理:再次运行authconfig工具,删除所有设置,并且禁用NIS。

 


试验9
系统监视
估计时间: 1小时15分钟
目标: 使用查找文件的方法来保护系统
试验的起点: 标准的Red Hat Linux安装


步骤1:定位易被攻击的文件或目录


场景/故事
查找文件系统中易被攻击的文件或目录


任务:
6. 查找有SUID和SGID的文件,并且把他们的名字存在 /root/stickyfiles中:
find / -type f -perm +6000 2> /dev/null > /root/stickyfiles
7. 查找任何人都可以写入的文件,把它们的名字储存在 /root/worls.writalbe.files:
find / -type f -perm -2 > /root/world.writalbe.files
8. 看一下 /root/stickyfiles 和 /root/world.writable.files 有哪些文件


步骤2:使用tripwire监视文件系统的完整性


场景/故事
你决定使用tripwire来确认数据的完整性


任务:
9. 使用root登陆并且安装tripwire 的RPM包(运行下面的这个命令之前需要把server1上的共享mount到 /mnt/server1目录上):
rpm –Uvh /mnt/server1/RedHat/RPMS/tripwire*
10. 看一下tripwire包中提供哪些文件和文档:
rpm –ql tripwire
11. 编辑 /etc/tripwire/twpol.txt 来定义你的主机策略文件。默认的策略文件是基于Red Hat linux的everything安装,这样它就会试图监视你没有安装的文件。结果是会产生一些出错消息,这些消息可以忽略。最好的方法是删除所有你没有安装的文件。
你应该定义自己的策略,仔细看一下策略文件,删除其中你机器上没有的文件。即使是只删除一两个你没有的文件就要花很长时间。现在来添加目前没有被监视的文件,添加 /etc/samba 目录到“Critical Configuration”部分。
12. 现在你定义完了你的策略,运行 /etc/tripwire/twinstall.sh ,这个脚本将建立加密的策略、配置和密钥文件。你需要输入一些密码,一旦这些步骤完成,在 /etc/tripwire中就会有一些新的文件产生。
13. 现在来用 tripwire –init 命令来初始化tripwire的数据库
tripwire会报告很多警告,这是因为它找不到在策略文件中包含的文件,你可以忽略它们。
14. 我们来测试tripwire,需要按照以下步骤完成
a) mv /sbin/ifconfig /sbin/ifconfig.bak
b) tripwire --check
15. 使用twprint生成一份报告,命令是这样的:
twprint -m r --twrfile \
/var/lib/tripwire/report/somehost.somedomain-200009-12134.twr
是否tripwire侦测到文件变化了?tripwire 会正确侦测到 /sbin/ifconfig丢失了。
把ifconfig还原回去,再次运行tripwire –check,这回还能侦测到改变吗?
mv /sbin/ifconfig.bak /sbin/ifconfig
tripwire –check
即使你把ifconfig还原了,但是修改的时间已经变化了,所以tripwire将会报告错误,升级tripwire的数据库
tripwire --update --twrfile \
/var/lib/tripwire/report/your_lastest_report_file
这将会启动默认的编辑器,这样你可以同意目前的变化。完成后退出编辑器,tripwire会升级你的数据库。
16. 你可能会注意到top程序没有被监视,这个文件经常被“root kits”所替换调,所以它应该被tripwire监视,编辑 /etc/tripwire/twpol.txt,在“System Administration Programs”项中添加 /usr/bin/top 这项规则。
/user/bin/top -> $(SEC_CRIT);
升级你的策略:
Tripwire --update-policy /etc/tripwire/twpol.txt
完成:
数据完整性的工具应该每天根据数据库来运行。


步骤3:使用tmpwatch来清理临时文件目录


场景/故事
你需要确定或者确定并删除已经有一定时间没有人访问的文件。


任务:
1. 运行tmpwatch的test选项,这样可以看一下哪些文件7天没有人访问了:
tmpwatch –v –test 168 /tmp
步骤4:文件的访问控制
场景/故事
你想创建一些用户可以使用的文件,然而你想控制用户对这些文件的访问类型。
任务:
1. 创建一个名为supervisor的用户
2. 在supervisor的主目录下创建两个文件:
touch /home/supervisor/{payroll,old.employees}
3. 防止payroll文件被删除
chattr +i /home/supervisor/payroll
4. 只允许数据附加在old.employees文件上
chattr +a /home/supervisor/old.employees
5. 确认文件的属性被更改:
lsattr /home/supervisor/*
6. 试着删除payroll文件:
rm /home/supervisor/payroll
你收到什么错误的信息?
7. 试着编辑old.employees文件,在保存文件时有没有错误消息?为什么会/不会这样?出错的消息是什么意思?输入以下命令:
echo “foobar” >> /home/supervisor/old.employees
为什么这个命令可以工作?


完成:
1. 不能被删除的payroll文件
2. /home/supervisor/old.employee文件只能把数据添加到其中,不能删除任何文件中的内容。


步骤5:将日志集中写入一个专门的日志主机中


场景/故事
你的老板认为将所有日志写到一个专用的日志主机中是个非常好的主意


任务:
与你的旁边的人一起做实验
1. 首先配置syslogd可以接收远程的消息,编辑 /etc/sysconfig/syslog :
SYSLOGD_OPTIONS=”-r –m 0”
2. 重启syslogd:
service syslog restart
现在你的主机可以接收其他机器的消息了
3. 配置syslogd发消息给别的机器,在/etc/syslog.conf添加下面这行:
user.* @stationX
在这里stationX是旁边的机器
4. 重启syslogd:
service syslog restart
现在你的机器就会把用户运行的程序发给旁边的机器了
5. 使用logger创建一个syslog的消息
logger –i –t yourname ”this is a test”
这则消息是否显示在你旁边机器的 /var/log/messages中了呢?
问题:
为什么这个消息会显示在 /var/log/messages?
你怎么避免这种情况?


试验10
使网络安全
估计时间: 1小时
目标: 学习使用iptables构建一个防火墙
试验的起点: 标准的Red Hat Linux安装,kernel要支持防火墙,iptables要安装


步骤1:创建一个简单的防火墙


场景/故事
你要建立一个防火墙保护你的主机不受可疑主机192.168.0.254的骚扰,可疑的主机不只这一个,你还要创建一个规则防止你的一个邻近的主机使用ping-flooding(洪水ping)攻击你的计算机。


任务:
9. 删除所有已经存在的用户定义的chains,重置所有chains上的默认规则,刷新所有规则:
iptables –F; iptables –X
for chain in INPUT FORWARD OUTPUT; do
iptables –p $chain ACCEPT
done
或者
service iptables stop
10. 阻止所有从邻近的主机(192.168.0.Y)的进来的连接:
iptables –A INPUT –s 192.168.0.Y –m state --state NEW –j DROP
这样还是允许你打开到他们系统的连接,但不是所有的
11. 限制从你的邻居(192.168.0.X)进来的ICMP echo request(回应请求)包
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-m limit --limit 6/minute --limit-burst 2 -j ACCEPT
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-j DROP
12. 显示你的防火墙策略
iptables -nl
13. 测试你的防火墙配置
a) 你的邻居(192.168.0.Y)能连接到你的系统吗?你能ping通他吗?
b) 确认你的邻居(192.168.0.X)使用的不是你在上面第2步时设置的地址。
c) 你的邻居(192.168.0.X)能ping通你的系统吗?你能ping通他吗?
14. 保存你的防火墙设置:
iptables-save > /etc/sysconfig/iptables
或者
service iptables save
15. 配置你的系统重启后仍保留新的防火墙规则:
chkconfig --level 2345 iptables on
现在确认一下
chkconfig --list iptables
16. 重新启动确认你的策略仍在。
完成:
1. 你可以主动连接你的邻居(192.168.0.Y)
2. 所有的主机都可以主动连接你,除了你的邻居(192.168.0.Y)
3. 你的另一个邻居(192.168.0.X)不能用ping-flood攻击你的系统。
清理:
当你确信成功完成了实验,让你刚才创建的策略实效:
service iptables stop
chkconfig iptables off


试验11
使服务安全
估计时间: 1小时
目标: 使用tcp_wrappers和xinetd限制用户对系统的访问
试验的起点: 标准的Red Hat Linux安装


步骤1:限制特定主机对服务的访问


场景/故事
某些特定主机和特定网段比较危险,为了保护你的主机,你决定阻止它们访问你的一些敏感的服务


任务:
把你的主机配置成以下的描述的样子(你需要跟其他两个人合作,让他们来测试),注意:如果没有安装telnet-server和openssh-server,要把它们的rpm包装上。
17. ssh可以被本地子网访问,但是不能让其他网段的用户访问。
18. telnet可以被你的三个邻居访问,但是不允许其他人来访问。
19. 任何服务都不接受从cracker.org来访问(你能找出特定的IP地址范围吗?)
你可以找出不同的解决方案,下一页是其中一种解决方法。
一种解决方法:
假定你使用旁边的三台计算机stationX.example.com、stationY.example.com、stationZ.example.com来测试你的配置。
1. 安装telnet-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/telnet-server*
chkconfig telnet on
安装openssh-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/openssh-server*
chkconfig sshd --add
2. /etc/hosts.deny
sshd :ALL EXCEPT 192.168.0.
3. /etc/xinetd.d/telnet:
only_from = 192.168.0.X 192.168.0.Y 192.168.0.Z
4. /etc/xinetd.conf
no_access = 192.168.1.0/24
如果想侦测出cracker.org的IP地址,你可以使用host命令:
host –l cracker.org server1.example.com
以上的命令查询名称服务器server1.example.com中的cracker.org区域信息,从返回的IP来看所有的记录都是192.168.1.0这个子网的。呵呵世界上的事情不可能如此简单,通常名称服务器(DNS服务器)只允许它的从服务器进行区域传递,而不会允许其他计算机这样的。所以为了保护你的安全,想知道整个区域的信息非常不容易实现。


步骤2


场景/故事
你已经通过配置/etc/hosts.deny限制FTP和telnet访问,现在要审核你正在运行的服务了,你需要一个搭档扫描你主机的端口。
如果你在一个可以连通到Internet的教室中,不要用nmap扫描外面的example.com域或192.168.0/24之外其他的网段,谢谢您的配合!


任务:
1. 找一台别人的主机用以下命令进行端口扫描:
nmap –sSUR –P0 –vO <stationX> &> scan_of_stationX.txt
2. 在你的主机上使用root帐户登陆,运行以下命令查看你的哪些进程正在监听着哪些端口:
netstat –tulpe
主机上列出的端口与用nmap扫描的端口是否一致?如果你使用GNOME桌面环境,几个GNOME的连接端口可能会打开,退出X-window,进入运行级别3,netstat会报告相同的端口吗?
3. 现在使用chkconfig来验证你的系统,输入:
chkconfig --list |grep on
你的还配置了其他你不太了解的服务了吗,使用chkconfig和ntsysv命令来关闭你不用的服务,之后从新启动,重复第二步以上的步骤,netstat还会报告你关掉的服务的端口吗?
完成:系统审核显示只有需要的服务被运行。


试验12
数据安全
估计时间: 1个半小时
目标: 熟悉基于加密的工具
需要的RPM软件包: openssl,openssh,eopssh-clients,openssh-server


步骤1:使用gpg来交换加密的电子邮件
用户alice和bob希望能够安全的交换信息,使用GNU的Privacy Guard(gpg)来提供加密服务。您将建立两个用户,为他们的每个建立公钥和私钥。下一步,alice将获得bob的公钥,并且使用该公钥来加密给他的信息,bob将解密信息。
1. 建立用户
[root@localhost]# useradd alice; useradd bob
[root@localhost]# passwd alice
[root@localhost]# passwd bob
2.为每个用户建立公钥和密钥。注意到gpg第一次运行的时候,会建立缺省的初始化用户文件:当提示“…your message”,按下CTRL-C。
[alice@localhost]# gpg
[alice@localhost]# gpg –help
[alice@localhost]# gpg –gen-key
您将被提示多种的密钥参数。选择缺省的选项。当询问您的细节的时候,设定真实的名称为Alice。其他的信息您随便填写。您同时将被会问及您的密码。您可以使用任何密码(但是您必须自己记得住!);或者简单的敲两下<回车>不使用密码。
对于用户bob采用相同的步骤,设定其“真实的名称”为Bobby(gpg抱怨bob太短了)
3. 检查alice的公钥和密钥,该公钥和密钥存储在pubring.gpg和secring.gpg中。
[alice@localhost]$ ls ~/.gnupg
[alice@localhost]$ echo no-secmem-warning >> ~/.gnupg/gpg.conf
[alice@localhost]$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice (demo key) <alice@station1.com>
sub 1024g/CE26F831 2003-09-18
[alice@localhost]$ gpg --list-secret-keys
/home/alice/.gnupg/secring.gpg
------------------------------
sec 1024D/168F25D7 2003-09-18 Alice (demo key) <alice@station1.com>
ssb 1024g/CE26F831 2003-09-18
4.让bob把他的公钥放在ASCII文件中以便方便的传递给alice。接下来,让alice导入bob的公钥到她的公钥环中去。
[bob@localhost]$ gpg --export --armor Bobby > /tmp/bob.key
[bob@localhost]$ cat /tmp/bob.key
[alice@localhost]$ gpg --import /tmp/bob.key
[alice@localhost]$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice <alice@station1.com>
sub 1024g/CE26F831 2003-09-18
pub 1024D/67C0F0AD 2003-09-18 Bobby <bob@ station1.com >
sub 1024g/FDD05A7A 2003-09-18
5.现在alice获得了bob公钥的副本,并且把它加入到她的公钥环中去。她可以给bob发送加密的消息。使用下面的命令步骤来使得alice发送给bob一个加密的/var/log/dmesg的副本。
[alice@localhost]$ cp /var/log/dmesg message.txt
[alice@localhost]$ gpg --encrypt --armor --recipient Bobby message.txt
[alice@ station1]$ head message.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
hQEOAzUJ6BL90Fp6EAP+J1gPH9RHQ1C+CaJGWSzUD2A603nspW2Ab+fQy7rmJbSA
5lwIPe5IzdmgSwMy80aefARQokI/cgdiWpb20Wzy2bltP413j/mrOiworKCOKguH
IJDQPqYxeticJSbwdZoTozsnLmWKp4uxappv3IaSI91w7REgN0KcwVetIn6UsYsE
AIKOqs1oXdYfU3Kzmt3DficQsZDgCuU1mVESCprb7Iyo/TvjjNuc9imqskrSveZZ
vFU8Loc7uI+gQ4HGUpFNryErMbaR2+KQnJCIz9GZJG/Lr7tFND4wCkFsu3jXvN6e
hUl5KRmRV3MWAkdOT4E3ZYF3dOhrdScxnpeIZdL5IDPo0usB9t2ZgIPHp9jKIIAc
[alice@localhost]$ mail -s "here it is" bob <message.txt.asc
6.现在让bob检查他的邮件,保存alice的邮件到文件。如果您不熟悉邮件客户端,您可以使用一个简单的基于命令行的mail工具
[bob@localhost]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Thu Sep 18 22:02 84/4746 "here it is"
& w message_from_alice
"message_from_alice" [New file]
& q
[bob@localhost]$ less message_from_alice
[bob@localhost]$ gpg message_from_alice
您将被提示作为纯文本文件的文件名。使用缺省的message.txt。注意gpg自动的执行期望的动作,即,使用恰当的私钥进行解密。缺省的行为可以通过命令行的参数进行改变。


附加的步骤1的练习
1.使用gpg,使得alice能够向bob发送使用对成密钥加密的消息。
2.使得alice签署和加密消息给bob,bob需要什么其他的附加信息来验证签名
3.使得alice为她的消息建立一个拆离的签名,发送给bob消息和签名。让bob来验证拆离的签名
4.让bob签署alice的公钥,由此使得别人相信alice就是公钥的主人。


步骤2:使用ssh来进行加密的传输


场景A
alice和bob可能是不同工作站上的用户,他们希望建立等同的帐号。也就是说,alice希望访问bob的帐号而不需要输入密码,反之亦然。您将使用ssh提供如此的等同性。
在此步骤中提到的stationa指的是用户alice,然而stationb指的是用户bob。在执行此试验的时候您只需调正西医的步骤以适应您的主机名称。如果您的伙伴一起做这个试验,那么stationa和stationb指的就是您的机器的名称和他的机器的名称。如果您使用单一的机器,那么所有的机器名称将设定为localhost。
1. 确保适当的RPM软件包被安装
[alice@stationa]$ rpm -q openssh
[alice@stationa]$ rpm -q openssh-clients
[alice@stationa]$ rpm -q openssh-server
2.使得root帐户来确定bob机器上的sshd守护进程在运行
[root@stationb]# service sshd start
[root@stationb]# service sshd status
3.如果alice知道bob的密码,那么她可以通过ssh来访问其帐户。注意所有的和bob帐户的交互过程都是加密的,包括密码的传递。作为alice,运行如下的命令,在合适的时候提供bob的密码。
[alice@stationa]$ ssh bob@stationb ls /tmp
[alice@stationa]$ ssh bob@stationb
[alice@stationa]$ scp bob@stationb:/etc/services .
[alice@stationa]$ scp –r bob@stationb:/etc/xinetd.d .
4. 假设alice和bob希望采用更加安全的模式,让alice建立ssh的公钥和密钥对。注意到ssh-keygen应该被-t命令行开关启动,以至于密钥是通过DSA算法生成的。让alice检视其密钥(id_dsa)和公钥(id_dsa.pub)。
[alice@stationa]$ ssh-keygen –t dsa
[alice@stationa]$ ls ~/.ssh
[alice@stationa]$ less ~/.ssh/id_dsa
[alice@stationa]$ less ~/.ssh/id_dsa.pub
选择缺省的密钥位置的选项。同时,在提示的时候,通过按下<ENTER>选择一个空密码 。
5.让alice寄给bob她的公钥的副本。让bob把这个副本保存到文件~/.ssh/authorized_keys中去。
[alice@stationa]$ mail -s "my key" bob < ~/.ssh/id_dsa.pub
[bob@stationb]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Fri Sep 19 15:56 13/982 "my key"
& w alice_key
"alice.key" [New file]
& q
[bob@stationb]$ mkdir ~/.ssh; chmod 700 ~/.ssh
[bob@stationb]$ cat alice_key >> ~/.ssh/autorized_keys
[bob@stationb]$ chmod 600 ~/.ssh/autorized_keys
6. 假设所有的东西都在其正确的地方(即,bob在他的授权的密钥中拥有alice的公钥的副本),alice现在可以访问bob的帐号,而不用提供密码。
[alice@stationa] ssh bob@stationb id
uid=508(bob) gid=508(bob) groups=508(bob)
[alice@stationa] ssh bob@stationb cvzf - /home/bob/ > \
> /tmp/bob.stationb.tgz
如果没有正确的配置的话,那么ssh仍然将会采用密码认证,并且提示alice输入密码。有几个步骤帮助您调试这种情况。首先,检查在服务器上的/var/log/messages和/var/log/secure文件以帮助您获得有用的信息。第二步,在ssh的客户端上采用-v命令行开关。这将会产生有用的调试信息。
7.对于bob也采用相同的配置,以至于其能够进入alice的帐户。


场景B
alice建立了公钥认证的Shell可以访问bob的帐户。她现在要求安全的访问(基于文本的)在bob机器上的Web服务。
1. 确保在bob机器上的Web服务运行正常。如果不是,那么通过root帐号登陆bob的机器,安装并且启动apache web服务。
[alice@stationa]$ lynx http://stationb/
2.使用ssh,使得alice连接到bob的帐户,为了达到另外一种效果,在alice的端口12345(或者其他未使用的端口)到bob的机器的Web服务器(端口80)建立一个加密的管道。
[alice@stationa]$ ssh bob@stationb –L 12345:stationb:80
(并且在另外一个终端)
[alice@stationa]$ lynx http://localhost:12345
alice将能够在步骤1和步骤2看到相同的Web页面。然而在第一步骤中,数据从Web服务器到alice的Lynx客户端是通过明文的方式发送的,这样很容易被嗅探到。在第二步中,数据包从Web服务器通过bob的ssh守护进程,通过密文的形式越过网络到达alice的ssh的客户端,并且解密和传送到alice的lynx客户端。

Red Hat Linux 133 实验翻译(KevinZ)(转)

###请转贴时保留以下内容######
Red Hat Linux 133 实验部分
应广大RH爱好者的要求,奉献Red Hat Linux 133 实验翻译
请提出宝贵意见Mail:kissingwolf@hotmail.com
KevinZ(kissingwolf)
2004.1.4
#############################


Lab1 硬件和安装


步骤一:准备计算机


任务: 使用Red Hat Linux光盘启动系统
在启动时进入BIOS界面
设置系统启动顺序为A,CDROM,C
修改其他任何推荐的设置
保存并退出BIOS设置


步骤二:使用Anaconda(图形模式)安装Red Hat Linux


任务: 按照以下要求从光盘安装Red Hat Linux。注意,要初始化图形安装界面可能需要等待一两分钟。
l 使用检测到的鼠标配置(除非老师另有指定)
l 选择全新安装
l 使用定制安装选项
l 选择使用Disk Druid手动分区,删除所有原有的分区
l 使用以下分区方案:
n /boot 100M
n / 256M
n /usr 1000M
n swap 512M
n /var 400M
l 格式化所有分区,但是不选择检查坏块
l 使用默认的启动加载器设置(除非老师另有指定),不创建启动加载器密码
l 为网络设置选择DHCP,选择启动时激活
l 使用默认防火墙配置
l 选择适当的语言支持
l 设置对应的时区,根据老师的指示设置UTC
l 设置根密码为redhat
l 启用MD5和shaow密码模式(默认验证设置)
l 选择安装X window,不选任何其他组件
l 切换到tty5查看文件系统格式化的过程(使用Ctrl-Alt-5,用Alt-7切换回安装向导)
l 创建启动软盘可选
l 使用检测到的显示器和图形卡设置(除非老师另有指定)
l 配置使用图形界面登录
l 在安装结束后重启,完成初始化设置,不注册Red Hat Network
安装结束后启动系统,以root帐号登录,并检查以下文件:
l /var/log/messages
l /var/log/dmesg
以上安装的系统使用twm视窗管理器。通过后续的实验,我们将安装更多的软件包,实现功能的扩展和界面的美观


步骤三:使用NFS,FTP或HTTP安装Red Hat Linux


任务: 破坏现有的系统,重新安装Red Hat Linux。事先准备安装光盘1或从老师那里得到启动的介质。
破坏现有系统:
cat /var/log/messages > /dev/hda; reboot
cat /var/log/messages > /dev/sda; reboot
重启后使用启动介质启动,按照以下要求安装(由于已经覆盖了分区表,系统将警告没有找到分区表,必须重新初始化)
1. 使用CD启动
2. 在boot提示下回车
3. 选择对应的语言(English)
4. 在OK提示下回车
5. 选择对应的键盘(US)
6. 在OK提示下回车
7. 选择对应的安装方式(NFS镜像,FTP,HTTP)
8. 配置TCP/IP,选择“使用动态IP配置(BOOTP/DHCP)”
9. 在OK提示下回车
10. 根据选择的安装方式输入对应的信息:
FTP方式
FTP站点名称:192.168.0.254
Red Hat目录:pub/
HTTP方式
Web站点名称:192.168.0.254
Red Hat目录:pub/
NFS方式
NFS服务器名:192.168.0.254
NFS加载点:/var/ftp/pub
11. 这时Anaconda会读取安装镜像并检测显示器和鼠标的类型,显示欢迎界面
12. 选择定制安装
13. 使用diskdruid分区。使用以下分区方案:
/boot 100M
/ 2000M
swap 512M
/home 3 × 256M RAID0
14. 启动加载器,时区,图形,防火墙和验证方式都是用默认设置,除非教师指定
15. 设置适当的语言
16. 设置root密码为redhat
17. 安装默认的软件包
*指南中的分区方案非常重要,否则可能出现意料外的结果。


Lab2 Linux文件系统


目标:熟悉文件系统相关知识和技能


步骤一:创建和加载文件系统


任务:
1. 使用fdisk –l 得到ev/hda的分区尺寸信息。计算硬盘上没有分区的空间尺寸
2. 使用fdisk新增一个512M的逻辑分区(使用w命令将改动写入磁盘)。这个新分区的设备名是/dev/had_ ?为什么?
3. 重启以确定改动后的分区表被读入
4. 使用mke2fs,在新建的分区上创建一个新的ext2文件系统。创建时使用2k的块,每4k一个inode的设置。可能需要查看mke2fs的man page
5. 创建目录/data,作为该文件系统的加载点
6. 使用mount命令把新文件系统加载到/data。把/etc/passwd复制到/data,检查确认复制成功
7. Umount /data
8. 使用e2label为新分区指定卷标:
e2label /dev/hdax /data x是新创建分区的序号
9. 在/etc/fstab文件中为加载/data加入以下行:
LABEL=/data /data ext2 defaults 1 2
或者
/dev/hdax /data ext2 defaults 1 2
以上两行的实际效果相同。但是,如果更换了硬盘的总线或者是更改了主从的顺序,在fstab中使用卷标仍然可以定位这个设备
10. 加载新的分区
mount /data
11. 复制文件或使用touch 创建文件


步骤二:把ext2转换为ext3


1. 键入sync。这个命令把磁盘缓存信息写入磁盘。通常这个命令是定期执行的,但是以下步骤可能会先占自动同步。
2. 使用reset键重启动,或者使用电源开关关闭再打开(正常情况下不要这样)
3. 如果出现“Repair filesystem”的提示,尝试使用e2fsck /dev/hdx 修复文件系统
4. 成功启动后,通过创建journaling inode日志把ext2文件系统转换为ext3。因为ext3 的数据完整性和文件系统完整性大大增强了,所以可以 把自动预加载(pre-mount)基于时间的定期文件系统检查。
Tune2fs –j –c 0 –i 0 /dev/<partition>
5. 检查文件系统的characteristics
tune2fs –l /dev/<partition>
6. 编辑/etc/fstab /data的相关行,把文件系统由etx2更改为ext3
7. 卸载并用ext3重新加载文件系统,确认使用了ext3:
umount /data ; mount /data
df –T /data
8. 确认/boot下初始的虚拟盘镜像中包含了必要的ext3模块和jbd日志模块。如果/data是你的机器上的第一个ext3文件系统,很可能initrd中并不包含这些模块。这种情况只当我们需要ext3的支持而在initrd中又不包括相关的模块时非常重要。假设出现了这种情况,我们可以制作一个/boot/initrd-<version>.img文件:
mkinitrd –f –v /boot/initrd-$(uname –r).img $(uname –r)
9. 键入sync,然后手动重启动系统。
10. 观察启动过程。系统检查了哪个文件系统?在/data文件系统,是否看到了“recovering journal”提示信息?当不正常重启时,使用ext3的日志恢复是否比ext2的fsck快了?


步骤三:使用autofs自动加载系统


1. 确认iptables已经关闭
2. 编辑/etc/auto.master文件,去掉对/misc一行的注释
3. 在/etc/auto.misc文件中增加一行,用于加载server1.example.com的/var/ftp/pub目录到本机的目的/server1. 可以参考ftp.example.com行的示例.
4. 重启autofs服务 service autofs restart
5. 测试/misc/server1目录

 


Lab 3 管理启动


目标: 定制系统服务的技巧


步骤一: 使用chkconfig禁用服务


1. 使用chkconfig检查系统服务的状态: chkconfig --list
2. 使用以下示例将isdn在所有runlevel关闭
chkconfig --del <service name>
3. 使用--help 查看chkconfig语法信息 chkconfig --help. 关闭runlevel3和runlevel5的kudzu服务
4. 观察 on 和 --add 的差异, off 和 --de 的差异
chkconfig isdn --list
chkconfig isdn on
chkconfig isdn --list
chkconfig isdn off
chkconfig isdn --list
chkconfig isdn --del
chkconfig isdn --list
chkconfig isdn --add
chkconfig isdn --list
5. 使用chkconfig查看系统服务的状态和改变状态


步骤二: 更改系统登录标题
1. 我们将设置rc.local脚本用于每次重启时出现登录标题. 打开/etc/rc.local文件找到以下行:
touch /var/lock/subsys/local
2. 在后面插入以下行:
echo “ Welcome to \n” > /etc/issue
echo “All access to this computer is monitored” >> /etc/issue
echo “Unauthorized access is prohibited” >> /etc/issue
echo >> /etc/issue
echo “Last reboot complete at $(/bin/date)” >> /etc/issue
3. 保存文件,把/etc/issue复制为/etc/issue.orig
4. 重启动系统
5. 当系统启动后,切换到虚拟控制台确认登录标题出现了. 打开/etc/issue, 注意mingetty把\n扩展为你的主机名


步骤三: 更改默认runlevel
1. 编辑/etc/inittab文件,将默认runlevel从5改为3,如下:
id:3:initdefault:
2. 重启动系统.发生了什么?
3. 把默认runlevel改为5,重启动系统


步骤四: 增加当天的消息
1. 编辑/etc/motd文件,默认应为空. 增加以下行:
##################################
# Welcome to station xx #
##################################
<date> The sysadmin is playing today.
Expect frequent system downtime.
2. 切换到虚拟控制台登录.

 

 


Lab 4 用户和组管理


目标: 用户和组管理的技巧


步骤一: 创建用户和组


1. 使用useradd命令,为以下用户创建帐号:Joshua, alex, dax, bryan, zak, ed, manager. 为每个用户设置一个密码.
2. 使用groupadd命令,增加以下组: 并使用 –g 选项设定对应的GID
group gid
sales 10000
hr 10001
web 10002
为什么不用系统默认的gid?
3. 使用usermod命令把joshua和alex增加到sales组, dax和bryan到hr组, zak和ed到web组. 把manager加入所有组. 使用 –G选项.
4. 用各帐户登录,使用id命令确认组成员身份. 还有什么方法可以确认?


步骤二: 设置共享文件夹


1. 创建/depts目录,在目录下创建sales, hr, web文件夹
mkdir –p /depts./{sales,hr,web}
2. 使用chgrp命令设置对应组拥有对应文件夹
chgrp sales /depts/sales
3. 设置/depts目录的权限为755, 子文件夹的权限为770
4. 设置各部门的子文件夹的sgid, 使得创建的文件所有权为对应的组
shmod g+s /depts/sales
5. 使用各个帐号登录,并在对应位置创建文件,检查效果.只有manager可以进入所有的目录.也可以使用su -命令,但是要加上-,并且su下一个帐户之前要退出前一个帐户.


步骤三: 设置磁盘配额


1. 创建名为filehog的帐户,并设置用户在/home目录有60个inode的软限制和100个inode的硬限制. 使用以下命令测试, 要使用su - 命令,否则会失败.
su – filehog
quota
for I in $(seq 1 100); do echo –n “file$(i)”; touch file$(i) 2 >&1; done | less
quota
quota命令会报告当前的限制和已经使用的inode. 使用循环的目的是创建100个文件. 因为当创建用户filehog的时候需要从/etc/skel复制一些文件,所以创建100个文件的命令将不会成功.
如果quota设置成功,你会看到一系列反馈的数字直到达到软限制的数目. 超过限制后,会看到一个警告,但是命令仍然能够执行.达到硬限制后,将得到出错信息,而且不能再创建任何文件. 可以用<shift><Page Up>回滚检查输出,并且用ls命令查看filehog的主目录.
2. 创建一个名为diskhog的用户, 设置用户在/home目录的软限制为4MB, 硬限制为5MB,使用以下命令测试
su – diskhog
quota
dd if=/dev/zero of=bigfile count=3 #将成功
dd if=/dev/zero of=bigfile count=4 #将成功
dd if=/dev/zero of=bigfile count=5 #将失败
观察quota命令的输出. 注意当超出inode软限制和block软限制的输出差别.达到inode软限制时用户得到警告,而达到block软限制时是不同的.


步骤四: 客户端NIS


1. 使用authconfig配置系统为NIS客户. 设置notexample为NIS域名, 服务器为192.168.0.254
2. 试用guest200x为帐号从虚拟控制台登录, x为座位编号.发生了什么? 如果登录失败,检查设置.如果还有问题,确认教师机的设置正确.当验证成功后,你将看到shell的目录为/. 因为没有在本地创建帐号,所以没有主目录. 当用户帐户使用目录服务的时候会出现这种情况,无论是NIS,LDAP还是SMB
3. 使用autofs解决主目录问题.用户主目录位于server1.example.com,我们可以加载基于NFS的共享来提供用户环境.首先编辑/etc/auto.master,增加以下行
/home/guests /etc/auto.guests --timeout=60
这条记录告诉自动加载器(内核模块之一)/home/guests由它控制.所有相关的加载设置保存在/etc/auto.guests文件中,而且如果60秒内没有活动就自动卸载.
4. 创建并编辑/etc/auto.guests文件.增加以下行:
* -rw, soft, intr 192.168.0.254:/home/guests/&
这条记录指明在目录下的所有子目录都配置为从192.168.0.254:/home/guests下的相应目录加载,并且设为:读写,如果加载不成功就返回超时,并且在加载不可用时仍允许进程访问文件.
5. 配置autofs在runlevel3,4,5时运行,并手动启动:
chkconfig autofs on
service autofs start
6. 登录并查看是否主目录自动加载.可以试验登录到附近的其他机器.你将可以在notexample域内的任何一台机器上获得自己的用户环境.
7. 在自己的机器上以root登录,,使用su –guest200x.是否提示输入密码? 这意味着本地root帐号和NIS域之间是什么关系?
配额方案:
1. 编辑/etc/fstab, 用usrquota代替defaults, 然后执行 mount –o remount /home
2. 创建一个用于保存用户配额的数据库(-c 可以在第一次运行quotacheck时隐藏警告)
touch /home/aquots.user
quotacheck –c /home
3. 打开内核强制配额
quotaon /home
4. 设置EDITOR变量为你希望的文本编辑器
5. edquota filehog 设置硬节点限制为100,软节点限制为60
6. edquota diskhog 设置软块限制为4096,硬块限制为5120

 

 


Lab 5 静态网络设置


目标: 手动配置网络设置的技巧


步骤一: 设置IP地址
1. 使用ifdown命令关闭网卡
ifdown eth0
2. 用文本编辑器打开/etc/sysconfig/network-scripts/ifcfg-eth0, 按以下内容更改(x为你的座位号)
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.0.x
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
3. 查看/etc/resolv.conf的内容.里面应该包含从DHCP服务器得到的设置.如果没有.改为以下设置:
search example.com
nameserver 192.168.0.254
4. 使用ifup启动配置好的网卡
ifup eth0
5. 使用ping server1 确认网络配置
6. 重启动系统,使用ping server1 确认网络配置
Lab 6 系统管理工具
目标: 掌握系统管理工具的使用以及对CUPS的管理


步骤一: 使用at和cron
1. 设置一个提示,提醒今天中午12:00去吃午餐. 在root提示符下.使用以下命令:
at noon; (回车)
echo “Time for lunch with Joe.” (回车)
2. 使用atq命令检查任务队列,确认
3. 使用at命令在5分钟后运行 df –k命令
4. 设置今天每10分钟检查一次系统状态用于检查性能问题.你怀疑时内存或者IO问题,所以要进行相关的监控. 使用root帐户,并使用crontab –e 命令编辑cron文件
5. 在文件种加入以下行:
*/10 8-17 * * * /usr/bin/free; /usr/bin/iostat
6. 如何把来自cron的输出到一个邮件地址?
7. 以root身份使用pine,mail或mutt检查使用受到了来自at和cron任务的邮件
8. 成功后删除cron任务


步骤二: 日志记录到一个集中的位置
这个实验需要和相邻计算机的配合.
1. 首先设置syslogd接受远程消息. 编辑/etc/sysconfig/syslog文件:
SYSLOGD_OPTIONS=”-R –M 0”
2. 重启动syslogd:
service syslog restart
3. 设置syslogd把消息发向远程机器: 在/etc/syslog.conf文件种增加以下行:
user.* @stationx
4. 重启动syslogd:
service syslog restart
5. 使用logger命令生成syslog消息,测试设置:
logger –i –t yourname “this is a test”
这条消息是否出现在相邻机器的/var/log/messages文件中?


步骤三: 使用dump/restore恢复单个文件
1. 准备用dump备份/boot目录下的文件. 使用df /boot查看/boot所在的设备(以下假设为/dev/hda1)
2. 首先确认备份需要的空间. 查看一个0级备份需要的字节数,使用 -S
# dump -oS /dev/hda1
3. 备份到文件而非磁带. 确认在/var/tmp目录是否有足够的空间,执行
# dump -0u –f /var/tmp/dumpfile /dev/hda1
4. 检查/etc/dumpdates,查看完全备份的时间戳.
5. 使用restore检查备份文件的内容
# restore –tf /var/tmp/dumpfile
6. 我们可以使用restore的互动模式恢复特定文件到一个临时目录.
# mkdir /tmp/restored; cd /tmp/restored
# restore –if /var/tmp/dumpfile
7. 这时会看到一个restore > 提示符. 键入help查看可用命令的列表. 使用ls和cd命令查看备份文件的列表.
8. 使用add,选中/grub.menu.1st和/grub/grub.conf文件.列出所在目录,恢复的文件应该带有星号.
9. 键入extract命令恢复选中的文件.设置下个卷名为1, 不为解压目录设置所有者模式. quit退出restore模式.
10. 在restore运行的目录中应该有一个grub目录,包含恢复的grub.conf和menu.1st文件.


步骤四: 设置打印机,使用CUPS管理打印机.
1. 使用root帐户运行redhat-config-printer
2. 选择新建,回车
3. 在队列名称位置输入lp0
4. 选择队列类型为本地打印设备
5. 选择下一步,回车
6. 选择/dev/lp0,选择下一步
7. 选择postscript printer, 选择下一步
8. 当出现创建新队列:名称和类型画面时,选择结束,回车
9. 选择退出,回车.将询问是否保存.选择是.
10. 键入命令: cd 并键入 lpr < install.log
11. 键入命令: lpq (将会看到一个由root激活的打印任务,任务号为1)
12. 键入命令: lprm 1 删除任务
13. 键入命令: lpq (将会看到任务已经删除)

 


Lab 7 RPM和Kickstart


步骤一: kickstart安装


安装前阅读排故的建议
1. 编辑 /root/anaconda-ks.cfg文件,在开头插入以下行
nfs --server server1.example.com --dir /var/ftp/pub
使用以下分区方案:
clearpart --all
part / --fstype ext3 –size=256
part /boot –fstype ext3 --size=100
part /tmp –fstype ext3 --size=128
part /usr –fstype ext3 --size=2800
part /var –fstype ext3 --size=400
part /home –fstype ext3 --size=128
part swap –size=512
在%post部分增加以下内容作为一行
perl –pi –e ‘s, Welcome to %n, My kickstart system %n,’ /etc/X11/gdm/gdm.conf
2. 保存anaconda-ks.cfg文件为ks.cfg.复制到软盘
3. 用光盘或其他启动介质重启动系统, 把kickstart软盘放在软驱中
4. 当出现boot提示符时 输入linux ks=floppy 如果软盘有错系统会提示修正.
使用这个系统进行后面的实验.
排故建议:
如果安装过程中提示配置语言或者键盘,是因为ks.cfg中缺少对应的行.
如果出现Disk Druid, 说明分区配置不对.确定有足够的硬盘空间,并且分区配置包括swap分区.
Phython编译器在出错时会大量溢出信息.使用<Shift><Page Up>和<Shift><Page Down>仔细检查,即使对Phython不熟悉也会找到出错原因.
在%post部分之外的错误往往会在覆盖现有系统之前出现.可以重启动系统并修改ks.cfg文件.启动时用linux 1进入单用户模式可以加快启动速度.


步骤二 安装

 

 


Lab10 系统恢复和排故


目标:掌握排故过程中的技巧


1. 使用RPM查询以下请求:
initscripts包中有那些文件?
Bash包由哪一台主机创建?
pam包在安装后是否更改过?
哪个包名称中包含gnome?
哪个包生成了/etc/inittab文件?
哪个包生成了/etc/fstab文件?为什么?
你的内核的版本更新记录的最后一条记录是什么?
以下命令有什么差异?
rpm –ivh <package file>
rpm –Uvh <package file>
rpm –F <package file>
2. 练习检查光盘或server1上的RPM包的签名和完整性
使用 rpm –import 把Red Hat 的GPG导入系统
gpg --import /usr/share/rhn/RPM-GPG-KEY
rpm --import /usr/share/rhn/RPM-GPG-KEY
下面的命令将把包中的私钥和安装的公钥比较,确定包在创建后是否改变过
rpm -K <RPM package file>
3. 验证.
ftp://server1.example.com/pub 安装可用的更新.注意,如果要复制到本地安装则要有足够的空间,在对内核进行更新时要使用安装而非更新命令.
删除Red Hat的公钥(使用 man gpg查看方法), 用Red Hat,Inc(security@redhat.com)创建假公钥, 然后使用rpm -K查看当密钥不一致时的情况.


步骤三: 自动解析依存性
开始前, 确认以下包没有安装:
rpmdb-redhat
xsane
sane-backends
可用的文件包在加载NFS共享server1.example.com:/var/ftp/pub后找到,位于RedHat/RPMS
1. 观察没有自动解析的情况: 从共享位置安装xsane包.会出现类似提示:
error: Failed denpendencies:
libsane.so.1 is needed by xsane-0.89-3
不要试图完成安装.
2. 使用rpmdb-redhat. 安装rpmdb-redhat包,再次试图安装xsane包.这次仍然会失败,但是会给出有用的信息:
Suggested resolutions:
sane-backends-1.0.9-5.i386.rpm
3. aid. 在RPMS目录下使用rpm –ivh --aid xsane-0.*.rpm
sane-backends将被自动加载以满足依存性
注意,因为安装包和依存的包在同一目录,所以不需要指明rpm安装的方法


步骤四: GRUB
1. 重启动进入GRUB界面.如果在grub.conf文件中设置了timeout选项,可以看到画面下方的倒数.
2. 在倒数结束之前,按方向键停止计数
3. 注意显示下方的提示.使用上下键选择启动的内核,按e选择编辑grub.conf的内容.
4. 根据下方的提示,使用上下键选择有kernel字样的行并按e编辑
5. 现在进入了GRUB编辑模式.输入空格,s 然后回车.可以看到返回了前一画面,kernel行多出了文本s.如果不想保存更改,可以按ESC返回前一画面
6. 按b使用更改选项启动.在上例中将进入单用户模式(single user)
7. 重启后检查grub.conf文件.你将发现所作的更改没有保存在文件中
8. 重复以上步骤, 试验其他runlevel


Lab 8 逻辑卷和阵列


目标: 在安装后创建逻辑卷和阵列的技巧


步骤一: 使用LVM创建逻辑卷


1. 使用fdisk在未分区空间创建四个新分区,类型为Linux LVM (0x8e), 尺寸一样,为了加快速度,不要大于1G. 退出时使用w保存更改.不要重启动.
2. 编辑/etc/modules.conf中包含以下行(RHEL 可以不用做以下修改):
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
使用当前内核创建initrd
mkinintrd –f –v /boot/initrd-$(uname –r).img $(uname –r)
这个命令将使系统在启动时加载lvm-mod模块,启用LVM
3. 重启动系统
4. 用root登录, 运行vgscan初始化LVM配置文件
5. 使用pvcreate将LVM分区初始化为物理卷.假设分区为
/dev/hda9
/dev/hda10
/dev/hda11
/dev/hda12
命令为: pvcreate /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
可以使用pddisplay查看分区信息
6. 然后创建卷组test0. 使用默认4MB的扩展尺寸,只包含一个物理卷
vgcreate test0 /dev/hda9
可以使用pddisplay查看信息
7. 创建一个小逻辑卷,不要占用所有空间. 使用vgdisplay的VG size和 PE/size信息,比如创建一个40M的逻辑卷:
lvcreate –L 40M –n data test0
可以使用 lvdisplay /dev/test0/data 确认命令执行了.
8. 在逻辑卷上创建ext3文件系统: mke2fs –j /dev/test0/data
9. 创建/data目录. mount /dev/test0/data /data
10. 复制文件到/data. 可以创建一个大文件: dd if=/dev/zero of=/data/bigfile bs=1024 count=20000
使用df检查/data的磁盘使用情况和剩余空间. 确认能够正常使用.可以编辑/etc/fstab来自动加载/data.重启动测试


步骤二: 使用逻辑卷


1. 首先, 卸载/data. 使用e2fsadm扩展分区尺寸: e2fsadm –L+50M /dev/test0/data
2. 重加载/dev/test0/data到/data, 确认文件. 运行df检查/data的磁盘使用情况和剩余空间.
3. 使用剩余扩展创建第二个逻辑分区. 运行vgdisplay查看PE /size,格式类似于166/644MB,这表示卷组包含166个扩展,664MB剩余空间. 创建一个占用166个扩展逻辑卷/dev/test0/scratch, 命令为:
lvcreate –l 166 –n scratch test0
4. 格式化新卷: mke2fs –j /dev/test0/scratch
5. 把未使用的物理卷加入卷组 vgextend test0 /dev/hda10
6. 如果再次运行vgdisplay, 可以看到增加的扩展.用20MB的扩展定义新逻辑卷.
e2fsadm –L+20M /dev/test0/scratch
使用lvdisplay和vgdisplay确认成功
7. 接下来用/data的只读快照创建新的逻辑卷. 首先用只读选项加载/data
mount –o remount,ro /data
8. 快照不需要和父卷尺寸一致,我们假设不需要保存太多数据,可以设置为5M
lvcreate –s –L 5M –n snap /dev/test0/data
9. 现在重加载/data为读写状态
mount –o remount,rw /data
10. 创建新加载点/snap, 使用 mount /dev/test0/snap /snap 比较/data和/snap,两者内容应该一致
11. 运行命令 for I in$(seq 1 10); do echo $1 > /data/$1; done 将在/data下创建十个文件,名称从1到10. 这个命令不影响/snap, 可以用lvdisplay /dev/test0/snap检查
12. 当快照逻辑卷不能容纳改变的块时,将被LVM自动删除,即使当前在加载状态.(避免这一情况的方法是尺寸和父卷一致,或者及时用lvextend扩展尺寸)可以通过以下方式看到这一现象:
rm /data/bigfile
for i in $(seq 1 10000); do echo $1 > /data/$1; done
13. 在/var/log/messages里可以看到类似信息:
Mar 19 16:30:02 station12 kernel: lvm --giving up to snapshot
/dev/test0/data on /dev/test0/snap: out of space
运行ls /snap. 快照已经不可用了,目录是空的.运行 lvdisplay /dev/test0/snap,和11步的结果比较.
14. 做完快照之后,如果数据已经备份,或者快照已被删除,都需要被卸载,否则会造成轻微的性能下降, 使用 umount /snap; lvremove /dev/test0/snap
在进行阵列试验以前清除LVM卷:
删除所有/etc/fstab中增加的记录
umount /dev/test0/data; umount /dev/test0/scratch
lvremove /dev/test0/data; lvremove /dev/test0/scratch
vgchange –an test0; vgremove test0


步骤三: 软件阵列


1. 在实验中我们将在同一磁盘创建多个分区来实现阵列,但是在实际工作中我们一般使用在不同磁盘上的分区来创建.使用fdisk将Linux LVM(0x8e)分区转换为Linux raid auto(0xfd)分区.保存更改.
2. 重启动系统.
3. 创建/etc/raidtab文件定义四个RAID-5阵列设备.根据以下示例,用实际的分区替换.chunk-size是一个重要的参数,决定了一次向阵列中每个磁盘写入数据的量.RAID-5需要一个校验算法行,一般设为left-symmetric来提高磁盘性能
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
device /dev/hda11
raid-disk 2
device /dev/hda12
raid-disk 3
4. 初始化阵列: mkraid /dev/md0. 如果阵列没有启动,手动启动 raidstart /dev/md0. 此时阵列会立即开始建立,但是已经可用了.可以在另一个虚拟控制台用 watch cat /pro/mdstat 监控建立过程.
5. 使用4k的块的ext3文件系统格式化. Stride选项应设为chunk size和阵列磁盘数的乘积, 可以加快格式化的速度
mke2fs –j –b 4096 –R stride=32 /dev/md0
6. 查看是否能 mount /dev/md0 /data. 即使仍在建立过程也可以加载. 使用df命令查看文件系统尺寸. 如果是四个同尺寸的分区组成的阵列,文件系统尺寸应该为三个分区之和.(其他空间用于储存校验信息)
7. 使用lsraid显示阵列设备的相关信息. Lsraid –A –a /dev/md0
8. 试着在/data创建文件. 可以在/etc/fstab中加入记录用来自动加载.
9. 检查/proc/mdstat, 确认阵列已经建立. 可以看到类似输出:
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/4] [UUUU]
10. 测试卷的破坏.用以下命令模拟: raidsetfaulty /dev/md0 /dev/hda11
在/var/log/messages中寻找出错信息, 注意/proc/mdstat文件的改变
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/3] [UUUU]
重启动系统, 查看启动时dmesg和/var/log/messages的出错信息
11. 模拟在重启前更换了损坏的磁盘. 使用命令替换阵列分区:
raidhotadd /dev/md0 /dev/hda11
12. 这时将看到/proc/mdstat显示阵列的重建
进阶实验:在软件阵列上创建LVM
以下实验可选,需要创建一个在两个磁盘上的物理卷建立的RAID1镜像卷基础上的RAID10. 使用同一磁盘的两个分区模拟这一情况.
1. 撤销前面的软件阵列设置: umount /dev/md0, 删除/et/fstab中的对应行.运行 raidstop /dev/md0. 从/etc/raidtab中删除/dev/md0设备.
2. 编辑/etc/raidtab创建两个RAID1镜像/dev/md0和/dev/md1, 分别由两个分区组成.示例如下:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
persistent-superblock 1
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
3. 注意: 运行命令时可能需要-f和-R重运行.因为系统会检测到上次创建的相关superblock.
4. 格式化并启动阵列设备: mkraid /dev/md0; mkraid /dev/md1
5. 设置阵列设备为物理卷: pvcreate /dev/md0 /dev/md1
6. 创建卷组: vgcreate test0 /dev/md0 /dev/md1
7. 使用vgdisplay查看有多少扩展可用
8. 设置条带的逻辑卷. 使用-i 指定构成条带逻辑卷的卷组中物理卷的数目. –I 设置条带的尺寸. 当使用-i时作用等同于RAID0阵列的chunk-size.使用 –l指定vgdisplay报告的卷组中逻辑卷可用的扩展.假设有500可用.示例为:
lvcreate –i 2 –I 64 –l 500 –n data test0
9. 使用ext3格式化/dev/test0/data ,作为条带的RAID阵列设置stride选项,
mke2fs –j –b 4096 –R stride=8 /dev/test0/data
10. 在/data加载/dev/md0/data. 把文件复制到/data,使用e2fsadm重设置尺寸.使用raidsetfaulty模拟磁盘损坏.(条带的逻辑卷在创建后可以重定义尺寸,只要不在另一个物理卷上使用这些扩展.)这样将得到RAID的冗余,条带的性能和LVM的灵活性.

 


Lab 9 X window系统


步骤一: 了解X的启动顺序


1. 创建并编辑/etc/X11/xinit/xinitrc.d/xeyes,加入以下行并设为可执行
#!/bin/sh
xeyes &
2. 切换到runlevel5
3. 使用显示管理器登录系统 gdm,kdm,xdm等.发生了什么?切换到虚拟控制台,运行
startx --:1
发生了什么? 为什么需要指定 -- :1?
4. 在创建的用户主目录下创建并编辑.xsession文件,增加以下行并设为可执行:
#!/bin/sh
xterm &
exec metacity
5. 使用这个帐户登录,发生什么? 使用这个帐户在虚拟控制台登录,并运行startx,发生了什么?
其他问题:
1. 列出升级视频卡的过程,包括选择卡的过程.
2. 描述当视频卡配置错误时,如何修复一个启动到runlevel5的系统.

 


Lab 10 系统修复和排故


目标: 熟悉系统修复的技巧
步骤一: 在rescue模式修复MBR
rescue模式提供了修复一个不能正常启动的系统的最后手段. 即使启动加载器或者根文件系统配置错误或损坏.进入该模式需要RedHat Linux的第一张光盘或者是网络路径的boot.iso镜像
任务.破坏GRUB使之不能启动.使用rescue模式重安装GRUB.
1. 使用以下命令,将MBR中的GRUB的第一部分用0覆盖.小心设置块尺寸.如果写入太多0,会覆盖分区表,造成的问题会大的多.(以下命令假设使用IDE设备)
dd if=/dev/zero of=/dev/had bs=446 count=1; reboot
恭喜---你的启动扇区已经破坏.不过你的主分区表还可用.重启确定系统不能启动.使用以下步骤修复系统.
2. 从光盘/软盘启动进入rescue模式. 当启动时输入 linux rescue
3. 修复环境将询问是否加载硬盘文件系统.选择继续.用读写模式加载.检查mount的输出保证文件系统加载正确.可以使用fdisk检查分区
mount
fdisk –l /dev/hda
4. 注意硬盘加载在/mnt/sysimage. 检查grub.conf文件确认配置正确.
cat /mnt/sysimage/boot/grub/grub.conf
5. 安装GRUB需要切换上下文,使/mnt/sysimage成为grub-install认为的系统的根.加载chroot shell, 运行grub-install, 退出.
Chroot /mnt/sysimage
grub-install /dev/had
exit
6. 输入exit退出rescue模式. 注意这会卸载加载的分区.
步骤二: 在rescue模式安装软件.
使用以下命令覆盖mount命令:
cp /bin/date /bin/mount
恭喜---你已经破坏了一个重要的执行文件. 重启动后你会发现系统不能启动.使用rescue模式,安装合适的rpm包.
1. 使用启动介质启动系统到rescue模式.
2. 系统会提示加载硬盘文件系统.使用mount检查是否正确加载.
3. 注意硬盘的文件系统加载在/mnt/sysimage. 查看哪个rpm包包含这个命令
rpm –qf --root /mnt/sysimage/bin/mount
4. 确认mount的rpm包,使用chroot安装rpm
chroot /mnt/sysimage
rpm –V mount
exit
5. rpm会报告/bin/mount被修改了.从网络重新安装mount包,要使用chroot
rpm –ivh --force --root /mnt/sysimage /mnt/source/RedHat/RPMS/mount*
6. 输入exit退出rescue模式. 注意这会卸载加载的分区.

Red Hat Linux 033 实验翻译(KevinZ)(转)

##请转贴时保留以下内容######
Red Hat Linux 033 实验部分
应广大RH爱好者的要求,奉献Red Hat Linux 033 实验翻译
请提出宝贵意见Mail:kissingwolf@hotmail.com
KevinZ(kissingwolf)
2004.3.4
#############################


Red Hat Linux 033 实验部分


试验3 
文件和目录操作
估计时间: 1小时30分钟
目标:           熟悉函数、语法和一些基本的文件和目录的控制操作。
              练习有效地组合这些命令完成一般的用户任务
试验的起点: 安装了Red Hat Linux可运行系统 ,有一个无特权用户student,密码:student


第一步:目录和文件组织
场景/情节
在您的home目录下有一系列的文件,您决定到时间整理一下了.您计划生成一些新的子目录,然后根据您的计划拷贝和移动这些文件到适当的目录;另外,这些文件不是都有用的,有一些是要删除掉的。


任务:
1. 以用户名student密码student在tty1上登陆。
2. 在您登陆系统以后,你将进入您的home目录.你可以使用"打印工作目录"检查这一情况
$ pwd
/home/student
3.使用如下每条命令检查您是否还有文件在您的home目录下:
$ ls
$ ls -a
$ ls –al
为什么第一和第二条命令返回不同的文件数?
第三条命令返回的在您当前的home目录下最大的文件是多少?
您的home目录下有子目录吗?
4. 您现在使用touch为以后的步骤建立文件。这种扩展在接下来的命令中是如何工作
的在以后的章节中进行讨论。现在,仅仅按照下面的行键入就行了(在集合与集合之间使用包括花括号{}和下划线的字符)
$ touch {report,memo,graph}_{sep,oct,nov,dec}_{a,b,c}{1,2,3}
5. 使用命令ls检查最后一条命令的结果,你会发现它在您的home目录下生成了108个
新的空文件(您不必数)。这些文件代表了您将使用的在这个步骤中的代表的数据文件。如果您看不到这些文件,向教师寻找帮助,没有这些文件,该试验后面的步骤就无法进行。
6. 为了组织您的文件,您必须先建立一些新目录,使用mkdir在您的home目录中直接
建立一些子目录:
$ mkdir a_reports
$ mkdir september october november december
  再使用ls 检查您的工作。
7. 使用如下命令在您的一个新的目录中生成一些附加子目录
$ cd a_reports
为了切换到目录,接下来:
$ mkdir 1 2 3
使用ls检查你的子目录a_reports下的名为1,2,3的三个新的子目录。
8. 首先把所有带”b”的报告从home目录中移出并且按月份分组,先验证要使用的复杂的通配符模式,是个好方法。这样做以确保它对于正确的文件进行操作。如果你打算使用这种通配符模式,您可以使用一个无害的命令来替换您的命令。
$ cd
$ ls -l *dec?b?
你将看到列出了9个”december”,”b”文件,把其中的一个移到december目录中:
$ mv graph_dec_b1 december
用下面的语句移动其余的:
$ mv *dec?b? december
列出december目录的内容验证移动操作是否成功:
$ ls -l december
total 0
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b3
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b3
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b3
9.把其余所有带”b”的报告分别移动到各自对应的目录中:
$ mv *oct?b? october
$ mv *sep?b? september
10. 现在你将把”a”报告收集到它们各自对应的目录中。注意使用~代替 “你的home
目录”。通配符和模式的组合指定了您的home目录下所有以_a1结尾的文件。
$ cd a_reports
$ mv ~/*_a1 1/
“september””a1”文件陈旧并且不再需要,使用echo确定您已经建立了一个只匹配该类文件的模式,然后删除它们,并且检查剩下的”a1”文件是否正确移动:
$ cd 1
$ echo *sep*
$ rm *sep*
$ ls
graph_dec_a1 graph_oct_a1 memo_nov_a1 report_dec_a1 report_oct_a1 graph_nov_a1 memo_dec_a1 memo_oct_a1 report_nov_a1
11.最后移动”a2”和”a3”报告到各自对应的目录中。为了使过程变得有趣,我们将把
它们移出当前目录,使用相对和绝对的的路径名。第一步,使用pwd确定当前目录:
$ pwd
/home/student/a_reports/1
用echo检查涉及到”a2”文件的模式,然后使用绝对路径名:
$ echo /home/student/*a2*
$ mv /home/student/*a2* /home/student/a_reports/2
即使您当前在/home/student/a_reports/1目录下,也能把文件从/home/student移动到/home/student/a_reports/2目录中,因为您指定了文件的路径名称(在本例中为绝对路径名称)
现在使用相对路径移动“a3”文件。再一次的,首先确信模式指定的是正确的文件名称。
$ echo ../../*a3*
$ mv ../../*a3* ../3
12.返回您的home目录,并且使用ls 来校验仅存在该目录中的文件都是“c”文件(例如:graph_dec_c1,graph_dec_c2,…)
13.“c1”和“c2”报告文件对于每个月来说都非常重要,并且您打算把它们备份到另外一个目录:
$ mkdir /tmp/archive
$ cp report*[12] /tmp/archive/
另外的,所有的对于十二月份的报告文件应该备份到/tmp/archice目录下面。注意,-i选项使得cp程序在覆盖任何文件之前进行提示:
$ cp -i report_dec* /tmp/archive/
cp: overwrite `/tmp/archive/report_dec_c1'? n
cp: overwrite `/tmp/archive/report_dec_c2'? n
14.现在您备份了一些对您重要的“c”文件,您现在要删除位于您的home目录下面所有的文件。使用通配符“*c*”检查剩下的含有c的文件。您为什么不想执行命令rm *c* ?
(作为提示:尝试:ls *c*)
15.删除您的home目录下的剩余*c*文件。在发出一个破坏性的命令之前我们再次使用echo命令。
$ echo *c[1-3]
$ rm *c[1-3]
$ ls
a_reports   december november october september  


试验的结果
一个组织良好的home目录,文件放置在合理的位置,一些文件备份到了/tmp/archive目录中


第二步:决定磁盘的使用率
场景/情节
您想记录您的系统中的每一个文件系统总共有多少剩余空间。
另外,您想有一个关于哪些目录消耗了系统的多数的空间的列表。


任务
1. 使用df获取文件系统总的剩余空间,您的输出应该是类似于下面的例子(尽管输出
依赖于您的特定的安装,输出可能不同)
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc2 14129568 1809728 11602096 14% /
/dev/hdc1 49743 8847 38328 19% /boot
none 63312 0 63312 0% /dev/shm
2.注意缺省的命令df操作是以块为单位报告信息,试用-h,-H选项,则是用 “用户可读的“形式报告
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 13G 1.8G 11G 14% /
/dev/hdc1 49M 8.7M 37M 19% /boot
none 62M 0 61M 0% /dev/shm
$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 14G 1.9G 11G 14% /
/dev/hdc1 51M 9.1M 39M 19% /boot
none 65M 0 64M 0% /dev/shm
这两个开关有什么不同(使用man df)?
2. 在您的home目录使用du(磁盘使用率)命令来决定您所有的文件消耗的空间。确保尝试-h选项获得更可读的输出。


第三步:检视文本文件


任务
1.我们需要一个可供我们工作的文本文件:
$ cd
$ cp /usr/share/dict/words
.
2.使用cat显示文件:
$ cat words
Aarhus
Aaron
Ababa
…输出省略….
Zulu
Zulus
Zurich
3.在这种情况下cat是一个坏的选择,因为很多输出快速的滚屏,试用less:
$ less words
Aarhus
Aaron
Ababa
…输出省略…
abiding
Abidjan
Abigail
…输出省略…
使用less的时候,您可以向前翻页(使用b),向后翻页(使用空格键)在整个输出中,每次一屏.
4.如果你只需要快速的看看某个文件的最前几行和最后几行,你要使用head或者tail:
$ head words
Aarhus
Aaron
Ababa
aback
abaft
abandon
abandoned
abandoning
abandonment
abandons
$ tail words
zoologically
zoom
zooms
zoos
Zorn
Zoroaster
Zoroastrian
Zulu
Zulus
Zurich
您可以使用man帮助页面发现能使用head和tail中的哪个开关修改行号或是显示的行的相关的位置.
哪个命令你能使用显示文本的前50行?
哪个命令您能使用显示文件从第25,000行到结束的内容?


试验4 
用户信息
估计时间:  30分钟


目标:            熟悉一些用户标识和帐户转换基本的控制操作。


试验的起点:   安装了Red Hat Linux可运行系统,并且是成功完成试验系统。有另外一个无特权用户visitor,密码:visitor帐户的存在。请教师检查您的系统中是否已经建立这个帐户。

如果这个visitor用户帐户没有建立,按照以下步骤进行
1. 用root帐户登陆虚拟控制台。
2. 在提示符下键入以下命令
    # useradd visitor
3. 现在键入
   # passwd visitor
Changing password for user visitor.
New password: {输入visitor}
BAD PASSWORD: it is based on a dictionary word
Retype new password: {输入visitor}
passwd: all authentication tokens updated successfully.
第一步:本地用户登陆
任务:
1. 完全从工作站中退出。确定您已经推出所有虚拟终端和X Windows系统
2. 转换到虚拟终端1(tty1)通过按:
<CTRL-ALT-F1>
3. 使用密码redhat进入root帐号登陆您的工作站
4. 确定指定的登陆信息,使用下列命令:
# whoami
# groups
# id
 检查这些命令的输出。
5.获取工作站当前所有登陆者信息,当前,应该只有一个用户登陆系统,按如下顺序键入的命令的输出是很有趣的。
# users
# who
# w
检查这些命令的输出。
6. 转换到虚拟终端2(tty2)通过按
<CTRL-ALT-F2>
7.以用户student,密码:student登陆你的工作站。
8.获取指定登陆者的信息,运行下列命令:
$ whoami
$ groups
$ id
检查这些命令的输出。
9.获取工作站上当前所有登陆者的信息:
$ users
$ who
$ w
检查这些命令的输出。
10. 转换到虚拟终端3(tty3)通过按
<CTRL-ALT-F3>
11. 以用户visitor,密码:visitor登陆你的工作站
12. 获取指定登陆者的信息,运行下列命令:
$ whoami
$ groups
$ id
检查这些命令的输出。
13. 获取工作站上当前所有登陆者的信息:
$ users
$ who
$ w
检查这些命令的输出。
步骤2:切换帐户
任务:
1. 按下如下的键切换到虚拟终端3(tty3)
<CTRL-ALT-F3>
2. 运行id命令来决定您的用户信息,pwd来喜爱能使您目前的工作目录
$ id
$ pwd
记录结果:
id=__________________________________________
pwd=_________________________________________
3. 使用su – 来切换到root用户,运行id和pwd来获取您的当前的目录
$ su –
# id
# pwd
记录结果:
id=__________________________________________
pwd=_________________________________________
4. 从root帐户退出,返回到visitor帐户
# exit
5. 使用不含 - 的su切换到root用户,运行pwd和id。
$ su
# id
# pwd
记录结果:
id=__________________________________________
pwd=_________________________________________
为什么和第3步骤的结果不同呢?
6.登出所有您在这个步骤中本地的和远程的shell。
试验6 
Linux文件系统的要点
估计时间:  90分钟
目标:          深入了解linux文件系统知识,包括:创建和使用links,使用slocate和find,归档压缩文件。
试验的起点:   一个Red Hat Linux系统。
第一步:创建和使用links
任务:
1.在早些时候的试验,你已经拷贝了一个文件/usr/share/dict/words到你使用的用户student的主目录 ~/words.在这个案例里,你不需要编辑文件-拷贝一个文件到你的主目录就可以在试验的期间使用了。
2.为了要避免原始文件和副本之间的混乱。在student’s主目录中删除words的副本
$ cd
$ rm words
3.虽然你可能没有在那时了解它, 这个文件/usr/share/dict/words 的副本实际上是一个软link。列出内容下面目录 /usr/share/dict的内容查看link和它的参数。
$ ls –l /usr/share/dict
total 404
-rw-r—r-- 1 root root 409305 Apr 3 10:29 linux.words
lrwxrwxrwx 1 root root 11 Apr 20 17:33 words ->linux.words
a.你能告诉我words是一个软链接吗?
b.为什么words的文件大小是11?
c.words允许所有人访问。这和linux.words文件用什么冲突?除了root用户,其他用户能够能在linux.words上面写数据吗?
4.再一次列出文件,这次显示相应的indeds号。为什么两个文件会有相同或不同的inodes号?
$ ls –I /usr/share/dict
5. 现在在你的主目录中产生两个的代号和硬链接到/usr/share/dict/linux.words:
$ ln –s /usr/share/dict/linux.words soft
$ ln /usr/share/dict/linux.words hard
6. 测试一下,你新建的链接两者都指到 linux.words 文件:
$ head hard soft
7. 检查你所有文件的link , 然后在下面回答问题:
$ ls –il hard soft
$ stat had soft
报告文件大小,hard_______和soft_______.
被占用的真实的空间,hard_______和soft_______.
你怎样解释这两个link占用空间的差别。
列出链接的记数,hard_______和soft_______.
所有权,hard_______和soft_______.
文件硬链接的所有者和root用户可以完全访问,其他用户是只读权限。学生将会可以删除这个新的文件吗?为什么?
8. 更多的挑战:如果时间许可,探究一下下面的问题:
a.你能创建一个目标文件并不存在的软连接吗?看看ls命令的输出能否给你一些提示。
b.你能创建一个目标文件并不存在的软连接吗? 为什么?
c.你能创建一个软连接的硬连接吗? 当你尝试的时候有什么问题吗?
d.在创建了几个硬连接后,你能说出哪个是更加真实的文件吗?


步骤2:使用find命令


任务:
作为student登录。设计完成find命令提出结果


查看你当前的umask。设计并且运行find命令在每下列各项被描述的结果指令里。然后写下提供的空格里。
你可能需要在在find的man page里查许找。记得你能用/stringz man page里查找。
第一个答案已经为你列出。
1.在/var/lib目录下查找所有文件其所有者是games用户的文件
$ find /var/lib –user games 2> /dev/null
2.在/var目录下查找所有文件其所有者是root用户的文件。_________________________________________________________
3.查找所有文件其所有者不是root,bin和student用户并用长格式显示(如ls –l 的显示结果)。
_________________________________________________________
4.查找/usr/bin目录下所有大小超过一百万byte的文件并用长格式显示(如ls –l 的显示结果)。
_________________________________________________________
5.对/etc/mail目录下的所有文件使用file命令.
_________________________________________________________
6.查找/tmp目录下属于student的所有普通文件,这些文件的修改时间为120分钟以前,查询结果用长格式显示(如ls –l 的显示结果)。
_________________________________________________________
7. 对于查到的上述文件,用-ok选项删除。
_________________________________________________________
步骤3:归档和压缩


情景/故事:
你的系统上的主硬盘在你使用它的时候有可怕的噪音,但是它上面有有价值的数据。自从系统在两年半以前备份过,你有决定手动备份少数几个你最紧要的文件。那 / tmp 目录里储存在不同的硬盘的分区上快怀的分区,这样你想临时的把文件备份到那里。


任务:
1. 在/home目录里,用find命令定位文件所有者是student的文件。然后将其压缩。
$ find /home –user student –exec tar rvf /tmp/backup.tar {} \;
2. 保存/etc目录下的文件到/tmp目录下:
$ tar cvf /tmp/confbackup.tar /etc
3. 列出两个文件的大小
$ ls –lh /tmp/*.tar
-rw-rw-r-- 1 student student 1.9M Oct 17 23:06 /tmp/backup.tar
-rw-rw-r-- 1 student student 5.4M Oct 18 00:27 /tmp/confbackup.tar
backup.tar文件的大小________
confbackup.tar文件的大小________
4. 使用gzip压缩你的文档。然后报告文件的大小:
$ cd /tmp
$ gzip –v *.tar
$ ls –lh *tar*
-rw-rw-r-- 1 student student 580K Oct 17 23:06 backup.tar.gz
-rw-rw-r-- 1 student student 913K Oct 18 0:27 confbackup.tar.gz
backup.tar.gz文件大小为____________
backup.tar.gz文件的压缩百分比________
confbackup.tar.gz文件大小为____________
confbackup.tar.gz文件的压缩百分比________
5. 先解压缩bzip2文件然后在压缩,然后比较新文件的大小:
$ gunzip *.gz
$ ls –lh *tar
-rw-rw-r—1 1 student student 1.9M Oct 17 23:06 backup.tar
-rw-rw-r—1 1 student student 5.4M Oct 18 00:27 confbackup.tar
$ bzip2 –v *tar
$ ls –lh *tar
-rw-rw-r—1 1 student student 510K Oct 17 23:06 backup.tar.bz2
-rw-rw-r—1 1 student student 791K Oct 18 00:27 confbackup.tar.bz2
backup.tar.bz2文件大小为____________
backup.tar.bz2文件的压缩百分比________
confbackup.tar.bz2文件大小为____________
confbackup.tar.bz2文件的压缩百分比________
6. 在传统UNIX系统,
$ rm confbackup.tar.bz2
$ tar czf test1.tgz /etc
$ tar cjf test2.tbz /etc
$ file test*
test1.tgz:gzip compressed data,deflated,last modified:Wed Oct 18 01:52:11 2000,os:Unix
test2.tbz:bzip2 compressed data,block size = 900K
结果:
你的“重要数据”被压缩备份到/tmp目录里了。


问题答案2
2. find /var –user root –group mail 2>/dev/mull
3. find / -not –user root –not –user bin –not –user student –ls 2> /dev/null
or
find / ! –user root ! –user bin ! –user student –exec ls –ld {} \; 2> /dev/null
4. find /usr/bin –size +1000000c –ls 2> /dev/null
5. find /etc/maill –exec file {} \; 2 > /dev/null
6. find /tmp –user student –and –mmin +120 –and –type f –ls 2> /dev/null
7. find /tmp –user student –and –mmin +120 –and –type f –ok rm {} \;
(end)


试验7 
bash Shell
估计时间:  45分钟
目标:          深入了解bash shell,包括创建定制。


试验的起点:   一个Red Hat Linux系统。


第一步:使用Aliases
任务:
1.你决定创建一个alias,当你使用cls的时候,系统能够运行clear命令清除你的屏幕。使用student身份在tty1登录,然后输入下列命令.
$ alias cls=‘clear’
$ alias
$ cls
2.当你重新登录的时候这个别名就丢失了。确信新的别名在用户student每次登录的时候都能够使用,可以执行一下几步。
$ cd
$ vi .bashrc
查找包含下列的文字:#User specific aliases and functions 添加到你的别名命令行:
alias cls=’clear’
保存并推出。
3.测试你的改变当你注销的时候,重新登录到tty1上的时候,试下面的命令:
$ alias
$ cls
4.现在使用ls 的man page 去创建一个叫lr的别名,利用ls的五个开关。测试并添加你的别名到.bashrc中.这个别名能够:
a)用长格式显示文件
b)显示隐含文件
c)给文件分类
d)用相反的顺序显示文件
e)按文件修改时间显示文件。
目标:
一条新的清屏命令和一条新的列文件命令。(都是别名)
步骤2:改变你的bash提示
情景/故事:
你决定定制你的bash提示以能够显示完全的路径和命令的序列号。
任务:
5. 在终端窗口,显示当前主要提示符的值。
$ echo $PS1
6. 改变你的提示符为一个字符串。
$ PS1=’Red Hat Linux ->’
7. 这个不常使用,因此恢复到有$提示符的情况下,同时加上主机名。
$ PS1=’\h $’
8. 在主机名和$符号之间插入bash表示历史纪录提示符的特殊字符 \!。
9. 查找bash 的man 手册,把当前的工作目录放入提示符中。
10. 你定制的提示符显示实例,如不同请继续修改。
station1:~ 21 $ cd /tmp
station1:/tmp 22 $
11. 编辑你重新定义的PS1 到你的.bashrc,然后打开新的终端窗口看看结果如何.
步骤3:配置shell选项
情景/故事:
使用set和shopt你定制几个bash shell 。
任务:
12.以student身份登录tty1界面上.查看许多普遍的配置shell选项:
$ set –o
allexport off
braceexpand on
emacs on
errexit off
hashall on
… output truncated …
13.察看目前ignoreeof的属性,用ctrl+d 键看是否能logout.
14.用student身份在tty1上登录,执行下面的改变,然后测试ignoreeof选项:
$ set –o ignoreeof
$ <ctrl-d>
$ 用 “logout” 退出shell
$ set +o ignoreeof
$ <ctrl-d>
15.当试图执行命令的时候可以看到提示信息.使用type的命令:
$ type cat
cat is hashed (/bin/cat)
$ type cls
cls is aliased to ‘clear’
$ type set
shopt is a shell builtin
$ type while
while is a shell keyword
结果:
现在你有一个更好的shell options.


问题答案4:命令替代
1. 确定完全路径名
$ which metacity
$ which <esc>.-message
$ ^message^window-demo
2. 重复执行上一个包含字符串ig的命令:
$ <ctrl-r>ig<return>
3. 当一个命令在另一个命令的后面用(‘ ‘)起来的时候,bash会先执行后面的命令并把执行的结果作为第一个命令的输入. 使用这个技术,看看下面命令的执行结果.
$ ls –l ‘which nautilus‘
(end)


试验8 
定制图形化界面
估计时间:  15分钟
目标:          探索Red hat liunx多种多样的图形化桌面环境..
试验的起点:   一个Red Hat Linux系统。


第一步:定制窗口管理


任务:
1.在你的桌面的左边点击Red Hat图标,选择”属性”然后点击”控制中心”.Nautilus 将打开显示的可以定制你的桌面环境的窗口.
2.双击”背景”图标.点击”选择图片”按钮,可用的图片在/usr/share/backgrounds 下,有一些图片作为墙纸很漂亮;你可以在”图片选项”中选择居中拉伸.
选择一个你喜欢的,或者选”没有图片”然后你可以使用”背景风格”颜色和属性.当你完成的后,关闭”背景属性”对话框.
3. 双击”鼠标”的图标, 这个参数面板你能够调整双击的时间延迟,速度和灵敏度 .
假如你伸左撇子,你也可以在这里选择左收习惯
当完成后选择关闭”鼠标属性”对话框.
4. 打开”桌面主题”面板.你可以选择一个主题,默认的主题是”Bluecurve”.选一个你喜欢的,然后关闭这个面板.
5. 最后,打开”工具栏”,你能够选择你可以选择下列特性中的一个:显示工具条,或小的图标.然后关闭面板.
目标:
Red Hat Linux的桌面环境已经按你的要求定制好了。


试验9
标准输入输出和管道
估计时间: 30分钟
目标: 熟悉Red Hat Linux中的标准输入输出和管道
试验的起点: 标准的Red Hat Linux安装


步骤1:标准输入和输出
任务:
1. 使用你熟悉的编辑器创建两个文件:
packages1.txt 应该包含以下八行:
amanda
galleon
metacity
mozilla
postgresql
procinfo
rpmfind
squid
packages2.txt应该包含以下6行
anaconda
openssh
gnome-core
samba
sendmail
xscreensaver
2. cat工具是最简单的linux过滤器,它会默认把跟在后面的参数当作文件名,并把这个文件作为输入,如果没有文件名则把标准的输入作为自己的输入,然后将它们发送到标准的输出上去。现在我们来实验一下:
$cat packages1.txt
3. 如果cat后没有参数,则它会等待标准的输入,所以当你输入cat命令后,再回车,然后什么也没有显示。输入cat后,cat命令会监视标准输入,等待输入的到达。如果这个时候输入一些文本,再按回车,cat就会把输入的内容当作自己的输入,然后输出到标准的输出——显示器上,结束cat的命令为按下ctrl-d,这是结束输入的标志。
$ cat
输入一些文字,然后按回车。
^d (就是按ctrl-d)
4. 大多数的文本处理命令是执行过滤操作,他们可以读标准输入,对输入做一些动作,然后把结果发送到标准输出去。这些命令就向cat一样,只是对输入的处理不太一样。
tr命令,也是过滤器命令,如果给tr后加两个字符串做为参数,它会读取标准输入,然后把输入中包含着前一个字符串的字符变成第二个字符串,然后输出到标准输出去。
把刚才的命令换成tr,tr将把字符串中有的字符变成大写的。
$ tr 'aeiou' 'AEIOU'
输入一些文字,然后按回车。
^d
5. 定义shell不要把命令的输出发到标准输出上,而是重定向到一个文件中,我们使用 > 来重定向
重复cat的例子重定向标准的输出到packages1.catfile,这样把输出到屏幕的东西输出到了文件中,效果就和重新copy了一份文件是一样的,cat这个输出文件,然后用diff和ls确认原文件与package1.catfile内容一样。
$ cat packages1.txt > packages1.catfile
$ cat packages1.catfile
$ diff packages1.txt packages1.catfile
$ ls –l packages1*
6. 使用>>来重定向会把输出附加到已存在的文件的末尾。
把packages2.txt文件中的内容附加到packages1.catfile之后,然后检验结果。
$ cat packages2.txt >> packages1.catfile
$ cat packages1.catfile
7. 如果输出重定向时cat没有直接跟文件名的参数,那么cat就会等待标准的输入,直到按下ctrl-d作为结束,然后把所有输入的东西重定向到这个文件中去。这样可以很容易的创建一个文本文件,
$ cat > typedin.txt
This time, when text is typed at the keyboard,
It is not echoed back to the screen.
Instead, it is redirected to the file typedin.txt.
^d
$ ls –l typedin.txt
$ cat typedin.txt
8. 使用tr取代cat,重复刚才的命令
$ tr 'aeiou' 'AEIOU' > trfile.txt
This time, when text is typed at the keyboard,
It is not echoed back to the screen.
Instead, it is redirected to the file typedin.txt.
^d
$ ls –l trfile.txt
$ cat trfile.txt
9. 使用set –o命令,确认显示出目前bash的noclobber选项是关闭状态,确认当输出重定时向你可以重写文件
$ set –o
$ ls –l /tmp > trifle.txt
$ ls –l trfile.txt
$ cat trifle.txt
10. 使用set命令更改noclobber选项,如下操作:
$ set –o noclobber
$ echo “new contents” > trfile.txt
bash: trfile.txt:cannot overwrite existing file
11. cat可以接受一个文件名或者是一个输入重定向的文件,测试以下两个命令:
$ cat packages1.txt
$ cat < packages1.txt
12. 但是tr不能接受文件名作为参数,它只希望输入是标准输入。
$ tr 'aeiou' 'AEIOU' < packages1.txt
13. 下面的例子中标准输入和输出都被重定向,输入还是packages1.txt文件,这回改为输出到文件packages1.trfile.txt中去了。
$ tr 'aeiou' 'AEIOU' < packages1.txt >packages1.trfile.txt
$ ls –l packages1.txt packages1.trfile.txt
$ cat packages1.trfile.txt


步骤2:管道
1. 把一个命令的标准输出直接传输给另一个命令作为它的标准输入,这样特殊的机制叫做管道。
如果没有管道,你要想打印你的目录中文件的列表至少要两步,还需要把没用的文件删除,(lpr命令可以把文件的内容发给默认的打印机,它的用法会在第12章讲)(注意只有当你没有打印机时可以使用以下的例子)
$ ls –l > /tmp/ls.txt
$ lpr /tmp/ls.txt
$ rm /tmp/ls.txt
使用管道,这些命令可以仅仅用以下短短的一条命令,将ls –l的输出直接发送给lpr作为输入,lpr也不需要别的参数。
$ ls –l | lpr
2. 管道经常的用法是一个命令产生了很多页的输出,可以把这些输出直接给less,管道左边是你的命令,右边是less,less不需要参数。(空格键是翻页,q键是退出less)
$ ls –l /usr/bin | less


步骤3:练习
答案在下面,可以使用man page来帮助你解决问题
1. 拷贝一份cal命令的man page,放在你的主目录下,取名叫cal.man。
2. 只在一行上输入什么样的命令,可以使你从键盘上输入的文本输出到打印机上
3. 怎样把/usr/bin下以c或d开头的文件列表发送到打印机上?


步骤3:练习-答案
1. man cal > cal.man
2. lpr
lpr打印出以后面的参数命名的文件中的内容,如果没有参数,lpr就会从标准输入中读取,标准的输入是键盘,直到你按下ctrl-d表示键盘输入结束。
3.ls –l /usr/bin/[cd]* | lpr


试验10 
字符串处理
估计时间:  60分钟
目标:          熟悉字符串处理
试验的起点:   一个Red Hat Linux系统,把/etc/passwd拷贝到你的主目录下。


第一步:字符串处理基本知识
任务:
1..拷贝/etc/passwd到你的主目录下:
$ cd
$ cp /etc/passwd
2. 在/etc/passwd里面有系统里的每一个帐户.使用wc,在passwd文件里计算有多少行。
$ wc –l passwd
在你的系统里有多少个帐户____________
3. 找出本机中所有用户使用的各种shell并把其放置在一个文件内:
$ cut –d: -f7 passwd > shells
4. 使用cat命令查看你新的shells文件的内容,为了使输出结果更为友好.用sort命令输出这些数据在一个新的文件里:
$ sort shells > sorted.shells
5. 你的文件包含许多同样的内容.使用uniq命令可以计算出有多少个相同的行:
$ uniq –c sorted.shells > uniq.sorted.shells
为什么在使用uniq之前要使用sort命令
6. 按照数字由大到小的顺序列出在你的机器上使用的各种shell:
$ sort –nr uniq.sorted.shells
i. /sbin/nologin
6 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
结果:
按照数字由大到小的顺序列出你机器上所有用户使用的各种shell:
步骤2:更多的练习
为每一个练习写下解决办法.记住,答案是一个你想出办法的命令,不是输出.答案在实验的最后被列出来了,但是在对答案之前,你可以试着完成每个任务.每个答案将显示单独的一行.这个命令aspell没有man page;你将怎样获得帮助呢?
7. 有多少文件在/usr/bin目录下?输出是一个单一的整数.提示:设计一个命令列出文件名到每一行,然后计算一共有多少行.
__________________________________________________________
8. 列出下列文件/usr/share/doc/nautilus-*/NEWS中拼错的单词.
__________________________________________________________
12. 多少唯一的单词从上述练习中输出?
__________________________________________________________
步骤2答案:
1 ls –1 /usr/bin | wc -l (注意ls 的参数是数字1)
2 aspell –l < /usr/shar/doc/nautilus-*/NEWS
3 aspell –l < /usr/share/doc/nautilus-*/NEWS | sort | uniq | wc –l


试验11
使用正则表达式进行字符处理


估计时间: 60分钟
目标: 熟悉Red Hat Linux中进行字符处理的几个工具
试验的起点: 安装Red Hat Linux,并且能正常工作,拷贝 /etc/passwd到你的主目录中


步骤1:使用grep进行字符处理
任务:
1. 在copy到你主目录中的/etc/passwd文件的副本中,使用grep显示出所有以“g”开头的帐户:
2. 显示出所有使用bash shell的帐户:
$ grep ‘bash$’ passwd
3. 显示出没有使用bash作为shell的帐户:
$ grep –v ‘bash$’ passwd
4. 为了做一个使用diff的例子,我们要更改这个passwd文件的拷贝,先用grep把原文件中所有含有“N”和“P”的行删除:
$ grep –v ‘[NP]’ passwd > modified.passwd
5. 最后再用tr将含有的所有大写字母变成小写:
$ tr “A-Z” “a-z” < modified.passwd > modified2.passwd
6. 这时使用cat命令看原来的passwd文件和改过的modified2.passwd文件,不仔细看看不出其中的区别,这只是小文件,如果文件大一些,想象一下拥有几千个用户的文件。使用diff可以产生两个文件中不同之处的列表。
$ diff modified2.passwd passwd
14a15,16
> ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
> nobody:x:99:99:Nobody:/:/sbin/nologin
… …


步骤2:正则表达式及字符处理
在任务下面的横线上写下你的解决方案,你要写出你的命令而不是命令的输出,答案在实验最后,但是要先试着自己解决,可以使用man page来帮助你解决问题。
任务:
1. 使用grep显示出/usr/share/dict/words文件中还有某参数的行,例如显示出所有含有fish的行:
$ grep fish /usr/share/dict/words
blowfish
bluefish
codfish
… output truncated …
unselfish
unselfishly
unselfishness
2. 使用grep的man page作为帮助,输出任何包含fish的所有行,还要输出紧接着这行的上下各两行的内容:
—————————————————————————————————————
3. 使用grep的man page作为帮助,找出相应的命令,来显示出在words文件中有多少行含有fish。
—————————————————————————————————————
4. 使用grep的帮助文件,找出相应的命令,显示出那些行含有fish,并将行号一块输出,看一看starfish在哪行?
—————————————————————————————————————
5. 想列出/usr/share/dict/words中包含先有字母t然后有一个元音字母,之后是sh的单词,命令为:
—————————————————————————————————————
6. 在/usr/share/dict/words文件中,创建可以符合abominable,abominate,anomie和atomize的正则表达式,但是不要选到别的单词。
—————————————————————————————————————
7. 在/usr/share/dict/words文件中包含多少先有字母t然后有一个元音字母,之后是sh的单词,只输出数量。
—————————————————————————————————————
8. 列出/usr/share/dict/words中刚好包含16个字母的单词:
—————————————————————————————————————
9. 我们将要使用/usr/share/doc文件夹来完成我们的下几个任务。
列出/usr/share/doc/bash-2.05b文件夹中,所有包含单词expansion的文件,
—————————————————————————————————————
10. 显示出“Linux”在/usr/share/doc/bash-2.05b文件夹的文件中出现的次数,但是不要显示没有这个单词的文件。提示:先列出所有的文件,然后想如何使输出符合要求:
—————————————————————————————————————
11. 列出所有包含Havoc的文件名:
—————————————————————————————————————


步骤3:使用正则表达进行文本流编辑
任务:
想象你创建一个了名叫“cats”的文件包含以下单词:
cat
catalog
concatenate
polecat
Cat
猜想执行以下每个sed命令之后,把cats文件的每一行的执行后的结果写在后面:
1. sed 's/cat/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
2. sed 's/[Cc]at/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
3. sed 's/\<[Cc]cat/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
4. sed 's/[Cc]at\>/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
5. sed 's/\<[Cc]at\>/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
6. sed 's/\<[Cc]at\>/& and dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
7. 创建一个'cats'文件,运行sed命令,测试你的答案。


步骤2的答案:
2.grep –B2 –A2 "fish" /usr/share/dict/words
3.grep –c "fish" /usr/share/dict/words
4.grep –n "fish" /usr/share/dict/words
5.grep "t[aeiou]sh" /usr/share/dict/words
6. "^a.omi.*e$"

"\<a.omi.*e\>"
诀窍是判断哪些字母是变化的哪些是不变的,注意想代替任意个任意字符要使用 “.*”。
7.grep –c "t[aeiou]sh$" /usr/share/dict/words
8.grep "^…………….$" /usr/share/dict/words
或者:
grep –c "^.\{16\}$" /usr/share/dict/words
9.grep –l expansion /usr/share/doc/bash-2.05b/*
10.grep –c "Linux" /usr/share/doc/bash-2.05b/* |grep –v ":0"
11.grep –R –l "Havoc" /usr/share/doc


试验12
进程控制
估计时间: 30分钟
目标: 练习与进程控制有关的不同命令
试验的起点: 安装Red Hat Linux,并且能正常工作,有一个用户名和密码都为student的用户


步骤1:进程控制
场景描述:
在这个任务中,大家会启用几个进程,然后使用bash的进程控制方法来控制它们。你将会在几个控制台间切换,注意你在哪个控制台上运行命令。
任务:
1. 开始使用student用户在第一、二个控制台(tty1、tty2)上登陆
2. 到tty1上,然后运行以下命令:
$ (while true; do echo –n A >> log; sleep 1;done)
3. 注意这个控制台现在因为在运行你的进程,所以处于忙的状态(进程在前台运行),这个进程不断把字母“A”添加进~/log文件中去,到tty2上运行以下命令:
$ tail –f log
你会看到“A”不断增长
4. 切换回控制台tty1,按下<ctrl-z>,shell会告诉你进程停止了,告诉你job号码为1,切换回控制台2,你会看到文件不变了。
5. 回到tty1,再次启动进程,运行jobs会显示job[1]在运行了,到tty2上看到文件继续增长了:
$ bg
$ jobs
6. 到tty1上,按向上的箭头,重新找回第二步时的命令,把A换成B,在最后加上&,然后在把B换成C:
$ (while true; do echo –n B >> log; sleep 1;done)
$ ^B^C
7. 输入jobs确认三个进程都在运行,到tty2上看到每秒钟会有三个字母增长。
8. 在第4步你按ctrl-z时,实际上是给进程发一个信号,使用kill命令也可以给它们发信号,使用kill来显示信号列表和标号,然后发一个SIGSTOP(19)的信号给job[1],到tty1上执行:
$ kill –l
$ kill -19 %1
9. 输入jobs,确认job[1]停止,到tty2上看结果是否停止。
10. 用kill重新启动进程,使用SIGCONT(18)信号,你会看到进程又重新启动了。(参考第8步的实现方法)
11. 使用kill命令的SIGTERM(15)信号,也是kill的默认信号,来结束三个进程,先结束job[2]和job[3]时,用jobs来看一下它们的状态是不是terminated的:
$ kill %2 %3
$ jobs
12. 结束最后的进程:
$ fg
$ <ctrl-c>
13. 在tty1上使用jobs命令来看一下,然后在tty2上看是否进程真的结束了,然后按<ctrl-c>结束tail进程,注销。
14. 在tty1上删除 ~/log文件


试验13 
用户信息
估计时间:  1小时
目标:            熟练掌握vi的控制操作。
试验的起点:   安装了Red Hat Linux可运行系统,安装vim-common、vim-minimal、vim-enhanced 的rpm 包
在提示符下键入: vimtutor你会看到英文的试验教程


第一讲第一节∶移动光标
※※ 要移动光标,请依照说明分别按下 h、j、k、l 键。 ※※
^
k 提示∶ h 的键位于左边,每次按下就会向左移动。
< h l > l 的键位于右边,每次按下就会向右移动。
j j 键看起来很象一支尖端方向朝下的箭头。
v
1. 请随意在屏幕内移动光标,直至您觉得舒服为止。
2. 按下下行键(j),直到出现光标重复下行。
---> 现在您应该已经学会如何移动到下一讲吧。
3. 现在请使用下行键,将光标移动到第二讲。
提示∶如果您不敢确定您所按下的字母,请按下<ESC>键回到正常(Normal)模式。
然后再次从键盘输入您想要的命令。
提示∶光标键应当也能正常工作的。但是使用hjkl键,在习惯之后您就能够快速
地在屏幕内四处移动光标了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一讲第二节∶VIM的进入和退出
!! 特别提示∶敬请阅读完整本一节的内容,然后才能执行以下所讲解的命令。
1. 请按<ESC>键(这是为了确保您处在正常模式)。
2. 然后输入∶ :q! <回车>
---> 这种方式的退出编辑器绝不会保存您进入编辑器以来所做的改动。
如果您想保存更改再退出,请输入∶
:wq <回车>
3. 如果您看到了命令行提示符,请输入能够带您回到本教程的命令,那就是∶
vimtutor <回车>
通常情况下您也可以用这种方式∶
vim tutor <回车>
---> 这里的 'vim' 表示进入vim编辑器,而 'tutor'则是您准备要编辑的文件。
4. 如果您自信已经牢牢记住了这些步骤的话,请从步骤1执行到步骤3退出,然
后再次进入编辑器。接著将光标移动到第一讲第三节来继续我们的教程讲解。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一讲第三节∶文本编辑之删除
** 在正常(Normal)模式下,可以按下 x 键来删除光标所在位置的字符。**
1. 请将光标移动到本节中下面标记有 ---> 的那一行。
2. 为了修正输入错误,请将光标移至准备删除的字符的位置处。
3. 然后按下 x 键将错误字符删除掉。
4. 重复步骤2到步骤4,直到句子修正为止。
---> The ccow jumpedd ovverr thhe mooon.
5. 好了,该行已经修正了,下一节内容是第一讲第四节。
特别提示∶在您浏览本教程时,不要强行记忆。记住一点∶在使用中学习。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一讲第四节∶文本编辑之插入
** 在正常模式下,可以按下 i 键来插入文本。**
1. 请将光标移动到本节中下面标记有 ---> 的第一行。
2. 为了使得第一行内容雷同于第二行,请将光标移至文本第一个字符准备插入
的位置。
3. 然后按下 i 键,接著输入必要的文本字符。
4. 所有文本都修正完毕,请按下 <ESC> 键返回正常模式。
重复步骤2至步骤4以便修正句子。
---> There is text misng this .
---> There is some text missing from this line.
5. 如果您对文本插入操作已经很满意,请接著阅读下面的小结。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一讲小结
1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。
h (左移) j (下行) k (上行) l (右移)
2. 欲进入vim编辑器(从命令行提示符),请输入∶vim 文件名 <回车>
3. 欲退出vim编辑器,请输入以下命令放弃所有修改∶
<ESC> :q! <回车>
或者输入以下命令保存所有修改∶
<ESC> :wq <回车>
4. 在正常模式下删除光标所在位置的字符,请按∶ x
5. 在正常模式下要在光标所在位置开始插入文本,请按∶
i 输入必要文本 <ESC>
特别提示∶按下 <ESC> 键会带您回到正常模式或者取消一个不期望或者部分完成
的命令。
好了,第一讲到此结束。下面接下来继续第二讲的内容。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第一节∶删除类命令
** 输入 dw 可以从光标处删除至一个单字/单词的末尾。**
1. 请按下 <ESC> 键确保您处于正常模式。
2. 请将光标移动到本节中下面标记有 ---> 的那一行。
3. 请将光标移至准备要删除的单词的开始。
4. 接著输入 dw 删除掉该单词。
特别提示∶您所输入的 dw 会在您输入的同时出现在屏幕的最后一行。如果您输
入有误,请按下 <ESC> 键取消,然后重新再来。
---> There are a some words fun that don't belong paper in this sentence.
5. 重复步骤3至步骤4,直至句子修正完毕。接著继续第二讲第二节内容。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第二节∶其他删除类命令
** 输入 d$ 从当前光标删除到行末。**
1. 请按下 <ESC> 键确保您处于正常模式。
2. 请将光标移动到本节中下面标记有 ---> 的那一行。
3. 请将光标移动到该行的尾部(也就是在第一个点号‘.’后面)。
4. 然后输入 d$ 从光标处删至当前行尾部。
---> Somebody typed the end of this line twice. end of this line twice.
5. 请继续学习第二讲第三节就知道是怎么回事了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第三节∶关于命令和对象
删除命令 d 的格式如下∶
[number] d object 或者 d [number] object
其意如下∶
number - 代表执行命令的次数(可选项,缺省设置为 1 )。
d - 代表删除。
object - 代表命令所要操作的对象(下面有相关介绍)。
一个简短的对象列表∶
w - 从当前光标当前位置直到单字/单词末尾,包括空格。
e - 从当前光标当前位置直到单字/单词末尾,但是 *不* 包括空格。
$ - 从当前光标当前位置直到当前行末。
特别提示∶
对于勇于探索者,请在正常模式下面仅按代表相应对象的键而不使用命令,则
将看到光标的移动正如上面的对象列表所代表的一样。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第四节∶对象命令的特殊情况
** 输入 dd 可以删除整一个当前行。 **
鉴于整行删除的高频度,VIM 的设计者决定要简化整行删除,仅需要在同一行上
击打两次 d 就可以删除掉光标所在的整行了。
1. 请将光标移动到本节中下面的短句段落中的第二行。
2. 输入 dd 删除该行。
3. 然后移动到第四行。
4. 接著输入 2dd (还记得前面讲过的 number-command-object 吗?) 删除两行。
1) Roses are red,
2) Mud is fun,
3) Violets are blue,
4) I have a car,
5) Clocks tell time,
6) Sugar is sweet
7) And so are you.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第五节∶撤消类命令
** 输入 u 来撤消最后执行的命令,输入 U 来修正整行。**
1. 请将光标移动到本节中下面标记有 ---> 的那一行,并将其置于第一个错误
处。
2. 输入 x 删除第一个不想保留的字母。
3. 然后输入 u 撤消最后执行的(一次)命令。
4. 这次要使用 x 修正本行的所有错误。
5. 现在输入一个大写的 U ,恢复到该行的原始状态。
6. 接著多次输入 u 以撤消 U 以及更前的命令。
7. 然后多次输入 CTRL-R (先按下 CTRL 键不放开,接著输入 R 键) ,这样就
可以执行恢复命令,也就是撤消掉撤消命令。
---> Fiix the errors oon thhis line and reeplace them witth undo.
8. 这些都是非常有用的命令。下面是第二讲的小结了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲小结
1. 欲从当前光标删除至单字/单词末尾,请输入∶dw
2. 欲从当前光标删除至当前行末尾,请输入∶d$
3. 欲删除整行,请输入∶dd
4. 在正常模式下一个命令的格式是∶
[number] command object 或者 command [number] object
其意是∶
number - 代表的是命令执行的次数
command - 代表要做的事情,比如 d 代表删除
object - 代表要操作的对象,比如 w 代表单字/单词,$ 代表到行末等等。
$ (to the end of line), etc.
5. 欲撤消以前的操作,请输入∶u (小写的u)
欲撤消在一行中所做的改动,请输入∶U (大写的U)
欲撤消以前的撤消命令,恢复以前的操作结果,请输入∶CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲第一节∶置入类命令
** 输入 p 将最后一次删除的内容置入光标之后 **
1. 请将光标移动到本节中下面示范段落的首行。
2. 输入 dd 将该行删除,这样会将该行保存到vim的缓冲区中。
3. 接著将光标移动到准备置入的位置的上方。记住∶是上方哦。
4. 然后在正常模式下(<ESC>键进入),输入 p 将该行粘贴置入。
5. 重复步骤2至步骤4,将所有的行依序放置到正确的位置上。
d) Can you learn too?
b) Violets are blue,
c) Intelligence is learned,
a) Roses are red,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲第二节∶替换类命令
** 输入 r 和一个字符替换光标所在位置的字符。**
1. 请将光标移动到本节中下面标记有 ---> 的第一行。
2. 请移动光标到第一个错误的适当位置。
3. 接著输入 r ,这样就能将错误替换掉了。
4. 重复步骤2和步骤3,知道第一行是已经修改完毕。
---> Whan this lime was tuoed in, someone presswd some wrojg keys!
---> When this line was typed in, someone pressed some wrong keys!
5. 然后我们继续学校第三讲第三节。
特别提示∶切记您要在使用中学习,而不是在记忆中学习。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲第三节∶更改类命令
** 要改变一个单字/单词的部分或者全部,请输入 cw **
1. 请将光标移动到本节中下面标记有 ---> 的第一行。
2. 接著把光标放在单词 lubw 的字母 u 的位置那里。
3. 然后输入 cw 就可以修正该单词了(在本例这里是输入 ine 。)
4. 最后按 <ESC> 键,然后光标定位到下一个错误第一个准备更改的字母处。
5. 重复步骤3和步骤4,知道第一个句子完全雷同第二个句子。
---> This lubw has a few wptfd that mrrf changing usf the change command.
---> This line has a few words that need changing using the change command.
提示∶请注意 cw 命令不仅仅是替换了一个单词,也让您进入文本插入状态了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲第四节∶使用c指令的其他更改类命令
** 更改类指令可以使用同删除类命令所使用的对象参数。**
1. 更改类指令的工作方式跟删除类命令是一致的。操作格式是∶
[number] c object 或者 c [number] object
2. 对象参数也是一样的,比如 w 代表单字/单词,$代表行末等等。
3. 请将光标移动到本节中下面标记有 ---> 的第一行。
4. 接著将光标移动到第一个错误处。
5. 然后输入 c$ 使得该行剩下的部分更正得同第二行一样。最后按 <ESC> 键。
---> The end of this line needs some help to make it like the second.
---> The end of this line needs to be corrected using the c$ command.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲小结
1. 要重新置入已经删除的文本内容,请输入小写字母 p。该操作可以将已删除
的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置
于当前光标所在行的下一行。
2. 要替换光标所在位置的字符,请输入小写的 r 和要替换掉原位置字符的新字
符即可。
3. 更改类命令允许您改变指定的对象,从当前光标所在位置直到对象的末尾。
比如输入 cw 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当
前光标到行末的内容。
4. 更改类命令的格式是∶
[number] c object 或者 c [number] object
下面我们继续学习下一讲。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲第一节∶定位及文件状态
** 输入 CTRL-g 显示当前编辑文件中当前光标所在行位置以及文件状态信息。
输入 SHIFT-G 则直接跳转到文件中的某一指定行。**
提示∶切记要先通读本节内容,之后才可以执行以下步骤!!!
1. 按下 CTRL 键不放开然后按 g 键。然后就会看到页面最底部出现一个状态信
息行,显示的内容是当前编辑的文件名和文件的总行数。请记住步骤3的行号。
2. 按下 SHIFT-G 键可以使得当前光标直接跳转到文件最后一行。
3. 输入您曾停留的行号,然后按下 SHIFT-G。这样就可以返回到您第一次按下
CTRL-g 时所在的行好了。注意∶输入行号时,行号是不会在屏幕上显示出来
的。
4. 如果愿意,您可以继续执行步骤1至步骤三。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲第二节∶搜索类命令
** 输入 / 以及尾随的字符串可以用以在当前文件中查找该字符串。**
1. 在正常模式下输入 / 字符。您此时会注意到该字符和光标都会出现在屏幕底
部,这跟 : 命令是一样的。
2. 接著输入 errroor <回车>。那个errroor就是您要查找的字符串。
3. 要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字
符串,请输入 Shift-N 即可。
4. 如果您想逆向查找字符串,请使用 ? 代替 / 进行。
---> When the search reaches the end of the file it will continue at the start.
"errroor" is not the way to spell error; errroor is an error.
提示∶如果查找已经到达文件末尾,查找会自动从文件头部继续查找。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲第三节∶配对括号的查找
** 按 % 可以查找配对的括号 )、]、}。**
1. 把光标放在本节下面标记有 --> 那一行中的任何一个 (、[ 或 { 处。
2. 接著按 % 字符。
3. 此时光标的位置应当是在配对的括号处。
4. 再次按 % 就可以跳回配对的第一个括号处。
---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
提示∶在程序调试时,这个功能用来查找不配对的括号是很有用的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲第四节∶修正错误的方法之一
** 输入 :s/old/new/g 可以替换 old 为 new。**
1. 请将光标移动到本节中下面标记有 ---> 的那一行。
2. 输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配
串。
3. 输入 :s/thee/the/g 则是替换全行的匹配串。
---> the best time to see thee flowers is in thee spring.
4. 要替换两行之间出现的每个匹配串,请输入 :#,#s/old/new/g (#,#代表的是
两行的行号)。输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲小结
1. Ctrl-g 用于显示当前光标所在位置和文件状态信息。Shift-G 用于将光标跳
转至文件最后一行。先敲入一个行号然后按 Shift-G 则是将光标移动至该行
号代表的行。
2. 输入 / 然后紧随一个字符串是则是在当前所编辑的文档中向后查找该字符串。
输入问号 ? 然后紧随一个字符串是则是在当前所编辑的文档中向前查找该字
符串。完成一次查找之后按 n 键则是重复上一次的命令,可在同一方向上查
找下一个字符串所在;或者按 Shift-N 向相反方向查找下该字符串所在。
3. 如果光标当前位置是括号(、)、[、]、{、},按 % 可以将光标移动到配对的
括号上。
4. 在一行内替换头一个字符串 old 为新的字符串 new,请输入 :s/old/new
在一行内替换所有的字符串 old 为新的字符串 new,请输入 :s/old/new/g
在两行内替换所有的字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g
在文件内替换所有的字符串 old 为新的字符串 new,请输入 :%s/old/new/g
进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲第一节∶在 VIM 内执行外部命令的方法
** 输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。**
1. 按下我们所熟悉的 : 命令设置光标到屏幕底部。这样就可以让您输入命令了。
2. 接著输入感叹号 ! 这个字符,这样就允许您执行外部的 shell 命令了。
3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的
内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起
作用,您可以试试 :!dir 看看。
---> 提示∶ 所有的外部命令都可以以这种方式执行。
---> 提示∶ 所有的 : 命令都必须以 <回车> 告终。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲第二节∶关于保存文件的更多信息
** 要将对文件的改动保存到文件中,请输入 :w FILENAME 。**
1. 输入 :!dir 或者 :!ls 获知当前目录的内容。您应当已知道最后还得敲
<回车> 吧。
2. 选择一个尚未存在文件名,比如 TEST 。
3. 接著输入 :w TEST (此处 TEST 是您所选择的文件名。)
4. 该命令会以 TEST 为文件名保存整个文件 (VIM 教程)。为了确保正确保存,
请再次输入 :!dir 查看您的目录列表内容。
---> 请注意∶如果您退出 VIM 然后在以文件名 TEST 为参数进入,那么该文件内
容应该同您保存时的文件内容是完全一样的。
5. 现在您可以通过输入 :!rm TEST 来删除 TEST 文件了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲第三节∶一个具有选择性的保存命令
** 要保存文件的部分内容,请输入 :#,# w FILENAME **
1. 再来执行一次 :!dir 或者 :!ls 获知当前目录的内容,然后选择一个合适的
不重名的文件名,比如 TEST 。
2. 接著将光标移动至本页的最顶端,然后按 CTRL-g 找到该行的行号。别忘了
行号哦。
3. 接著把光标移动至本页的最底端,再按一次 CTRL-g 。也别忘了这个行好哦。
4. 为了只保存文章的某个部分,请输入 :#,# w TEST 。这里的 #,# 就是上面
要求您记住的行号(顶端行号,底端行号),而 TEST 就是选定的文件名。
5. 最后,用 :!dir 确认文件是否正确保存。但是这次先别删除掉。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲第四节∶提取和合并文件
** 要向当前文件中插入另外的文件的内容,请输入 :r FILENAME **
1. 请键入 :!dir 确认您前面创建的 TEST 文件还在。
2. 然后将光标移动至当前页面的顶端。
特别提示∶ 执行步骤3之后您将看到第五讲第三节,请届时再往下移动回到这里来。
3. 接著通过 :r TEST 将前面创建的名为 TEST 的文件提取进来。
特别提示∶您所提取进来的文件将从光标所在位置处开始置入。
4. 为了确认文件已经提取成功,移动光标回到原来的位置就可以注意有两份第
五讲第三节,一份是原本,另外一份是来自文件的副本。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲小结
1. :!command 用于执行一个外部命令 command。
请看一些实际例子∶
:!dir - 用于显示当前目录的内容。
:!rm FILENAME - 用于删除名为 FILENAME 的文件。
2. :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文
件中。
3. :#,#w FILENAME 可将当前编辑文件第 # 行至第 # 行的内容保存到文件
FILENAME 中。
4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置
后面。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲第一节∶打开类命令
** 输入 o 将在光标的下方打开新的一行并进入插入模式。**
1. 请将光标移动到本节中下面标记有 ---> 的那一行。
2. 接著输入小写的 o 在光标 *下方* 打开新的一行并进入插入模式。
3. 然后复制标记有 ---> 的行并按 <ESC> 键退出插入模式而进入正常模式。
---> After typing o the cursor is placed on the open line in Insert mode.
4. 为了在光标 *上方* 打开新的一行,只需要输入大写的 O 而不是小写的 o
就可以了。请在下行测试一下吧。当光标处在在该行上时,按 Shift-O可以
在该行上方新开一行。
Open up a line above this by typing Shift-O while the cursor is on this line.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲第二节∶光标后插入类命令
** 输入 a 将可在光标之后插入文本。 **
1. 请在正常模式下通过输入 $ 将光标移动到本节中下面标记有 ---> 的第一行
的末尾。
2. 接著输入小写的 a 则可在光标之后插入文本了。大写的 A 则可以直接在行
末插入文本。
提示∶输入大写 A 的操作方法可以在行末插入文本,避免了输入 i,光标定位到
最后一个字符,输入的文本,<ESC> 回复正常模式,箭头右键移动光标以及
x 删除当前光标所在位置字符等等诸多繁杂的操作。
3. 操作之后第一行就可以补充完整了。请注意光标后插入文本与插入模式是基
本完全一致的,只是文本插入的位置定位稍有不同罢了。
---> This line will allow you to practice
---> This line will allow you to practice appending text to the end of a line.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲第三节∶另外一个置换类命令的版本
** 输入大写的 R 可连续替换多个字符。**
1. 请将光标移动到本节中下面标记有 ---> 的第一行。
2. 移动光标到第一行中不同于标有 ---> 的第二行的第一个单词的开始,即单
词 last 处。
3. 然后输入大写的 R 开始把第一行中的不同于第二行的剩余字符逐一输入,就
可以全部替换掉原有的字符而使得第一行完全雷同第二行了。
---> To make the first line the same as the last on this page use the keys.
---> To make the first line the same as the second, type R and the new text.
4. 请注意∶如果您按 <ESC> 退出置换模式回复正常模式,尚未替换的文本将仍
然保持原状。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲第四节∶设置类命令的选项
** 设置可使查找或者替换可忽略大小写的选项 **
1. 要查找单词 ignore 可在正常模式下输入 /ignore 。要重复查找该词,可以
重复按 n 键。
2. 然后设置 ic 选项(ic就是英文忽略大小写Ignore Case的首字母缩写词),即
输入∶
:set ic
3. 现在可以通过键入 n 键再次查找单词 ignore。重复查找可以重复键入 n 键。
4. 然后设置 hlsearch 和 incsearch 这两个选项,输入以下内容∶
:set hls is
5. 现在可以再次输入查找命令,看看会有什么效果∶
/ignore
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲小结
1. 输入小写的 o 可以在光标下方打开新的一行并将光标置于新开的行首,进入
插入模式。
输入大写的 O 可以在光标上方打开新的一行并将光标置于新开的行首,进入
插入模式。
2. 输入小写的 a 可以在光标所在位置之后插入文本。
输入大写的 A 可以在光标所在行的行末之后插入文本。
3. 输入大写的 R 将进入替换模式,直至按 <ESC> 键退出替换模式而进入正常
模式。
4. 输入 :set xxx 可以设置 xxx 选项。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第七讲∶在线帮助命令
** 使用在线帮助系统 **
Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方
法之一∶
- 按下 <HELP> 键 (如果键盘上有的话)
- 按下 <F1> 键 (如果键盘上有的话)
- 输入 :help <回车>
输入 :q <回车> 可以关闭帮助窗口。
提供一个正确的参数给":help"命令,您可以找到关于该主题的帮助。请试验以
下参数(可别忘了按回车键哦。:)∶
:help w <回车>
:help c_<T <回车>
:help insert-index <回车>
:help user-manual <回车>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第八讲∶创建一个启动脚本
** 启用vim的功能 **
Vim的功能特性要比vi多得多,但大部分功能都没有缺省激活。为了启动更多的
功能,您得创建一个vimrc文件。
1. 开始编辑vimrc文件,这取决于您所使用的操作系统∶
:edit ~/.vimrc 这是Unix系统所使用的命令
:edit $VIM/_vimrc 这是Windows系统所使用的命令
2. 接着导入vimrc范例文件∶
:read $VIMRUNTIME/vimrc_example.vim
3. 保存文件,命令为∶
:write
在下次您启动vim的时候,编辑器就会有了语法高亮的功能。


UNIT 16 Lab
基本网络客户
目标:使用工具在本地和远程计算机传输文件。


实验1 使用lftp
1. 使用ping测试连通性: ping –c 3 stationxx
2. 使用lftp连接到远程计算机
cd
lftp stationxx
cd pub
ls
get getme
exit
3. 检查并修改得到的软件
cat getme
pico getme 存为 getme.xy
cat getme.xy
4. 使用lftp把文件传到用户目录
lftp –u student stationxx
put getme.xy
exit


实验2: 加密通讯 ssh套件
1. 复制getme.xy。
cd
cp getme.bd getme.bd.secure
2. scp getme.bd.secure student@stationxx
3. ssh student@stationxx


实验3: 和远程计算机同步文件
1. cd
rsync – – rsh=ssh student@stationxx:get* .
ls getme*


UNIT 17 Lab
系统工具


实验1:at
1. 使用以下命令在5分钟后执行任务
at now + 5 min
2. 输入以下命令
echo “ This message was automtically sent via the at facility.”
3. 使用ctrl-d 结束命令输入。at将显示任务执行的时间
4. 确认任务已经排序
5. 检查邮件。确认工作完成了
实验2 使用rpm检查包和文件的情况
1. 使用rpm列出安装的包
rpm –qa | less
2. 检查安装了多少个包
rpm –qa | wc –l
3. 检查哪个包提供了vimtutor文件
rpm –qf `which vimtutor`
4. 列出coreutils 提供的文件和相关信息
rpm –qil coreutils

30 julio

Linux VPN服务器之OpenVPN(转)

利用openvpn+linux快速建立企业VPN
openvpn介绍http://openvpn.sourceforge.net/,不多说了.
openvpn可工作于两种模式:
一种是IP遂道路由模式,主要应用于点对点
一种是基于以太网的遂道桥模式, 应用于点对多点,有多个分支机构
本文介绍的配置实例是第一种
拓扑图:
局域网1: OFFICE主机装redhat9.0 两块网卡
eth1接公网 61.131.58.x ,
eth0接 内网192.168.1.56
vpn 10.1.0.1
A主机 192.168.1.222
局域网2:
HOME主机装redhat9.0两块网卡
eth0 接公网 218.85.158.244
eth1 接内网 192.168.0.235
vpn 10.1.0.2
B主机 192.168.0.45

环境:redhat9.0+lzo+openssl+openvpn
openssl用来进行加密,lzo用来进行数据压缩
下载地址 http://prdownloads.sourceforge.net/openvpn/openvpn-2.0_beta7.tar.gz
http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz

先检查openssl是否已安装
rpm –qa | grep openssl
没有请先装openssl, openssl如何安装就不介绍了
我将openvpn-2.0.beta7.tar.gz和lzo-1.08.tar.gz下载到/home
#cd /home
#tar zxvf lzo-1.08.tar.gz
#cd lzo-1.08.
#./comfigure
#make
#make install
#tar zxvf openvpn-2.0_beta7.tar.gz
#cd openvpn-2.0_beta7
#./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
#make
#make install
#mkdir /etc/openvpn
#cd /etc/openvpn
#openvpn --genkey --secret static.key
将static.key从office主机复制到home主机的/etc/openvpn目录中
office#scp static.key root@218.85.158.244:/etc/openvpn
office#cd /home/openvpn-2.0_beta7/sample-config-files
office#cp static-office.conf /etc/openvpn
office#cp firewall.sh /etc/openvpn
office#cp openvpn-startup.sh /etc/openvpn
office#cp office.up /etc/openvpn
修改static-office.conf ,firewall.sh ,openvpn-startup.sh,office.up
我们先来看office主机的这几个配置文件
static-office.conf配置如下:
dev tun0
remote 218.85.158.244 #为对端的公网ip
ifconfig 10.1.0.1 10.1.0.2 #为本端和对端的vpn ip地址
secret /etc/openvpn/static.key #密钥
port 5000
comp-lzo
ping 15
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3

office主机的firewall.sh脚本如下:
#!/bin/bash
PRIVATE=192.168.1.0/24
LOOP=127.0.0.1

iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i eth1 -s $LOOP -j DROP
iptables -A FORWARD -i eth1 -s $LOOP -j DROP
iptables -A INPUT -i eth1 -d $LOOP -j DROP
iptables -A FORWARD -i eth1 -d $LOOP -j DROP

iptables -A FORWARD -p tcp --sport 137:139 -o eth1 -j DROP
iptables -A FORWARD -p udp --sport 137:139 -o eth1 -j DROP
iptables -A OUTPUT -p tcp --sport 137:139 -o eth1 -j DROP
iptables -A OUTPUT -p udp --sport 137:139 -o eth1 -j DROP

iptables -A FORWARD -s ! $PRIVATE -i eth0 -j DROP

iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

iptables -A INPUT -p udp --dport 5000 -j ACCEPT #openvpn默认使用udp 5000端口

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT #这两句很重要
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT

iptables -A INPUT -i eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT

iptables -A OUTPUT -m state --state NEW -o eth1 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth1 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -s $PRIVATE -o eth1 -j MASQUERADE

 

office.up脚本配置如下:
#!/bin/bash
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.1.0.2 #此处是对端的vpn ip地址
openvpn-startup.sh脚本配置如下:
#!/bin/bash
dir=/etc/openvpn
$dir/firewall.sh
modprobe tun
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --config /etc/openvpn/static-office.conf

home主机的4个配置文件
static-home.conf如下
dev tun0
remote 61.131.58.194
ifconfig 10.1.0.2 10.1.0.1
secret /etc/openvpn/static.key
port 5000
comp-lzo
ping 15
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3

firewall.sh如下
#!/bin/bash
PRIVATE=192.168.0.0/24
LOOP=127.0.0.1
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i eth0 -s $LOOP -j DROP
iptables -A FORWARD -i eth0 -s $LOOP -j DROP
iptables -A INPUT -i eth0 -d $LOOP -j DROP
iptables -A FORWARD -i eth0 -d $LOOP -j DROP

iptables -A FORWARD -p tcp --sport 137:139 -o eth0 -j DROP
iptables -A FORWARD -p udp --sport 137:139 -o eth0 -j DROP
iptables -A OUTPUT -p tcp --sport 137:139 -o eth0 -j DROP
iptables -A OUTPUT -p udp --sport 137:139 -o eth0 -j DROP

iptables -A FORWARD -s ! $PRIVATE -i eth1 -j DROP

iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

iptables -A INPUT -p udp --dport 5000 -j ACCEPT

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT

iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE

home.up脚本如下:
#!/bin/bash
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.1.0.1
openvpn-startup.sh脚本如下:
#!/bin/bash
dir=/etc/openvpn
$dir/firewall.sh
modprobe tun
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --config /etc/openvpn/static-home.conf
最后需要注意的是在office和home主机的/etc/modules.conf都要加上一行:
alias char-major-10-200 tun
在office主机上
office#cd /etc/openvpn
office#./openvpn-startup.sh
office#./office.up
在home主机上
home#cd /etc/openvpn
home#./openvpn-startup.sh
home#./home.up
A主机的default gateway设为192.168.1.56
B主机的default gateway设为192.168.0.235
在A主机上ping 192.168.0.45
在home主机上用tcpdump监听
home#tcpdump -i tun0
应该有echo request和echo reply
不行的话,在home#ping 10.1.0.1看两个vpn网关是否通
http://openvpn.sourceforge.net 上还有howto,faq,examples可参考

Squid配置(转)

     在此,我们要配置一个只对内部网络提供代理服务的Proxy Server。它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法,普通用户则需要输入用户名和口令才能正常使用。高级用户没有 访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制。


安装
  可以从Squid站点www.squid-cache.org获取该软件的源代码,很多linux的发行版,如Red Hat提供的RPM。
squid在debian的安装:
      apt-get install squid
其他linux,RPM方式安装很简单,命令如下:
  $ rpm -ivh Squid-2.x.STALBx.i386.rpm

   不过笔者认为,即便是系统中已经默认安装了Squid,也应当先删掉然后安装最新的源代码包。因为开源软件会不断修正问题、提供更新的功能,使用最新版 本可以保证最高的性能及安全,而且源代码方式可以完全定制系统。不过STABLE稳定版、DEVEL版通常是提供给开发人员测试程序的,假定下载了最新的 稳定版squid-2.5.STABLE2.tar.gz,

debian下不需要删除原来的旧包,直接升级到最新版即刻   apt-get install squid,会安装最新版的squid软件包。

用以下命令解开压缩包:
$ tar xvfz squid-2.5.STABLE.tar.gz
  用bz2方式压缩的包可能体积更小,相应的命令是:
$ tar xvfj squid-2.5.STABLE.tar.bz2
  然后,进入相应目录对源代码进行配置和编译,命令如下:
$ cd squid-2.5.STABLE2

  配置命令configure有很多选项,如果不清楚可先用“-help”查看。通常情况下,用到的选项有以下几个:


--prefix=/web/squid
#指定Squid的安装位置,如果只指定这一选项,那么该目录下会有bin、sbin、man、conf等目录,而主要的配置文件此时在conf子目录中。为便于管理,最好用参数--sysconfdir=/etc把这个文件位置配置为/etc。


--enable-storeio=ufs,null
#使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服
务器,就需要加上null文件系统。


--enable-arp-acl
#这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。


--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"
#上面两个选项告诉Squid编入并使用简体中文错误信息。


--enable-linux-netfilter
#允许使用Linux的透明代理功能。


--enable-underscore
#允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是
非法的,并拒绝访问该地址。

整个配置编译过程如下:

./configure --prefix=/var/squid
--sysconfdir=/etc
--enable-arp-acl
--enable-linux-netfilter
--enable-pthreads
--enable-err-language="Simplify_Chinese"
--enable-storeio=ufs,null
--enable-default-err-language="Simplify_Chinese"
--enable-auth="basic"
--enable-baisc-auth-helpers="NCSA"
--enable-underscore


  其中一些选项有特殊作用,将在下面介绍它们。
  最后执行make和make install两条命令,将源代码编译为可执行文件,并拷贝到指定位置。

 

基本配置
  安装完成后,接下来要对Squid的运行进行配置(不是前面安装时的配置)。所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。
  在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为192.168.0.1,外部网络接口eth1的IP地址为202.103.x.x。

 

下面是一个基本的代理所需要配置选项:

  http_port 192.168.0.1:3128
  默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。


  下面的配置选项是服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系:

cache_mgr start@soocol.com


  以下这些参数告诉Squid缓存的文件系统、位置和缓存策略:

cache_dir ufs /var/squid
cache_mem 32MB
cache_swap_low 90
cache_swap_high 95


   在这里,Squid会将/var/squid目录作为保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新的内容将取 代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。如果不想Squid缓存任何文件,如某些存储空间有限的专有系统,可以使用 null文件系统(这样不需要那些缓存策略):

cache_dir null /tmp


  下面的几个关于缓存的策略配置中,较主要的是第一行,即用户的访问记录,可以通过分析它来了解所有用户访问的详尽地址:

cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log


  下面这行配置是在较新版本中出现的参数,告诉Squid在错误页面中显示的服务器名称:

visible_hostname No1.proxy


  以下配置告诉Squid如何处理用户,对每个请求的IP地址作为单独地址处理:

client_mask 255.255.255.255

 


  如果是普通代理服务器,以上的配置已经足够。但是很多Squid都被用来做透明代理。所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。相关的选项有以下几个:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_user_host_header on


  在Linux上,可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口3128,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:

iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp --dport 80 -j REDIRECT 3128
  就是将192.168.0.200的所有针对80端口的访问重定向到3128端口。


   所有设置完成后,关键且重要的任务是访问控制。Squid支持的管理方式很多,使用起来也非常简单(这也是有人宁愿使用不做任何缓存的Squid,也不 愿意单独使用iptables的原因)。Squid可以通过IP地址、主机名、MAC地址、用户/密码认证等识别用户,也可以通过域名、域后缀、文件类 型、IP地址、端口、URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理,所以访问控制是Squid配置中的重点。Squid用ACL (Access Control List,访问控制列表)对访问类型进行划分,用http_access deny 或allow进行控制。根据需求首先定义两组用户advance和normal,还有代表所有未指明的用户组all及不允许上网的baduser,配置代 码如下:


acl advance 192.168.0.2-192.168.0.10/32
acl normal src 192.168.0.11-192.168.0.200/32
acl baduser src 192.168.0.100/32
acl baddst dst www.soocol.com
acl all src 0.0.0.0/0
http_access deny baduser
http_access allow advance
http_access allow normal

 

可以看出,ACL的基本格式如下:
  acl 列表名称 控制方式 控制目标
  比如acl all src 0.0.0.0/0,其名称是all,控制方式是src源IP地址,控制目标是0.0.0.0/0的IP地址,即所有未定义的用户。出于安全考虑,总是在最后禁止这个列表。

  下面这个列表代表高级用户,包括IP地址从192.168.0.2到192.168.0.10的所有计算机:
acl advance 192.168.0.2-192.168.0.20/32

  下面这个baduser列表只包含一台计算机,其IP地址是192.168.0.100:
acl baduser 192.168.0.100/32


  ACL写完后,接下来要对它们分别进行管理,代码如下:

http_access deny baduser
http_access allow advance
http_access allow normal

   上面几行代码告诉Squid不允许baduser组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由于 Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺序颠倒,由于baduser在normal范围中, Squid先允许了所有的normal,那么再禁止baduser就不会起作用。

  特别要注意的是,Squid将使用allow- deny-allow-deny……这样的顺序套用规则。例如,当一个用户访问代理服务器时, Squid会顺序测试Squid中定义的所有规则列表,当所有规则都不匹配时,Squid会使用与最后一条相反的规则。就像上面这个例子,假设有一个用户 的IP地址是192.168.0.201,他试图通过这台代理服务器访问Internet,会发生什么情况呢?我们会发现,他能够正常访问,因为 Squid找遍所有访问列表也没有和192.168.0.201有关的定义,便开始应用规则,而最后一条是deny,那么Squid默认的下一条处理规则 是allow,所以192.168.0.201反而能够访问Internet了,这显然不是我们希望的。所以在所有squid.conf中,最后一条规则 永远是http_access deny all,而all就是前面定义的“src 0.0.0.0”。

 

  高级控制

  前面说过,Squid的控制功能非常强大,只要理解Squid的行为方式,基本上就能够满足所有的控制要求。下面就一步一步来了解Squid是如何进行控制管理的。
  通过IP地址来识别用户很不可靠,比IP地址更好的是网卡的MAC物理地址。要在Squid中使用MAC地址识别,必须在编译时加上“--enable-arp-acl”选项,然后可以通过以下的语句来识别用户:

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...


  它直接使用用户的MAC地址,而MAC地址一般是不易修改的,即使有普通用户将自己的IP地址改为高级用户也无法通过,所以这种方式比IP地址可靠得多。
  假如不想让用户访问某个网站应该怎么做呢?可以分为两种情况:一种是不允许访问某个站点的某个主机,比如ok的主机是ok.sina.com.cn,而其它的新浪资源却是允许访问的,那么ACL可以这样写:


acl sinapage dstdomain ok.sina.com.cn
... ...
http_access deny ok
... ...


  由此可以看到,除了ok,其它如www.sina.com.cn、news.sina.com.cn都可以正常访问。


  另一种情况是整个网站都不许访问,那么只需要写出这个网站共有的域名即可,配置如下:

acl qq dstdomain .tcccent.com.cn

  注意tcccent前面的“.”,正是它指出以此域名结尾的所有主机都不可访问,否则就只有tcccent.com.cn这一台主机不能访问。


  如果想禁止对某个IP地址的访问,如202.118.2.182,可以用dst来控制,代码如下:

acl badaddr dst 202.118.2.182

 当然,这个dst也可以是域名,由Squid查询DNS服务器将其转换为IP。


  还有一种比较广泛的控制是文件类型。如果不希望普通用户通过代理服务器下载MP3、AVI等文件,完全可以对他们进行限制,代码如下:

acl mmxfile urlpath_regex \.mp3 \.avi \.exe
http_access deny mmxfile

  看到regex,很多读者应该心领神会,因为这条语句使用了标准的规则表达式(又叫正则表达式)。它将匹配所有以.mp3、.avi等结尾的URL请求,还可以用-i参数忽略大小写,例如以下代码:

acl mmxfile urlpath_regex -i \.mp3

  这样,无论是.mp3还是.MP3都会被拒绝。当然,-i参数适用于任何可能需要区分大小写的地方,如前面的域名控制。


  如果想让普通用户只在上班时间可以上网,而且是每周的工作日,用Squid应当如何处理呢?看看下面的ACL定义:

acl worktime time MTWHF 8:30-12:00 14:00-18:00
http_access deny !worktime

  首先定义允许上网的时间是每周工作日(星期一至星期五)的上午和下午的固定时段,然后用http_access 定义所有不在这个时间段内的请求都是不允许的。
  或者为了保证高级用户的带宽,希望每个用户的并发连接不能太多,以免影响他人,也可以通过Squid控制,代码如下:

acl conncount maxconn 3
http_access deny conncount normal
http_access allow normal

  这样,普通用户在某个固定时刻只能同时发起三个连接,从第四个开始,连接将被拒绝。
  总之,Squid的ACL配置非常灵活、强大,更多的控制方式可以参考squid.conf.default。


  认证
  用户/密码认证为Squid管理提供了更多便利,最常用的认证方式是NCSA。从Squid 2.5版本开始,NCSA认证包含在了basic中,而非以前单独的认证模块。下面来看看实现认证的具体操作。


  首先在编译时配置选项应包括以下配置:

--enable-auth="basic" --enable-basic-auth-helpers="NCSA"


   “make install”以后,需要将“helpers/basic_auth/NCSA/ncsa_auth”拷贝到用户可执行目录中,如/usr/bin(如 果在该目录中找不到这个执行文件,在编译时请使用make all而不是make,或者直接在该目录中执行make),然后需要借助Apache的密码管理程序htpasswd来生成用户名/密码对应的文件,就像 下面这行代码:

htpasswd -c /var/squid/etc/password guest

  在输入两遍guest用户的密码后,一个guest用户就生成了。如果以后需要添加用户,把上面的命令去掉-c参数再运行即可。
  Squid 2.5在认证处理上有了较大的改变,这里就只讨论2.5版本的处理方法,2.4及以下版本请参考squid.conf.default。在2.5版的squid.conf中,包括以下几个相关选项:

#该选项指出了认证方式(basic)、需要的程序(ncsa_auth)和
对应的密码文件(password)
auth_param basic program /usr/bin/ncsa_auth /var/squid/etc/password
# 指定认证程序的进程数
auth_param basic children 5
# 浏览器显示输入用户/密码对话框时的领域内容
auth_param basic realm My Proxy Caching Domain
# 基本的认证有效时间
auth_param basic credentialsttl 2 hours
# 普通用户需要通过认证才能访问Internet
acl normal proxy_auth REQUIRED
http_access allow normal


   通过以上的配置即可完成认证工作。有的读者可能要问:认证只针对普通用户,而高级用户是直接上网的,该怎么处理呢?其实,这两种用户是可以共存的。如前 所述,Squid是顺序处理http_access的,所以在http_access处理过程中,如果先处理normal用户,那么当前用户无论是否属于 高级用户,都会被要求进行认证;相反如果先处理高级用户,剩下的就只有需要认证的普通用户了。例如以下配置代码:

...
http_access allow normal (需要认证)
http_access allow advance (不需要认证)
...
  不管是否为noauth用户,都要求进行用户名/密码验证。正确的方法是将二者位置交换,代码如下:
...
http_access allow advance
http_access allow normal
...
  这时,高级用户不会受到任何影响。

  总结
  下面把整个squid.conf总结一下:


# 服务器配置
http_port 192.168.0.1:3128
cache_mgr start@soocol.com
cache_dir null /tmp
cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log
visible_hostname No1.proxy
client_mask 255.255.255.255
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_user_host_header on


# 用户分类
acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...
acl normal proxy_auth REQUIED
acl all src 0.0.0.0


# 行为分类
acl mmxfile urlpath_regex \.mp3 $ \.avi $ \.exe $
acl conncount maxconn 3
acl worktime time MTWHF 8:30-12:00 14:00-18:00
acl sinapage dstdomain ok.sina.com.cn
acl qq dstdomain .tcccent.com.cn


# 处理
http_access allow advance
http_access deny conncount normal
http_access deny !worktime
http_access deny mmxfile
http_access deny sinapage
http_access deny qq
http_access allow normal


  配置后的状况是,advance组可以不受任何限制地访问Internet,而normal组则只能在工作时间上网,而且不能下载多媒体文件,不能访问某些特定的站点,而且发送请求不能超过3个。
  通过本文的介绍,它可以了解Squid的基本能力。当然,它的能力远不止此,可以建立强大的代理服务器阵列,可以帮助本地的Web服务器提高性能,可以提高本地网络的安全性等。要想发挥它的功效,还需要进一步控制。

Linux双线接入服务器(转)

     首先将从两个WAN口出去的数据包进行IP伪装masquerade

  /sbin/iptables -t nat -A postrouting -o eth1 -j masquerade

  /sbin/iptables -t nat -A postrouting -o eth2 -j masquerade

  然后,给系统增加一个标示为CNC的路由表,增加一个默认网关,这个默认网关是网通提供的网关。

  ip route add 0/0 via 11.11.11.11 table CNC

  然后给系统主路由表配置网关,这个网关是电信的网关

  ip route add 0/0 via 22.22.22.22

  然后添加路由规则,让所有通向网通的数据查询标示为11的路由表:

  ip rule add to 60.0.0.0/13 table CNC

  ip rule add to 60.8.0.0/15 table CNC

  ip rule add to 60.10.0.0/16 table CNC

     这些规则,大家可以借鉴一下routeros的,网上很多,我就不说了,没有的可以跟我要。我的是MMS的,应该是比较全了

  经过我们的设置所有通向网通的数据会查询路由表CNC,而通向其他的地方的数据,通向电信。(如果还有其他的线路,再增加路由表,再增加策略就可以了)

     要注意的是,在配置网卡的时候,先不要配置网关,不要使用老的ifconfig命令来配置网关,而要使用iproute2来配置网关,否则会造成冲突,

     或者 使用 ip route replace 命令来替换 ip route add 命令。

 

 

  还有一个做法是:

  Internet
  | |
  电信 网通
  | |
  交换机
     |
  eth1 eth2

  Server

  eth0

  |

 

  其中eth0 ip 192.168.0.0/24

  eth1 222.168.1.3/255.255.255.252

  eth2 218.62.3.3/255.255.255.252

  默认网关为网通的218.62.3.2

  加上ip route add的电信网关 222.168.1.2

  部分脚本为

  iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 电信ip -j SNAT --to 222.168.1.3

  ***

  ***

  ***

  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 218.62.3.3

  这样呢就实现了一个网段的电信网通自动切换

 

  前期测试:如果单独切换ip,内网同时并存192.168.0.254/24 192.168.2.254/24两个网关,速度很稳定,可以实现预期效果

  # echo "200 DIANXIN" >;>; /etc/iproute2/rt_table(这个是添加到文件,执行一次即可)

  # ip route replace default via 222.168.1.2 table DIANXIN

  # ip rule add fwmark 1 table DIANXIN(这个注意顺序,用ip rule可以查看)

  # iptables -t nat -F

  # iptables -t mangle -F

  # iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 222.222.5.0/15 -j MARK --set-mark 1

  # iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 222.240.0.0/13 -j MARK --set-mark 1

  # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 222.222.5.0/15 -j SNAT --to $DIANXIN

  # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 222.240.0.0/13 -j SNAT --to $DIANXIN

  # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to $接网通线路网卡的地址

  # ip route flush cache

  这样的结果,是访问222.222.5.0/15和222.240.0.0/13走电信网卡、电信路由,伪装成电信出口地址,其他默认网通

26 julio

一千零一夜

############  故事 A  —— 感动   #################

 

 

不知道为什么 听了这首歌会这么感动~~    即使完全不听歌词 还是一样~~  

 

  音乐无极限

 

 

 

 

############  故事 B  ——   Wish - Memory   #################

 

 

wish

 

04

 

喜欢saber ,    喜欢她对于想要实现的信念与执着     喜欢那种平淡大气的性格     喜欢那种不露锋芒的实力

 

所以喜欢,       这样的一个人   即使再过十年  仍旧恍如昨日之间,   这样一部动画  即使再短、影响力再小 在我心中的位置永远不变

 

 

 

 

 

 

############  故事 C  ——  发呲de世界     #################

 

 

 

 IMG_0025 

          。。。   朦胧地抬起双眼

 

 

                      IMG_0022

                          眼前的景象既熟悉又陌生

 

 

     IMG_0032 

        ……   刺眼的灯光,       刚从朦胧中恢复的双瞳 只能被迫紧紧缩小。  

                         伤害,     潜伏在空气之中   无孔不入

 

 

 

 

IMG_0033          

                                        IMG_0034

      对焦逐渐模糊            周围的世界  都在 行走。       受伤的双瞳 不愿再接触

 

 

 

 

IMG_0035

黑白,如此分明    

              宛如踏进了龙猫的另一个平行世界

 

IMG_0036

 

人, 终究会离开绿野仙踪的龙卷风       离开奥兹国       离开翡翠城。  

        世界   有很多世界    一个又一个的世界

          而我们的世界   就是这样子的一个世界  一点也不诧异   我早习以为常见怪不怪

 

 

IMG_0052 

 

   IMG_0039

 

人来而人往 人来又人往 。。。

           何必还需要一个清晰的世界呢。。。

 

 

IMG_0046

不经意的流沙世界, 也只有有价值的东西  才会稍许留下些 个性的痕迹。。

   其他的,  全部都抹去  全部都抹去  全部都抹去

                模糊的美感 或许才能更令人遐想。。。。

 

 

 

 

一天在地铁站打发时间,发现用一些特殊手法拍摄出来的照片 真的蛮能表达自己某些刹那间的思维

   于是间 突然     就喜欢上了 那种失去对焦的感觉

                          喜欢上了 那种黑白分明、曝光过度的感觉

                             喜欢上了 高感光度噪点的 磨砂味道

 

第一次尝试这样拍摄 也算是心血来潮 意从心生~

          没想到一个简单的卡片机 也能获得这样子的效果

  好与不好 已不重要, 只是代表了自己的一种心情吧

           发呲的心情。。

 

 

 

############  故事 D  —— 红宝石   #################

 

        人似乎真的很难改变。

 

    前几天去看了好朋友的小孩。

      是一个女儿, 却怎么也不能算斯文 真是和孩子他妈一个模子里刻出来一般。

 

    看到我第一眼就喜笑颜开  之后会不好意思地扭过头去 然后再偷偷看我。

       和她近近地说话 听的也很认真,眼睛澄澄地看着你 笑眯眯笑眯眯,

          不像其他不满一周年的孩子那般   不好和陌生人亲密接触,顾左右而言他。

 

 

    不过~ 其实仔细算来,我也应该不算是她的陌生人了吧,

       毕竟她都听我说话 听了将近7个月了~

          我也不知道 似是而非。。。

 

 

    渐渐地,每次靠近她 她都会伸出手想来抓我

      我把手指给她 她就会很用力地想把我拽到身边

        我故意凑过去呢 她就丢下手指 用力捏我的脸~

            真的是很大力  捏的脸都有些痛~    不过我倒是很喜欢 呵呵。

 

     轻轻地抱起她 结果却不折腾了,安静乖巧  尽看着我 我也看着她 大眼瞪小眼  两个人尽在那里傻笑

 

 

     小小的生命 总是能给人很感恩的心情。。

 

 

 

 

    恩 家里装修很好 地段也不错,家具电器什么的对我而言都已经算是下了血本了。。或许对他来说还不算吧。。哈

 

     孩子他爹看的书和我的真像~  竟然还看到了CCNP的书  让我平添了许多熟悉的味道。

       已经翻得很旧了, 拿起来随手翻了一下 笔记、划线 做得很全。  恩,真是一个好男人。

 

          虽未曾谋面说过话 但总觉得应该会是个不错的人 有金有上进心有能力。

             就是对情商还不甚了解 当然这个和我就木有什么关系了 呵呵

 

     双子座么?

        感觉上应该是能力赞的星座  就是性格上会有些难弄 哈。 只能少许的迁就一下吧:)

 

    看着你这样子幸福的日子 我也真的很为你高兴。恩 没错的 呵呵

      就是看上去也许为了孩子有些焦头烂额了~

 

    似乎摩羯座一大特点就是会对着某件实际的事情特别认真。

         这个既是优点 也会让人觉得有些累~

         不过我知道即使我说了 你也不会去改变什么 摩羯的天性么 哈哈

    反正记得不要把自己绷得太紧就好,自己才是世界的中心 有了好的自己 才会有身边的一切。

         或许 这句话也是多余的 :)

 

      

     希望这,   能够给你带来些    些许的轻松与惬意~~~

 

IMG_0008

 

 

IMG_0022

 

 

IMG_0023

18 julio

2009年中小结~

最近沉迷于陈建年的音乐。

    沉淀  深邃  坚定  经历  挫折 思考  百折不屈

 

 

 

上半年 其实没有什么很好写的东西。 辞职了 分手了 其他什么都没做 ~没有意思。没有什么意思。

     所以到了这个年中月的下旬 我仍旧不愿意坐下来写些什么。

 

 

 

 

工作的时候 人忙忙乎乎的。

   虽然不知道在忙什么,可心理上总觉得 —— 恩,不管怎么样 我还是很忙的 我还是在辛勤地努力着的。

 

 

停下来了,   时间  于是愈发一天一天飞快地消逝。

 

          虽然一直抱持着心中坚定的目标而向着前行,     可有的时候   还是会。

            还是会对自己所决定要走的路迷茫过       还是会对自己决定要走的路动摇过。

 

有一天爸爸妈妈在看财经频道金饭碗的节目 看着这么些个刚出学校的毛头小伙就被那些获得成功的成年人们层层剥离 层层剥离

  看着那个最后获得肯定的选手流下眼泪

   我的眼眶竟也不自禁地湿润了    我知道   这是压力的宣泄  很有些感同身受的味道

年轻人是要获得锻炼 可是这样子的严酷 真的是适合一个人的健康成长么 这些结果难道都是他们自己造成的吗

 

   看着他们为了自己 奋勇拼搏在成人的格构中,   我突然有了一种强烈的罪恶感

   我现在这样对家庭没有任何贡献真的对吗

    我现在这样没有充分利用自己的每分每秒真的对吗

      我没有像他们那样努力拼搏  真的对吗??

         压力和迷茫 突然就前所未有地席卷了我的全部感官

 

 

 

 

 

 

    经过几年的努力 我们这一代似乎对要做的事情都已经了解 人也从毛头小伙成了能在人群中占有一席之地的闲滑

     可是接下去呢 重复的劳动是我们想要的吗 我们前进的道路到底在哪方?

    我相信 每个人都将会经过这样一个历程 一个发展的瓶颈 这个过程是痛苦的 前方是黑暗的 伸手而不见五指

 

 

 

   可是 我相信!

      

                   要有完整的目标       要有充分的信心

 

         这是我得出的结论

  我相信 即使现在所处的是再黑暗的世界 只要有这样2点 每个人一定都能摸索出适合自己的那条路的!

  虽然现在的我 自己也不知道 到底那是什么 到底什么是什么。

   可是 我们这一代 不就一直是处在强烈的新旧变革之中的一代么?

        黑暗混沌的世界 新兴活跃的思维 努力诚实地生活 一切靠自己摸索着前进 这不就是我们这一代最完美的表述么

 

 

 

 

 

 

好了 回到重点吧。。。

 

先看看年初的计划

 

MCSE、Linux考试        恩,辞职的最主要目的。

钢琴8级                     8月初考试~

婚姻                         。。唉 好的吧

跆拳道                      走完了整整2年的历程 给人的意义真的是无可比拟。
                              只是跆拳道精神的传递已达到圆满 再上去就是技战术的提高
                              所以决定考虑换一个运动 看是不是能够有新的感受。

工作                         恩。正如预期的那样。

      

 

看似木有达成什么 可是奇怪的是下半年所剩下的 也只有2门电脑技术的考试了。  婚姻~真是一个意外的结果。

 

 

 

下半年计划

 

    主要目标

 

MCSE、Linux考试          前前后后预谋了2年的 电脑理论能力考核的 最终章,   终于 只剩下这最后的几个月了。。
                                冲刺 冲刺吧

 

钢琴8级                      超越能力的目标 老师的诣旨不可违背。
                                给自己三点忠告    全力以赴 平常心对待  相信自己的能力

 

家庭事业创新                最近不知道怎么回事 上海的房产出乎意料的活跃 再加上明年世博会的预热
                                蛰伏已久的父母似乎有些苏醒的味道。考完试后将全力投入这件事情的个人支持。
                                首先要做的是网络推广 看情况是否需要帮忙上线一个网站服务器供使用。

 

工作                           考完试后当然也没有理由再闲置在家 一旦家庭新事业稳定发展了 就要认真开始新工作的寻觅
                                不给自己限定期限 这次关系着接下去好几年的个人事业发展。
                                所以一定要找到一个称心、能充分发挥自己能力、有广阔发展空间的工作。

 

 

下半年2件事情是最重要的 一个是考试 一个是找工作。

 

 

    次要目标

 

外语的学习                  突然觉得外语一下子变得如此重要 找工作似乎也很需要
                               家庭事业、个人事业 都缺少不了一门甚至两门的外语支持。
                               有空闲时间就要抓

新运动的寻觅               暂时进行的运动基本也能够达到锻炼的效果 但运动的意义其实远不止于身体的锻炼~
                               可惜时间的限制 不然野外攀岩我倒是非常感兴趣
                               除此之外 还有什么可以去尝试呢 击剑?暂时放在寻觅的阶段吧。

考研情况的继续了解       考研 似乎不会出现在明年的计划中了,
                              可是 等到工作稳定之后 一定将是首要考虑的学习目标。弟弟大学是个很好的楔入点

财务和管理的继续研究     管理学从明年开始将逐渐成为偏重点 提升它的重要性。计划中要让它最终替代自己的技术面
                               当然这是一个漫漫的路程 明年将是一个比较明显的起点

创业点子的收集、培养     其实以前也一直在做这样的事情 当今年完成了学习的任务之后 将投入更多的注意力在此方面
                               这个将是成为个人事业最深线的起点。准备着 准备着即使10年、20年 也要时刻准备着,全方面

网站设计                    已经有2个网站设计的任务了 当务之急要快点掌握PB、Dephli的完整使用方法。
                                开始着手尝试 制作一个出来是必须 即使像大学的毕业设计那样也可以作为起点

看书                          有3本书排在计划之中 不知道为什么 休息了之后反而没时间看书了~~~
                                至今也就只去了个位次数的书店 最近比较迷朗咸平

 

 

 

列出来之后很明显地发觉 今年学习课程的完成将是一个转折点。

个人重心将逐渐从理论、经验的积累 转移到工作、事业上的发展    由衷地希望能够找到一个值得自己花费精力在其之上的企业。

 

创业是最主线 时刻不能脱离 铭记于心头。
     虽然已经有些点子的产生,各个实际操作的可行性也在逐步提高
     可是我还是很确定地明了 这是个急不得的事情 而应该把绝大部分的精力投入于下一份的工作上。

 

另一根主线 对艺术和运动的追求。

    我现在的理解是 其实对它们的追求 是一种对精神的追求。

     活跃创新的思维、坚韧不屈的品质 才是艺术和运动对每个普通人的最高意义

     而对音乐、对绘画、对美的理解   身体锻炼的强度  反倒是排在了精神意义之后了。

 

家庭事业的成长 意外地成为我投入精力的一个旁支

   这个虽然是在计划之外的,不过我发现几个值得投入的地方。

   一、似乎这个产业的发展越来越多地需要通过网络这个媒体平台进行推广、操作。这个也是我技术上可以学习的方向。

   二、并不是说这个产业就完全不溶于我的事业 或许这个也能成为创业点子的一部分呢?是个值得观察的对象

   三、钱么 肯定是比我打工来的钱要快了 也能算是稳固基础的物质部分吧。

 

 

暂不作消费打算 等有了收入再谈。

 

总之 写了这么多有的没的 先把2门考试考出来吧!再加上钢琴8级 就是近日的首要目标 加油加油!

 

以上

 

 

 

今年的方针再喊一下

        完成既定目标 为之后的行动做好全方位的准备

           今年是一个承上启下的关键之年 要完整平滑地过渡达成!

在这荒淫的日子里 我还要加个2句。

                            要有目标  要有信心。

08 julio

乱七八糟的视频

曾经的最爱。。。

 

武功了得~

 

前半段太搞笑了。。。笑死了

 

。。。。。。仔细看~~

 

06 julio

小型公司新开方案及流程小结 + 日常维护事项

公司 250平米 70终端座位  机房2个  办公室1个  会议室木有

 

强电  6人

开槽   电负荷计算   PVC走线   强电资格证   墙插

弱电 8人

网络、电话、门禁都用5类线   标记所有线头    无线AP分布    机柜配架网络、分机跳线

网络 1人

无线AP调试    路由器、三层交换机、VLAN调试      外网调试    终端调试

程控  1人

外线进出线     分机号    语音话务员   程控特殊要求

电信电话 1人

PBX    直线   ISDN   

电信光纤 1人

局端到点物理连通

宽带 2人

代理商   线路质量     附加功能     备份、冗余   技术支持

IP电话 1人

IP电话前端设备 调试

门禁 2人

大门、机房门禁   数据库平台 

家具 3人

客户端桌椅 BOSS桌椅 机柜、机架 屏风 装修粉饰  空调   静电地板

物业 2人

装修备案   用电    电话局端     消防   有无特殊要求   午餐

打印机 1人

打印机 复印机 传真机故障保养

 

····················

 

流程

 

 

宽带代理商 电信局电话移机联系                     确定价格及方案                                                    (1周)

强电、弱电、家具、门禁 项目招标                  出方案书、平面图、报价                                          (2-3周)

 

 

平面图最终修改                                         内部决定最佳方案   施工及各类附属工程进行时间确定       (1周)

 

 

宽带、电话线路、门禁等外部设施进入现场时间通知

装修图报物业备案   提消防备案检查                 增减烟感及喷淋  修改通风管口                                   (4-5天)

 

 

强、弱电进入施工  开槽  走线  计算用电负荷       办公室分割 隔墙 到位                                            (2-4周)

机房用电  UPS   静电地板   机柜到位                                                                                      (2天)

内部网络、程控设备进入   连接、调试                外部宽带、电话线路进入  连接、调试                           (2-4天)

门禁、IP电话到位                                                                                                               (1天)

 

 

墙面粉饰     地毯铺设    办公家具  局部地区空调   计算机及周边设备进入                                             (3-5天)

 

 

强、弱电最后验收                                                                                                               (正常使用后1周)

 

 

·······················

 

 

固定资产记录

所有台式机 笔记本 服务器 打印机 网络设备  周边设备 机房设备  报废设备

 

 

························

 

日常管理

信息安全                             系统、项目需要软件调查(apache weblogic svn 各类数据库 delphi PB)
宽带线路监察                        内部网络交换机按需修改、备份
邮件服务器保证                     所有服务器备份、资料更新、权限控制
公司主页维护                        分公司VPN网络联络活动(数据服务器 视频会议  远程访问)
电话、电源线路保证                耗材、新设备采购意见
管理表格维持                        人员流动、项目需求引起的各类设备使用变更情况跟踪
各类硬件保养  

01 julio

老子就是要在枪林弹雨中活下去!!!(其实是不想说满口话的。。。呵呵)

悄悄地踏入一个陌生人的blog 。。   很赞!! 花了整整4个钟头 看完了他每周对动漫音乐的小结。

http://joehuaye1985.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3d%25e9%259f%25b3%25e4%25b9%2590%25e5%25b0%258f%25e7%25bb%2593

 

 

 

看完发觉 最后一篇到06年为止了。

 

  非常好奇   到底为啥如此痴迷的东西没有继续写下去至今呢?

 

 

 

点到首页。

 

   出大学了。

      生活         工作         理想         现实

        。。。。。。。。。。。。。。。。

 

越看越无语。不知道为什么最近老是看到这种东西。

 

             一个比我小了3岁的人。

 

 

 

 

 

blog中的那些动漫 那些音乐 那些所有的所有点点滴滴, 是那样的沉迷 是他无数的心血 连我这样的陌生人都能强烈地感受到。

    在我眼中 这方面完全达到了一个境界的人。

 

甚至充满了理想 大学出来要当动漫网站编辑。而且也跨出了勇敢的第一步。。

 

 

 

 

 

可是现实 打击的连我都抬不起头来。

 

 

最后三年 他总共写了3篇文章。

洋洋洒洒 可是都离不开他的生活、工作。

   打击   打击    还是打击。。。

 

为了理想而生存    真的就是这么难么。

 

如此的全情投入 却没有得到丝毫的怜悯么。

 

 

 

 

 

http://joehuaye1985.spaces.live.com/

此人的首页。

 

 

 

 

  倒数第三篇。

 

    踏出大学,实习一年。 关键字:   目标、干劲、理想满分

    …………

    然后我去了保险公司卖保险,一个月5000块,爽不爽?当然爽!5000为什么不爽?对一个刚毕业的我来说,足够了。

    结果在正式和公司签合同的前一天晚上,我失眠了,我在社会上混了那么长时间,内勤,外勤的工作我都做过了,我到底喜欢什么工作?我明天就这样正式签约,正式卖身了?我会每一天过的充实么?我的梦想是什么?对……我的梦想……到底是什么!

    最后我发了一条短信给我主管,对他说,感谢你这些日子来的栽培,从明天开始我再也不来上班了。

    你听我这样说,或许会觉得我很帅,和或许会觉得我是个神经病,但是那一天晚上,我确确实实想通了,我喜欢动漫,我希望我的生活中充斥着动漫,我想要找一份和动漫相关的工作。

    结果家里蹲了一个月之后,机会来了,一家全国范围内知名的动漫门户网站来电,邀请我去做动漫网站编辑,那一天晚上很多人为我打气为我加油,说我一定行的,我就这样充满自信的去面试,结果通过了,我现在已经工作了快3个月,就快转正了,现在可以你可以说我已经是一位专业动漫人氏,这一切就像是梦一样,同时,我也认清自己,我是一个理想主义者,不是我真正要追求的东西,我是无法去接受的。

   …………

  我不知道我能当多久的编辑,也不知道我对动漫的热情还有多少,但是我坚定的事情只有一点:我愿意把我的青春在动漫中燃烧,提炼成大叔。

   …………

 

  倒数第二篇。

 

    工作两年。  关键字:   现实 彷徨 迷茫 忐忑不安  理想5折

 

     …………

     看看去年10月的文章,其中提到关于我做上了梦想般的职业的工作——职业动漫网站编辑。当时的我是多么的兴奋,对于白天上班能干和动漫有关的事情,下班晚上回家依然能看动画片,一整天都沉浸在2D世界里是何等的幸福,而在其他漫迷眼中看来,对我这份职业也是相当憧憬的,毕竟一个人,如果能做到和自己爱好相关的事情,并将其作为自己的职业是件很另人向往的事情。这就意味着每天都可以过着很开心的生活。

     但是……。

     现实是很残酷的,人是需要吃饭进食的生物,同样也是被欲望所充斥着的生物。我也不例外。生活的种种现实鲜明的摆在我的面前,让我知道现在的这份职业的收入,是无法逃避得了月精光的命运,更是因为公司的种种原因,使得我在工作中所从事的和动漫相关的工作渐渐淡薄甚至消逝,使我失去了工作的激情与继续做下去的动力,最后选择决定离开。时间也同样刚好是一年。

     回想这一年里,其实我所得到的比我失去的要多得多,学会了作为一个编辑所应有的一些基本技能与工作经验,体验了被称为魔都上海的社会现实感,交到了一位好同事朋友,现在也依然保持着联系。

    失业在家的一个多月,经过了自己所爱的职业生涯1年之后想了很多,自己总结了很多,并决定了自己将来的去路,想做一种普通的工作,过的过去的工资,固定的常日班,很少加班,工作不用留回家完成,寻求一份类似普通操作工一样的工作。

    这一个月来面试了10多家公司屡次失败告终,自信心被打入了无底的崩溃之中,同时又明白了一件事情,当自己一旦踏入某条社会工作的道路后,想离开这条路,去寻找新的工作道路去走,很难改道。因为残留着很多以前道上的经验,而欠缺新的道路上的经验,导致这一结果。因此哪怕连普通的工人的工作,学历只要求高中的那种简单的工作,也使得我很难从事,这也是导致我一直都未找到工作的很重要一个原因。你问我现在在做什么?有时候真的觉得命运很讽刺,感觉上天在玩弄我的意思。已经明明决定好不想再走动漫,走编辑这个行当了,结果歪打正着的又让我干起了老本行。

 

     …………

 

     说到这里表面上或许看来,这样的工作对我来说是比较满意的,但是实际呢?我内心却有别的想法。

    人就这一辈子,每个人都有自己想做的事情,想去的地方和想相遇的对象。对此其实我很迷茫,这是我想要的稳定从事一生的工作和理想的收入么?我的目标和我的终点又在哪里?目标需要自己找,终点要自己去抵达,但我真正却不知道自己到底想要做什么,换句话说是我能做什么,社会又需要我去做什么。现在写下这段话的时候我依然很迷茫,依然无法确切回答这些问题。

    或许现在的工作状态也只是为了暂时逃避、摆脱父母的说教与周围的压力罢了。

    有人对我说那就去多尝试换工作吧。这或许是条路子,同样的我害怕失业。当一个人决心辞掉一份工作后,想回头是几乎不可能的,就像天下间没有所谓的后悔药这种东西一样。所以后退100步去将我觉得以一个工作中状态的人来说,放弃自己现有的事业而重新去选择新的道路,这件事本身上来讲是要有很大的勇气与决心才能卖出这一步。

    因为这就意味着你会失去现在的人际关系,工作环境等等一切因素。虽然或许会得到比以前更好的,但是要熟悉新的环境与人员又需要很长的一段时间的磨和期,就像现在的我一样。所以想想人这一辈子如果一直像这样频繁换工作的话,能有多少时间和多少机遇能允许你换呢?

    当有一天你或许真的找到了自己想要走一辈子的道路,或许就是明天,或许你已经老了。

    我们经历了很多次人生的重大抉择,考初中,高中,然后是大学,有的人选择出国,有的人选择继续读国内的大学。而有的人现在此时此刻或许还依然在犹豫选择自己前进的方向,这一次次的抉择对于自己的一生来说都起了很大的决定性作用,有时候或许会感叹自己以前如果考别的学校,学别的专业或许会比现在好很多之类后悔的想法,自己虽然知道这样会很消极但是还会去这样想。

    不过还是认清自己的现状,做一些力所能及的事情为好——这点总结也是对我现状的一个近期目标与想法。

 

 

   最后一篇。。。

    工作三年,现实一年前。

          关键字:

           钱。        理想0折 一文不值

 

 

     钱。

  就那么现实的问题,钱。

     当我在业界认识的朋友中得知这个行当,我所得到的工资已经算中高水平时,我觉得我没有前途。这个职业首先根本就不是能长期从事的行业,做的时间越长,所谓浪费的时间与青春也就越多,更何况没有更好的发展,对我的将来很不利,所以我决定这次辞职以后,再也不踏入这个行当了。在中国这片大陆上,从事这个行业,根本就是个错误。

  或许把爱好当成职业来从事工作是一件幸福快乐的事情,但现在的我认为我的这个爱好,还是作为爱好更好。现在想想每天宅在家里看看动画听听音乐是能让我最快乐的事情,所以,我还是回归为爱好吧。

  所以我的人生经过这次辞职后将再次转弯,方向已经确定,但目标依然很模糊,不过我认为,朝这样的方向前进,在那前方的我所得到的结果,比现在就这样走下去的我所得到的结果,要好。希望我这次做出的选择是正确的。时间是09年4月,我会给大家有个交代的。

 

 

文笔明显改变了

   幼稚 更能显示内心的真实。

   成熟  代表 现实、冷静

 

 

还是把爱好当作爱好么。还是重新选择了方向么。

那种热情哪里去了?

 

 

 

 

现实总是一次又一次地令我感到无比残酷。

 

         即使它只是发生在一个和你毫无关系的陌生人身上。