龙空技术网

熟悉Linux系统安全和优化

woodaks 204

前言:

目前朋友们对“linux 进程卡死”可能比较关怀,姐妹们都需要分析一些“linux 进程卡死”的相关文章。那么小编同时在网络上搜集了一些对于“linux 进程卡死””的相关内容,希望大家能喜欢,朋友们快快来了解一下吧!

第一章:介绍Linux

什么是Linux?

Linux是一个操作系统。最初它是由在芬兰赫尔辛基大学念书的Linus Torvalds作为一种业余爱好开发出来的。Linus对用于教学的一种小型的Unix操作系统-Minix很感兴趣,决定开发出超过Minix的操作系统。在1991年,他开始Linux的开发,那时候的Linux是0.02版。到了1994年,Linux内核的1.0版发布了。现在稳定的Linux内核版本是2.2版,开发工作还在继续进行。

Linux的开发是遵循GPL的,它的源代码任何人都可以免费获得。但是这并不是说Linux以及Linux的发行版本是免费的。只要源代码保持公开,开发人员是可以要求获得适当的报酬。Linux可以用在很多方面,包括:网络、软件开发和桌面平台。Linux常被认为是其它昂贵的操作系统的替代品。

因为Linux操作系统的稳定和健壮,以及很容易得到,它在世界上越来越流行。成千上万的程序员在根据自己的需要利用Linux的源代码。现在,有很多正在进行中的项目尝试着把Linux移植到不同的硬件平台上,或把Linux用于其它的用途。

为什么要用Linux

首先,它是免费的。尽管Linus Torvalds拥有Linux的商标。Linux的内核和相关的软件是遵循GPL的。这意味着你可以更改源代码,并靠买程序获利,但是最初的作者拥有版权而且你必须公布修改过的源代码。

尽管Linux在基于Intel平台的计算机上最流行,但是相对其它操作系统,它可以运行在更多的CPU和硬件平台上。其原因是:除了拥有很多天才的开发人员之外,Linux是带着源代码一起发行的,而且它的内核是可移植的。

现在软件和硬件行业的趋势是让用户去买更快的计算机,不断地扩充内存和增加硬盘空间。Linux并不受这些“增肥”趋势的影响,它甚至可以在内存不是很多的486计算机上运行得很好。

Linux很少死机,你可以停止那些有问题的进程,而让操作系统正常地运行下去。而且,Linux用的是最先进的内存管理技术,不会让你的操作系统失去控制,也根本不要经常重启操作系统。

如果需要安装的是一个服务器操作系统,那么Linux是有很多优势的,特别是比起其它操作系统,如Windows 2000,要便宜得多了。还有一个优点是:Linux几乎不受病毒的攻击。因为遵循GPL和开放源代码,基本上你可以获得操作系统以及操作系统上所有软件的源代码。

让我们排除对使用Linux的一些害怕和疑虑

Linux不过是一个象玩具一样的操作系统

Linux正被越来越多的Fortune 5000的企业、政府部门和消费者所采用。不信的话,去问一问IBM、Compaq、Dell、Apple Computer、Burlington Coast Factory、Amtrak、Virginia Power、NASA或成百上千万的Linux用户吧。

Linux没有技术支持

尽管有不少人认为Linux是没有技术支持的操作系统,但是每个Linux的发行版都提供12,000多页的文档。Linux的商业发行版,例如:RedHat Linux、Caldera、SuSE 和OpenLinux给注册用户提供安装支持,小企业和公司可以得到一些商业技术支持公司的服务支持。作为一个开放源代码的操作系统,你可以得到Linux的全部源代码。如果你遇到一些问题而且自己有解决问题的能力,就自己解决吧!不用为了得到技术支持等上很长的时间,许多严重的问题(如系统安全问题)可以在Internet上的Linux社团的帮助下几个小时内解决。

第二章:安装Linux服务器

了解你的硬件环境

了解硬件环境是成功安装RedHat Linux的关键。因此,必须用一些时间熟悉一下自己的硬件环境。准备好回答如下的问题:

1. 计算机上有几个硬盘?

2. 每个硬盘的大小?

3. 如果有两个以上的硬盘,哪一个是主盘?

4. 内存有多大?

5. 计算机上有SCSI卡吗?如果有,型号是什么?由哪家公司生产的?

6. 鼠标是什么类型的(串口,还是PS/2)?

7. 鼠标有几个键?

8. 如果是串口鼠标,那么连在哪个串口上?

9. 显卡的产商和型号,有多少显存?

10. 显示器的产商和型号?

11. 如果想把计算机连接到网络上,请再注意下面几个问题:

a) 计算机的IP地址?

b) 网络掩码?

c) 网关地址?

d) 域名服务器的地址?

e) 域名?

f) 主机名?

g) 网卡型号和厂商?

创建启动盘,引导Linux

如果你安装过很多次Linux,结果都失败了,那么可能需要一个修正过的软盘镜像。在这种情况下,可以去RedHat Linux的勘误网站去下载特殊的软盘镜像。

