基于网络的 Red Hat

1. 方案介绍

这种方案需要首先设置一个启动服务器和一个安装服务器(可以配置在同一台物理机上),然后通过网络启动存放在启动服务器上的安装程序。安装程序会自动访问存放在安装服务器上的安装配置文件和安装介质来完成安装。

涉及到的技术

该方案主要应用了三种技术:

1) 在PC 上从网络启动Red Hat Linux 安装程序的PXE

2) Red Hat Linux

3) Red Hat Linux 安装程序提供的无人值守安装功能(Red Hat 称为kickstart

技术1) 和2) 在参考资料1 和2

软硬件需求

要按本文介绍的方法完成自动化安装,你需要如下软硬件资源:

  • 一台PC 机器作为启动和安装服务器(其它架构机器也可以)
  • 一台待安装的PC 机器,它的网卡必须带有PXE 支持
  • 一个建好的局域网,上述两台机器已经连接入同一子网
  • 待安装的Red Hat Linux 安装介质

该方案的实现步骤

步骤1) 和2) 只需做一次即可。对每一台需安装Red Hat Linux 的机器,都需要在启动服务器和安装服务器中部署相应的数据,并执行一次步骤3)

下面将带领您逐一执行这些步骤。为了简单,我将用示例来说明如何在一台安装了 Red Hat Enterprise Linux AS 3 Update 5 的 PC 机上设置启动服务器和安装服务器,并在一台PC 上安装 Red Hat Enterprise Linux AS 4 Update 2

 

2 . 步骤1

启动服务器的目的是帮助在待安装机器上启动Red Hat Linux 安装程序。启动服务器上需要搭建一个DHCP 服务器和一个TFTP 服务器。前者是为了给待安装机器分配IP

配置DHCP

1) 安装DHCP 服务器包(RPM 包名:dhcpd

2) 编辑DHCP 服务器配置文件 /etc/dhcp.conf

option domain-name "mydomain";


ddns-update-style none;


 


max-lease-time 7200;


server-name "bootserver";


default-lease-time 600;


 


allow booting;


allow bootp;


 


subnet 192.168.138.0 netmask 255.255.255.0 {


     range 192.168.138.1 192.168.138.254;


     deny unknown-clients;


}


 


group pxe {


     filename "pxelinux.0";


     host testserver { hardware ethernet 00:0C:29:70:24:5B; fixed-address


          192.168.138.30; }


}

 

在这个例子中,定义的子网是 192.168.138.0/255.255.255.0 。主机定义项testserver 指出 IP 地址 192.168.138.30 将分配给以太网卡00:0C:29:70:24:5B (待安装机器),文件 pxelinux.0 (在 TFTP 服务器的根目录中)将作为启动映像被网卡ROM 里的PXE

每增加一台需安装的机器,我们需在dhcpd.conf 中增加一条host

3) 给启动服务器配置一个IP, 这个IP 必须在DHCP

这里我们使用192.168.138.1 。关于如何为Red Hat Linux 系统配置IP 地址,请查阅参考资料3

4) 启动DHCP

[root@bsvr] #service dhcpd restart

 

配置TFTP

1) 安装TFTP 服务器包(RPM 包名:tftpd

2) 编辑TFTP 服务器的配置文件 /etc/xinetd.d/tftp

service tftp


{


     socket_type      = dgram


     protocol         = udp


      wait             = yes


     user             = root


     server           = /usr/sbin/in.tftpd


     server_args      = -s /tftpboot


     disable          = no


}

 

这里选定了/tftpboot 为TFTP

3) 将Linux 安装程序的内核/ 根文件系统文件复制到 TFTP 服务器的根目录。对于每一个要被安装的Red Hat Linux

Red Hat Linux 第一张安装光盘/isolinux 目录下会包含Linux 安装程序的内核/ 根文件系统文件。下面一段命令将这些文件复制到TFTP

[root@bsvr]#mkdir /mnt/iso


[root@bsvr]#mount -o loop,ro RHEL4-U2-i386-AS-disc1.iso   /mnt/iso


[root@bsvr]#cp /mnt/iso/isolinux/initrd.img /tftpboot


[root@bsvr]#cp /mnt/iso/isolinux/vmlinuz /tftpboot


[root@bsvr]#mv /tftpboot/initrd.img /tftpboot/initrd-rhel4u2-i386.img


[root@bsvr]#mv /tftpboot/vmlinuz /tftpboot/vmlinuz-rhel4u2-i386

 

