基于开放源代码的linux给用户提供了这样一个平台:可以根据自己的软、硬件环境,定制自己的Linux应用环境。因此,根据每个用户不同的应用范围定制应用环境,可以将Linux系统的性能提升到新的高度。
定制系统服务
linux在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。但是,开启不必要或有漏洞的服务则会给操作系统带来安全和性能上的影响。对于系统安全来说,如果操作系统中的任何一个漏洞,都可能使整个系统受到攻击。所以,增加系统安全的最佳办法就是尽量监视系统的功能。至于选择多少服务和功能,要根据工作需求和能力来决定。
下面以root身份运行:
#ntsysv
图1 将不需要的服务和进程前面的*去掉
打开如图1所示的窗口,在此可以开启/关闭每一项系统服务(以Red Flag 3.0为例)。将不需要的服务和进程前面的*去掉(用空格键),然后重新启动系统,这样就可以使不需要的服务和进程不再启动。用这种办法可以随时根据需求定制系统服务,不但安全有保障,而且还能提高系统的性能,一举两得。要保障linux正常工作,有些系统服务是必须启动的,例如crond、syslog、keytable、nfs、 kudzu。
为了高效安全地定制系统服务,下面介绍一下各项系统服务的功能。
alsasound Alsa 声卡驱动程序支持。Alsa声卡驱动程序本来是为了一种声卡Gravis UltraSound(GUS)而写的,它和OSS/Free 及OSS/linux兼容。
apmd 用来监视系统用电状态,并将相关信息通过syslogd 写入日志,也可以用来在电源不足时关机。一般用于笔记本电脑,若是台式机建议关闭。
atd 用At命令调度的任务,也在系统负荷比较低时运行批处理任务。
autofs 需要时自动转载文件系统,不需要时自动卸载。
chargen 端口chargen字符产生的缩写,输出一个可打印字符的旋转序列,用于测试字符终端设备。
chargen udp udp格式下端口chargen字符产生的缩写,输出一个可打印字符的旋转序列,用于测试字符终端设备。
crond 根据用户要求周期地运行调度的任务。它比较安全,配置简单,类似Windows中的计划任务。
dhcpd 提供了对动态主机控制协议(Dynamic Host Control Protocol)的访问支持。
echo 端口echo简单地回应所有为测试连接发送给它的数据。
echo udp udp格式下端口echo简单地回应所有为测试连接发送给它的数据。
gpm 为文本模式下的linux程序,如MC(Midnight Commander)提供了鼠标的支持。它也支持控制台下鼠标的拷贝、粘贴操作及弹出式菜单。
inetd 因特网操作服务程序。监控网络管理服务的需求,并在必要的时候启动相应的服务程序。通常,inetd 管理的程序有telnet、ftp、rsh和rlogin。关闭inetd也就关闭了这些由它管理的服务。
http 它是著名的WWW服务器,可用来提供HTML文件以及CGI动态内容服务。
isdn isdn的守护程序。
keytable 该程序的功能是转载/etc/sysconfig/keyboards里说明的键盘映射表。该表可以通过kbdconfig工具进行选择,应该使该程序处于激活状态。
kudzu 它是一个硬件检测程序,和Windows中的添加新硬件差不多。如果系统核心支持该硬件,并且有该驱动程序,就可自动装载。
linuxconf 它是linux下一个有效的系统配置工具,该服务允许远程运行。
linuxconf web 在Web方式下使用linuxconf。
lpd 系统打印守护程序,负责将lpr等程序提交给打印作业。
medusa 支持Web的浏览器。
mysql 一个快速高效可靠的小型SQL数据库引擎。
ntalk 允许用户把自己的计算机和其它的计算机连接起来,然后向前或向后传送信息。
netfs 负责装载/卸载NFS、Samba、NCP(Netware)文件系统。
network 激活/关闭启动时的各个网络接口。
nfs 一个流行的、基于TCP/IP网络的文件共享协议。该服务提供了NFS文件共享服务,具体的配置在/etc/ exports文件里。
nscd 该服务负责密码和组的查询,并且缓冲查询结果。如果系统有比较慢的服务(如NIS和NIS+),则应该启动该服务。
pxe 用于远程无盘的linux系统启动的服务程序。
pcmcia 主要用于支持笔记本电脑。
rexec 它是一个安全、分散式的远程执行系统,用于集群计算机的平行和连续运行。
random 保存和恢复系统的高质量随机数生成器。这些随机数是由系统一些随机行为提供的。
routed 该守护程序支持RIP协议的自动IP路由表维护。RIP主要使用在小型网络上,大一点的网络就需要复杂一点的协议。
rsync 叠加的Ftp Server,允许循环检查。
rsh 远程主机上启动一个shell,并执行用户命令。
rwhod 允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表,与finger类似。
swat Samba的一个工具包,使用901号端口。
sendmail 邮件服务器。
smb 启动和关闭smbd和nmbd守护程序,以提供SMB网络服务。
snmpd 简单网络管理协议(SNMP)的守护程序。
syslog 是操作系统提供的一种机制,守护程序通常使用这种机制将各种信息写到各个系统日志文件。通常应该启动该服务。
xfs X-Window系统的字体服务器。
xinetd 是inetd继承服务,监控网络对各种管理的服务的需求,并在必要的时候启动相应的服务程序。
以上这些系统服务中,安全隐患比较大的是:rsh、rwhod、rexec、snmp、named、sendmail。对于确实需要的系统服务,应该尽量选用最新的版本程序,并增加其它安全防范。
另外,许多linux产品在系统初始化后缺省地启动X-Window 管理器。如果只编译程序或编辑配置文件,那么启动X-Window管理器将会消耗大量系统资源。禁用X-Window管理器的方法是:编辑 /etc/inittab 文件,找到内容为id:5:initdefault的那一行,把它改为 id:3:initdefault,系统重新启动后将提供命令行登录。当需要运行X-Window管理器的时候,只要输入startx 就可以了。
根据硬件进行优化
1.CPU
CPU是linux主机的核心硬件,根据CPU型号在编译时优化以获得最佳性能。在/etc/profile文件中,含有系统环境和启动程序的配置信息,采用-O9 来编译程序时,运行速度也是最快的。编译时使用-fomit-frame-poinetr选项,程序运行时访问变量会使用堆栈。使用-mcpu=cpu-type和 -march= cpu-type时,gcc会对针对CPU型号进行优化。
如果CPU是Pentium Pro、PentiumⅡ、PentiumⅢ、AMD K6-2、K6-3、Althon,那么在“/etc/profile”加入:
CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
-march=pentiumpro -fomit-
frame-pointer -fno-exceptions'
如果CPU是Pentium 、Pentium MMX、AMD K5 、IDT、Cyrix,那么在“/etc/profile”加入:
export CFLAGS=-O3 -march=pentium -mcpu=pentium -
ffast-math -funroll-loops -fomit-frame-pointer -
fforce-mem -fforce-addr -malign-double -fno-exceptions
2.硬盘
采用UDMA/33、66、100、133技术的硬盘,其最高传输速率是33MB/s、66MB/s、100MB/s、100MB/s。从理论上来说,它是IDE硬盘(这里是指PIO MODE4模式,其传输率是16.6MB/s)传输速率的3~6倍,但是在linux缺省设置中,DMA却是被禁用的,所以必须将它打开。我们可以使用/sbin/hdparm程序打开它。hdparm 的一些常用选项如下:
/sbin/hdparm -c1 /dev/hda或hdb或hdc等启用 PCI 总线上的 32 位 I/O模式传输数据。
/sbin/hdparm -d1 /dev/hda启用 DMA模式传输数据。
/sbin/hdparm -d1 -X66/dev/hda启用UltraDMA模式传输数据。
获取系统中当前硬盘驱动器的设置列表的方法是(作为root)输入:
$/sbin/hdparm /dev/hda
接着再输入命令:
$/sbin/hdparm -kl /dev/hda
使硬盘在Reset之后仍然保持上述的设置。把一切优化到最佳状态后,请把各种命令添加到 /etc/rc.d/rc.local 文件中去,使这些命令在每次系统引导时自动运行。
3.内存
在linux下使用free可以观察内存的使用情况。如果发现Linux只能使用其中的一部分,则在/etc/lilo.conf 加入append="mem=XXX"就可以,其中XXX是物理内存容量。这样可以告诉Linux使用全部内存。
如果对计算速度要求很高,可以通过增加内存来实现,使用ramdisk技术。 一个A RamDisk就是把内存假设为一个硬盘驱动器,并且在它的上面存储文件。假设有几个文件要频繁的使用,如果将它们加到内存当中,程序运行速度会大幅度提高,因为内存的读写速度远高于硬盘。划出部分内存提高整体性能,不亚于更换新的CPU。像Web服务器这样的计算机,需要大量读取和交换特定的文件。因此,在Web服务器上建立RamDisk会大大提高网络读取速度。
$mkdir /tmp/ramdisk0
$mke2fs /dev/ram0
$mount /dev/ram0 /tmp/ramdisk0
上面这三个命令将会为RamDisk创建一个目录、格式化RamDisk(创建件系统),并把RamDisk装载到目录“/tmp/ramdisk0”中。现在,就可以把它作为一个磁盘分区使用了。
把下面这一行加到你的lilo.conf 文件中去:
ramdisk_size=20000
这样,当键入LILO命令并重新启动后,RamDisk的大小将为20MB。
如果你有512MB以上的内存,划出256MB作为暂存区/tmp,当很多程序用到/tmp,如Web服务,那么系统性能会大大提高。重新启动后,/tmp 中将被清空。注意:一定要记住保存RamDisk中有用的东西。
以上介绍了如何根据工作要求定制linux系统应用环境,最后要强调的是一定要进行系统备份。
定制自己的linux应用环境(二)
定制linux启动方式
linux系统有很多启动方法,有硬盘LILO启动、使用软盘启动、利用GRUB(GRand Unified Bootloader)启动、从其它操作系统直接启动等等,其中使用最多的是硬盘LILO启动。
现在大多数linux发行版本的LILO都有同样的一个问题:根分区(/boot分区)不能分在超过1024柱面的地方,一般是在8.4GB左右的地方,否则LILO不能安装,或者安装后不能正确引导系统。我想这可能是Linux的一个遗憾之处。不过可以通过下载补丁LILO 21.4.3来解决这个问题。LILO 21.4.3采用了 EDD BIOS 延伸功能,破除 1024 柱面开机的限制,并且将支持的硬盘大小增进到 2TB。下载地址:http://www.ccidnet.com/soft/soft_down_addtimes.php3?id=14430&url=http://download1.ccidnet.com/20001130/lilo.tar.gz。
在安装linux时,安装程序一般都会提示制作一张软盘启动盘,因为在系统需要紧急恢复的情况下这一张小小的软盘是非常有用的。Linux的启动软盘有boot盘和boot/root盘之分。boot盘只能用来启动已经安装在硬盘上的Linux系统,而boot/root盘本身就是一个小Linux系统。制作boot Linux的启动软盘比较简单:
#mkbootdisk --device /dev/fd0 2.xx.xx
上面代码“--device /dev/fd0”表示要建立启动软盘,也是默认选项,因此也可以省略它;接下来的参数是内核版本号,如2.2.26。
下面详细介绍一下制作boot/root盘。
首先制作一个DOS启动盘(format a:/s),将装载程序loadlin.exe和可引导内核vmlinuz拷贝到软盘上,然后建立自动批处理文件autoexec.bat,其内容如下:
loadlin vmlinuz root=/dev/hdax ro
在linux安装光盘上都可以找到loadlin.exe和某个可引导内核vmlinuz,在DOS中就可以拷贝到A:,其中hdax为自己的根分区, ro表示 readonly。
GRUB(GRand Unified Bootloader) 是一个多重启动管理器,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括linux 、OpenBSD、GNU HURD,以及DOS、FreeBSD、Solaris、NetBSD、BeOSi、OS/2、Windows 95/98/Me、Windows NT/2000。GRUB和LILO相比,GRUB可以引导根分区在8.4GB以外的操作系统,不需要打补丁,可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。
GRUB与LILO相比,它有以下特点:
◆ 支持大硬盘 只要安装时大硬盘是在LBA模式下,GRUB就可以引导根分区在8GB以外的操作系统。
◆ 支持开机画面
GRUB支持在引导开机的同时显示一个开机画面,可以制作自己的个性化开机画面,GRUB支持640x480、800×600各种模式的开机画面,而且可以自动侦测选择最佳模式。
◆ 两种执行模式
GRUB不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如在linux下编译了一个新的核心,但不能确定它能不能工作,这时就可以在引导时动态改变GRUB的参数,尝试装载这个新的核心进行使用。GRUB的命令行有非常强大的功能,而且支持如bash一样的历史功能,可以用上下键来寻找以前的命令。
◆ 菜单式选择
GRUB使用选单来选择不同的系统进行引导;还可以配置各种参数,如延迟时间、默认操作系统等。
◆ 分区位置改变后不必重新配置
GRUB是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,GRUB就可以引导系统。
GRUB还有许多非常强大的功能,例如支持多种外部设备、动态装载操作系统内核,甚至可以通过网络装载操作系统核心。GRUB支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。
从Red Hat linux 7.2起,GRUB取代LILO成为了默认的启动装载程序。
其它操作系统也可以启动linux。Loadlin.exe可以在DOS环境下迅速启动Linux,而且无需重启计算机。启动方法是将Linux内核文件和装载程序loadlin.exe复制到DOS分区,再编写一个Linux.bat的批处理文件,其内容如下:
c:loadlin c:vmlinuz root=/dev/hda1 ro
上面代码中,ro表示readonly。以后在DOS下要启动linux时,运行Linux.bat就可以了。这样启动Linux快速、高效,可以减少系统自检时等待的时间。
上面介绍了几种linux的启动方法,读者可以根据自己的情况选择。对于Linux的初学者使用LILO启动还是比较安全的,当对Linux比较熟悉以后,GRUB(GRUB配置较复杂)是一个不错的选择。
定制linux IPv6网络
目前广泛使用的IPv4有很大的局限性,比如:
◆ 地址空间的局限性 IP地址空间的危机由来已久,也是升级的主要原因。
◆ 性能 IPv4是20多年前设计的,目前已经不能满足使用要求,特别是在服务质量(QoS)等方面。
◆ 安全性 IPv4的安全性能明显已经落伍。我们从大量的安全报告中可以看出,它尽管采用了各种方法,但安全漏洞还是存在很多。IPv6中包含了一套用于保护IP通信的IP安全协议(IPSec),它对安全机制的增强可以简化安全虚拟专用网(VPN)的实现。
从以上几点可以看出,使用IPv6在地址空间、网络性能、安全性等方面有迫切要求。
linux内核(Kernel)从 2.2.xxx开始支持IPv6 ,不过使用前要看系统IPv6模块是否被加载:
# test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
如果没有加载可以手工加载:
# modprobe ipv6
# lsmod |grep -w 'ipv6' && echo "IPv6 module successfully loaded"
如果你的内核不支持IPv6,也可以编译内核。不过根据我的经验,最好使用2.4.xx的核心。IPv6虽然支持2.2.xx的核心,但需要ICMPv6 支持的补丁。我建议初次使用IPv6的读者,使用Red Hat 7.1、Mandrake 8.0或SuSE 7.3。
使用“ifconfig -a”命令,如果可以看到一个 inet6 的 local link地址,就可以使用IPv6了,如图1所示。
图1 第五行显示IPv6已经加载
当系统支持Ipv6后,还要安装以下软件包:net-tools,其中包括netstat、route、iptunnel;iproute 包括IP;iputils-ping,其中包括ping6;iputils-tracepath,其中包括traceroute6。
以上软件配置好了就可以使用IPv6。
下面举例说明在两台支持IPv6的linux主机上建立隧道(tunnel)。
1.配置
主机1的配置为:192.168.0.1 (IPv4)。主机2的配置为:192.168.0.2(IPv4)。网络结构见图2所示。
图2 进行测试的网络结构
(1)在HOST1上配置HOST2的IPv6兼容地址。
(2)IPv4兼容的IPv6地址格式:0:0:0:0:0:0:IPv4(如图3所示)。
图3 IPv4兼容的IPv6地址格式
#/sbin/ifconfig sit0 inet6 tunnel ::192.168.0.1
(3)配置HOST1和HOST2 之间的隧道和两端主机的IPv6地址:
#/sbin/ifconfig sit1 up
#/sbin/ifconfig sit1 add fe80:250:fcff:fe56:75f5/10
#/sbin/route -A inet6 add fe80:250:fcff:fe56:75f5/10 sit1
(4)建立点对点(HOST 1 to HOST2)隧道(tunnel)和路由。
#/sbin/route -A inet6 add fe80::/16 gw fe80:250:fcff:fe56:75f5/10 sit1
至此配置结束。
2.测试
(1)检测是否建立IPv6 路由表:
#route -A inet6
上面代码表明,结果显示一切正常(如图4所示)。
图4 已经检测到IPv6路由表
(2)使用ping6命令进行检测,检测结果成功如图5所示。
图5 HOST1已经可以ping6通HOST2
现在对linux下IPv6的研究还不是很多,更多的资料可以在http://www.bieringer.de/linux/IPv6/找到。
定制linux应用环境(三)
IPv4技术在网络发展中起到了巨大的作用,不过随着时间的流逝它无论在网络地址的提供、服务质量、安全性等方面都越来越力不从心,IPv6呼之欲出。由于IPv6和IPv4在许多地方有了本质的变化:不论在结构上还是系统工具的使用上都不大相同,特别是在命令行下的操作也不大相同。另外,一些IPv4的工具在IPv6中将不再可以使用,IPv6有一些新的工具。这一讲我详细介绍一下IPv6的地址、路由设定、网络工具、安全工具,使大家可以从IPv4快速过渡到IPv6。
深入部署linux下的IPv6
1.简单对比一下linux下IPv4和IPv6
(1)IPv4可提供4294967296个地址。IPv6将原来的32位地址空间增大到128位,数目是2的128次方,能够对地球上每平方米提供6×1023个网络地址。
(2)IPv4使用地址解析通信协议(ARP)。IPv6使用多点传播Neighbor Solicitation消息取代地址解析通信协议(ARP) 。
(3)IPv4中路由器不能识别用于服务质量的QoS 处理的payload。在IPv6中,路由器使用Flow Label字段,可以识别用于服务质量的QoS处理的payload。
(4)IPv4的回路地址为127.0.0.1。IPv6的回路地址为0000:0000:0000:0000:0000:0000:0000:0001可以简写为::1。
(5)在IPv4中,动态主机配置协议( Dynamic Host Configuration Protocol,DHCP)实现了主机IP地址及其相关配置的自动设置。一个DHCP服务器拥有一个IP地址池,主机从DHCP服务器租借IP地址并获得有关的配置信息(如缺省网关、DNS服务器等),由此达到自动设置主机IP地址的目的。IPv6继承了IPv4的这种自动配置服务,并将其称为全状态自动配置(Stateful Autoconfiguration)。
(6)IPv4使用Internet群组管理通信协议(IGMP)管理本机子网络群组成员身份。IPv6使用Multicast Listener Discovery (MLD)消息取代IGMP。
(7)IPv4选择性支持IPSec。IPv6则自动支持IPSec。
2.IPv6中的地址
(1)IPv6的单播地址可识别在单播地址类型领域内的单一界面;
(2)IPv6的多播地址可识别网络多个接口;
(3)Ipv6的随播地址(Anycast addresses)它用于邻近的DNS或DHCP服务,随播地址由动态路由协议控制。
3.举例说明IPv6的地址
(1)设定地址和它的存活时间(见图1所示):
# /sbin/ip -6 addr show dev eth0
图1 设定地址和它的存活时间
(2)在IPv6下为主机增加一个IP地址:
#/sbin/ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0
然后使用Ifconfig命令查看(见图2所示)。
图2 第4行处为增加的第2个IP地址
4.配置IPv6的路由表
(1)显示现有路由表(见图3所示):
#/sbin/ip -6 route show dev eth0
图3 显示的路由表
(2)同一个界面上的不同IPv6路由(见图4所示):
# /sbin/ip -6 route show dev eth0
# /sbin/route -A inet6 |grep -w “eth0”
图4 etho接口的所有路由表
(3)设定IPv6的路由信道:
#/sbin/route -A inetd6 add 2000::/3 gw 3ffe:ffff:0:f101::1
(4)删除IPv6的路由信道
#/sbin/route -A inetd6 del 2000::/3 gw 3ffe:ffff:0:f101::1
5.IPv6的多点传播Neighbor Solicitation
IPv6的Neighbor Discovery继承了IPv4的ARP(Address Resolution Protocol地址解析协议),可以重新得到网络邻居的信息,并且可以编辑/删除它。Neighbor detection核心负责对探测成功的网络邻居进行追踪,可以用“ip”来挖掘其中的信息。
使用下面的命令可以知道网络邻居的设定(见图5所示):
#ip -6 neigh show fe80::201:23ff:fe45:6789 dev eth0 ll addr 00:01:23:45:67:89
router nud reachable
其中,00:01:23:45:67:89是路由器的layer 2 MAC地址。
图5 网络结构
6.IPv6的常用工具
(1)ping6 用来测试简单传输发送ICMPv6响应请求,并等待ICMPv6响应包,它必须有适当的root权限才能使用。举例如下:
# ping6 -c 1 ::1
用local-addresses作为ping6目标必须指定一个网卡界面,否则核心将不知道数据包发往哪个网络设备。
# ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205
(2)traceroute6 通过向目标发送不同IP生存时间(TTL)值的相应的数据报,确定目标所采用的路由。举例如下:
#traceroute6 fe80::2e0:18ff:fe90:9205
(3)racepath6 用来追踪最大传输单元(MTU)的路径。举例如下:
#tracepath6 fe80::2e0:18ff:fe90:9205
除此之外,linux下IPv6的工具软件还有ifconfig netstat等。
定制linux应用环境(三)
7.IPv6的安全工具
(1) nmap 它是一款运行在单一主机和大型网络情况下优秀的端口扫描工具,具有高速、秘密、可以绕过防火墙等特点。它支持多种协议,如TCP、UDP、ICMP等。nmap也具有很多高性能和可靠性的特点,如动态延时计算、包超时重发、并行端口扫描、通过并行ping6探测主机是否当掉。它的网址是 http://www.insecure.org/nmap/nmap。它从3.10ALPHA1版本开始支持IPv6。需要说明的是运行nmap应在root权限下。
nmap 安装编译过程如下:
#tar zxvf nmap-3.10ALPHA1.tgz
#cd nmap-3.10ALPHA1
# ./configure;# make;#make install
命令格式为:nmap [Scan Type(s)] [Options] ,举例如下:
# nmap -6 -sT ::1
其结果见图6。
图6 显示检测到一个IP地址
(2)Tcpdump 它是linux下主要的数据包捕获工具,IPv6支持的版本是3.6,它的网址为http://www.tcpdump.org/。
安装编译过程如下:
#tar zxvf tcpdump-3.6.2.tar
#cd tcpdump-3.6.2
# ./configure;# make;#make install
安装后要打一个补丁:
libpcap-0.6.2.tar
补丁安装编译过程如下:
#cd tcpdump-3.6.2
#tar zxvf libpcap-0.6.2.tar
#cd libpcap-0.6.2.;#./configure;# make ;#make install
运行Tcpdump最好具有root权限,举例如下(见图7所示):
#tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
图7 显示Tcpdump捕获的数据报
到此为止,如何定制linux应用环境已经讲完了,本文的主要目的是为了充分挖掘Linux的潜力。高性能、安全性和稳定性是计算机系统永恒的主题,是我们不懈的追求。
下载速度太慢了,来这里看看吧。