因为这是很少见的情况,应该尽可能地先试一下标准的安装软盘,只有在实在不能完成安装的情况下,才有必要去勘误网站看看。RedHat 6.1的光盘可以从光驱直接启动。如果你的计算机不支持直接启动,那么也可以在MS-DOS下创建启动盘,请用下面的命令(假定CD-ROM的盘符是d:,里面放的是RedHat Linux 6.1的光盘):

在windows下打开MS-DOS方式(开始 | 程序 | MS-DOS方式):

C:$#@62; d:

D:$#@62; cd dosutils

D:dosutils$#@62; rawrite

Enter disk image source file name: ..imagesoot.img

Enter target diskette drive: a:

Please insert a formatted diskette into drive A: and press --ENTER-- :

D:dosutils$#@62;

当rawrite.exe要求输入软盘镜像的时候,输入完整的boot.img的路径名,把软盘插入A驱。当程序问你把镜像写入哪个软盘驱动器的时候,输入a:。

RedHat Linux的勘误网站是:。

因为我们不从CD-ROM启动,而从软盘启动安装,所以把软盘插入A:驱,然后重新启动计算机。当出现boot:的时候,按下回车键,继续引导。

* 选择语言

* 选择键盘类型

* 选择鼠标类型

安装类型和方法

RedHat Linux 6.1有以下几种安装类型:

* GNOME工作站

* KDE工作站

* 服务器

* 自定义

有些安装类型(GNOME工作站、KDE工作站和服务器),简化了安装过程,但是失去了很多灵活性。

因此,我们建议你选择“自定义”安装,这样你可以选择安装什么服务器软件以及如何划分你的硬盘。我们的目标是安装尽可能少的软件,以保证系统的高效率。而且,安装的软件越少,安全漏洞也就越少。

选择“Custom”,继续安装。

创建分区

警告

我们强烈建议在分区之前,先备份你当前的系统。为了保证系统高效、稳定和安全,我们还建议你象下面介绍的那样分区。我们这样分区是假定你要配置一个Web和Proxy服务器。

之所以在分区中有两个特殊的“/chroot”和“/cache”分区是因为:“/chroot”分区是为DNS服务器、Apache服务器和其它需要改变根目录的(chrooted)服务器准备的;“/cache”分区是为Squid Proxy服务器准备的。如果你不打算安装Squid Proxy服务器,那么不必创建“/cache”分区,但是请注意:Squid+Apache的结合会把服务器的性能和安全提高很多。

如果想让数量比较多的用户访问你的服务器,必须把“/tmp”和“/home”放在不同的分区上,这几乎是强制的。这样做可以避免分区被一些用户文件填满。把“/var”和“/usr”放在不同的分区也是一个好主意。使“/var”和其它分区分开也可以避免分区被填满。

在我们的分区安排中,特别保留了400MB的磁盘空间给改变根目录的(chrooted)程序,比如:Apache、DNS以及其它软件。这是必须的,因为Apache的DocumentRoot文件和其它可执行的程序都会被安装在这个分区上。注意:Apache chrooted目录在“/chroot”分区上的大小是和“DocumentRoot”文件的大小成正比的。如果不准备安装和使用Apache,可以把分区大小减小到10M,这10M是DNS服务器所必需的。

最小的分区要求

下面是Linux能够正常运行的最小分区要求。这样的分区安排甚至可以适用于只有512MB硬盘的老式486计算机机。当然,这种分区安排只是一个建议。

/ 35MB

/boot 5MB

/chroot 10MB

/home 100MB

/tmp 30MB

/usr 232MB

/var 25MB

Disk Druid分区工具

Disk Druid是RedHat Linux带的一个分区工具。选择“Add”添加新的分区,“Edit”改变分区,“Delete"删除分区,“Reset”恢复原来的分区状态。在添加一个新分区的时候,会出现一个窗口,要求你添上有关这个分区的一些必要的信息。要求添的信息是:

* Mount Point: 分区装载(mount)的目录

* Size: 分区的大小,以兆为单位

* Partition Type: 分区类型。Linux的文件系统要使用Linux native类型的分区,Linux交换分区请用Linux Swap类型。

如果你有一个SCSI硬盘,那么这个设备的名称将是“/dev/sda”;如果你有一个IDE硬盘,那么这个设备名称将是“/dev/hda”。如果很在意系统的高性能和稳定性,我们建议你用SCSI硬盘。

Linux分区的命名方式是字母和数字相结合的,这种命名方式很灵活也很直观。下面是一个小小的总结:

* 前两个字母:前两个字母表示设备类型,“hd”代表IDE硬盘,“sd”表示SCSI硬盘

* 第三个字母:这个字母是说明具体的设备。例如:“/dev/hda”表示第一个IDE硬盘;“/dev/hdb”表示第二个IDE硬盘。

请记住这些,这样给Linux分区的时候,会觉得容易一些也不会混淆。

交换分区

交换分区是用于虚拟内存的。如果计算机的内存少于16M,你必须创建交换分区。即使有更多的内存,我们还是建议你建立交换分区。交换分区最小必须等于计算机的内存,如果内存多于16M,最小只要16M就行了。交换分区最大大约为1GB,(Linux 2.2内核现在可以支持1GB的交换文件,如果多于1GB就是浪费)。注意:可以创建多于一个的交换分区,尽管只有在安装大型服务器的时候才有这个必要。尽量把交换分区放在硬盘驱动器的起始位置,因为一个磁盘的起始位置在物理上是在最外的柱面上,所以磁头每转一圈可以覆盖更大的面积。

