<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
	<channel>
		<title>金麦网络</title>
		<link>http://www.kingmx.com</link>
		<copyright>Copyright (C) 2006 金麦网络-Kingmx.com All Rights Reserved.</copyright>
		<item>
			<title>用 IPFW 为 FreeBSD 操作系统建立防火墙</title>
			<link>http://www.kingmx.com/article.php?id=17740</link>
			<pubDate>2007-8-15</pubDate>
			<description><![CDATA[
Ipfirewall（即IPFW）是一个FreeBSD操作系统下的IP数据包过滤和通信记录工具。IPFW作为一个独立的运行时刻可装载模块，就包含在基本的FreeBSD安装包中。在rc.conf中含有语句“firewall_enable=YES”时，系统会动态地装载内核模块。 
第一步：为IPFW而编译FreeBSD内核 
这一步是可选的。如果你不想启用NAT功能，你就没有必要将IPFW编译到FreeBSD内核中。然而一些老的版本可能没有编译IPFW。下面我们介绍将IPFW编译进入内核中去的方法。 
如果你得到如下的一个错误消息：“ipfw: getsockopt(IP_FW_GET): Protocol not available ”，即协议不可使用，那你就必须编译内核的源代码。 
另一个可选项是打开默认的内核配置文件/usr/src/sys/i386/conf，并找到IPFIREWALL选项： 

# grep IPFIREWALL /usr/src/sys/i386/conf

第二步：编译并安装带有IPFW的定制内核 
首先是复制默认的内核文件： 

# cd /usr/src/sys/i386/conf
# cp GENERIC IPFWKERNEL

然后增加IPFW支持： 

# vi IPFWKERNEL

添加下面的指令： 

options IPFIREWALL # required for IPFW
options IPFIREWALL_VERBOSE # optional; logging
options IPFIREWALL_VERBOSE_LIMIT=10 # optional; don't get too many log entries
options IPDIVERT # needed for natd

保存并关闭文件。编译内核，键入如下的命令： 

# cd /usr/src
# make buildkernel KERNCONF=IPFWKERNEL

安装新的内核： 

# make installkernel KERNCONF=IPFWKERNEL

现在重新启动系统： 

# reboot

第三步：启用IPFW 
首先打开/etc/rc.conf文件： 

# vi /etc/rc.conf

然后，添加如下的设置： 

firewall_enable="YES"
firewall_script="YES"
firewall_script="/usr/local/etc/ipfw.rules"

保存并关闭文件。 
第四步：编写防火墙规则脚本 
你需要将防火墙规则放到一个被称为/usr/local/etc/ipfw.rule的脚本中： 

# vi /usr/local/etc/ipfw.rule

添加如下的代码： 

IPF="ipfw -q add"
ipfw -q -f flush

#loopback
$IPF 10 allow all from any to any via lo0
$IPF 20 deny all from any to 127.0.0.0/8
$IPF 30 deny all from 127.0.0.0/8 to any
$IPF 40 deny tcp from any to any frag

# statefull
$IPF 50 check-state
$IPF 60 allow tcp from any to any established
$IPF 70 allow all from any to any out keep-state
$IPF 80 allow icmp from any to any

# open port ftp (21,22), ssh (22), mail (25)
# http (80), dns (53) etc
$IPF 110 allow tcp from any to any 21 in
$IPF 120 allow tcp from any to any 21 out
$IPF 130 allow tcp from any to any 22 in
$IPF 140 allow tcp from any to any 22 out
$IPF 150 allow tcp from any to any 25 in
$IPF 160 allow tcp from any to any 25 out
$IPF 170 allow udp from any to any 53 in
$IPF 175 allow tcp from any to any 53 in
$IPF 180 allow udp from any to any 53 out
$IPF 185 allow tcp from any to any 53 out
$IPF 200 allow tcp from any to any 80 in
$IPF 210 allow tcp from any to any 80 out

# deny and log everything
$IPF 500 deny log all from any to any

保存并关闭文件。 
第五步：启动防火墙 
你可以重新启动服务器，或者通过在命令行输入如下的命令，可以重新加载这些规则： 

# sh /usr/local/etc/ipfw.rules

如果要依次列示所有的规则，需要键入下面的命令： 

# ipfw list

]]></description>
		</item>
		<item>
			<title>快速安全地建立Linux用户账户</title>
			<link>http://www.kingmx.com/article.php?id=17739</link>
			<pubDate>2007-8-15</pubDate>
			<description><![CDATA[
如果你需要建立一个用户账户，使其可对系统外壳进行访问，那么对登录工具的唯一逻辑选择就是OpenSSH。你所需要的只是用户的公钥（public key），用户只需要你的IP地址或者是主机名（用户需要靠此登录）。通常情况下，这就足够了。 
有时，用户可能需要知道其口令是什么。如果用户需要使用Sudo程序，就需要通过口令进行身份验证。理想情况下，这种信息是通过电话或者加密的电子邮件提供的，不过这个口令自身有时会通过明文或者纯文本的电子邮件提供。 
理想的情况是创建用户账户，获得用户的SSH公钥，并为用户创建一个随机口令，用户登录之后立即修改这个口令。这些都很容易完成。 
对于用户，这是相当简单的。要创建一对公/私钥，只需执行： 

$ ssh-keygen -t dsa

你还应该让用户发送~/.ssh/id_dsa.pub文件。在服务器端，事情也并不太困难。首先，你要创建用户账户： 

# useradd -c "Joe User" -s /bin/bash -m joe
# openssl rand -base64 6 | tee -a ~joe/.password | passwd -stdin joe

这就创建了一个用户joe，并且为它分配了一个随机口令，并将同样的口令存储在~joe/.password中，在这里joe可以看到其口令。 
如果你通过/etc/ssh/sshd_config锁定了账户，一定要记住增加下面的命令，来允许joe访问系统： 

AllowUsers joe

此外，还要将PasswordAuthentication设为no，强制所有的登录都要使用公钥。 
最后，一定要将id_dsa.pub密钥复制到用户的主目录中，并且分配适当的所有权和权限： 

# mkdir ~joe/.ssh
# chmod 700 ~joe/.ssh
# cp id_dsa.pub ~joe/.ssh/authorized_keys
# chmod 600 ~joe/.ssh/authorized_keys
# chown -R joe:joe ~joe/.ssh

好了，全部搞定。现在用户可以使用其SSH私钥来登录，而且能够访问Sudo或者需要一个实际的口令来进行身份验证。
]]></description>
		</item>
		<item>
			<title>教您在Ubuntu Linux系统上架设Web服务器</title>
			<link>http://www.kingmx.com/article.php?id=17710</link>
			<pubDate>2007-8-10</pubDate>
			<description><![CDATA[
　　Ubuntu Linux是在Debian的基础上开发出来的，Ubuntu系统能够良好地运行在Intel x86、PowerPC和AMD64位处理器等多种硬件平台上，并且可以从全球范围内的开放源代码社团中获得良好的支持。尽管Ubuntu是一种新兴的Linux分支，但Ubuntu却为Apache提供了丰富的软件支持，所以，Ubuntu非常适合作为Web服务器的平台。今天，我就给大家介绍如何在Ubuntu Linux系统上迅速搭建Apache Web服务器，希望本文对读者学习Ubuntu Linux系统有所帮助。 
　　一、安装Apache 
　　下面，我们首先介绍如何安装Apache。具体安装命令如下所示： 
　　$ sudo apt-get install apache2 
　　然后运行Apache，命令如下所示： 
　　$ sudo /etc/init.d/apache2 restart 
　　Apache在安装期间将会新建一个目录：/var/www，该目录是该服务器中存放文档的根目录。只要在浏览器的地址栏输入http://localhost/或机器的IP地址就能访问放置在此目录中的所有文档。 
　　二、安装PHP 
　　PHP是一种流行的服务器端脚本语言，一般与MySQL或 Postgres结合起来用于管理Web内容、blog和论坛。下面介绍其安装方法，其实它的安装也很简单，命令如下所示： 
　　$ sudo apt-get install libapache2-mod-php5 
　　重新启动Apache以加载上面安装的模块： 
　　$ sudo /etc/init.d/apache2 restart 
　　为了验证PHP模块是否正确加载，我们可以建立一个PHP文件，然后尝试通过Web服务器访问该文件。此外，我们知道PHP内建了一个phpinfo函数，该函数能够给出它的环境的详细信息。所以我们还可以利用下面的命令来检查PHP的工作情况： 
　　sudo sh -c “echo ‘' > /var/www/info.php” 
　　之后，在浏览器地址栏键入http://localhost/info.php，然后回车，这时应该能看到一个界面，给出刚才安装的PHP的详细信息。需要注意的是，如果在此过程中浏览器不显示页面，而是提示你下载文件，这就说明Apache没有正确加载PHP模块。解决问题的办法是，在/etc/apache2/apache2.conf 或/etc/apache2/mods-enabled/php5.conf文件中加入下面一行命令： 
　　AddType application/x-httpd-php .php .phtml .php3 
　　加入上面的命令行后，为了保证Apache重新读取配置文件关闭，我们可以通过下面的命令将其关闭，然后再加以启动： 
　　$ sudo /etc/init.d/apache2 stop 
　　$ sudo /etc/init.d/apache2 start 
[page]
　　三、配置动态虚拟主机 
　　一般情况下，我们会在Web服务器上寄放多个Web站点，并且每个站点都有它自己的虚拟服务器。对于Apache来说，它同时支持基于名称的虚拟服务器和基于IP的服务器。 
　　对于基于IP的虚拟服务器，每个站点都具有一个单独的IP地址，这样的缺点是使用太多的IP地址，但如今IPv4的地址已有枯竭的迹象，所以不提倡使用，通常在要求使用SSL 时才使用。
　　对于基于名称的虚拟服务器，多个Web站点共享一个IP地址。在这种情况下，通常根据HTTP请求头部来决定将其发给哪一个站点。为此，我们需要为每个虚拟服务器分别建立一个配置，给作为Web站点的根的目录以及主机命名。但是，如果这样的话我们每当添加一个新的虚拟服务器时，就要修改Apache的配置并重新启动，这的确很烦人呢！ 
　　值得高兴的是，如果使用动态虚拟主机技术的话，可以随时加入虚拟主机时而不必重新配置或启动Apache。该技术要用到一个模块，称为vhost_alias。我们可以通过在Apache2已启用的模块目录中建立一个符号链接来启用该模块，命令如下所示： 
　　$ sudo ln -s /etc/apache2/mods-available/vhost_alias.load \\ 
　　/etc/apache2/mods-enabled/vhost_alias.load 
　　要想使vhost_alias正常工作，我们还需要修改/etc/apache2/apache2.conf 来关闭常规名称（canonical names），修改日志文件的配置，并为我们的虚拟主机规定存放位置。下面是一个实例： 
　　#从“Host:”头中取得主机名 
　　UseCanonicalName Off 
　　# 这种日志格式可以从第一个字段中提取出主机名 
　　LogFormat “%V %h %l %u %t “%r” %s %b” vcommon 
　　CustomLog /var/log/apache2/access_log vcommon 
　　# 在返回请求的文件名路径中包含主机名 
　　VirtualDocumentRoot /var/www/vhosts/%0/web 
　　VirtualScriptAlias /var/www/vhosts/%0/cgi-bin 
　　接下来，创建存放虚拟主机的目录，命令如下： 
　　$ sudo mkdir /var/www/vhosts 
　　新建一个基干虚拟服务器，命令如下所示： 
　　$ sudo mkdir -p /var/www/vhosts/skeleton/cgi-bin 
　　$ sudo cp -a /var/www/apache2-default /var/www/vhosts/skeleton/web 
　　重新启动apache2，使得上面的配置生效，方法如下所示： 
　　$ sudo /etc/init.d/apache2 restart 
　　好了，现在我们可以建立基于名称的虚拟主机了。方法是将基干拷贝到要响应的主机名。举例来说，要想为www.mysite.com新建一个虚拟服务器的话，只要运行下面的命令就行了： 
　　$ sudo cp -a /var/www/vhosts/skeleton /var/www/vhosts/www. mysite.com 
　　现在，所有到达你的Apache服务器的HTTP连接中，只要其“Host:”头部被设成 www. mysite.com，那么将由对应的虚拟服务器来响应。 
　　为了早些看到我们的劳动成果，可以在本地进行测试。为此编辑/etc/hosts，加入下面一项： 
　　127.0.0.1 www. mysite.com 
　　这样，在本机上就能访问该站点了。但是，为了让所有用户都能访问虚拟主机，还需申请域名，并且我们还需要在公共DNS服务器上进行设置。
]]></description>
		</item>
		<item>
			<title>大史记 Linux操作系统的历史及其发展状况</title>
			<link>http://www.kingmx.com/article.php?id=17704</link>
			<pubDate>2007-8-9</pubDate>
			<description><![CDATA[
Linux的诞生和发展 

Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日（这是第一次正式向外公布的时间）。以后借助于Internet 网络，并经过全世界各地计算机爱好者的共同努力下，现已成为今天世界上使用最多的一种UNIX 类操作系统，并且使用人数还在迅猛增长。Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱：UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。 

下面主要根据这五个基本线索来追寻一下Linux 的开发历程，它的酝酿过程，最初的发展经历。首先分别介绍其中的四个基本要素(UNIX、MINIX、GNU 和POSIX，Internet 的重要性显而易见，所以不用对其罗嗦)，然后根据Linux 的创始人Linus Toravlds 从对计算机感兴趣而自学计算机知识，到心里开始酝酿编制一个自己的操作系统，到最初Linux 内核0.01 版公布，以及从此如何艰难地一步一个脚印地在全世界hacker 的帮助下最后推出比较完善的1.0 版本这段时间的发展经过，也即对Linux 的早期发展历史进行详细介绍。 

对于Linux的一般发展史，许多文章和书籍都有介绍，这里就不重复。 

UNIX 操作系统的诞生 

Linux 操作系统是UNIX 操作系统的一个克隆版本。UNIX 操作系统是美国贝尔实验室的Ken.Thompson和Dennis Ritchie 于1969 年夏在DEC PDP-7 小型计算机上开发的一个分时操作系统。当时Ken Thompson 为了能在闲置不用的PDP-7 计算机上运行他非常喜欢的星际旅行（Space travel）游戏，在1969 年夏天乘他夫人回家乡加利福尼亚渡假期间，在一个月内开发出了unix 操作系统的原型。当时使用的是BCPL 语言（基本组合编程语言），后经Dennis Ritchie 于1972 年用移植性很强的C 语言进行了改写，使得UNIX 系统在大专院校得到了推广。 

MINIX 操作系统 

MINIX 系统是由Andrew S. Tanenbaum（AST）开发的。AST 是在荷兰Amsterdam 的Vrije 大学数学与计算机科学系统工作，是ACM 和IEEE 的资深会员(全世界也只有很少人是两会的资深会员)。共发表了100 多篇文章，5 本计算机书籍。AST 虽出生在美国纽约，但是是荷兰侨民(1914 年他的祖辈来到美国)。他在纽约上的中学、M.I.T上的大学、加洲大学Berkeley 分校念的博士学位。由于读博士后的缘故，他来到了家乡荷兰。从此就与家乡一直有来往。后来就在Vrije 大学开始教书、带研究生了。荷兰首都Amsterdam 是个常年阴雨绵绵的城市，而对于AST 来说，这最好不过了，因为这样他就可以待在家里摆弄他的计算机了。MINIX 是他1987年编制的，主要用于学生学习操作系统原理。到91年时版本是1.5。目前主要有两个版本在使用： 1.5 版和2.0 版，当时该操作系统在大学使用是免费的，但其它用途不是，当然目前都已经是免费的，可以从许多FTP上下载。 

对于Linux 系统，他表示对其开发者Linus 的称赞。但他认为Linux 的发展有很大原因是因为他为了保持minix 的小型化，能让学生在一个学期内就能学完，而没有接纳全世界许多人对Minix 的扩展要求。因此这激发了Linus 编写Linux。Linus 正好抓住了这个好时机。 

作为一个操作系统，MINIX 并不是优秀者，但它同时提供了用C 语言和汇编语言写的系统源代码。这是第一次使得有抱负的程序员或hacker 能够阅读操作系统的源代码，在当时这种源代码是软件商一直小心地守护着的。 

GNU 计划 

GNU 计划和自由软件基金会(the Free Software Foundation - FSF)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似 Unix、并且是自由软件的完整操作系统：GNU 系统。（GNU 是"GNU''s Not Unix"的递归缩写，它的发音为"guh-NEW"。）各种使用linux 作为核心的GNU 操作系统正在被广泛的使用。虽然这些系统通常被称作"Linux"，但是严格地说，它们应该被称为GNU/Linux 系统。 

到上世纪90 年代初，GNU 项目已经开发出许多高质量的免费软件，其中包括有名的emacs 编辑系统、bash shell 程序、gcc 系列编译程序、gdb 调试程序等等。这些软件为Linux 操作系统的开发创造了一个合适的环境，是Linux 能够诞生的基础之一。以至于目前许多人都将Linux 操作系统称为"GNU/Linux"操作系统。 

POSIX 标准 

POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验，描述了操作系统的调用服务接口，用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。它是在1980 年早期一个UNIX 用户组(usr/group)的早期工作的基础上取得的。该UNIX 用户组原来试图将AT]]></description>
		</item>
		<item>
			<title>ACE 往嵌入式Linux 上移植过程的介绍</title>
			<link>http://www.kingmx.com/article.php?id=17703</link>
			<pubDate>2007-8-9</pubDate>
			<description><![CDATA[
1、在安装有Linux操作系统的PC上安装交叉编译器，笔者使用的是Moxa tool chain for DA66x，（其它的嵌入式Linux系统都是一样的做法），可以从Moxa网站上下载：
http://www.moxa.com/drivers/UC/DA_66X_LX/tool_chain/linux/V1.0/Linux_tool-chain_1.0.zip
2、将ACE程序包下载到Linux PC上，并解压
3、设置环境变量：
A、交叉编译工具的路径：export PATH=”/usr/local/xscale_be/bin:$PATH”
B、ACE_ROOT：export ACE_ROOT=”/home/jun/ACE_wrappers”（根据实际路径设置）
4、将$ACE_ROOT/ace/config-linux.h复制成$ACE_ROOT/ace/config.h
cp $ACE_ROOT/ace/config-linux.h $ACE_ROOT/ace/config.h
5、将$ACE_ROOT/include/makeinclude/platform_linux.GNU复制成
$ACE_ROOT/include/makeinclude/platform_macros.GNU并修改
$ACE_ROOT/include/makeinclude/platform_macros.GNU文件：
添加：
CC = xscale_be-gcc
CXX = xscale_be-g  
删除：
insure ?= 0
ifeq ($(insure),1)
CC = insure
CXX = insure
else
CC ?= gcc
CXX ?= g  
endif
6、修改$ACE_ROOT/include/makeinclude/platform_g  _common.GNU文件，注释第90行：LDFLAGS  = -Wl,-E
7、进入$ACE_ROOT，直接输入make
8、将生成的libACE.so.5.5.6复制到DA66x的CF卡上/mnt/had/lib，并编辑DA662的/etc/profile，在该文件中添加export LD_LIBRARY_PATH=”/mnt/hda/lib: $LD_LIBRARY_PATH ”
9、另外，gperf目录下的测试程序无法编译，因为这些测试程序要用的通过
$(ACE_ROOT)/apps/gperf/src/目录下的相关源代码生成的gperf程序去完成下一步动作，而这个程序是利用交叉编译器生成的，不能在PC上运行。因此在GNUmakefile里面的all：后面，我们要删除cppinset adainset cinset iinset iinset2 m3inset pinset preinset taoinset tinset这些目标对象。
10、整个编译过程要30分钟左右，看机器性能。
插曲：一开始笔者使用的是platform_macosx.GNU，对这个文件做了适当的调整然后命名为platform_macros.GNU，原因是他们很相似。结果一开始编译还挺顺利的，可是没一会（在编译ACEXML的时候）就编译不下去了，晕死了！而且生成的libACE.so库也有问题！后来在网上看到其它网友在Linux下编译ACE，受到启发，改用platform_linux.GNU，并且直接
添加：
CC = xscale_be-gcc
CXX = xscale_be-g  
而不用本身的东西！
总结，干嘛搞个platform_macosx.GNU在那，害人不浅啊！
]]></description>
		</item>
		<item>
			<title>教您在FreeBSD操作系统上架设FTP服务器(方法二）</title>
			<link>http://www.kingmx.com/article.php?id=17672</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[
　　FreeBSD是一款高性能、高可靠性的UNIX操作系统，它继承了BSD系统的纯净性和高性能，其软件包装和发布也比Linux系统更加严谨，同时也具有更佳的安全性，正是因为这些特性使得FreeBSD操作系统在服务器环境中有比较广泛的应用。今天我就给大家介绍一下如何在FreeBSD平台下架设常用的FTP服务器，希望能够对大家有所帮助。 
　　第一步：下载FTP服务源代码包　　 
　　proftpd-1.2.7.tar.gz下载地址： 
　　ftp://ftp.servus.at/ProFTPD/distrib/source/proftpd-1.2.7.tar.gz 
　　proftpd-mod-quotatab-1.2.4.tar.gz下载地址： 
　　http://www.castaglia.org/proftpd/ 
　　第二步：解压缩源代码包 
　　命令格式为： 
　　# cd /home/ylf/app　　　　　　　　 　　　　　# “/home/ylf/app”为FTP上传目录 
　　# tar zxvf proftpd-1.2.7.tar.gz 
　　# tar zxvf proftpd-mod-quotatab-1.2.4.tar.gz 
　　然后进入“mod-quotatab”目录，把“mod_quotatab”中的文件拷贝到“proftpd”的“modules” 目录下，命令格式为： 
　　# cd mod_quotatab 
　　# cp * ../proftpd-1.2.7/modules 
　　第三步：修改位于proftpd-1.2.7/contrib 目录下的“mod_sql_mysql.c”文件 
　　命令格式为： 
　　# cd /home/ylf/app/proftpd-1.2.7/contrib. 
　　# vi mod_sql_mysql.c 
　　在此文件中找到“#include ”字段，然后将其改为自己的实际路径，比如： 
　　#include 　　 
　　第四步：编译安装proftpd 
　　命令格式为： 
　　# cd /home/ylf/app/proftpd-1.2.7 
　　#./configure--prefix=/usr/local/proftpd 
　　--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql 
　　--with-includes=/usr/local/include/mysql 
　　--with-libraries=/usr/local/lib/mysql 
　　# make 
　　# make install 
　　第五步：进入配置文件所在目录，备份原有配置文件 
　　命令格式为： 
　　# cd /usr/local/proftpd/etc　　　　　　　　#进入配置文件所在目录 
　　# mv proftpd.conf proftpd.conf.bak　　　　 #备份原有配置文件 
　　第六步：编辑新的配置文件“proftpd.conf” 
　　以下列举一些主要应配置的地方： 
　　# Port 21 is the standard FTP port.　　　　#配置FTP服务端口号 
　　MaxClientsPerHost 3　　　　　　　　　　　　#设置每台主机最多并发连接数 
　　DefaultRoot ~ ftpusers 
　　DefaultRoot ~ FTPGRP　　　　　　　　　　　 #将用户限制在自己的主目录下 
　　QuotaDirectoryTally on　　　　　　　　　　 #启用磁盘限额 
　　 
　　User ftp 
　　Group ftpusers　　　　　　　　　　　　　　 #设置匿名用户目录为“/ftp” 
　　SQLConnectInfo FTP@localhost root 123456　 #设置数据库联接信息。FTP为数据库名，localhost为主机名，root为连接数据库的用户名，123456为密码。 
　　第七步：为ftp用户建立相应的数据库和表 
　　1. 进入mysql数据库命令状态并建立数据库FTP： 
　　# mysql –p 
　　CREATE DATABASE FTP； 
　　2.接着在这个数据库中建立一个用户表FTPUSERS，命令格式为： 
　　use FTP； 
　　create table FTPUSERS ( 
　　userid TEXT NOT NULL, 
　　passwd TEXT NOT NULL, 
　　uid INT NOT NULL, 
　　gid INT NOT NULL, 
　　homedir TEXT, 
　　shell TEXT)； 
　　关于此用户表的说明：此表格是为用户认证准备的，因此必不可少。其中“userid”是用做FTP服务的用户名；“passwd”是指此用户的密码；这两个字段是必不可少的。另外“uid”是系统用户的ID，也就是所映射的系统用户；“gid”是所属系统组的ID；“homedir”是该用户所在的HOME目录；“shell”是为该用户指定相应的shell。当然也可以建立更多的字段，例如：用来记录用户登录次数的count，或者是日期的date等等，这里就不一一详述了，我们只了解主要部分。 
　　第八步：为FTP用户建立相应的系统用户 
　　本例是将整个FTP服务只提供一个有效的系统用户FTPUSR和组FTPGRP。 
　　# pw groupadd FTPGRP -g 2001　　　　# 建立FTPGRP组 
　　# pw adduser FTPUSR -u 2001 -g 2001 -d /home/FTP -s /sbin/nologin # 建立FTPUSR用户 
　　# mkdir /home/FTP 
　　# chown FTPUSR /home/FTP 
　　# chgrp FTPGRP /home/FTP　　　　　　# 为FTPUSR用户建立HOME目录，并把所有的FTP user活动空间全放在此目录下。 
　　第九步：添加测试用户（本例为“tryuser”） 
　　use FTP 
　　INSERT INTO FTPUSERS (userid, passwd, uid, gid, homedir, shell) 
　　valueS (‘tryuser'', ‘999999'', ‘2001'', ‘2001'', ‘/home/FTP/user1'', ‘'' )； 
　　第十步：对此测试用户设置磁盘限额 
　　INSERT INTO ‘quotalimits’( ‘name'', ‘quota_type'', ‘per_session'', ‘limit_type'', ‘bytes_in_avail'', ‘bytes_out_avail'', ‘bytes_xfer_avail'', ‘files_in_avail'', ‘files_out_avail'',‘files_xfer_avail'') 
　　VALUES (‘tryuser '', ‘user'', ‘false'', ‘soft'', ‘20240000'', ‘0'', ‘4048000'', ‘1000'', ‘0'', ‘20'')； 
　　解释：对此测试用户给予20M空间，最多能上传1000个文件到服务器上，文件传输流量为40M，只能传输20个文件。 
　　第十一步：设置匿名登录，最终完成配置 
　　对于匿名登录用户，建议单独为其划分硬盘分区，所有的匿名用户文件都放在这个单独的分区里。 
　　1. 添加匿名系统用户组users1和匿名用户ftp1。 
　　# pw groupadd users1 
　　# pw useradd ftp1 -g users1 -d /ftp -s /sbin/nologin　　　# “/ftp”为匿名用户所在分区 
　　2. 在“/ftp”分区下建立匿名用户目录并设置相应权限。 
　　# mkdir /ftp/incoming 
　　# mkdir /ftp/pub 
　　# mkdir /ftp/bin 
　　# mkdir /ftp/etc 
　　# chown ftp1 /ftp/incoming 
　　# chgrp users1 /ftp/incoming 
　　3.测试此匿名用户。 
　　在浏览器地址栏输入配置好的ftp服务器地址，如果能够正常显示刚才建立的几个目录，而且进入incoming目录可以在里面新建文件夹或文件，即表示匿名用户“ftp1”建立成功。OK，至此，FTP服务的配置过程也圆满结束。
 
]]></description>
		</item>
		<item>
			<title>斩断Linux邮件服务器的垃圾邮件魔掌</title>
			<link>http://www.kingmx.com/article.php?id=17673</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[