4) 将启动镜像文件pxelinux.0 复制到TFTP

启动镜像pxelinux.0 可以在syslinux 安装包里获得。安装好syslinux 安装包后,将pxelinux.0 复制到TFTP

[root@bsvr]#cp /usr/lib/syslinux/pxelinux.0 /tftpboot/

 

5) 编辑pxelinux.0 的配置文件,以使pxelinux 可以正确载入Red Hat Linux 安装程序。对于每一个要被安装的Red Hat Linux

启动镜像pxelinux.0 文件在执行过程中,会读取配置文件以确定它应该载入什么Linux 内核文件来运行。所有的配置文件都放在启动服务器的/tftpboot/pxelinux.cfg/ 目录下。pxelinux.0 根据一定的规则来搜索合适的配置文件名。举例来说,对于前面为待安装机器分配的IP 地址192.168.138.30 (十六进制表示为C0A88A1E ),pxelinux.0

C0A88A1E > C0A88A1 > … > C0 > C > default

 

就是说,如果C0A88A1E 文件存在,它就是pxelinux.0 将载入的配置文件。否则,继续往下找。如果C0A88A1 文件存在,它就是pxelinux.0 将载入的配置文件。如果前面的以C 开头的文件都不存在,那么pxelinux.0 将试图从文件default 中读取配置。对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP 地址对应的文件里很不灵活。把所有配置都集中在default

可以将能想到的Red Hat Linux 版本的配置都写在default 文件里,以便同时支持多种Red Hat Linux 版本,如下所示( 对于具体某个 Red Hat Linux 版本,对应的行该如何写,可以参考它安装盘里的配置文件 /isolinux/isolinux.cfg)

DEFAULT rhel4u2-i386


DISPLAY pxelinux.cfg/list


PROMPT 1


 


LABEL rhel3u6-i386


KERNEL vmlinuz-rhel3u6-i386


APPEND initrd=initrd-rhel3u6-i386.img


 


LABEL rhel3u6-x86_64


KERNEL vmlinuz-rhel3u6-x86_64


APPEND initrd=initrd-rhel3u6-x86_64.img devfs=nomount ramdisk_size=9216


 


LABEL rhel4u2-i386


KERNEL vmlinuz-rhel4u2-i386


APPEND initrd=initrd-rhel4u2-i386.img ramdisk_size=8192


这样用户可以通过输入某种版本的LABEL (例如,rhel4u2-i386 )来选择具体的安装版本。为了能在安装时知道有哪些备选,可以让pxelinux.0 提示要户选择之前显示一个列表。这通过在default 里指定DISPLAY 选项来实现。在上面的样例中,我们将所有备选Red Hat Linux 版本列在文件pxelinux.cfg/list 中,它的内容会被pxelinux.0

在我们的例子中,/tftpboot/pxelinux.cfg/list

Choose one of the following Linux distributions for your installation:


Name            Distribution    Arch.    Installation media


-------------------------------------------------------------------------


rhel3u6-i386    RHEL 3 AS U6    i386 192.168.138.1:/instsvr/i386/rhel3u6


rhel3u6-x86_64 RHEL 3 AS U6 x86_64   192.168.138.1:/instsvr/x86_64/rhel3u6


rhel4u2-i386    RHEL 4 AS U2    i386     192.168.138.1:/instsvr/i386/rhel4u2

 

6) 启动TFTP

[root@bsvr]#service xinetd   restart

 

3 . 步骤2

安装服务器在安装期间提供对 Linux 安装介质和无人值守安装配置文件的访问。安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP ,FTP ,和NFS 。使用NFS 协议,Red Hat Linux 安装程序可以支持多种安装介质目录结构,尤其是支持ISO 光盘镜像文件。这里我们选择使用NFS

配置NFS

1) 准备ISO 安装介质。将Red Hat Linux 安装介质的ISO 文件都放置到/instsvr

[root@bsvr]#mkdir /instsvr


[root@bsvr]#mv RHEL4-U2-i386-AS-disc1.iso /instsvr/i386/rhel4u2


[root@bsvr]#mv RHEL4-U2-i386-AS-disc2.iso /instsvr/i386/rhel4u2


[root@bsvr]#mv RHEL4-U2-i386-AS-disc3.iso /instsrv/i386/rhel4u2