下面是一个例子,教你怎么建立分区(这样的分区安排是安装我们在书中介绍的服务器所需要的),下面的例子是用Disk Druid的命令:

Add

Mount Point: /boot our /boot directory

Size (Megs): 5

Partition Type: Linux Native

Ok

Add

Mount Point: /usr our /usr directory.

Size (Megs): 1000

Partition Type: Linux Native

Ok

Add

Mount Point: /home our /home directory.

Size (Megs): 500

Partition Type: Linux Native

Ok

Add

Mount Point: /chroot our /chroot directory.

Size (Megs): 400

Partition Type: Linux Native

Ok

Add

Mount Point: /cache our /cache directory.

Size (Megs): 400

Partition Type: Linux Native

Ok

Add

Mount Point: /var our /var directory.

Size (Megs): 200

Partition Type: Linux Native

Ok

Add

Mount Point: our /Swap partition (leave the Mount Point Blank).

Size (Megs): 150

Partition Type: Linux Swap

Ok

Add

Mount Point: /tmp our /tmp directory.

Size (Megs): 100

Partition Type: Linux Native

Ok

Add

Mount Point: / our / directory.

Size (Megs): 316

Partition Type: Linux Native

Ok

分区完毕之后,你可以在屏幕上看到类似的信息:

Mount Point Device Requested Actual Type

/boot sda1 5M 5M Linux Native

/usr sda5 1000M 1000M Linux Native

/home sda6 500M 500M Linux Native

/chroot sda7 400M 400M Linux Native

/cache sda8 400M 400M Linux Native

/var sda9 200M 200M Linux Native

Swap sda10 150M 150M Linux Swap

/tmp sda11 100M 100M Linux Native

/ sda12 316M 315M Linux Native

Drive Geom [C/H/S] Total (M) Free (M) Used (M) Used (%)

sda [3079/64/32] 3079M 1M 3078M 99%

现在,选择“Next”继续安装。分区创建完之后,安装程序会让你格式化分区。选择想要格式化的分区,选中“Check for bad blocks during format”选择框,按“Next”继续。这样就开始格式化分区,并且激活分区。Linux就可以使用这个分区了。

下一步如果选择安装LILO,你会看到LILO的配置。可以选择把LILO装在主引导扇区(MBR),或引导分区的第一个扇区。

在通常情况下,应该选择把LILO安装在主引导扇区。(如果你的计算机上装有NT,或一些多重引导程序,如System Command,你最好仔细看一遍LILO-HOWTO,以免不必要的损失)。然后,开始配置网络和时钟。接着,要输入root口令和进行安全验证的配置。不要忘了选上:

* Enable MD5 passwords

* Enable MD5 passwords

没有必要选择Enable NIS,因为我们不在这台服务器上安装NIS服务。

启动和停止daemon服务

init是内核在引导的时候运行的程序。它负责管理那些在引导的时候要启动的进程。这些进程包括:Apache daemon、网络daemon和其它你想在引导时运行的进程。

那么init是怎么启动和停止服务呢?每一个启动脚本都有可以接受一个参数,参数的值为:“start”或“stop”。这些脚本在“/etc/rc.d/init.d/”目录下。你也可以手工运行这些脚本,用类似下面的命令:

例如:

* 在Linux上手工启动httpd Web服务器。

[root@deep]# /etc/rc.d/init.d/httpd start

* 停止httpd Web服务器

root@deep]# /etc/rc.d/init.d/httpd stop

可以在“/etc/rc.d/init.d/”目录下查看一下有什么服务,然后,用参数“start”或“stop”,启动或停止服务。

安装完服务器之后必须卸载的软件

RedHat Linux在默认情况下会安装一些预置的软件,而且在安装的过程中,不能够选择不安装。因此,必须在安装完成之后卸载下面这些软件:

pump

apmd

isapnptools

redhat-logos

mt-st

kernel-pcmcia-cs

setserial

redhat-release

eject

linuxconf

kudzu

gd

Bc

getty_ps

raidtools

pciutils

mailcap

setconsole

gnupg

用下面的rpm命令卸载这些软件:

[root@deep]# rpm -e softwarenames

softwarename在这里指的是软件包的名字,如:foo。

apmd、kudzu和sendmail是daemon进程,在卸载它们之前最好先停止这些进程。

停止这些进程用如下的命令:

[root@deep]# /etc/rc.d/init.d/apmd stop

[root@deep]# /etc/rc.d/init.d/sendmail stop

[root@deep]# /etc/rc.d/init.d/kudzu stop

现在你可以象卸载其它程序那样卸载它们,步骤如下:

第一步

卸载这些软件包。

[root@deep]# rpm -e pump mt-st eject bc mailcap apmd kernel-pcmcia-cs linuxconf getty_ps setconsole isapnptools setserial kudzu raidtools gnupg redhat-logos redhat-release gd pciutils