通过SpamAssasin遏止垃圾邮件
当今世界，垃圾邮件继续横行，而且日益成为一个严重的问题，因为垃圾邮件制造者也变得越来越聪明了，所以防止垃圾邮件对任何运行邮件服务器的人来说都是一件非常必要的事情。对于使用Linux的单位来说，现在就有一个杰出的防止垃圾邮件的工具：SpamAssasin 。现在我们就看一下如何通过SpamAssasin遏止垃圾邮件。
认识SpamAssassin
SpamAssasin是一个邮件过虑器，它可以使用一系列的机制来确认垃圾邮件,这些机制包括：文本分析、Bayesian （贝叶斯判决规则）过虑、DNS数据块列表，以及合作性的过虑数据库。SpamAssasin并不能删除垃圾邮件，但它却可以阻止垃圾邮件。究其原因，主要在于它有如下一些特性：
活动范围宽：SpamAssasin使用大量的本地和网络的测试来确认垃圾邮件特征。这使得垃圾邮件制造者在明确其制造的信息的可工作性时增加了难度。
自由软件:与其它流行的开源软件（如Apache Web Server）一样，在相同的条件下发行。
易于扩展：反垃圾测试和配置信息存储在纯文本中，这使得配置和增加新的规则相当容易。
灵活性：SpamAssasin将其逻辑封装在一个设计精良的、抽象化的API中，因此它可被集成到电子邮件数据流中的任何地方。SpamAssasin可被用于多种电子邮件系统中，其中包括：procmail,sendmail,Postfix, qmail等。
易于配置：SpamAssasin几乎不需要用户的配置。你不必用邮件帐户或邮件列表的成员资格详细信息来不断地更新SpamAssasin配置。一旦分类，站点和用户规则就可以被运用于垃圾邮件。而且规则可以适用于邮件服务器，并且在以后又可以使用用户自己的邮件用户代理应用程序。
SpamAssasin通常被认为是最好的垃圾邮件过滤器之一。本文将引导您安装、配置和使用这个强大的工具。
获取并安装SpamAssasin
作为一个Linux应用程序，有各种各样的方法安装SpamAssasin。下面是一个安装方法的简单列表： 
Debian unstable:apt-get install spamassassin
Gentoo: emerge mail-filter/spamassassin
Fedora: yum install spamassassin
 