[root@bsvr]#mv RHEL4-U2-i386-AS-disc4.iso /instsrv/i386/rhel4u2

 

2) 编辑NFS 服务器配置文件 /etc/exports ,以允许其它机器通过NFS 访问目录/instsrv 。/etc/exports 文件内容如下:

/instsvr    *(ro,no_root_squash,sync)

 

其中:

  • * 表示任何IP 地址都可以访问该目录。为了安全的考虑,也可以指定具体的IP 地址。
  • ro 表示远程机器对该目录只有读权限。
  • 其它选项请参考NFS 手册。

3) 重新启动NFS

[root@bsvr]# service portmap restart; service nfs restart

 

4) 检测目录/instsrv

[root@bsvr]#showmount -e localhost


Export list for localhost:


/instsrv *

 

这样,我们就设置好了一个安装服务器。很简单吧!

配置kickstart

自从 5.2 版开始, Red Hat Linux 开始支持一个称为 kickstart

要使用 kickstart

1) 创建 kickstart

2) 部署kickstart 配置文件,即将kickstart 配置文件放置到安装服务器上,并在安装程序的kernel 参数中指定kickstart

创建kickstart

kickstart

有如下几种方法生成kickstart

  • Red Hat 提供了一个样例文件。在Red Hat Linux 文档光盘中 RH-DOCS 目录里的 sample.ks 文件。你可以基于该样例来创建你自己的配置kickstart 文件。
  • 每当你安装好一台Red Hat Linux 机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart 配置文件来生成你自己的kickstart 配置文件。
  • Red Hat Linux 提供了一个图形化的kickstart 配置工具。在任何一个安装好的Red Hat Linux 系统上运行该工具,就可以很容易地创建你自己的kickstart 配置文件。kickstart 配置工具命令为redhat-config-kickstart (RHEL3 )或system-config-kickstart (RHEL4 )
  • 阅读kickstart 配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart 配置文件。

这里有一个kickstart

注意:笔者在此处删除了原文的kickstart样例,因为,不同公司 有不同的安装需求,放一个样例在这里实在没有什么意思。



对于kickstart文件,有一点值得我们注意,那就是 %post 以后代表完成系统安装之后将要执行的命令,我们可以在此配置系统,比如调整内核参数,配置主机防火墙等等。

 

所有以"#"

文件中的nfs --server=192.168.138.1 --dir=/instsvr/i386/rhel4u2 选项告诉安装程序:到服务器192.168.138.1 的NFS 共享目录/instsvr/i386/rhel4u2 下寻找安装介质。Red Hat Linux 安装程序足够聪明,可以识别该目录下应该被读取的ISO 光盘镜像文件名,所有这里你不需要指定ISO

关于kickstart 配置文件支持的所有选项及其相信说明,请查阅参考资料3

部署kickstart

首先我们需要把kickstart 配置文件放在安装服务器上。我们把它放到/instsvr/ks 目录下。即该文件的NFS

nfs:192.168.138.1:/instsvr/ks/ks.cfg

 

其次,我们需要让安装程序知道我们希望它用kickstart 方式安装,并告知它可以从哪里获得kickstart 配置文件。这可以通过给内核添加一个参数"ks=kickstart 配置文件路径" 来实现。我们只需对启动服务器上的default


LABEL     rhel4u2-i386


KERNEL vmlinuz-rhel4u2-i386


APPEND ks=nfs:192.168.138.1:/instsvr/ks/ks.cfg initrd=initrd-rhel4u2-i386.img    


ramdisk_size=8192


 

这样在启动安装程序的时候,参数ks=nfs:192.168.138.1:/instsvr/ks/ks.cfg 会被传递给它,告诉它使用这个文件作为kickstart 配置文件来进行kickstart

5. 步骤3

前面的配置工作完成后,下面我们就在待安装机器上通过网络以无人值守的方式来安装Red Hat Enterprise Linux AS 4 Update 2

1. 启动待安装机器,选择从网卡启动。具体方法因BIOS

 

 

 

 

三. 常规漏洞扫描 1.漏洞(vulnerability)扫描原理分析 1)漏洞定义:软件代码中存在的缺陷(flaw),这种漏洞是开放人员的失误导致的,比如常见的缓存溢出(buffer overflow)这种漏洞,在代码上就表现为 开发人员使用了诸如 C 语言的 strcopy 函数,但是又没有进行参数字符串长度检查; 软件配置错误(misconfiguring),这种漏洞是维护人员的失