第二步

手工删除linux.conf-installed文件。

[root@deep]# rm -f /etc/conf.linuxconf-installed

注意:这是和linuxconf程序相关的的配置文件,必须手工删除。

如果你有IDE硬盘,hdparm程序是必须要的,所以一定要保留下来。否则,你可以把它从硬盘中卸载掉。

kdbconfig、mouseconfig和timeconfig是用来设置键盘类型、鼠标类型和时区的。在这些都设置好之后,就很少有机会再用到它们了。所以,可以把它们卸载掉。等需要改变键盘、鼠标和时区的时候,可以再从CD-ROM用rpm命令安装。

sendmail、procmail和mailx在通常情况下是必须要的。因为服务器上运行的各种各样的服务会用这些程序发消息给root用户,以建立系统日志(syslog)。

sendmail是一个强大的邮件传送代理(Mail Transport Agent,简称MTA),可以把邮件从一台计算机发送到另一台计算机。它实际上所起的作用就是通过网络或Internet把email传送到email的目的地。sendmail有很多不同的配置方式:可以做为一个把邮件转给邮件集中服务器(Mail Hub Server)的内部邮件服务器,也可以做为单独的mail服务器,或者做为网络上所有sendmail服务器的中央邮件集中服务器(Central Mail Hub Server)。因此,可以根据需要配置不同的sendmail服务器。所以,你要先把sendmail卸载掉,参考本书sendmail的配置和安装的相关章节,根据需要建立自己的sendmail服务器。

sendmail并不是自己处理邮件的分发,它是通过运行其它程序来完成这项工作。procmail是RedHat Linux用于本地邮件分发的分发代理(delivery agent)。因此,procmail只要装在中央邮件集中服务器(Central Mail Hub Server)上就行了。所以,没有必要在内部所有运行sendmail服务的计算机上都安装procmail程序。因为,这些内部的计算机会通过“/bin/mail”或sendmail把邮件转发到中央邮件集中服务器上。

Pump DHCP(Dynamic Host Configuration Protocol)和BOOTP(Boot Protocol)协议允许在IP网络上的设备,从服务器上获取它们的网络配置信息(IP地址、子网掩码、广播地址,等等)。【没有必要】

mt-st软件包包括mt和st磁带机驱动管理程序。mt(用于磁性磁带驱动器(magnetic tape drivers))和st(用于SCSI磁带驱动器)可以控制磁带的回卷、弹出、跳过文件或块以及其它。【没有必要】

eject程序允许用户用软件弹出可移动的介质,如:CD-ROM、软盘以及Jaz或Zip盘。【没有必要】

bc软件包包括:bc和dc两个应用程序,bc是一种非常精确的用于处理算术运算的语言。dc是基于堆栈的交互式计算器,是用在文本模式下的。【没有必要】

mailcap文件是用于metamail程序的。metamail通过读mailcap文件来确定怎么显示非文本的和多媒体的邮件信息。【没有必要】

apmd是高级能源管理(Advanced Power Management)daemon和实用工具。它可以监控笔记本电脑的电池使用情况。当电池电压过低的时候,它会给出警告。【没有必要】

所有支持PCMCIA的笔记本电脑都要用到kernel-pcmcia-cs软件包。PCMCIA卡是很小的卡片,可以是SCSI卡或是modem。【没有必要】

linuxconf是非常好的系统配置工具。linuxconf提供四种界面供你选择:命令行、文本菜单、X Window的图形界面和基于Web的界面。【没有必要,有bug的程序】

getty_ps软件包包括getty和uugetty两个程序,这两个程序是RedHat Linux系统中实现进程登录的基本程序。getty和uugetty是用于接受控制台或终端的登录请求。【没有必要】

setconsole是基本的系统工具,用在为一个新的控制台创建/etc/inittab、/dev/systty和/dev/console文件。控制台可以是本地的终端(直接通过显示卡连接到系统上)或是通过串口连接的控制台。【没有必要】

ispnptools软件包包括用于配置ISA接口的即插即用(Plug-and-Play)卡,符合PnP ISA Specification 1.0a标准。【没有必要】

kudzu是系统引导的时候运行的硬件探测程序,可以检测到哪些硬件从系统中删除或添加到系统中。【没有必要】

raidtools软件包包括在Linux系统中建立和维护软件RAID(磁盘阵列,用于容错和提高性能,需要两个以上的磁盘)。【取决于你用不用RAID】

GnuPG是GNU的数据通讯和存储的安全工具。它可以用来加密数据和创建数字签名。包括高级的密匙管理工具,而且遵循RFC2440中描述的OpenPGP的国际标准。【我们会在后面的章节介绍如何自己编译】

redhat-logos包括RedHat “Shawdow Man”和RPM的标志图片。【没有必要】

redhat-release是RedHat Linux的发行文件。【没有必要】

gd是处理gif文件的图形函数库。gd可以用于显示图像(线条、弧、文本、多种颜色、从其它图像中剪切和粘贴、填充),并把结果保存为gif文件。【没有必要】

pciutils包括各种各样的工具,用于检测和设置连接到PCI总线上的设备。【我们用其它的方法】