用户可从SpamAssasin（http://spamassassin.apache.org/downloads.cgi?update=200702131100）下载相关文档。文件准备好后，在控制台提示符下输入如下的命令： untar/unzip the file
cd into the newly created directory
perl Makefile.PL
OPTION: Add -DSPAMC_SSL to to build an SSL-enabled spamc]
make
make install [as root]
 
在INSTALL文件内有相当多的特定发布规则和从属规则。因此要在安装之前完整地阅读此文件。
为在系统范围内的使用进行安装
为在系统范围内的使用进行安装的一个最好理由是你不必更改用户的procmailrc文件。这可能会成为一个令人头痛的问题，这依赖于你所拥有的用户的数量。由于这个过程会从理论上破坏用户的电子邮件，把它放在一个试验性的环境中运行测试是很明智的。
编辑配置文件
配置
就像大多数Linux应用程序一样，SpamAssasin需要对配置文件的编辑。这个配置文件位于/etc/mail/spamassassin/ ，名为local.cf。在你手动编辑配置文件之前，可注意一下，Michael Moncur 已经编写的一个出色的工具SpamAssassin Configuration Generator，它可以帮助用户创建local.cf文件。不过，这个工具目前只能在SpamAssasin 3.x中工作。
这个工具提供基于web的选项套件，可以帮助用户创建自己的配置文件。在选取了Mr. Moncur 创建的简单选项后，按下“Generate”： # Generated by http://www.yrex.com/spam/spamconfig.php (version 1.50)
# How many hits before a message is considered spam.
required_score 7.5
# Change the subject of suspected spam
rewrite_header subject *****SPAM*****
# Encapsulate spam in an attachment (0=no, 1=yes, 2=safe)
report_safe 1
# Enable the Bayes system
use_bayes 1
# Enable Bayes auto-learning
bayes_auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all
 
 
下面对我们逐一分析：
Score Threshold（评价界限 ）: threshold的值越低，就会有更少的邮件通过。默认值为6。不过你要注意：如果你将此项设置过低，一些合法的电子邮件也会被当作垃圾邮件加以阻止。
Rewrite Message Subjects（重写消息主题）:通过这个选项，你可以配置SpamAssassin用你选择的任何对象来编辑电子邮件的主题行。默认值设置为：*****SPAM*****
Use Auto Learning（使用自动学习）: SpamAssassin可以通过分析具有一定评价的消息，去自动化地整理其Bayes（贝叶斯）数据库，这个评价强烈地显示了消息是垃圾还是非垃圾消息。
Enable RBL Checks（启用RBL检查）:选择SpamAssassin是否应使用RBLS（DNS黑名单）。这有助于检测难于检测的垃圾信息，但需要消耗一些时间、网络带宽以及一个可用的DNS服务器。
Use Network Checksum Tests（使用网络检查和检验）:选择是否使用将消息检查和（Checksum）与已知的垃圾邮件相比较的服务：这些服务有：Vipul's Razor 2.x、 DCC、 Pyzor等，不过只有当每种服务的客户端软件安装时这些服务才能正常工作。(即通过use_razor2, use_dcc, use_pyzor进行)。
Languages（语言）：最后两种配置是关于语言的，第一个是哪些语言应检查。默认选项是所有的语言。笔者建议您不要修改。
如果你使用Mr.Moncur的应用程序创建你的.cf文件，请将其存放在/etc/mail/spamassassin/ ，然后启动spamassassin应用程序。要想运行spamassassin，必须以根用户身份运行如下的命令： 
/etc/rc.d/init.d/spamassassin start
 
[page]
注意：根据你的发布版本的不同，spamassassin可能位于/etc/init.d/ 。
启动并运行spamassassin之后，你可能会想到在每次启动时此程序都会启动运行。你可以使用system-config-services这个应用程序，或者检查启用spamassassin选项。如果用户没有system-config-services这个软件，可以在/etc/rc.local文件中增加如下的内容： 
/etc/rc.d/init.d/spamassassin start
或者
/etc/init.d/spamassassin start
 
这依赖于你可执行SpamAssassin所处的位置。
如何应用SpamAssassin
与Procmail协同工作
你的spamassassin已经启动并正常运行，现在需要你设置它与邮件传输代理（Mail Delivery Agent）一起工作。在此笔者假设你正使用procmail，因为它是在Linux环境中应用最广泛的邮件传输代理。
用户需要编辑/etc/procmailrc文件并增加下面的内容： 
DROPPRIVS=yes
:0fw
| /usr/bin/spamc
 
现在procmail被设置为使用SpamAssassin 来评价和过滤进入的垃圾邮件。
垃圾邮件黑名单
我们知道某些域/用户会发送垃圾信息。幸运的是，SpamAssassin有一个对付已知垃圾邮件制造者的手段。借助于黑名单，SpamAssassin又朝着最佳和最后的垃圾邮件防线又迈了一步。
设置黑名单是很简单的事情。你可以向两个配置文件添加黑名单。对于站点范围内的使用，可以考虑/etc/mail/spamassain/local.cf ；在~/.spamassassin/user_prefs内，每一个用户可以配置其自己的黑名单。黑名单看起来是如下的样子： 
blacklist_from sample_email@sampledomain.com
blacklist_from *@sampledomain.com
blacklist_from *@sampledomain.com
blacklist_from *@sampledomain.com
 
上面的内容相当明显地向我们展示了如何配置黑名单。即你可以配置具体的电子邮件地址（如sample_email@sampledomain.com），你也可以配置整个域（如*@sampledomain.com）
如果你不想花费时间编辑自己的黑名单，你可以从http://www.sa-blacklist.stearns.org/sa-blacklist/sa-blacklist.current下载最新的黑名单。不过，未必适合你的需要，有许多中文的垃圾邮件网站并没有列入。而且这个列表相当庞大，因此在下载此列表并添加到你的黑名单时可要小心了。
训练你的SpamAssassin
有可能你的SpamAssassin不能正确地评价电子邮件是否垃圾邮件。如果发生这种情况，可以用自己的电子邮件训练SpamAssassin。
为此，你需要使用一个SSH程序（如SSH或Putty等）和SpamAssassin'ssa-learn程序。邮件服务器还必须设置IMAP协议，用以训练SpamAssassin。
为了训练SpamAssassin，用户应遵循如下的步骤：
1.将垃圾邮件从正常邮件中分离出来，将其放入一个单独的邮箱中。
2.打开ssh应用程序并连接到jupiter.gac.edu。
3.运行如下两个命令： 
sa-learn --ham --progress --mbox Mail/nameOfYourHaMMailbox
sa-learn --spam --progress --mbox Mail/nameOfYourSpamMailbox
 
如果你用超过200个垃圾邮件和200个正常邮件训练了你的SpamAssassin，它就会使用这些信息来决定哪些是垃圾邮件,哪些不是。
结束语
笔者认为SpamAssassin 可谓阻止垃圾邮件漫延的必备工具之一。可以这样说，在公司环境中运行着一个邮件服务器，而如果您没有采取任何防范措施，任凭垃圾邮件通过您的传输通道肆意漫延时，那简直是一场噩梦。
试想一下设置防止垃圾邮件软件的重要性以及SpamAssassin使用的简易性吧，你还有什么理由不在你的Linux邮件服务器上部署SpamAssassin这个好东西呢，也许你的邮件服务器甚至你的WEB服务会因此人气大增。
]]></description>
		</item>
		<item>
			<title>监测Linux系统 10条最佳成功经验在IT界享有多年成功经验的Hyperi</title>
			<link>http://www.kingmx.com/article.php?id=17670</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[
　　在IT界享有多年成功经验的Hyperic Inc的CTO Javier Soltero总结了以下10条系统监测的最佳实践。 
　　1. 定义所获得的“生产”资源的含义 - 一个服务器，一个应用或一种服务。
　　2. 找出满足此生产需求的监测方式。
　　3. 执行监测可能性，可以通过手动方式也可以借助开源工具，比如Nagios或其它商业工具。
　　4. 定义那些 “损坏、不存在、警惕” (broken/unavailable/on fire) 的含义 - 通常也被称之为 警告、出错、危险 (warn/error/critical)。
　　5. 在你的监测系统中执行警报以捕捉这些阈值。
　　6. 定义不同的警报级别所对应的处理流程。
　　7. 确保你的警报处理流程是与那些提示处理流程相符的。
　　8. 为各团队创建角色和责任来分摊与他们工作特性相符的警报、控制和细节操作。聚焦于个人通常意味着为他们的区域提供更好的绩效。
　　9. 为你整个系统中的警报、监测协议、角色等指定少数超级用户，以确保他们按照单一蓝本(blueprint)执行。
　　10. 如需要，则进行修正、清理和重复。
　　我在LinuxWorld 2007大会前的一次预访中从Javier Soltero那里获得了以上10点提示。在这次采访的另外一段摘录中- 虚拟化为推动Linux带来新气象-他谈到了Linux和虚拟化之间的协同，管理多重操作系统环境，以及识别和追踪虚拟机所面临的问题。Javier同时对其它论题也提出了独到的见解，详见我们的文章 “2007 LinuxWorld及下一代数据中心大会”。( 负责编辑： 李亚 ) 
]]></description>
		</item>
		<item>
			<title>教您在FreeBSD平台下架设Web服务器</title>
			<link>http://www.kingmx.com/article.php?id=17671</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[

