当前位置:Linux教程 - Linux - 熟悉Linux系统安全和优化(中)

熟悉Linux系统安全和优化(中)

brimmer·Gerhard Mourani


启动和停止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的勘误网页:http://www.redhat.com/corp/support/errata/index.html。勘误网页通常可以解决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,等等。