kbdconfig是文本模式的程序,提供了设置键盘映像的一个简单的界面。【没有必要】

mousconfig是基于文本模式的鼠标设置程序。mouseconfig在RedHat Linux系统中,创建配置和使用鼠标所需要的文件和链接。【没有必要】

timeconfig包括:timeconfig和setclock。timeconfig提供了一个简单的文本模式的工具,用来配置/etc/sysconfig/clock和/etc/localtime中的时间参数。【没有必要】

procmail是RedHat Linux用于处理本地邮件发送的程序。除了发送邮件,procmail还可以用于自动过滤、排序和其它处理mail的工作。而且,procmail是SmartList邮件列表程序的基础。【只用在邮件集中服务器上】

安装完服务器之后必须安装的软件

为了可以在你的服务器上编译软件,你还必须安装下面的RPM软件包。这部分安装是非常重要的,要求你安装所有如下所述的软件包。所有的这些软件都在RedHat 6.1第一张光盘的/RedHat/RPMS目录下,而且都是使你的Linux系统能够编译程序所必须要的。

* 第一步

首先,先mount 上CD-ROM驱动器,转到RPMS子目录下。

mount CD-ROM驱动器和转到RPMS目录用下面的命令:

[root@deep]# mount /dev/cdrom /mnt/cdrom/

[root@deep]# cd /mnt/cdrom/RedHat/RPMS/

下面是我们需要安装的软件包,只有安装了这些软件包才在Linux系统上编译程序。记住这不过是能够编译.tar.gz软件最少必须的软件包。有一些软件的编译可能还需要用到别的特殊的软件包。这些特殊的软件包在RedHat的光盘中都能找到。所以,编译程序的时候,如果出错了,可以先看看需要编译的软件包的README文件。

autoconf-2.13-5.noarch.rpm

m4-1.4-12.i386.rpm

automake-1.4-5.noarch.rpm

dev86-0.14.9-1.i386.rpm

bison-1.28-1.i386.rpm

byacc-1.9-11.i386.rpm

cdecl-2.5-9.i386.rpm

cpp-1.1.2-24.i386.rpm

cproto-4.6-2.i386.rpm

ctags-3.2-1.i386.rpm

egcs-1.1.2-24.i386.rpm

ElectricFence-2.1-1.i386.rpm

flex-2.5.4a-7.i386.rpm

gdb-4.18-4.i386.rpm

kernel-headers-2.2.12-20.i386.rpm

glibc-devel-2.1.2-11.i386.rpm

make-3.77-6.i386.rpm

patch-2.5-9.i386.rpm

注意:最好把这些软件一起全装了,省得在安装这些RPM包的时候总出现一些相关出错的信息。

* 第二步

安装所有这些软件只要用一个命令就够了。这个命令是:

[root@deep]# rpm -Uvh autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-5.noarch.rpm dev86-0.14.9-1.i386.rpm bison-1.28-1.i386.rpm byacc-1.9-11.i386.rpm cdecl-2.5-9.i386.rpm cpp-1.1.2-24.i386.rpm cproto-4.6-2.i386.rpm ctags-3.2-1.i386.rpm egcs-1.1.2-24.i386.rpm ElectricFence-2.1-1.i386.rpm flex-2.5.4a-7.i386.rpm gdb-4.18-4.i386.rpm kernel-headers-2.2.12-20.i386.rpm glibc-devel-2.1.2-11.i386.rpm make-3.77-6.i386.rpm patch-2.5-9.i386.rpm

* 第三步

为了让所有的改变都生效,必须退出再重新登录。退出的命令是:

[root@deep]# exit

安装和编译完在服务器上需要的所有软件之后,最好把上面几步安装的软件包都卸掉,除非有什么特殊的需要。这样做,其中一个原因是:如果黑客成功地入侵了你的服务器,他也不可能用上面这些软件来编译软件或改变二进制程序。同时,把它们卸载掉也释放了很多磁盘空间,这样当进行系统的安全性和一致性检查的时候,可以加快扫描所有文件的时间(文件少了)。

当然,有很多建立服务器的方法和策略,我在这本书中介绍的不过是我自己的观点,我的观点如下:

第一:每台服务器最好只安排一个特定的任务。你不应该把所有的服务都放在一台服务器上,否则,这台服务器的速度会受到影响(系统的资源要同时分给很多个进程),而且会降低系统的安全(在同一台服务器上运行太多的服务,黑客就有更多的机会找到系统的安全漏洞)。

第二:不同的服务器完成不同的任务。这样有利于简化管理(你可以清楚地知道每台服务器具体的用途、运行哪些服务、客户计算机(client)可以访问哪些端口,你也可以知道在日志文件中会看到什么,等等),而且还可以更好更灵活地控制每台服务器(专门用于邮件、Web、数据库、开发、备份,等等)。

举一个例子,一台专门用作开发和测试的服务器,就没有必要象上面介绍的那样,每一次装软件之前都要先装编译器,装完软件之后又把编译器卸掉,完全可以把编译器保留着。如果想知道更多的编译器的信息,请参考第八章《编译器的功用》。