　　目前，很多服务器都安装了FreeBSD操作系统。FreeBSD操作系统继承了BSD系统的纯净性和高性能，加上其软件包装和发布比Linux系统更加严谨，同时也具有更佳的安全性，正是这些特性使得FreeBSD操作系统在服务器环境中备受推崇。今天小编就给您介绍一下如何在FreeBSD平台下架设Web服务器，希望对您能够有所帮助。 
　　一、接入Internet 
　　配置的第一步就是让FreeBSD接入Internet并设置好代理服务。本机使用ADSL接入Internet有两种情况，即通过拨号获取的动态ip或ISP提供的静态ip。以下主要介绍动态IP的配置过程。 
　　方法很简单，通过直接编辑“/etc/ppp/ppp.conf”文件和“/etc/rc.conf”文件即可实现接入Internet并支持NAT方式的透明代理。 
　　打开PPP.conf文件对其实施配置时，使用以下命令： 
　　# vi /etc/ppp/ppp.conf 
　　一个简单的配置实例（注意set前要有空格）： 
　　default: 
　　set log Phase tun command 
　　set ifaddr 10.0.0.1/0 10.0.0.2/0 
　　adsl: 　　　　　　　　　　# 配置代号 
　　set device PPPoE:vr0　　　# vr0 改成你连接ADSL modem的网卡名 
　　set mru 1492 
　　set mtu 1492 
　　set authname username　　 # username是拨号用户名 
　　set authkey password 　　 # password是拨号密码 
　　set dial 
　　set login 
　　add default HISADDR 
　　然后打开rc.conf文件对其实施配置时，使用以下命令： 
　　# vi /etc/rc.conf 
　　一个简单的配置实例： 
　　# -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 2006 
　　# Created: Tue Jul 15 21:20:28 2006 
　　# Enable network daemons for user convenience. 
　　# Please make all changes to this file, not to /etc/defaults/rc.conf. 
　　# This file now contains just the overrides from /etc/defaults/rc.conf. 
　　hostname="www.usweb.com" 　　　　　　　　# 你的主机域名 
　　ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" 　#内网网卡ip地址,fxp0是网卡名 
　　inetd_enable="YES" 　　　　　　　　　　　# 开机加载inetd 
　　kern_securelevel_enable="NO" 
　　linux_enable="YES" 
　　nfs_reserved_port_only="NO" 
　　sendmail_enable="NO" 
　　sshd_enable="YES" 
　　usbd_enable="NO" 
　　gateway_enable="YES" 
　　firewall_enable="YES"　　　　　　　　　　#启用防火墙 
　　firewall_script="/etc/rc.firewall" 
　　firewall_type="open" 
　　firewall_quiet="YES" 
　　firewall_logging_enable="YES" 
　　ppp_enable="YES"　　　　　　　　　　　　 # 开机自动拨号 
　　ppp_mode="ddial" 
　　ppp_nat="YES"　　　　　　　　　　　　 　 # 启用透明代理 
　　ppp_profile="adsl"　　　　　　　　　 　　# 配置代号 
　　# -- sysinstall generated deltas --　　 # Wed Jul 16 06:52:13 2006 
　　通过对以上两个文件的个性修改并重新启动后，就可以拨号上网并实现透明代理了。客户端需要将DNS设置为服务商提供的DNS地址，网关设成代理服务器的内网卡IP地址，本例为“192.168.0.1”。并把IE的Internet选项里关于连接设置的所有复选框清除。如果解析不了域名就检查 /etc/resolv.conf文件是否正确的配置了DNS服务器地址。 
　　二、安装并设置web服务器 
　　Web服务器的安装与设置请按参照以下步骤进行： 
　　第一步：关掉Squid服务，删除Ipfw的透明代理端口转发语句，命令组成为： 
　　# cd /usr/local/etc/rc.d 
　　# ./squid.sh stop 
　　# mv squid.sh squid.sh.bak 
　　# ipfw del 500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80 
　　第二步：安装ports。使用它，可让FreeBSD安装各种软件变得很轻松。(如果已经有/usr/ports目录则证明已经安装过了)，命令格式为： 
　　# /stand/sysinstall 
　　然后依次选择“Configure—Distributions—ports”，ports即被安装在“/usr/ports”目录中。 
　　第三步：接着安装apache1.3.27   modssl（关于软件的安装版本大家可以根据实际情况选择，下同）。安装后系统会自动产生启动脚本apache.sh，在/usr/local/etc/rc.d目录中。可以通过运行apache.sh start　stop来启动或停止apache。命令格式为： 
　　# cd /usr/ports/www/apache13-modssl 
　　# make install　　　　　　　　　　　　　 #FreeBSD会自动从网络下载并安装 
　　第四步：安装mysql3.23。完成后将建立启动脚本“/usr/local/etc/rc.d/mysql-server.sh”。命令格式为： 
　　# cd /usr/ports/databases/mysql323-server 
　　# make install 
　　第五步：安装apache模块mod_php4，命令格式为： 
　　# cd /usr/ports/www/mod_php4　　　　　 #FreeBSD会自动从网络下载并安装 
　　接着编辑scripts目录下的“configure.php”文件，加入对OpenSSL的支持，命令格式为： 
　　# vi scripts/configure.php 
　　打开此文件后，找到OpenSSL "OpenSSL support" ON 然后将其改为OpenSSL "OpenSSL support" YES修改完成configure.php后，再编辑apache的配制文件/usr/local/etc/apache/httpd.conf ，添加如下内容： 
　　DirectoryIndex index.php index.html　　　　　　　# 设置默认可以使用的主页名称 
　　AddType application/x-httpd-php .php 
　　AddType application/x-httpd-php-source .phps　 # 这2句需要手工添加 
　　第六步：开始测试 
　　重新启动并以root身份登录，然后执行命令“top”（线程查看命令），如果看到如下内容，表示一切装备就绪： 
　　PID USERNAME PRI NICE SIZE RES STATE COMMAND 
　　69 root 2 0 440K 296K select natd　　　　 # 网络地址转换进程 
　　132 root 2 0 3692K 3052K select httpd 　　# apache进程 
　　166 mysql 2 0 27480K 4824K poll mysqld　　# mysql进程 
　　在浏览器地址栏输入http://192.168.0.1 ;，如果显示apache的欢迎页面，证明web服务器安装成功；web页面文件存放在/usr/local/www/data目录中，只要把自己的网页拷贝到这个目录，就可以访问自己的主页了。　　　( 负责编辑：kaso ) 

]]></description>
		</item>
		<item>
			<title>Linux打造LAPM服务器快速安装的方法</title>
			<link>http://www.kingmx.com/article.php?id=17668</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[