服务器上已经安装的程序

因为我们选择定制安装我们的Linux系统, 下面是服务器上已安装的程序列表。这个列表必须和/tmp目录下的install.log文件一致,否则你就是没装全。不要忘了装全上一节《安装完服务器之后必须安装的软件》中的那些软件包,不然你编译一些程序的时候就会遇到问题。

Installing setup.

Installing filesystem.

Installing basesystem.

Installing ldconfig.

Installing glibc.

Installing shadow-utils.

Installing mktemp.

Installing termcap.

Installing libtermcap.

Installing bash.

Installing MAKEDEV.

Installing SysVinit.

Installing XFree86-SVGA.

Installing chkconfig.

Installing apmd.

Installing arpwatch.

Installing ncurses.

Installing info.

Installing fileutils.

Installing grep.

Installing ash.

Installing at.

Installing authconfig.

Installing bc.

Installing bdflush.

Installing binutils.

Installing bzip2.

Installing sed.

Installing console-tools.

Installing e2fsprogs.

Installing rmt.

Installing cpio.

Installing cracklib.

Installing cracklib-dicts.

Installing crontabs.

Installing textutils.

Installing dev.

Installing diffutils.

Installing ed.

Installing eject.

Installing etcskel.

Installing file.

Installing findutils.

Installing gawk.

Installing gd.

Installing gdbm.

Installing getty_ps.

Installing glib.

Installing gmp.

Installing gnupg.

Installing gpm.

Installing groff.

Installing gzip.

Installing hdparm.

Installing initscripts.

Installing ipchains.

Installing isapnptools.

Installing kbdconfig.

Installing kernel.

Installing kernel-pcmcia-cs.

Installing kudzu.

Installing ld.so.

Installing less.

Installing libc.

Installing libstdc++.

Installing lilo.

Installing pwdb.

Installing pam.

Installing sh-utils.

Installing redhat-release.

Installing linuxconf.

Installing logrotate.

Installing losetup.

Installing lsof.

Installing mailcap.

Installing mailx.

Installing man.

Installing mingetty.

Installing mkbootdisk.

Installing mkinitrd.

Installing modutils.

Installing mount.

Installing mouseconfig.

Installing mt-st.

Installing ncompress.

Installing net-tools.

Installing netkit-base.

Installing newt.

Installing ntsysv.

Installing passwd.

Installing pciutils.

Installing perl.

Installing procmail.

Installing procps.

Installing psmisc.

Installing pump.

Installing python.

Installing quota.

Installing raidtools.

Installing readline.

Installing redhat-logos.

Installing rootfiles.

Installing rpm.

Installing sash.

Installing sendmail.

Installing setconsole.

Installing setserial.

Installing setuptool.

Installing shapecfg.

Installing slang.

Installing slocate.

Installing stat.

Installing sysklogd.

Installing tar.

Installing tcp_wrappers.

Installing tcpdump.

Installing tcsh.

Installing time.

Installing timeconfig.

Installing timed.

Installing tmpwatch.

Installing traceroute.

Installing utempter.

Installing util-linux.

Installing vim-common.

Installing vim-minimal.

Installing vixie-cron.

Installing which.

Installing zlib.

给你的终端加点颜色

给终端加一点颜色,可以帮助区分目录、文件、设备、符号连接和可执行文件。我认为加上颜色可以让人少犯错误,并且可以让人感觉更好用。

编辑profile文件(vi /etc/profile)加入下面这些行:

# Enable Colour ls

eval dircolors /etc/DIR_COLORS -b

export LS_OPTIONS=-s -F -T 0 --color=yes

编辑bashrc文件(vi /etc/bashrc),加入下面这一行:

alias ls=ls --color=auto

退出,再重新登录,与颜色相关的环境变量就设定好了。

使你的软件保持最新的版本

为了使你的软件保持最新的版本,请定期查看RedHat Linux的勘误网页:。勘误网页通常可以解决90% RedHat Linux的系统问题。而且,RedHat在得到安全漏洞的通知之后,如果已经找到解决方案了,就会在24小时之内,在勘误网站上发布出来。必须经常查看这个地方。RedHat Linux服务器现在必须更新的软件是:

groff-1_15-1_i386.rpm

sysklogd-1_3_31-14_i386.rpm

initscripts-4_70-1_i386.rpm

e2fsprogs-1.17-1.i386.rpm

pam-0_68-10_i386.rpm

Linux kernel 2.2.14 (linux-2_2_14_tar.gz)

注意:Linux的内核是最重要的,必须经常更新。下面的一些章节将会介绍如何为你的服务器编译一个定制的内核。

在更新之前,你可以用下面的命令查看在系统中已经安装的软件。

[root@deep]# rpm -q

这里表示想查看的软件名,比如:XFree86、telnet,等等。

部件安装(选择软件包组)

上面都完成了之后,该选择安装哪些软件包了。在默认情况下,Linux是一个强大的操作系统,可以提供很多服务。但是,这些服务大多数都是没有必要的,而且会造成安全隐患。

安装Linux的正确方法是:安装一个稳定和安全的系统。首先,你只要必要的部件,也就是软件包组。通过选上“Select individual package”这个单选框,在后面的安装过程中,你可以选中或不选单独的软件包。

因为我们安装的是Linux服务器,所以没有必要安装图形界面(XFree86)。在服务器上安装图形界面意味着:更低的处理能力,更少的CPU时间,更少的内存,更多的安全问题,以及等等。图形界面一般只在工作站上使用。选择安装下面的软件包组:

* Networked Workstation

* Network Management Workstation

* Utilities

选择好软件包组之后,就应该选择单个的软件包了。

注意:选上“Select individual package”这个单选框(非常重要),因为只有这样才会让你选择安装单个软件包。

单个软件包的选择

安装程序列出可以选择的软件包组,每个软件包组下面是单独的软件。

下面列出的软件,因为安全、优化或者其它原因,请不要安装,待一会儿会解释的。

Applications/Archiving: dump

Applications/File: git

Applications/Internet: finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet

Applications/Publishing: ghostscript, ghostscript-fonts, mpage, rhs-printfilters

Applications/System: arpwatch, bind-utils, knfsd-clients, procinfo, rdate, rdist, screen, ucd-snmp-utils

Documentation: indexhtml

System Environment/Base: chkfontpath, yp-tools

System Environment/Daemons: XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind

System Environment/Libraries: XFree86-libs, libpng

User Interface/X: XFree86-75dpi-fonts, urw-fonts

在解释为什么不装这些软件包之前,可能有人会问:为什么不在服务器上装finger、ftp、fwhois和telnet呢?要知道这些软件从本质上来说是不安全的。假定有一个黑客已经入侵了你的服务器,他可以用finger、ftp、fwhois和telnet查询或入侵网络中的其它计算机。如果没有装这些软件,他就不能使用这些软件或者就得试图在你的服务器上安装这些软件,如果真的这样做,就会被你很容易地跟踪到。可以用Tripware这样的软件进行跟踪。

Applications/Archiving:

dump这个软件包包括dump和restore这两个程序。dump用来检查文件系统中的文件以确定哪些需要备份,然后把这些文件拷贝到磁盘、磁带或其它介质上。【没必要,我们用别的方法】

Applications/File:

GIT(GNU 交互式工具)可以浏览文件系统,查看文本或二进制文件,查看或停止进程,还包括一些其它相关的工具和shell脚本。(很象DOS下的NC)。【没必要】

Applications/Internet:

finger可以让用户查看系统中其他用户的登录名(login name)、家目录(home directory)、真实姓名(name)以及登录系统的时间,等等。【安全隐患】

ftp是标准的UNIX下的FTP客户软件(命令行)。FTP是在Internet上使用很广的文件传输协议。【安全隐患】

fwhois可以让系统中的用户查询whois数据库。【安全隐患】

ncftp是增强型的FTP客户软件。ncftp的增强包括:支持命令行编辑,命令历史记录,递归下载(包含子目录的下载),自动匿名登录,还有其它很多功能。【安全隐患,没必要】

rsh包括一些程序,这些程序可以在远程计算机上运行命令,登录到其它计算机或在计算机之间拷贝文件(rsh、rlogin和rcp)。【安全隐患】

ntalk包括Internet talk协议的客户端和服务器程序,你可以用它与在不同计算机上的人进行交谈(chat)。【安全隐患】

telnet是用得很多的登录远程计算机的协议。【安全隐患】

Applications/Publishing:

ghostscript是一套软件包括:PostScript(tm)解释器、C语言的函数库(ghostscript函数库实现了对PostScript语言的图形操作)和PDF文件的解释器。【没必要】

ghostscript font是一些PostScript(tm)字体,ghostscript解释器要用到这些字体。同时,这些字体也是ghostscript和X11共享的。【没必要】

mpage把纯文本的文件和PostScript(tm)文件输出到PostScript打印机上,可以在一张纸上打印多于一页的内容。【没必要,我们的服务器上没装打印机】

rhs-printfilter包括一组打印驱动,这主要是和RedHat的pinttool结合使用的。。【没必要,我们的服务器上没装打印机】

Applications/System:

arpwatch包括arpwatch和arpsnmp两个程序。arpwatch和arpsnmp都是网络监控程序。都是用来监控以太网和FDDI网络流量并且建立以太网网址(物理地址)和IP地址之间对应关系的数据库,如果两者的对应关系发生变化了,会自动用email报告。【没必要】

bind-utils包括一套工具用来查询DNS(域名服务器)以获得Internet上主机的信息。【在后面的章节我们会自己编译】

knfsd-clients包括showmount程序。showmount查询远程主机的mount daemon以获取远程主机上的NFS信息。【安全隐患】

procinfo命令可以从/proc(Linux内核虚拟出来的目录)目录获取系统信息,并用适当的格式显示在标准输出上。【没必要,我们用别的方法】

rdate根据RFC 868协议可以从网络中的其它计算机上获取日期和时间信息。【安全隐患】

rdist程序维护多台主机上相同文件的多个拷贝。如果可能,rdist会保留文件的owner,group,mode和mtime这些属性,而且它还可以动态的更新正在运行的程序。【安全隐患】