版本redhat linux as 4.0安装，我选择几个重要的写出来，其它的自己决定选择选项、下一步。
linux选择完全安装。减少安装apache，php，GD库，zlib压缩、mysql（rh 3.0的mysql需要再安装）
默认语言一定要选英文，要不远程控制会出现乱码，严重的有时候会编辑不了某些文件，运行mysql。
分区可以选择自动分区。
可以跳过红帽会员注册。
安装好系统后开始初始化apache和mysql
登录系统，设置服务，在httpd和mysqld两个选项前打勾，之后启动，保存，重启。
FF浏览器登录localhost，如果看见redhat页面就表示apache启动成功。
命名行输入mysql看看是否进入mysql管理。
mysqladmin -u root password 123456 修改root用户的密码，再mysql，这时会进不了管理了，需要输入mysql -u root -p回车，之后输入密码。
mysql文件夹的放置布局
数据目录：/var/lib/mysql
配置文件：/usr/shart/mysal（命令mysqladmin.server配置文件）
相关命令：/usr/bin（mysqladmin，mysqldump）
启动脚本：/etc/rc.d/init.d/（启动脚本文件）
增加mysql用户
grant select,insert,update,delete(或者all) on 数据库名(或者*).* to 用户名@localhost(或者%任何地方登录) identified by ‘123456′;
flush privileges;
ZEND安装
需要先关闭4.0特有的selinux，要不zend没有权限启动，所以php测试不出zend的。
vi /etc/sysconfig/selinux
修改
selinux=disabled
reboot
启动后输入
chcon -t http_modules_t ‘find /usr/local/Zend/lib -name \*.so’
给与Zend权限。再把刚才selinux启动回来，安全是最重要的。还是reboot一次，这样就可以看到zend的信息了。
安装配置phpMyadmin
Cd /usr/local/src/
Tar zxvf phpMyAdmin-2.8.2.2.tar.gz
Mv phpMyAdmin-2.8.2.2/* /www/phpmyadmin.example.com/www/htdocs/
Cd /www/phpmyadmin.example.com/www/htdocs/
Cp libraries/config.default.php config.inc.php
vi config.inc.php
修改 $cfg[’PmaAbsoluteUri’] = ‘http://phpmyadmin.example.com’;
$cfg[’blowfish_secret’] = ‘123123434′;
$cfg[’Servers’][$i][’host’] = ‘localhost’;
$cfg[’Servers’][$i][’port’] = ‘ 3306′;
$cfg[’Servers’][$i][’socket’] = ‘/tmp/mysql.sock’;
$cfg[’Servers’][$i][’auth_type’]= ‘cookie’;
其中第一行是添加phpmyadmin的url地址，blowfish_secret是针对“auth_type”设置的一个密钥（我的理解）随便填一个就可以了。
在浏览器里输入http://phpmyadmin.example.com，将会弹出一个验证框，但是你必须保证在此之前已经将apache重启，并且dns已经正确指向虚拟主机所在的ip，且dns已经生效；在验证框里输入刚才建立phpmyadmin和密码就可以正常登陆并管理mysql服务器了。Mysql安装好后默认是没有密码的,正式使用之前记得给mysql增加一个root密码.
OK服务器安装完成。
来源：http://chin.52238.com
]]></description>
		</item>
		<item>
			<title>Ubuntu Linux系统常见问题及解决方法</title>
			<link>http://www.kingmx.com/article.php?id=17667</link>
			<pubDate>2007-8-8</pubDate>
			<description><![CDATA[
　　一．系统问题
　　1.系统无法启动
　　可能问题是MBR受损或GRUB错误。可考虑两种方案：1 进入救援模式rescue mode，编辑/boot/grub/下的menu.lst 。2 修复MBR，备份MBR：dd if=/dev/had of=MBR-backup bs=512 count=1 ,恢复MBR：dd if=MBR-backup of=/dev/had bs=512 count=1 .
　　2.启动到ubuntu logo时，卡机
　　解决方案是编辑/boot/grub/menu.lst，找到此行：kernel /boot/vmlinz-2.6.15-10 root=/dev/hda1 ro quiet splash ,删掉splash ，重启后就不会出现logo.
　　3.开机无法登陆图形界面
　　此状况大多是由于X-server配置有误，需重新配置。配置文件: /etc/X11/xorg.conf .运行Ｘ配置过程：sudo dpkg-reconfigure xserver-xorg
　　4.如何添加字体
　　按Alt F2键(功能类似ＭＳwindows中的‘Win R’)，出现‘Run Application’对话框，从中输入fonts:///,然后运行会弹出字体文件夹，将要添加的字体拖进此文件夹即可。注意，添加的字体仅对当前用户有效。
　　5.如何测试ＩＳＯ文件是否完整
　　Command line : md5sum file_name
　　将产生的３２位字符与文件附带的３２位验证码进行比较。
　　6.如何察看文件夹中的隐藏文件
　　单击文件浏览器(File Browser)中的“View”(视图)　è“Show Hidden Files”(显示隐藏文件)，此时隐藏文件就会显示出来。也可以使用快捷键 “Ctrl H”.
　　7.图形桌面停止响应，如何处理
　　两种解决方案：１　同时按下Alt Ctrl Backspace　此时将重启Ｘ-Windows. 2 按下Alt F2，跳转到终端，登陆后运行sudo /etc/init.d/gdm stop,将关闭Ｘ-window而进入test-mode.然后再键入sudo /etc/init.d/gdm start，将重新启动X-window.
　　8.如何释放磁盘空间
　　首先，清空垃圾筒(Trash)中的内容，Trash在桌面的最右下角，点右键清空即可。
　　其次，清理包缓存，每当由Synaptic或者自动升级管理器下载包时，该包将会被保存在/var/cache/apt/archives/ 下。通过运行以下命令将会在不影响系统情况下清除掉这些包。 sudo apt-get clean
　　9.安装Windows后，Ubuntu不能启动
　　原因是Windows将ＭＢＲ重写，导致系统无法从中读取有关Ubuntu的启动信息。解决方法是，将系统由ＣＤ启动，进入Rescue 模式，按回车键选择键盘布局和语言，之后会得到 有关硬盘分区的列表，选择安装有Ubuntu的分区，按回车。待出现shell提示符后输入 “grub-install /dev/hda” 将GRUB安装到硬盘。等待过程结束至输出“install finished”，然后输入“exit”重启计算机。
　　10.忘记系统密码
　　重启计算机，待看到GRUB时
　　二．应用软件
　　１. 无法关闭程序窗口
　　利用xkill关闭。按下Alt F2，输入xkill并按回车，此时鼠标变成一个小骷髅头的形状，单击要关闭的窗口即可。
　　２．播放ＤＶＤ画面抖动和跳跃
　　此状况多数是由于ＤＶＤ伺服器的ＤＭＡ模式没有启动，启动这种模式即可。
　　Sudo hdparm /dev/sdc | grep dma
　　如果ＤＭＡ没有启动，会看到　using_dma = 0 (off)
　　要开启ＤＭＡ模式，运行 sudo hdparm –d 1 /dev/sdc
　　此时重新播放ＤＶＤ，若问题解决，应修改/etc/hdparm.conf并添加如下代码块:
　　/dev/hdc {
　　dma = on
　　}
]]></description>
		</item>
		<item>
			<title>分级防御对Linux服务器的攻击</title>
			<link>http://www.kingmx.com/article.php?id=17640</link>
			<pubDate>2007-8-3</pubDate>
			<description><![CDATA[

随着Linux企业应用的扩展，有大量的网络服务器使用Linux操作系统。Linux服务器的安全性能受到越来越多的关注，这里根据Linux服务器受到攻击的深度以级别形式列出，并提出不同的解决方案。 
对Linux服务器攻击的定义是：攻击是一种旨在妨碍、损害、削弱、破坏Linux服务器安全的未授权行为。攻击的范围可以从服务拒绝直至完全危害和破坏Linux服务器。对Linux服务器攻击有许多种类，本文从攻击深度的角度说明，我们把攻击分为四级。 
攻击级别一：服务拒绝攻击（DoS） 
由于DoS攻击工具的泛滥，及所针对的协议层的缺陷短时无法改变的事实，DoS也就成为了流传最广、最难防范的攻击方式。 
服务拒绝攻击包括分布式拒绝服务攻击、反射式分布拒绝服务攻击、DNS分布拒绝服务攻击、FTP攻击等。大多数服务拒绝攻击导致相对低级的危险，即便是那些可能导致系统重启的攻击也仅仅是暂时性的问题。这类攻击在很大程度上不同于那些想获取网络控制的攻击，一般不会对数据安全有影响，但是服务拒绝攻击会持续很长一段时间，非常难缠。 
到目前为止，没有一个绝对的方法可以制止这类攻击。但这并不表明我们就应束手就擒，除了强调个人主机加强保护不被利用的重要性外，加强对服务器的管理是非常重要的一环。一定要安装验证软件和过滤功能，检验该报文的源地址的真实地址。另外对于几种服务拒绝可以采用以下措施：关闭不必要的服务、限制同时打开的Syn半连接数目、缩短Syn半连接的time out 时间、及时更新系统补丁。 
攻击级别二：本地用户获取了他们非授权的文件的读写权限 
本地用户是指在本地网络的任一台机器上有口令、因而在某一驱动器上有一个目录的用户。本地用户获取到了他们非授权的文件的读写权限的问题是否构成危险很大程度上要看被访问文件的关键性。任何本地用户随意访问临时文件目录（/tmp）都具有危险性，它能够潜在地铺设一条通向下一级别攻击的路径。 
级别二的主要攻击方法是：黑客诱骗合法用户告知其机密信息或执行任务，有时黑客会假装网络管理人员向用户发送邮件，要求用户给他系统升级的密码。 
由本地用户启动的攻击几乎都是从远程登录开始。对于Linux服务器，最好的办法是将所有shell账号放置于一个单独的机器上，也就是说，只在一台或多台分配有shell访问的服务器上接受注册。这可以使日志管理、访问控制管理、释放协议和其他潜在的安全问题管理更容易些。还应该将存放用户CGI的系统区分出来。这些机器应该隔离在特定的网络区段，也就是说，根据网络的配置情况，它们应该被路由器或网络交换机包围。其拓扑结构应该确保硬件地址欺骗也不能超出这个区段。 
攻击级别三：远程用户获得特权文件的读写权限 
第三级别的攻击能做到的不只是核实特定文件是否存在，而且还能读写这些文件。造成这种情况的原因是：Linux服务器配置中出现这样一些弱点：即远程用户无需有效账号就可以在服务器上执行有限数量的命令。 
密码攻击法是第三级别中的主要攻击法，损坏密码是最常见的攻击方法。密码破解是用以描述在使用或不使用工具的情况下渗透网络、系统或资源以解锁用密码保护的资源的一个术语。用户常常忽略他们的密码，密码政策很难得到实施。黑客有多种工具可以击败技术和社会所保护的密码。主要包括：字典攻击（Dictionary attack）、混合攻击（Hybrid attack）、蛮力攻击（Brute force attack）。一旦黑客拥有了用户的密码，他就有很多用户的特权。密码猜想是指手工进入普通密码或通过编好程序的正本取得密码。一些用户选择简单的密码?如生日、纪念日和配偶名字，却并不遵循应使用字母、数字混合使用的规则。对黑客来说要猜出一串8个字生日数据不用花多长时间。 
防范第三级别的攻击的最好的防卫方法便是严格控制进入特权，即使用有效的密码。 
◆ 主要包括密码应当遵循字母、数字、大小写（因为Linux对大小写是有区分）混合使用的规则。 
◆ 使用象“#”或“%”或“$”这样的特殊字符也会添加复杂性。例如采用"countbak"一词，在它后面添加“#$”（countbak#$），这样您就拥有了一个相当有效的密码。 
[page]
攻击级别四：远程用户获得根权限 
第四攻击级别是指那些决不应该发生的事发生了，这是致命的攻击。表示攻击者拥有Linux服务器的根、超级用户或管理员许可权，可以读、写并执行所有文件。换句话说，攻击者具有对Linux服务器的全部控制权，可以在任何时刻都能够完全关闭甚至毁灭此网络。 
攻击级别四主要攻击形式是TCP/IP连续偷窃，被动通道听取和信息包拦截。 TCP/IP连续偷窃，被动通道听取和信息包拦截，是为进入网络收集重要信息的方法，不像拒绝服务攻击，这些方法有更多类似偷窃的性质，比较隐蔽不易被发现。一次成功的TCP/IP攻击能让黑客阻拦两个团体之间的交易，提供中间人袭击的良好机会，然后黑客会在不被受害者注意的情况下控制一方或双方的交易。通过被动窃听，黑客会操纵和登记信息，把文件送达，也会从目标系统上所有可通过的通道找到可通过的致命要害。黑客会寻找联机和密码的结合点，认出申请合法的通道。信息包拦截是指在目标系统约束一个活跃的听者程序以拦截和更改所有的或特别的信息的地址。信息可被改送到非法系统阅读，然后不加改变地送回给黑客。 
TCP/IP连续偷窃实际就是网络嗅探，注意如果您确信有人接了嗅探器到自己的网络上，可以去找一些进行验证的工具。这种工具称为时域反射计量器(Time Domain Reflectometer，TDR)。TDR对电磁波的传播和变化进行测量。将一个TDR连接到网络上，能够检测到未授权的获取网络数据的设备。不过很多中小公司没有这种价格昂贵的工具。对于防范嗅探器的攻击最好的方法是： 
1、安全的拓扑结构。嗅探器只能在当前网络段上进行数据捕获。这就意味着，将网络分段工作进行得越细，嗅探器能够收集的信息就越少。 
2、会话加密。不用特别地担心数据被嗅探，而是要想办法使得嗅探器不认识嗅探到的数据。这种方法的优点是明显的：即使攻击者嗅探到了数据，这些数据对他也是没有用的。 
特别提示：应对攻击的反击措施 
对于超过第二级别的攻击您就要特别注意了。因为它们可以不断的提升攻击级别，以渗透Linux服务器。此时，我们可以采取的反击措施有： 
◆ 首先备份重要的企业关键数据。 
◆ 改变系统中所有口令，通知用户找系统管理员得到新口令。 
◆ 隔离该网络网段使攻击行为仅出现在一个小范围内。 
◆ 允许行为继续进行。如有可能，不要急于把攻击者赶出系统，为下一步作准备。 
◆ 记录所有行为，收集证据。这些证据包括：系统登录文件、应用登录文件、AAA（Authentication、Authorization、 Accounting，认证、授权、计费）登录文件，RADIUS（Remote Authentication Dial-In User Service） 登录，网络单元登录（Network Element Logs）、防火墙登录、HIDS（Host-base IDS，基于主机的入侵检测系统）事件、NIDS（网络入侵检测系统）事件、磁盘驱动器、隐含文件等。收集证据时要注意：在移动或拆卸任何设备之前都要拍照；在调查中要遵循两人法则，在信息收集中要至少有两个人，以防止篡改信息；应记录所采取的所有步骤以及对配置设置的任何改变，要把这些记录保存在安全的地方。检查系统所有目录的存取许可，检测Permslist是否被修改过。 
◆ 进行各种尝试(使用网络的不同部分)以识别出攻击源。 
◆ 为了使用法律武器打击犯罪行为，必须保留证据，而形成证据需要时间。为了做到这一点，必须忍受攻击的冲击(虽然可以制定一些安全措施来确保攻击不损害网络)。对此情形，我们不但要采取一些法律手段，而且还要至少请一家有权威的安全公司协助阻止这种犯罪。这类操作的最重要特点就是取得犯罪的证据、并查找犯罪者的地址，提供所拥有的日志。对于所搜集到的证据，应进行有效地保存。在开始时制作两份，一个用于评估证据，另一个用于法律验证。 
◆ 找到系统漏洞后设法堵住漏洞，并进行自我攻击测试。 
网络安全已经不仅仅是技术问题，而是一个社会问题。希望大家多多关注网络安全。 

]]></description>
		</item>
		<item>
			<title>Ubuntu Linux系统上的三款超强监视工具</title>
			<link>http://www.kingmx.com/article.php?id=17639</link>
			<pubDate>2007-8-3</pubDate>
			<description><![CDATA[
前些日子，笔者向您推荐了监视工具Darkstat。今天再介绍三个好工具，我们主要以在Ubuntu系统使用为例说明。 
Wireshark 
世界上使用Wireshark的人相当多。它具有一个协议分析程序的全部基本特性，而且还有其它产品所没有的其它特性。其开放源代码文本专利允许专业人员对其进行功能增强的工作。它可以运行在各种计算平台上，其中包括Unix,Linux，Windows等等。 
(1)安装 
对于Ubuntu Edgy用户来说，可以使用如下的命令进行安装： 
sudo apt-get install Wireshark 
对于Ubuntu Dapper用户来说，可以使用如下的命令安装： 
sudo apt-get install ethereal 
(2)运行 
如果你想打开Wireshark，可以打开Applications（应用程序）—>Internet（互联网）—> Wireshark 
（如果想以root身份运行，可以选择root）,如下图： 

打开之后，就会看到下面的屏幕： 

（如果想要看到捕获的界面，可以单击文件工具选项的图标下部） 

单击“capture”即可捕获信息 
Etherape 
EtherApe是Unix系统中的一个图形界面的网络监视器，能够以图形方式显示网络活动。主机和链接通信量的大小可以动态显示。它支持Ethernet、 FDDI、 Token Ring、ISDN、 PPP 、 SLIP等网络类型的设备。它可以过滤显示的通信，并能够从一个文件中读取通信数据，也可以从网络中读取动态数据。 
(1)安装 
如果想在Ubuntu中安装Etherape，可以使用如下的命令： 
sudo apt-get install etherape 
(2)运行： 
要运行etherape只需单击Applications—>Internet—>EtherApe： 
在打开之后，你就可以看到所有网络协议的所有网络活动。 
Ethstatus 
Ethstatus是一个基于控制台的监视程序，用以显示以太网接口的统计数据。它与intraf类似，不过它以一个永久性控制台任务的形式运行，并可监视网络负载。 
(1)安装 
安装ethstatus，需要执行如下的命令： 
sudo apt-get install ethstatus 
如果只是想在命令行上查看网卡的状态，可以直接输入如下的命令： 
ethstatus 
可以看到包含全部细节的如下的屏幕： 

可以看出，看出其中包含了IP地址、接口名称、最高速度、收到的包等多指标。 
这些工具都小巧实用，你不妨一试。 
]]></description>
		</item>
		<item>
			<title>Linux操作系统下的高级隐藏技术详解</title>
			<link>http://www.kingmx.com/article.php?id=17620</link>
			<pubDate>2007-8-1</pubDate>
			<description><![CDATA[
　　本文深入分析了Linux环境下文件、进程及模块的高级隐藏技术，其中包括：Linux可卸载模块编程技术、修改内存映象直接对系统调用进行修改技术，通过虚拟文件系统proc隐藏特定进程的技术。 
　　隐藏技术在计算机系统安全中应用十分广泛，尤其是在网络攻击中，当攻击者成功侵入一个系统后，有效隐藏攻击者的文件、进程及其加载的模块变得尤为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术，这些技术有的已经被广泛应用到各种后门或安全检测程序之中，而有一些则刚刚起步，仍然处在讨论阶段，应用很少。 
　　1.隐藏技术 
　　1.1.Linux下的中断控制及系统调用 
　　Intel x86系列微机支持256种中断，为了使处理器比较容易地识别每种中断源，把它们从0~256编号，即赋予一个中断类型码n,Intel把它称作中断向量。 
　　Linux用一个中断向量（128或者0x80）来实现系统调用，所有的系统调用都通过唯一的入口system_call来进入内核，当用户动态进程执行一条int 0x80汇编指令时，CPU就切换到内核态，并开始执行system_call函数，system_call函数再通过系统调用表sys_call_table来取得相应系统调用的地址进行执行。系统调用表sys_call_table中存放所有系统调用函数的地址，每个地址可以用系统调用号来进行索引，例如sys_call_table[NR_fork]索引到的就是系统调用sys_fork（）的地址。 
　　Linux用中断描述符（8字节）来表示每个中断的相关信息，其格式如下： 
　　偏移量31….16　　一些标志、类型码及保留位 
　　段选择符　　　　　　偏移量15….0 
　　所有的中断描述符存放在一片连续的地址空间中，这个连续的地址空间称作中断描述符表（IDT），其起始地址存放在中断描述符表寄存器（IDTR）中，其格式如下： 
　　32位基址值　　界限 
　　其中各个结构的相应联系可以如下表示： 
　　通过上面的说明可以得出通过IDTR寄存器来找到system_call函数地址的方法：根据IDTR寄存器找到中断描述符表，中断描述符表的第0x80项即是system_call函数的地址，这个地址将在后面的讨论中应用到。 
　　1.2.Linux 的LKM（可装载内核模块）技术 
　　为了使内核保持较小的体积并能够方便的进行功能扩展，Linux系统提供了模块机制。模块是内核的一部分，但并没有被编译进内核，它们被编译成目标文件，在运行过程中根据需要动态的插入内核或者从内核中移除。由于模块在插入后是作为Linux内核的一部分来运行的，所以模块编程实际上就是内核编程，因此可以在模块中使用一些由内核导出的资源，例如Linux2.4.18版以前的内核导出系统调用表（sys_call_table）的地址，这样就可以根据该地址直接修改系统调用的入口，从而改变系统调用。在模块编程中必须存在初始化函数及清除函数，一般情况下，这两个函数默认为init_module()以及clearup_module()，从2.3.13内核版本开始，用户也可以给这两个函数重新命名，初始化函数在模块被插入系统时调用，在其中可以进行一些函数及符号的注册工作，清除函数则在模块移除系统时进行调用，一些恢复工作通常在该函数中完成。 
　　1.3.Linux下的内存映像 
　　/dev/kmem是一个字符设备，是计算机主存的映像，通过它可以测试甚至修改系统，当内核不导出sys_call_table地址或者不允许插入模块时可以通过该映像修改系统调用，从而实现隐藏文件、进程或者模块的目的。 
　　1.4.proc 文件系统 
　　proc文件系统是一个虚拟的文件系统，它通过文件系统的接口实现，用于输出系统运行状态。它以文件系统的形式，为操作系统本身和应用进程之间的通信提供了一个界面，使应用程序能够安全、方便地获得系统当前的运行状况何内核的内部数据信息，并可以修改某些系统的配置信息。由于proc以文件系统的接口实现，因此可以象访问普通文件一样访问它，但它只存在于内存之中。 
[page]
　　2.技术分析 
　　2.1 隐藏文件 
　　Linux系统中用来查询文件信息的系统调用是sys_getdents，这一点可以通过strace来观察到，例如strace ls 将列出命令ls用到的系统调用，从中可以发现ls是通过sys_getedents来执行操作的。当查询文件或者目录的相关信息时，Linux系统用sys_getedents来执行相应的查询操作，并把得到的信息传递给用户空间运行的程序，所以如果修改该系统调用，去掉结果中与某些特定文件的相关信息，那么所有利用该系统调用的程序将看不见该文件，从而达到了隐藏的目的。首先介绍一下原来的系统调用，其原型为： 
　　int sys_getdents(unsigned int fd, struct dirent *dirp,unsigned int count) 
　　其中fd为指向目录文件的文件描述符，该函数根据fd所指向的目录文件读取相应dirent结构，并放入dirp中，其中count为dirp中返回的数据量，正确时该函数返回值为填充到dirp的字节数。下图是修改后的系统调用hacked_getdents执行流程。 
　　hacked_getdents函数实际上就是先调用原来的系统调用，然后从得到的dirent结构中去除与特定文件名相关的文件信息，从而应用程序从该系统调用返回后将看不到该文件的存在。 
　　应该注意的是，一些较新的版本中是通过sys_getdents64来查询文件信息的，但其实现原理与sys_getdents基本相同，所以在这些版本中仍然可以用与上面类似的方法来修改该系统调用，隐藏文件。 
　　2.2　隐藏模块 
　　上面分析了如何修改系统调用以隐藏特定名字的文件，在实际的处理中，经常会用模块来达到修改系统调用的目的，但是当插入一个模块时，若不采取任何隐藏措施，很容易被对方发现，一旦对方发现并卸载了所插入的模块，那么所有利用该模块来隐藏的文件就暴露了，所以应继续分析如何来隐藏特定名字的模块。Linux中用来查询模块信息的系统调用是sys_query_module，所以可以通过修改该系统调用达到隐藏特定模块的目的。首先解释一下原来的系统调用，原来系统调用的原型为： 
　　int sys_query_module(const char *name, int which, void *buf, size_t bufsize , size_t *ret) 
　　如果参数name不空，则访问特定的模块，否则访问的是内核模块，参数which说明查询的类型，当which=QM_MODULES时，返回所有当前已插入的模块名称，存入buff, 并且在ret中存放模块的个数，buffsize是buf缓冲区的大小。在模块隐藏的过程中只需要对which=QM_MODULES的情况进行处理就可以达到目的。修改后的系统调用工作过程如下： 
　　1）调用原来的系统调用，出错则返回错误代码； 
　　2）如果which不等于QM_MODULES，则不需要处理，直接返回。 
　　3）从buf的开始位置进行处理，如果存在特定的名字，则将后面的模块名称向前覆盖该名字。 
　　4）重复3），直到处理处理完所有的名字，正确返回。 
　　2.3 隐藏进程 
　　在Linux中不存在直接查询进程信息的系统调用，类似于ps这样查询进程信息的命令是通过查询proc文件系统来实现的，在背景知识中已经介绍过proc文件系统，由于它应用文件系统的接口实现，因此同样可以用隐藏文件的方法来隐藏proc文件系统中的文件，只需要在上面的hacked_getdents中加入对于proc文件系统的判断即可。由于proc是特殊的文件系统，只存在于内存之中，不存在于任何实际设备之上，所以Linux内核分配给它一个特定的主设备号0以及一个特定的次设备号1，除此之外，由于在外存上没有与之对应的i节点,所以系统也分配给它一个特殊的节点号PROC_ROOT_INO（值为1），而设备上的1号索引节点是保留不用的。通过上面的分析，可以得出判断一个文件是否属于proc文件系统的方法： 
　　1）得到该文件对应的inode结构dinode; 
　　2）if (dinode->i_ino == PROC_ROOT_INO ]]></description>
		</item>
		<item>
			<title>Linux操作系统下加载ISO文件的方法介绍</title>
			<link>http://www.kingmx.com/article.php?id=17619</link>
			<pubDate>2007-8-1</pubDate>
			<description><![CDATA[
其实ISO也是一个打包文件，和rar以及zip文件类似，只是他们的格式不同罢了；我们能把iso挂载到一个目录中； 
首先我们要把iso加载到一个目录，用的是。 
mount -o loop ISO文件名 目的目录 
比如我们要把 iso 临时加载到 /mnt/temp目录中，当然我们首先要建这个目录。 
# mkdir /mnt/temp 
然后我们来加载FC4的第一张ISO文件； 
# mount -o loop /mnt/wind/FC4-i386-disc1.iso /mnt/temp/ 
# ls /mnt/temp/ 
autorun GPL README RPM-GPG-KEY RPM-GPG-KEY-fedora-rawhide TRANS.TBL 
eula.txt images README-Accessibility RPM-GPG-KEY-beta RPM-GPG-KEY-fedora-test 
Fedora isolinux RELEASE-NOTES RPM-GPG-KEY-fedora RPM-GPG-KEY-rawhide 
我们所需要的RPM包就位于 /mnt/temp/Fedora/RPMS 目录中。    ( 负责编辑： 张华文 )
]]></description>
		</item>
		<item>
			<title>Ubuntu Linux系统备份与还原命令技巧</title>
			<link>http://www.kingmx.com/article.php?id=17553</link>
			<pubDate>2007-7-25</pubDate>
			<description><![CDATA[
将username替换成你的用户名
　　备份系统
　　su -s －H
　　cd /home/username/Desktop
　　tar cvpzf backup.tgz ——exclude=/proc ——exclude=/home/username/Desktop——exclude=/lost found ——exclude=/backup.tgz ——exclude=/mnt ——exclude=/sys /
　　解释一下，exclude就是排除。这个tar命令将系统重要文件备份并放到Desktop下面。
　　还原系统
　　tar backup.tgz -C //home/username/Desktop
]]></description>
		</item>
		<item>
			<title>解决Linux下Oracle Tomcat 8080端口冲突</title>
			<link>http://www.kingmx.com/article.php?id=17554</link>
			<pubDate>2007-7-25</pubDate>
			<description><![CDATA[
在启动tomcat的时候提示8080端口被占用，后来经过查找发现如下结论： 
将oracle与tomcat、jboss等其它占用8080端口的服务器安装在一台机器上，会出现8080端口被占用的错误。 
一、首先检查8080端口的使用情况 
[root@olivenan root]# lsof -i :8080 -n 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
tnslsnr 1031 oracle 12u IPv4 2013 TCP *:webcache (LISTEN) 
[root@olivenan root]# lsof -i tcp:8080 -n 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
tnslsnr 1031 oracle 12u IPv4 2013 TCP *:webcache (LISTEN) 
发现8080端口被oracle使用，注意lsof命令参数的使用。 
[root@olivenan root]# lsof -i udp:8080 -n 
[root@olivenan root]# lsof -i|grep 8080 
[root@olivenan root]# netstat -tln|grep 8080 
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 
[root@olivenan root]# 
二、解决方法一 
查找解决方法 
将*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' 
修改为#*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' 
[oracle@olivenan dbs]$ sqlplus "/as sysdba" 
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Jul 6 10:37:32 2007 
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 
Connected to: 
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production 
With the Partitioning, OLAP and Oracle Data Mining options 
JServer Release 9.2.0.4.0 - Production 
SQL> shutdown immediate 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL> create spfile from pfile; 
File created. 
SQL> startup 
ORACLE instance started. 
Total System Global Area 236000356 bytes 
Fixed Size 451684 bytes 
Variable Size 201326592 bytes 
Database Buffers 33554432 bytes 
Redo Buffers 667648 bytes 
Database mounted. 
Database opened. 
SQL> exit 
[root@olivenan root]# lsof -i :8080 -n 
[root@olivenan root] 
结果端口8080停止被占用 
[page]
三、解决方法二 
将xmlDB的端口转换为其它端口，此例转换为8082 
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text 
()', 8082)); 
Call completed. 
SQL> exec dbms_xdb.cfg_refresh; 
PL/SQL procedure successfully completed. 
将ftp端口由2100转换为2111 
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text 
()',2111)); 
Call completed. 
SQL> commit; 
Commit complete. 
SQL> exec dbms_xdb.cfg_refresh; 
PL/SQL procedure successfully completed. 
SQL> 
SQL> select dbms_xdb.cfg_get from dual; 
CFG_GET 
-------------------------------------------------------------------------------- 
 
检查转换结果，发现8080，2100端口停止使用，而8082、2111端口开始使用。 
[root@olivenan root]# lsof -i :8080 -n 
[root@olivenan root]# lsof -i :8082 -n 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
tnslsnr 1031 oracle 12u IPv4 18456 TCP *:8082 (LISTEN) 
[root@olivenan bin]# lsof -i :2100 -n 
[root@olivenan root]# lsof -i :2111 -n 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
tnslsnr 1031 oracle 13u IPv4 18462 TCP *:2111 (LISTEN) 
[root@olivenan root]# 
四、lsof命令的使用 
lsof -i TCP:port -n 
lsof -i UDP:port -n 
lsof -i :port -n 
# lsof -i tcp:8080 -n 
以下是转载 
************************************ 
注：上面是解决和XDB冲突的，我发现大部分人问的是和OSE(oracle servlet engine)冲突的，现象是访问8080端口时，看到的是一个倔强的小 
飞猪，呵呵。 
下面是解决方法： 
我的oracle是装在D盘，大家可以根据自己情况找 
D:oracleora90jisinstall>sess_sh -u sys/change_on_install -role SYSDBA -s jdbc:oracle:oci8:@oradb（这里填你的服务名，我的是 
oradb） 
--Session Shell-- 
--type "help" at the command line for help message 
$ @serverendp.ssh admin 4321 4322 -register 
$ exit 
就能把原来的8080换成4321，把9090换成4322. 
]]></description>
		</item>
		<item>
			<title>Linux系统Iptables规则执行顺序详细讲解</title>
			<link>http://www.kingmx.com/article.php?id=17526</link>
			<pubDate>2007-7-24</pubDate>
			<description><![CDATA[
预备知识(转)： iptable有三种队列(表)规则，mangle queue， filter queue， nat queue。 
1。The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header. 
2。The second table is the filter queue which is responsible for packet filtering. 
* Forward chain: Filters packets to servers protected by the firewall. 
* Input chain: Filters packets destined for the firewall. 
* Output chain: Filters packets originating from the firewall. 
3。The third table is the nat queue which is responsible for network address translation. It has two built-in chains; these are: 
* Pre-routing chain: NATs packets when the destination address of the packet needs to be changed. 
* Post-routing chain: NATs packets when the source address of the packet needs to be changed 
个人总结： 
iptables执行规则时，是从从规则表中从上至下顺序执行的，如果没遇到匹配的规则，就一条一条往下执行，如果遇到匹配的规则后，那么就执行本规则，执行后根据本规则的动作(accept, reject, log等)，决定下一步执行的情况，后续执行一般有三种情况。 
1。一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后，还会执行Filter队列内的下一条规则。 
2。一种是中止当前规则队列的执行，转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则，跳到nat队列规则去执行 
3。一种是中止所有规则队列的执行。 
iptables 是采用规则堆栈的方式来进行过滤，当一个封包进入网卡，会先检查 Prerouting，然后检查目的 IP 判断是否需要转送出去，接着就会跳到 INPUT 或 Forward 进行过滤，如果封包需转送处理则检查 Postrouting，如果是来自本机封包，则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理，处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外，还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等，其中某些处理动作不会中断过滤程序，某些处理动作则会中断同一规则炼的过滤，并依照前述流程继续进行下一个规则炼的过滤（注意：这一点与 ipchains 不同），一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是，我们可以进行复杂、多重的封包过滤，简单的说，iptables 可以进行纵横交错式的过滤（tables）而非炼状过滤（chains）。 
ACCEPT 将封包放行，进行完此处理动作后，将不再比对其它规则，直接跳往下一个规则炼（nat:postrouting）。 
REJECT 拦阻该封包，并传送封包通知对方，可以传送的封包有几个选择：ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset（这个封包会要求对方关闭联机），进行完此处理动作后，将不再比对其它规则，直接 中断过滤程序。 范例如下： 
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset 
DROP 丢弃封包不予处理，进行完此处理动作后，将不再比对其它规则，直接中断过滤程序。 
REDIRECT 将封包重新导向到另一个端口（PNAT），进行完此处理动作后，将 会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如：iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 
MASQUERADE 改写封包来源 IP 为防火墙 NIC IP，可以指定 port 对应的范围，进行完此处理动作后，直接跳往下一个规则炼（mangle:postrouting）。这个功能与 SNAT 略有不同，当进行 IP 伪装时，不需指定要伪装成哪个 IP，IP 会从网卡直接读取，当使用拨接连线时，IP 通常是由 ISP 公司的 DHCP 服务器指派的，这个时候 MASQUERADE 特别有用。范例如下：　 
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000 
LOG 将封包相关讯息纪录在 /var/log 中，详细位置请查阅 /etc/syslog.conf 组态档，进行完此处理动作后，将会继续比对其它规则。例如： 
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets" 
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围，可以指定 port 对应的范围，进行完此处理动作后，将直接跳往下一个规则炼（mangle:postrouting）。范例如下： 
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 
DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围，可以指定 port 对应的范围，进行完此处理动作后，将会直接跳往下一个规则炼（filter:input 或 filter:forward）。范例如下： 
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100 
MIRROR 镜射封包，也就是将来源 IP 与目的地 IP 对调后，将封包送回，进行完此处理动作后，将会中断过滤程序。 
QUEUE 中断过滤程序，将封包放入队列，交给其它程序处理。透过自行开发的处理程序，可以进行其它应用，例如：计算联机费用.......等。 
RETURN 结束在目前规则炼中的过滤程序，返回主规则炼继续过滤，如果把自订规则炼看成是一个子程序，那么这个动作，就相当于提早结束子程序并返回到主程序中。 
MARK 将封包标上某个代号，以便提供作为后续过滤的条件判断依据，进行完此处理动作后，将会继续比对其它规则。范例如下： 
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 
 ( 负责编辑： 张华文 ) 
]]></description>
		</item>
		<item>
			<title>Linux系统环境下邮件服务器软件的分析比较</title>
			<link>http://www.kingmx.com/article.php?id=17527</link>
			<pubDate>2007-7-24</pubDate>
			<description><![CDATA[
几年以前，Linux环境下可以选择的可以免费邮件服务器软件只有Sendmail，但是由于Sendmail的缺陷，一些开发者先后开发了若干种其他的邮件服务器软件。当前，运行在Linux环境下免费的邮件服务器，或者称为MTA(Mail Transfer Agent)有若干种选择，比较常见的有Sendmail、Qmail、Postfix、exim及Zmailer等等。本文希望通过对几种影响相对来说比较大的主流Linux环境下的MTA的特点进行阐述，并对其优缺点一一金星分析比较，使用户在选择Linux环境下的免费MTA时有一个选择的依据。 
Postfix 
Postfix是一个由IBM资助下由Wietse Venema 负责开发的自由软件工程的一个产物，其目的是为用户提供除sendmail之外的邮件服务器选择。Postfix力图做到快速、易于管理、提供尽可能的安全性，同时尽量做到和sendmail邮件服务器保持兼容性以满足用户的使用习惯。起初，Postfix是以VMailer这个名字发布的，后来由于商标上的原因改名为Postfix。 
主要设计目标 
Postfix工程的目标是实现一个邮件服务器，提供给用户除sendmail以外的选择。其设计目标包括： 
性能， Postfix要比同类的服务器产品速度快三倍以上，一个安装Postfix的台式机一天可以收发百万封信件。Postfix设计中采用了web服务器的的设计技巧以减少进程创建开销，并且采用了其他的一些文件访问优化技术以提高效率，但同时保证了软件的可靠性。 
兼容性。Postfix设计时考虑了保持Sendmail的兼容性问题，以使移植变的更加容易。Postfix支持/var[/spool] /mail, /etc/aliases, NIS, 及 ~/.forward等文件。然而Postfix为保证管理的简单性，所以没有支持配置文件sendmail.cf。 
安全和健壮性。Postfix设计上实现了程序在过量负载情况下仍然保证程序的可靠性。当出现本地文件系统没有可用空间或没有可用内存的情况时，Postfix就会自动放弃，而不是重试使情况变的更糟。 
灵活性。Postfix结构上由十多个小的子模块组成，每个子模块完成特定的任务，如通过SMTP协议接收一个消息，发送一个消息，本地传递一个消息，重写一个地址等等。当出现特定的需求时，可以用新版本的模块来替代老的模块，而不需要更新整个程序。而且它也很容易实现关闭某个功能。 
安全性。Postfix使用多层防护措施防范攻击者来保护本地系统，几乎每一个Postfix守护进程都能运行在固定低权限的chroot之下，在网络和安全敏感的本地投递程序之间没有直接的路径—一个攻击者必须首先突破若干个其他的程序，才有可能访问本地系统。Postfix甚至不绝对信任自己的队列文件或IPC消息中的内容以防止被欺骗。Postfix在输出发送者提供的消息之前会首先过滤消息。而且Postfix程序没有set-uid。 
Postfix的一些特点 
支持多传输域:sendmai支持在Internet, DECnet, X.400及UUCP之间转发消息。 Postfix则灵活的设计为无须虚拟域(vistual domai)或别名来实现这种转发。但是在早期的发布里仅仅支持STMP和有限度地支持UUCP,但对于我国用户来说，多传输域的支持没有什么意义。 
虚拟域:在大多数通用情况下，增加对一个虚拟域的支持仅仅需要改变一个Postfix查找信息表。其他的邮件服务器则通常需要多个级别的别名或重定向来获得这样的效果。 
UCE控制(UCE,unsolicited commercial email): Postfix能限制哪个主机允许通过自身转发邮件，并且支持限定什么邮件允许接进。Postfix实现通常的控制功能：黑名单列表、RBL查找、 HELO/发送者DNS核实。基于内容过滤当前没有实现。 
表查看: Postfix没有实现地址重写语言，而是使用了一种扩展的表查看来实现地址重写功能。表可以是本地 dbm或 db文件等格式。 
Postfix体系结构及与Sendmail的比较 
Postfix是基于半驻留，互操作的进程的体系结构，每个进程完成特定的任务，没有任何特定的进程衍生关系(父子关系)。而且，独立的进程来完成不同的功能相对于“单块”程序具有更好的隔离性。此外，这种实现方式具有这样的优点：每个服务如地址重写等都能被任何一个Postfix部件所使用，无须进程创建等开销，而仅仅需要重写一个地址，当然并不是只有postfix采用这种方式。 
Postfix是按照这种方式实现的：一个驻留主服务器根据命令运行Postfix守护进程，守护进程完成发送或接收网络邮件消息，在本地递交邮件等等功能。守护进程的数目由配置参数来决定的，并且根据配置决定守护进程运行的次数(re-used times)，当空闲时间到达配置参数指定的限度时，自动消亡。这种方法明显地降低了进程创建开销，但是单个进程之间仍然保持了良好的隔离性。 
Postfix的设计目标就是成为Sendmail的替代者。由于这个原因，Postfix系统的很多部分，如本地投递程序等，可以很容易地通过编辑修改类似inetd的配置文件来替代。 
Postfix的核心是由十多个半驻留程序实现的。为了保证机密性的原因，这些Postfix进程之间通过Unix的socket或受保护的目录之下的FIFO进行通信。即使使用这种方法来保证机密性，Postfix进程并不盲目信任其通过这种方式接收到的数据。 
Postfix进程之间传递的数据量是有限制的。在很多情况下，Postfix进程之间交换的数据信息只有队列文件名和接收者列表，或某些状态信息。一旦一个邮件消息被保存进入文件，其将在其中保存到被一个邮件投递程序读出。 
Postfix采用一些通常的措施来避免丢失信息：在收到确认以前通过调用flush和fsync()保存所有的数据到磁盘中。检查所有的系统调用的返回结果来避免错误状况。 
大多数构建邮件服务器者都会选择sendmail，公平的来讲sendmail是一个不错的MTA(Mail Transfer Agent)，最初开发时Eric Allman的设计考虑主要放在了邮件传递的成功性。不幸的是，Sendmai开发时没有太多的考虑Internet环境下可能遇到的安全性问题。 Sendmail在大多数系统上只能以根用户身份运行，这就意味着任何漏洞都可能导致非常严重的后果，除了这些问题之外，在高负载的情况Sendmail 运行情况不是很好。 
安全 
Postfix则并一定要以root的身份运行，而只需要一个主(master)程序以root身份运行，其生成进程来处理接入、发出及本地邮件投递工作。通过使用一系列模块部件，每个任务由一个单独的程序来运行(这样使审计变的容易一些)。例如发出邮件被卸载到一个队列目录,在这里 “pcikup”程序取到该邮件然后将邮件传递给“cleanup”程序，其再将邮件传递给“trivial-rewrite”，其负责处理邮件头，最后若邮件目的是别的系统则将邮件传递给“smtp”程序。而且相对于Sendmail来说Postfix也更容易设置chroot‘ed环境。只要简单地通过编辑master.cf(一般位于/etc/postfix内)文件即可实现，并且Postfix将运行chroot‘ed,以限定在其定义的队列目录之下(通常位于/var/spool/postfix)，同样可以在master.cf中对Postfix的单一模块设置进程限制。用户可以限制 Postfix以哪个用户的身份运行，一般来说是以“postfix”用户(概念上该用户和Apache的nobody类似)运行，该用户可以访问特定的队列目录。Postfix其他的主要优点是起配置文件的清晰易懂性。 
与Sendmail的比较如sendmail之类的邮件系统是按照一个单块的结构设计实现的，该“单块”程序实现所有的功能。当然这种结构有利于在系统的不同部分之间共享数据。但是这种结构容易出现一些致命的错误。而如qmail的邮件系统上使用一种分层次的结构，按照固定得顺序运行不同功能的子模块进程，执行完毕之后就将其释放。这种方法有良好的“绝缘”性，但是增加了进程创建开销和进程间通信开销。但是通过合理的规划子模块进程的运行顺序可以将开销保持在可以接受的范围内。 
使用其他的MTA替代Sendmail是一件非常麻烦的事情，用户往往又要花大量的时间去熟悉新的MTA的配置和使用。而使用Postfix，你可以利用很多以有的配置文件。如(access, aliases, virtusertable等等)，只需要简单的在master.cf中定义一下即可。此外，Postfix在行为上也很象Sendmail,用户可以使用sendmail命令来启动Postfix。 
当然，使用一个软件来替代另外一个软件需要解决特定的问题。部分原因是因为Postfix的安全特性，在配置Postfix时可能会遇到一些问题。最典型的问题是向root用户发送邮件。Postfix一般不提高自身的权限(向root用户发送邮件所必须的)来投递邮件。用户需要在别名文件中为 root定义别名，如：root: someuser。这同样会对若干个邮件列表模块发生影响，特别是SmartList。一般来说实现邮件列表最好使用Majordomo,它易于配置。 
Sendmail一个很突出的问题就是可扩展性和性能问题。例如用户若希望每天重新启动Sendmail来实现自动更新配置文件(如为虚拟主机重定向邮件)就会出现问题。Sendmail生成新的进程来处理发送和接收邮件，这些进程会一直存在直到传输结束，之后Sendmail才能退出，这样你的脚本程序将不能正确的重起Sendmail。而对于Postfix，用户则只需要发出命令postfix reload即可，Postfix将会重新加载其配置文件。 
[page]
另外，对于有数以万计的用户的邮件服务器来说，使用文件来存储如匹配用户发出邮件地址(例如bob发出的信的发信人修改为 sales@example.org)。对于大量用户来讲，该文件就会变的很巨大，从而影响系统的运行效率。而Postfix则可以和一个数据库后台集成起来(当前只支持MySQL)来存放其配置信息，数据库方式要比文件方式在可扩展性方面强大很多。 
遵从IBM的开放源代码版权许可证，用户可以自由地分发该软件，进行二次开发。其唯一的限制就是必须将对Postfix做的修改返回给IBM公司。因为IBM资助了Wietse的开发。 
与Qmail的比较 
Qmail的缺点就是配置方式和Sendmail不一致，不容易维护。而且Qmail的版权许可证含义非常模糊，甚至没有和软件一起发布。应用作者的话：若你希望分发自己修改版本的Qmail，你必须得到我的许可。 
Qmail qmail是有Dan Bernstein开发的可以自由下载的MTA，其第一个beta版本0.70.7发布于1996年1月24日，1997年2月发布了1.0版，当前版本是1.03。 
Qmail的特点 
安全性为了验证Qmail的安全性，Qmail的支持者甚至出资$1000悬赏寻找Qmail的安全漏洞，一年以后，该奖金没有被领取，而被捐献给自由软件基金会。目前，Qmail的作者也出资$500来寻求Qmail的安全漏洞。 
速度：Qmail在一个中等规模的系统可以投递大约百万封邮件，甚至在一台486一天上能处理超过10万封邮件，起支持并行投递。Qmail支持邮件的并行投递，同时可以投递大约20封邮件。目前邮件投递的瓶颈在于SMTP协议，通过STMP向另外一台互联网主机投递一封电子邮件大约需要花费10多秒钟。 Qmail的作者提出了QMTP(Quick Mail Transfer Protocol)来加速邮件的投递，并且在Qmail中得到支持。Qmail的设计目标是在一台16M的机器上最终达到每天可以投递大约百万级数目的邮件。 
可靠性：为了保证可靠性，Qmail只有在邮件被正确地写入到磁盘才返回处理成功的结果，这样即使在磁盘写入中发生系统崩溃或断电等情况，也可以保证邮件不被丢失，而是重新投递。 
特别简单的虚拟域管理，甚至有一个第三方开发的称为vpopmail的add-on来支持虚拟POP域。使用这个软件包，POP3用户不需要具有系统的正式帐户。 
使用ezmlm支持用户自控制的邮件列表功能。 
邮件用户和系统帐户隔离，为用户提供邮件帐户不需要为其设置系统帐户，从而增加了安全性。 
Sendmail vs Qmail 
首先：sendmail是发展历史悠久的MTA，当前的版本是8.10.2。当然，Sendmail在可移植性、稳定性及确保没有bug方面有一定的保证。但是Internet上有很多帖子都是关于如果攻击Sendmail，这对于管理员来说是一个噩梦。Sendmail在发展过程中产生了一批经验丰富的Sendmail管理员，并且Sendmail有大量完整的文档资料，除了Sendmail的宝典:O‘Reilly‘s sendmail book written by Bryan Costales with Eric Allman以外，网络上有大量的tutorial、FAQ和其他的资源。这些大量的文档对于很好的利用Sendmail的各种特色功能是非常重要的。但是Sendmai当前来说是一个成熟的MTA。 
当然，Sendmail具有一些缺点，其特色功能过多而导致配置文件的复杂性。当然，通过使用m4宏使配置文件的生成变的容易很多。但是，要掌握所有的配置选项是一个很不容易的事情。Sendmail在过去的版本中出现过很多安全漏洞，所以使管理员不得不赶快升级版本。而且Sendmail的流行性也使其成为攻击的目标，这有好处也有坏处：这意味着安全漏洞可以很快地被发现，但是同样使Sendmail更加稳定和安全。另外一个问题是Sendmail一般缺省配置都是具有最小的安全特性，从而使Sendmail往往容易被攻击。如果使用Sendmail，应该确保明白每个打开的选项的含义和影响。一旦你理解了Sendmail的工作原理，就Sendmail的安装和维护就变的非常容易了。通过Sendmail的配置文件，用户实现完成一切可以想象得到的需求。 
Qmail是一个选择，其在设计实现中特别考虑了安全问题。如果你需要一个快速的解决方案如，一个安全的邮件网关，则Qmail是一个很好的选择。 Qmail和Sendmail的配置文件完全不同。而对于Qmail，其有自己的配置文件，配置目录中包含了5-30个不同的文件，各个文件实现对不同部分的配置(如虚拟域或虚拟主机等)。这些配置说明都在man中有很好的文档，但是Qmail的代码结构不是很好。 
Qmail要比Sendmail小很多，其缺乏一些现今邮件服务器所具有的特色功能。如不象Sendmail，qmail不对邮件信封的发送者的域名进行验证，以确保域名的正确性。自身不提供对RBL的支持，而需要add-on来实现。，而Sendmail支持RBL。同样Qmail不能拒绝接收目的接收人不存在信件，而是先将邮件接收下来，然后返回查无此用户的的邮件。Qmail最大的问题就出在发送邮件给多个接收者的处理上。若发送一个很大的邮件给同一个域中的多个用户，Sendmail将只向目的邮件服务器发送一个邮件拷贝。而Qmail将并行地连接多次，每次都发送一个拷贝给一个用户。若用户日常要发送大邮件给多个用户，使用Qmail将浪费很多带宽。可以这么认为：Sendmail优化节省带宽资源，Qmail优化节省时间。若用户系统有很好的带宽，Qmail将具有更好的性能，而如果用户系统的带宽资源有限，并且要发送很多邮件列表信息，则Sendmail效率更高一些。Qmail不支持. forward(.forward在很多情况下对用户很有用处)；不使用/var/spool/mail，而是将邮件存放在用户home目录。下面是一些使用Qmail不容易完成的工作，要使用Qmail完成这些工作，可能需要用户自己动手实现或者使用第三方提供的不够可靠的模块。 
Qmail的源代码相对于Sendmail来说要更加容易理解，这对于希望深入到内部了解MTA机制的人员来说是一个优点。Qmail在安全性方面也要稳定一些。Qmail有很好的技术支持，但是没有象Sendmail那样被广泛地应用和大量的管理员用户群。Qmail的安装不象Sendmail那样自动化，需要手工步骤。而且Qmail的文档不如Sendmail那样完整和丰富。 
Qmail的add-ons比Sendmail要少一些。一般来说对于经验稍微少一些的管理员，选择Qmail相对要好一些。Qmail要简单一些，而且其特色功能能满足一般用户的需求。Sendmail类似于office套件，80%的功能往往都不被使用。这就使Qmail在一些场合可能被更受欢迎一些，其具有一些Sendmail所没有的更流行和实用的特色功能，如：Qmail具有内置的pop3支持。Qmail同样支持如主机或用户的伪装、虚拟域等等。Qmail的简单性也使配置相对容易一些。 
Qmail被认为相对于Sendmail更加安全和高效，运行Qmail的一台pentium机器一天可以处理大约200,0000条消息。 
qmail相对于其他的MTA要简单很多，主要体现在： 
(1)其他的MTA的邮件转发、邮件别名和邮件列表都是采用相互独立的机制，而qmail采用一种简单的转发(forwarding)机制来允许用户处理自己的邮件列表 
(2)其他的MTA都提供快速而不安全的方式及慢的队列方式的邮件投递机制；而 qmail发送是由新邮件的出现而触发的，所以其投递只有一种模式：快速的队列方式 
(3)其他的MTA实际上包括一个特定版本的inetd来监控MTA的平均负载，而qmail设计了内部机制来限制系统负载，所以qmail-smtpd能安全地从系统的inet来运行 
sendmail有很多的商业支持，而且由于大量的用户群，在互联网上有大量的潜在技术支持。而Qmail只有很有限的技术支持。有家公司 inter7.com提供对Qmail的支持，该公司同样提供了免费的add-ons，包括一个基于web的管理工具-QmailAdmin及一个通过 vpopmail的对虚拟域的支持，甚至具有一个基于web的客户借接口—SqWebMail。 
Qmail还具有一些其他的缺憾。如它不是完全遵从标准，它不支持DSN，作者认为DSN是一个即将消亡的技术，而Qmail的VERP可以完成同样的工作，而又不象DSN依赖于其他主机的支持。Qmail另外一个问题是其不遵从支持7bit系统标准，而每次都发送8bit。若邮件接收一方不能处理这种情况，就会出现邮件乱码的情况。 
从安全性来讲，Sendmail要比Qmail差一些，Sendmail在发展中出现过很多很著名的安全漏洞；而Qmail相对要短小精悍，但是仍然提供了基本的STMP功能。而Qmail的代码注释要少一些。Qmail的一个很好的特色是其支持一种可选的基于目录的邮件存储格式，而不是使用一个很大的文件来存储用户所有的邮件。若用户的邮件服务器进行很多的POP3服务，则这种邮件存储格式可以提高效率。但是遗憾的是Pine自身并不支持这种存储格式，如果需要可以使用一些补丁来达到这个目的。 
Qmail的优点是：每个用户都可以创建邮件列表而无须具有根用户的权限，如用户foo可以创建名为foo-slashdot, foo-linux,foo-chickens 的邮件列表，为了提供更好的功能，有一个叫ezmlm(EZ Mailing List Maker)的工具可以支持自动注册和注销、索引等Majordomo所具有的各种功能，但是都是CLI驱动的，只需要编辑很少的文件。Qmail非常适合在小型系统下工作，一般只支持较少的用户或用来管理邮件列表。Qmail速度快并且简单：Qmail是当你希望安全切容易配置的最佳的选择；Qmail 可以在2个小时内搞定配置，而Sendmail可能在两天内都搞不定。 
rocketmail internic 等都使用qmail来构建 
ZMailer 
ZMailer是一个高性能、多进程的Unix系统邮件程序。 [ a.k.a. MTA per X.400 parlance ]，其可以从下面的服务器ftp://ftp.funet.fi/pub/unix/mail/zmailer/ 自由下载。其也是按照单块模式设计的。如Hotmail等邮件系统就是用Zmailer构建的。 
Exim Exim是由Cambridge 大学开发的遵从GPL的MTA，其风格上类似与Smail 3，但是比Smail 3更加完善。当前最新版本是3.15。其主站点为http://www.exim.org/。其最大的特点就是配置简单性，但是其安全性不如Qmail及Postfix。 
下面是对几种MTA的特点的比较，综合的来讲，Qmail和Postfix都是很不错的MTA,选择的标准往往是个人的喜好问题，Postfix发展历史要比Qmail迟一些。 
MTA 成熟性 安全性 特色 性能 Sendmail兼容性 模块化设计 qmail medium high high high addons yes Sendmail high low high low x no Postfix low high high high yes yes exim medium low high medium yes no 
当然除了这里介绍的几种MTA以外，还有 Smail, Post.Office,the Sun Internet Mail Server (SIMS), MMDF, CommuniGate,PMDF, Netscape Messaging Server,Obtuse smtpd/smtpfwdd,Intermail,MD Switch等其他商业或者免费的MTA可以选择。
 
]]></description>
		</item>
		<item>
			<title>Linux操作系统开机自行启动项目详细解析</title>
			<link>http://www.kingmx.com/article.php?id=17524</link>
			<pubDate>2007-7-24</pubDate>
			<description><![CDATA[
由于操作系统正在变得越来越复杂，所以开机引导和关机下电的过程也越来越智能化。从简单的DOS系统转移到 Windows NT系统，人们已经亲身感受到了这些变化——这已不仅仅是核心操作系统的启动引导和关闭了，还包括必须要同时启动或者关闭相当数量的服务项目。类似于 Windows NT，Linux系统启动过程需要打开的服务项目也是数量极大的。 
　　这里，我们假设大家已经熟悉其它操作系统的引导过程，了解硬件的自检引导步骤，就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始，介绍Linux开机引导的步骤。 
　　加载内核 
　　LILO启动之后，如果你选择了Linux作为准备引导的操作系统，第一个被加载的东西就是内核。请记住此时的计算机内存中还不存在任何操作系统， PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。因此，内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的，内核是被压缩了的。这个文件的头部包含着必要的代码，先设置CPU进入安全模式(以此解除内存限制)，再对内核的剩余部分进行解压缩。 
　　执行内核 
　　内核在内存中解压缩之后，就可以开始运行了。此时的内核只知道它本身内建的各种功能，也就是说被编译为模块的内核部分还不能使用。最基本的是，内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)。一旦内核启动运行，对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。从这里开始，内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。内核挂装了根文件系统之后，将启动并运行一个叫做 init的程序。 
　　注意：在这里我们故意略去了Linux内核启动的许多细节，这些细节只有内核开发人员才感兴趣。如果你好奇的话，可以访问http：//www.redhat.com:8080地址处的 “Kernel Hackers Guide”。 
　　init进程 
　　init进程是非内核进程中第一个被启动运行的，因此它的进程编号PID的值总是1。init读它的配置文件/etc/inittab，决定需要启动的运行级别(Runlevel)。从根本上说，运行级别规定了整个系统的行为，每个级别(分别由0到6的整数表示)满足特定的目的。如果定义了 initdefault级别，这个值就直接被选中，否则需要由用户输入一个代表运行级别的数值。 
　　输入代表运行级别的数字之后，init根据/etc/inittab文件中的定义执行一个命令脚本程序。缺省的运行级别取决于安装阶段对登录程序的选择：是使用基于文本的，还是使用基于X-Window的登录程序。 
　　rc命令脚本程序 
　　我们已经知道，当运行级别发生改变时，将由/etc/inittab文件定义需要运行哪一个命令脚本程序。这些命令脚本程序负责启动或者停止该运行级别特定的各种服务。由于需要管理的服务数量很多，因此需要使用rc命令脚本程序。其中，最主要的一个是/etc/rc.d/rc，它负责为每一个运行级别按照正确的顺序调用相应的命令脚本程序。我们可以想象，这样一个命令脚本程序很容易变得难以控制！为了防止这类事件的发生，需要使用精心设计的方案。 
　　对每一个运行级别来说，在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d，其中的X就是代表运行级别的数字。比如说，运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。 
　　在各个运行级别的子目录中，都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接，但是，这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的，其符号链接的名字就以字母S打头；如果命令脚本程序是用来关闭一个服务的，其符号链接的名字就以字母K打头。 
　　许多情况下，这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口，就没有办法使用DNS服务解析主机名！为了安排它们的执行顺序，在字母S 或者K的后面紧跟着一个两位数字，数值小的在数值大的前面执行。比如：/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行(S50inet配置网络设置，S55named启动DNS服务器)。 
　　存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家，是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候，它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序，然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说，会传递Stop参数；类似地对以字母S打头的命令脚本程序来说，会传递 Start参数。 
　　编写自己的rc命令脚本 
　　在维护Linux系统运转的日子里，肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。有两种方法可以用来实现修改的目的： 
　　● 如果所做的修改只在引导开机的时候起作用，并且改动不大的话，可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。 
　　● 如果所做的修改比较细致，或者还要求关闭进程使之明确地停止运行，则需要在/etc/rc.d/init.d子目录中添加一个命令脚本程序。这个命令脚本程序必须可以接受Start和Stop参数并完成相应的操作。 
　　第一种方法，编辑/etc/rc.d/rc.local脚本，当然是两种方法中比较简单的。如果想在这个命令脚本程序中添加内容，只需要使用喜欢的编辑器程序打开它，再把打算执行的命令附加到文件的末尾就可以了。这对一两行的修改来说的确很便利。 
　　如果确实需要使用一个命令脚本程序，这时必须选择第二个方法。编写一个rc命令脚本程序的过程并不像想象中那么困难。我们下面就给出一个例子，看看它是怎样实现的(顺便说一句，你可以把我们的例子当作范本，按照自己的需要进行修改和添加)。 
　　假设你打算每隔60分钟调用一个特殊的程序来弹出一条消息，提醒自己需要从键盘前面离开休息一会儿，命令脚本程序将包括下面几个部分： 
　　● 关于这个命令脚本程序功能的说明(这样就不会在一年之后忘记它)； 
　　● 在试图运行它之前验证这个命令脚本程序确实存在； 
　　● 接受start和stop参数并执行要求的动作。 
　　参数给定后，我们就可以编写命令的脚本程序。这个程序很简单，大家可以自己编写一下，我在这里就不给出了。 
　　编写好新的命令脚本程序之后，再从相关的运行级别子目录中加上必要的符号链接，来控制这个命令脚本程序的启动或者停止。在我的印象中，只想让它在运行级别3或者运行级别5中启动，原因是我认为只有这两个运行级别才是日常工作的地方。最后，希望这个命令脚本程序在进入运行级别6(重启动)的时候被关闭。 
　　激活或者禁止服务项目 
　　有的时候会发现，在引导的时候并不需要某个特定的服务被启动。如果你正在考虑使用Linux替换Windows NT的文件和打印服务器，就更是如此。 
　　我们已经知道，在特定的运行级别子目录中给符号链接改个名称，就可以让该服务不被启动，如把其名称的第一个字母由S改为K。一旦熟练掌握了命令行和符号链接，就会发现这是激活或者禁止服务的最快办法。 
　　在学习这个改名方法的时候，可能会觉得图形化的操作界面ksysv比较容易掌握。虽然它原来是设计使用在KDE环境里的，但在 Red Hat Linux 7.2下缺省安装的GNOME环境里也运行得很好。如果想启动它，只需简单地打开一个xterm窗口，并输入ksysv命令就可以了。屏幕上会出现一个窗口，其中列出了能够修改的全部参数，需要时还包括在线帮助。 
　　警告：如果是在一个现实中的系统上学习本文的知识，要多多运用常识。当试着对启动脚本程序进行修改的时候，要记住所做的修改可能会造成你的系统不能正常工作，而且无法采用重启动的方法恢复。不要在正常运转的系统上实验新的设置，对你准备修改的文件要全部进行备份。最重要的是，在手边要准备一张引导盘以防不测。
( 负责编辑： 李亚 ) 
]]></description>
		</item>
	</channel>
 </rss>