ucd-snmp包括各式各样的用于UCD-SNMP网络管理的实用工具。【安全隐患,没必要】

screen工具允许你在一个终端上,同时登录多次。screen对于使用telnet登录远程服务器或使用哑终端的用户比较有用。【没必要】

Documentation:

indexhtml包括一些HTML文件以及一些图片,在你成功安装RedHat Linux之后,作为浏览器的欢迎界面。【没必要】

System Environment/Base:

chkfontpath是简单的命令行程序,用来添加、删除和列出X Window的字体路径。【没必要】

NIS为网络上的所有计算机提供网络信息,如:登录名、口令、家目录和组信息。(有点象NT的Domain这个概念)【安全隐患】

System Environment/Daemons:

XFree86-xfs是XFree86的字体服务程序。能为远程的X server提供字体。(xfs支持TrueType(tm)字体)【没必要】

lpr提供管理打印服务的基本工具。【没必要,我们的服务器上不装打印机】

portmapper是一个安全工具,可以防止别人盗用NIS、NFA和其它敏感的信息。portmapper管理RPC(远程调用)连接。象NFS和NIS这些协议都要用到RPC。【没必要,安全隐患】

pidentd包含identd。identd是用来实现RFC1413身份验证服务的。identd查询TCP/IP连接,返回用户名以及其它一些关于连接进程的信息。【没必要,网络上几乎不会要求发送端运行identd,因为很多计算机都没有安装而且很多人把它关掉】

routed是路由daemon,接受RIP并且对外广播网络路由情况的RIP,这样才能维护当前的路由表。路由表对网络上的计算机是很重要的。有了路由表,计算机才能知道往哪儿发IP包。【没必要,安全隐患】

rusers允许用户查询连接在本地网络的计算机上的已登录用户的信息。rusers命令的输出格式很像who命令,但是列出的是一组或所有局域网上计算机的登录用户信息。【安全隐患】

rwho命令的输出格式也很像who命令,不过它可以显示那些运行rwho daemon的本地网上的计算机的登录用户信息。【安全隐患】

tftp提供TFTP协议的用户界面,允许用户上传和下传远程计算机上的文件。TFTP(Trivial File Transfer)协议通常用在启动无盘工作站。【安全隐患,没有必要】

ucd-snmp提供对SNMP协议的支持。SNMP(Simple Network Management Protocol)是一个网络管理协议。【安全隐患,没有必要】

System Environment/Libraries:

XFree86-libs包含X程序运行所需要的共享库,这些共享库放在统一一个软件包里是为了减少磁盘空间。(X Window的Client/Server结构,允许本机不装X Server而运行X程序—也就是X客户。如果想要运行X程序,在本机上就要装这个库)。【没有必要,我们不打算使用X程序】

libpng是用来处理PNG(Portable Network Graphics)图形文件的函数库。PNG是类似GIF的位图文件格式。【没有必要】

User Interface/X:

XFree86-75dpi-fonts是用于X Window的75dpi字体。

uwr-fonts是免费的35种标准PostScript(tm)字体。主要用于ghostscript。【没有必要】

下面安装程序开始格式化分区了,格式化完成之后,开始安装软件包。

怎样使用rpm命令

这一节主要介绍如何使用rpm命令在Linux系统上安装、卸载、升级、查询、列出清单、检查和编译RPM软件包。

* 安装RPM包

[root@deep]# rpm -ivh foo-1.0-2.i386.rpm

RPM包的文件名的含义是这样的:比如:foo-1.0-2.i386.rpm,软件包的名字是foo,版本1.0,发布号2,适用于i386体系结构。

* 卸载RPM包

[root@deep]# rpm -e foo

注意:用软件包的名字(foo)而不是文件名(foo-1.0-2)。

* 升级RPM包

[root@deep]# rpm -Uvh foo-1.0-2.i386.rpm

这个命令自动卸载旧的foo软件包,再安装新的。通常都是用“rpm -Uvh”来安装软件包,因为即使没有安装过旧版本的软件,它能正常运行,不受丝毫影响。

* 查询RPM包

[root@deep]# rpm -q foo

这个命令显示已安装的软件包的名字、版本、发布号。同时,这个命令还可以用来查看软件包是否安装。

* 显示软件包信息

[root@deep]# rpm -qi foo

这个命令显示软件包的信息,包括:名字,版本以及软件的描述。

* 显示软件包中的文件

[root@deep]# rpm -ql foo

列出RPM包中文件的清单。

* 检查软件包的签名

[root@deep]# rpm --checksig foo

这个命令用来检查软件包的PGP签名,以确保软件包的完整性以及没有被改动过。PGP的配置信息必须从配置文件中读入。在把软件包安装到系统中之前,要用这个命令先检查一下软件包。使用这个命令要求你先安装GnuPG或pgp。

* 用以源代码发布的RPM包来安装软件

[root@deep]# rpm -ivh --rebuild foo.src.rpm

这个命令会编译“foo”这个软件包,在“/usr/src/redhat/RPMS/i386/”目录下生成二进制的RPM包。然后,你就可以用上面介绍的命令,正常地安装软件包了。

标签: #linux 进程卡死