﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-RomKK-随笔分类-操作系统</title><link>http://www.blogjava.net/RomKK/category/24385.html</link><description>关注java技术!</description><language>zh-cn</language><lastBuildDate>Tue, 24 Jul 2007 20:27:32 GMT</lastBuildDate><pubDate>Tue, 24 Jul 2007 20:27:32 GMT</pubDate><ttl>60</ttl><item><title>linux redhat9.0/fedora4.0下adsl上网和配置全过程</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132167.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132167.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132167.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132167.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "FFFFFF";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div></br><p>linux联盟原创<a href="http://www.xxlinux.com/">www.xxlinux.com</a> <a href="http://www.linuxunion.org/">www.linuxunion.org</a>转贴请标明出处 作者上上智</p>
<p>看了这么久的blog,我自写一点配置哈<br>现在有很多想学习linux的人, 就是因为不能配置上网,所以不想学习现在我从adsl配置到nat全过程如下:<br>1)安装rp-pppoe-3.5-2包<br>在安装系统时,对新用户一般选择全部安装的,那就安装了,以后rpm, 或者tarball了,这很方便,对初学者:<br>eg:<br>rpm -ivh rp-pppoe-3.5-2.rpm<br>tarball 安装:<br>tar zxvf rp-pppoe-3.5-2.tar.gz<br>cd rp-pppoe-3.5-2<br>./configure<br>make <br>make install<br>2)rp-pppoe-3.5-2配置<br>步骤:<br>a) adsl-setup<br>出现:<br>Welcome to the ADSL client setup. First, I will run some checks on<br>your system to make sure the PPPoE client is installed properly...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>The following DSL config was found on your system:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Device:&nbsp;&nbsp;&nbsp;&nbsp; Name:<br>ppp0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Please enter the device if you want to configure the present DSL config<br>(default ppp0) or enter 'n' if you want to create a new one:<br>//这是我已经安装过了,主要是写文档:选择默认按回车<br>LOGIN NAME<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Enter your Login Name (default <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#97;&#110;&#108;&#103;&#110;&#52;&#48;&#57;&#108;&#100;&#106;&#64;&#122;&#103;&#99;&#110;&#99;">lanlgn409ldj@zgcnc</a>):<br>//这是我已经安装过了,:没有安装是输入adsl用户名<br>INTERFACE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Enter the Ethernet interface connected to the ADSL modem<br>For Solaris, this is likely to be something like /dev/hme0.<br>For Linux, it will be ethX, where 'X' is a number.<br>(default eth0):<br>//选择默认按回车<br>Do you want the link to come up on demand, or stay up continuously?<br>If you want it to come up on demand, enter the idle time in seconds<br>after which the link should be dropped. If you want the link to<br>stay up permanently, enter 'no' (two letters, lower-case.)<br>NOTE: Demand-activated links do not interact well with dynamic IP<br>addresses. You may have some problems with demand-activated links.<br>Enter the demand value (default no):<br>//选择默认按回车<br>DNS<br>Please enter the IP address of your ISP's primary DNS server.<br>If your ISP claims that 'the server will provide dynamic DNS addresses',<br>enter 'server' (all lower-case) here.<br>If you just press enter, I will assume you know what you are<br>doing and not modify your DNS setup.<br>Enter the DNS information here:<br>// 输入server自动得到dns,server的ip<br>PASSWORD<br>Please enter your Password:</p>
<p>USERCTRL<br>Please enter 'yes' (two letters, lower-case.) if you want to allow<br>normal user to start or stop DSL connection (default yes):<br>//选择默认按回车问你是否连接<br>Please choose the firewall rules to use. Note that these rules are<br>very basic. You are strongly encouraged to use a more sophisticated<br>firewall setup; however, these will provide basic security. If you<br>are running any servers on your machine, you must choose 'NONE' and<br>set up firewalling yourself. Otherwise, the firewall rules will deny<br>access to all standard servers like Web, e-mail, ftp, etc. If you<br>are using SSH, the rules will block outgoing SSH connections which<br>allocate a privileged source port.<br>The firewall choices are:<br>0 - NONE: This script will not set any firewall rules. You are responsible<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ensuring the security of your machine. You are STRONGLY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recommended to use some kind of firewall rules.<br>1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation<br>2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for a LAN<br>Choose a type of firewall (0-2):<br>//是否设置firwall<br>Do you want to start this connection at boot time?<br>Please enter no or yes (default no):<br>//启动时是否连接<br>Do you want to start this connection at boot time?<br>Please enter no or yes (default no):<br>** Summary of what you entered **<br>Ethernet Interface: eth0<br>User name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#97;&#110;&#108;&#103;&#110;&#52;&#48;&#57;&#108;&#100;&#106;&#64;&#122;&#103;&#99;&#110;&#99;">lanlgn409ldj@zgcnc</a><br>Activate-on-demand: No<br>DNS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do not adjust<br>Firewalling:&nbsp;&nbsp;&nbsp;&nbsp; NONE<br>User Control:&nbsp;&nbsp;&nbsp;&nbsp; yes<br>Accept these settings and adjust configuration files (y/n)?<br>//是否写入配置文件里 选择 y<br>3)假如你是用别人的mac连接<br>1 redhat9.0改mac:<br>ifconfig eth0 down<br>ifconfig eth0 hw ether 5254ab323d51<br>ifconfig eth0 up<br>ifup ppp0<br>2 fedora 4.0改mac:<br>ifdown eth0<br>ifconfig eth0 hw ether 5254ab323d51<br>ifup eth0<br>ifup ppp0 &amp; adsl-start<br>4)测试一下<br>ping <a href="http://www.baidu.com/">www.baidu.com</a><br>5)做nat<br>echo "1" &gt; /proc/sys/net/ipv4/ip_forward //这很重要,路由转发<br>modprobe ip_tables<br>modprobe ip_nat_ftp<br>modprobe ip_nat_irc<br>modprobe ip_conntrack<br>modprobe ip_conntrack_ftp<br>modprobe ip_conntrack_irc<br>/sbin/iptables -F<br>/sbin/iptables -X<br>/sbin/iptables -Z<br>/sbin/iptables -F -t nat<br>/sbin/iptables -X -t nat<br>/sbin/iptables -Z -t nat<br>/sbin/iptables -P INPUT&nbsp;&nbsp; ACCEPT<br>/sbin/iptables -P OUTPUT ACCEPT<br>/sbin/iptables -P FORWARD ACCEPT<br>/sbin/iptables -t nat -P PREROUTING ACCEPT<br>/sbin/iptables -t nat -P POSTROUTING ACCEPT<br>/sbin/iptables -t nat -P OUTPUT&nbsp;&nbsp;&nbsp;&nbsp; ACCEPT<br>/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE//不是adsl也可以把ppp0改成eth0 ,<br>1一般网卡nat:<br>[root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 <br>DEVICE=eth0 <br>BOOTPROTO=dhcp<br>BROADCAST=192.168.0.255 <br>IPADDR=192.168.0.1 <br>NETMASK=255.255.255.0 <br>NETWORK=192.168.0.0 <br>ONBOOT=yes <br>[root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0 <br>DEVICE=eth0:0 <br>BOOTPROTO=static <br>BROADCAST=192.168..255 <br>IPADDR=192.168.1.2 <br>NETMASK=255.255.255.0 <br>NETWORK=192.168..0 <br>ONBOOT=yes<br>2 两块网卡nat:<br>只是那個 eth0:0 改成了 eth1 而已啦,其它都是一样的设置<br>6)dns 设置<br>在里面/etc/resolv.conf<br>把你的ip写入里面去<br>nameserver 192.168.0.1<br>然后重启要不然,客户机不能上网</p></br>
<!-- Begin #sidebar -->
<div id=sidebar>
<div id=sidebar2><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
</div>
    <img src ="http://www.blogjava.net/RomKK/aggbug/132167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:49 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux中的压缩文件</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132166.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132166.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132166.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132166.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</br>问题引发:<br>&nbsp;服务器每天产生大量的系统日志,查询日志,目前日志这块没有人专门拿出来做分析,处理这些日志.随着时间以及服务器访问量的与日俱增,不小心就会出现硬盘被日志文件占满的现象.如果删除这些日志,以后日志分析也许要用到.不删现有服务会受到影响.以后可能会专门有一台服务器来处理这些日志,分析日志,估算出性能瓶颈,以及得出相应的有价值的商业信息.所以只能临时处理一下.<br>看了一下linux的压缩格式好多种,忽然一看有些晕,发一篇关于linux压缩文件的详细文章,摘自:Unix爱好者家园unix-cd.com&nbsp; ,以下是原文<br>&nbsp;<br>对于刚刚接触 Linux 的人来说，一定会给 Linux 下一大堆各式各样的文件名给搞晕。别个不说，单单就压缩文件为例，我们知道在 Windows 下最常见的压缩文件就只有两种，一是 .zip，另一个是 .rar。可是 Linux 就不同了，它有.gz、.tar.gz、tgz、bz2、.Z、.tar 等众多的压缩文件名，此外 windows 下的 .zip 和 .rar 也可以在 Linux 下使用，不过在 Linux 使用 .zip 和 .rar 的人就太少了。<br>　　 在具体总结各类压缩文件之前呢，首先要弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢？其实这源于 Linux 中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你就得先借助另它的工具将这一大堆文件先打成一个包，然后再就原来的压缩程序进行压缩。<br>　　Linux下最常用的打包程序就是 tar 了，使用 tar 程序打出来的包我们常称为 tar 包，tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后，就可以用其它的程序来进行压缩了，所以我们先了解一下 tar 命令的基本用法：<br>tar 命令的选项有很多(用man tar可以查看到)，但我们通常需要的就是那么几个：<br>　　# tar -cf all.tar *.jpg<br>　　这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包，-f 指定包的文件名。<br>　　# tar -rf all.tar *.gif<br>　　这条命令是将所有.gif的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。<br>　　# tar -uf all.tar logo.gif<br>　　这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件，-u是表示更新文件的意思。<br>　　# tar -tf all.tar<br>　　这条命令是列出 all.tar 包中所有文件，-t 是列出文件的意思<br>　　# tar -xf all.tar<br>　　这条命令是解出 all.tar 包中所有文件，-t 是解开的意思<br>　　以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序，比如调用 gzip、bzip2 等。<br>（一）、 tar 调用 gzip<br>　　gzip 是 GNU 组织开发的一个压缩程序，.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用 gzip。下面来举例说明一下：<br>　　# tar -czf all.tar.gz *.jpg<br>　　这条命令是将所有 .jpg 的文件打成一个 tar 包，并且将其用 gzip 压缩，生成一个 gzip 压缩过的包，包名为 all.tar.gz。<br>　　# tar -xzf all.tar.gz<br>　　这条命令是将上面产生的包解开。<br>（二）、 tar 调用 bzip2<br>　　bzip2 是一个压缩能力更强的压缩程序，.bz2 结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程序是 bunzip2。tar 中使用-j这个参数来调用 gzip。下面来举例说明一下：<br>　　# tar -cjf all.tar.bz2 *.jpg<br>　　这条命令是将所有 .jpg 的文件打成一个 tar 包，并且将其用 bzip2 压缩，生成一个 bzip2 压缩过的包，包名为 all.tar.bz2。<br>　　# tar -xjf all.tar.bz2<br>　　这条命令是将上面产生的包解开。<br>（三）、 tar 调用 compress<br>　　compress 也是一个压缩程序，但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 bzip2 压缩的结果。与 compres s相对的解压程序是 uncompress。tar 中使用 -Z 这个参数来调用 gzip。下面来举例说明一下：<br>　　# tar -cZf all.tar.Z *.jpg<br>　　这条命令是将所有 .jpg 的文件打成一个 tar 包，并且将其用 compress 压缩，生成一个 uncompress 压缩过的包，包名为 all.tar.Z<br>　　# tar -xZf all.tar.Z<br>　　这条命令是将上面产生的包解开 <br>有了上面的知识，你应该可以解开多种压缩文件了，下面对于 tar 系列的压缩文件作一个小结：<br>（一）、对于 .tar 结尾的文件<br>　　tar -xf all.tar<br>（二）、对于 .gz 结尾的文件<br>　　gzip -d all.gz<br>　　gunzip all.gz<br>（三）、对于 .tgz 或 .tar.gz 结尾的文件<br>　　tar -xzf all.tar.gz<br>　　tar -xzf all.tgz<br>（四）、对于 .bz2 结尾的文件<br>　　bzip2 -d all.bz2<br>　　bunzip2 all.bz2<br>（五）、对于 tar.bz2 结尾的文件<br>　　tar -xjf all.tar.bz2<br>（六）、对于 .Z 结尾的文件<br>　　uncompress all.Z<br>（七）、对于.tar.Z结尾的文件<br>　　tar -xZf all.tar.z<br>　　另外对于 Window 下的常见压缩文件 .zip 和 .rar，Linux 也有相应的方法来解压它们：<br>（１）对于 .zip<br>　　linux 下提供了 zip 和 unzip 程序，zip 是压缩程序，unzip 是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br>　　# zip all.zip *.jpg<br>　　这条命令是将所有 .jpg 的文件压缩成一个 zip 包<br>　　# unzip all.zip<br>　　这条命令是将 all.zip 中的所有文件解压出来<br>（２）对于 .rar<br>　　要在 linux 下处理 .rar 文件，需要安装 RAR for Linux，可以从网上下载，但要记住，RAR for Linux<br>不是免费的；可从 <a href="http://www.rarsoft.com/download.htm">http://www.rarsoft.com/download.htm</a> 下载 RAR for Linux 3.2.0，然后安装：<br>　　# tar -xzpvf rarlinux-3.2.0.tar.gz<br>　　# cd rar<br>　　# make<br>　　这样就安装好了，安装后就有了 rar 和 unrar 这两个程序，rar 是压缩程序，unrar 是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br>　　# rar a all *.jpg<br>　　这条命令是将所有 .jpg 的文件压缩成一个 rar 包，名为 all.rar，该程序会将 .rar 扩展名将自动附加到包名后。<br>　　# unrar e all.rar<br>　　这条命令是将 all.rar 中的所有文件解压出来<br>　　到此为至，我们已经介绍过 linux 下的 tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar 等程式，你应该已经能够使用它们对 .tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar 这 10 种压缩文件进行解压了，以后应该不需要为下载了一个软件而不知道如何在 Linux 下解开而烦恼了。而且以上方法对于 Unix 也基本有效。<br>　　本文介绍了 linux 下的压缩程式 tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar 等程式，以及如何使用它们对 .tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar 这 10 种压缩文件进行操作。</br>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.blogjava.net/RomKK/aggbug/132166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:47 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>超完整RedHat9.0-vsftp配置大全</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132165.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132165.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132165.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132165.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div></br><p>3.2 VSFTP 安全与效能兼备的ftp 服务器 <br>3.2.1 VSFTP 概述 <br>FTP，file transfer protocol，这是档案传输的通讯协议，也是一般最常用来传送档案的方式。读者在使用RedHat9 的时候，可能会感受到ftp server 有一些改变：第一，就是ftp server 只剩下vsftp，原有的wuftp 等都没放入 第二，就是vsftp 从XINETD 中独立出来，并将设定档从/etc/vsftpd.conf 之中移到/etc/vsftpd/vsftpd.conf。 <br>为什么做这样的改变？可以想见的是vsftp 已有独立运作的能力，不需要XINETD 来做更进一步的管控，并且类似sendmail、httpd、ssh、samba 等，将设定文件的放入/etc 下独立的目录。 <br>FTP 分为两类，一种为PORT FTP，也就是一般的FTP 另一类是PASVFTP，分述如下：<br>PORT FTP <br>这是一般形式的FTP，首先会建立控制频道，默认值是port 21，也就是跟port 21 建立联机，并透过此联机下达指令。第二，由FTP server 端会建立数据传输频道，默认值为20，也就是跟port 20 建立联机，并透过port 20 作数据的传输。 <br>PASV FTP <br>跟PORT FTP 类似，首先会建立控制频道，默认值是port 21，也就是跟port 21 建立联机，并透过此联机下达指令。第二，会由client 端做出数据传输的请求，包括数据传输port 的数字。 <br>这两者的差异为何？PORT FTP 当中的数据传输port 是由FTP server 指定，而PASV FTP 的数据传输port 是由FTP client 决定。通常我们使用PASV FTP，是在有防火墙的环境之下，透过client 与server 的沟通，决定数据传输的port。<br>3.2.2 范例 <br>3.2.1. 直接启动VSFTP 服务 <br>这个范例是套用RedHat 的预设范例,直接启动vsftp。 <br>[root@relay vsftpd]# /sbin/service vsftpd start <br>Starting vsftpd for vsftpd: OK ] <br>3.2.2. 更换port 提供服务：将预设的port 21 更换为2121<br>为了安全，或是以port 来区隔不同的ftp 服务，我们可能会将ftp port 改为21 之外的port，那么，可参考以下步骤。 <br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>新增底下一行 <br>listen_port=2121 <br>Step2. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>3.2.3. 特定使用者peter、john 不得变更目录 <br>使用者的预设目录为/home/username，若是我们不希望使用者在ftp 时能够 <br>切换到上一层目录/home，则可参考以下步骤。 <br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>将底下三行 <br>#chroot_list_enable=YES <br># (default follows) <br>#chroot_list_file=/etc/vsftpd.chroot_list <br>改为 <br>chroot_list_enable=YES <br># (default follows) <br>chroot_list_file=/etc/vsftpd/chroot_list <br>Step2. 新增一个档案: /etc/vsftpd/chroot_list <br>内容增加两行： <br>peter <br>john <br>Step3. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>若是peter 欲切换到根目录以外的目录，则会出现以下警告： <br>ftp&gt; cd /home <br>550 Failed to change directory. <br>3.2.4. 取消anonymous 登入 <br>若是读者的主机不希望使用者匿名登入，则可参考以下步骤。<br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>将 <br>anonymous_enable=YES <br>改为 <br>anonymous_enable=NO <br>Step2. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>3.2.5. 安排欢迎话语<br>若是我们希望使用者在登入时，能够看到欢迎话语，可能包括对该主机的说明，或是目录的介绍，可参考以下步骤。<br>首先确定在/etc/vsftpd/vsftpd.conf 当中是否有底下这一行 <br>dirmessage_enable=YES <br>RedHat9 的默认值是有上面这行的。 <br>接着，在各目录之中，新增名为.message 的档案，再这边假设有一个使用者test1，且此使用者的根目录下有个目录名为abc，那首先我们在/home/test1 <br>之下新增.message，内容如下： <br>Hello~ Welcome to the home directory <br>This is for test only... <br>接着，在/home/test1/abc 的目录下新增.message，内容如下： <br>Welcome to abc's directory <br>This is subdir... <br>那么，当使用者test1 登入时，会看到以下讯息： <br>230- Hello~ Welcome to the home directory <br>230- <br>230- This is for test only... <br>230- <br>若是切换到abc 的目录，则会出现以下讯息： <br>250- Welcome to abc's directory <br>250- <br>250- This is subdir ... <br>3.2.6. 对于每一个联机，以独立的process 来运作<br>一般启动vsftp 时，我们只会看到一个名为vsftpd 的process 在运作，但若是读者希望每一个联机，都能以独立的process 来呈现，则可执行以下步骤。<br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>新增底下一行 <br>setproctitle_enable=YES <br>Step2. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>使用ps -ef 的指令，可以看告不同使用者联机的情形，如下图所示： <br>[root@home vsftpd]# ps -ef|grep ftp <br>root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER <br>nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244: <br>connected <br>test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1: <br>IDLE <br>nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244: <br>connected <br>test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2: <br>IDLE <br>root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp <br>[root@home vsftpd]#<br>3.2.7. 限制传输档案的速度：<br>本机的使用者最高速度为200KBytes/s，匿名登入者所能使用的最高速度为50KBytes/s<br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>新增底下两行 <br>anon_max_rate=50000 <br>local_max_rate=200000 <br>Step2. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>在这边速度的单位为Bytes/s，其中anon_max_rate 所限制的是匿名登入的 <br>使用者，而local_max_rate 所限制的是本机的使用者。VSFTPD 对于速度的限 <br>制，范围大概在80%到120%之间，也就是我们限制最高速度为100KBytes/s， <br>但实际的速度可能在80KBytes/s 到120KBytes/s 之间，当然，若是频宽不足 <br>时，数值会低于此限制。<br>3.2.8. 针对不同的使用者限制不同的速度：<br>假设test1 所能使用的最高速度为250KBytes/s，test2 所能使用的最高速度为500KBytes/s。 <br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>新增底下一行 <br>user_config_dir=/etc/vsftpd/userconf <br>Step2. 新增一个目录：/etc/vsftpd/userconf <br>mkdir /etc/vsftpd/userconf <br>Step3. 在/etc/vsftpd/userconf 之下新增一个名为test1 的档案 <br>内容增加一行： <br>local_max_rate=250000 <br>Step4. 在/etc/vsftpd/userconf 之下新增一个名为test2 的档案 <br>内容增加一行： <br>local_max_rate=500000 <br>Step5. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ]<br>3.2.9-1. 建置一个防火墙下的ftp server，使用PORT FTP mode：<br>预设的ftp port:21 以及ftp data port:20 <br>启动VSFTPD 之后执行以下两行指令，只允许port 21 以及port 20 开放，其它关闭。 <br>iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT <br>iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset<br>3.2.9-2. 建置一个防火墙下的ftp server，使用PORT FTP mode：<br>ftp port:2121 以及ftp data port:2020 <br>Step1. 执行以下两行指令，只允许port 2121 以及port 2020 开放，其它关闭。 <br>iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT <br>iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset <br>Step2. 修改/etc/vsftpd/vsftpd.conf <br>新增底下两行 <br>listen_port=2121 <br>ftp_data_port=2020 <br>Step3. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>在这边要注意，8、9 两个例子中，ftp client（如cuteftp）的联机方式不能够选择passive mode，否则无法建立数据的联机。也就是读者可以连上ftp <br>server，但是执行ls、get 等等的指令时，便无法运作。<br>3.2.10. 建置一个防火墙下的ftp server，使用PASS FTP mode：<br>ftp port:2121 以及ftp data port 从9981 到9986。 <br>Step1. 执行以下两行指令，只允许port 2121 以及port 9981-9990 开放，其它关闭。 <br>iptables -A INPUT -p tcp -m multiport --dport <br>2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT <br>iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset <br>Step2. 修改/etc/vsftpd/vsftpd.conf <br>新增底下四行 <br>listen_port=2121 <br>pasv_enable=YES <br>pasv_min_port=9981 <br>pasv_max_port=9986 <br>Step3. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>在这边要注意，在10 这个例子中，ftp client（如cuteftp）的联机方式必须选择passive mode，否则无法建立数据的联机。也就是读者可以连上ftp server，但是执行ls,get 等等的指令时，便无法运作。<br>3.2.11. 将vsftpd 与TCP_wrapper 结合<br>若是读者希望直接在/etc/hosts.allow 之中定义允许或是拒绝的来源地址，可执行以下步骤。这是简易的防火墙设定。 <br>Step1. 确定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的设定为YES，如下图所 <br>示： <br>tcp_wrappers=YES <br>这是RedHat9 的默认值，基本上不需修改。 <br>Step2. 重新启动vsftpd <br>[root@home vsftpd]# /sbin/service vsftpd restart <br>Shutting down vsftpd: OK ] <br>Starting vsftpd for vsftpd: OK ] <br>Step3. 设定/etc/hosts.allow，譬如提供111.22.33.4 以及10.1.1.1 到10.1.1.254 连 <br>线，则可做下图之设定： <br>vsftpd : 111.22.33.4 10.1.1. : allow <br>ALL : ALL : DENY<br>3.2.12. 将vsftpd 并入XINETD <br>若是读者希望将vsftpd 并入XINETD 之中，也就是7.x 版的预设设定，那 <br>么读者可以执行以下步骤。 <br>Step1. 修改/etc/vsftpd/vsftpd.conf <br>将 <br>listen=YES <br>改为 <br>listen=NO <br>Step2. 新增一个档案： /etc/xinetd.d/vsftpd <br>内容如下： <br>service vsftpd <br>{ <br>disable = no <br>socket_type = stream <br>wait = no <br>user = root <br>server = /usr/sbin/vsftpd <br>port = 21 <br>log_on_success += PID HOST DURATION <br>log_on_failure += HOST <br>} <br>Step3. 重新启动xinetd <br>[root@home vsftpd]# /sbin/service xinetd restart <br>Stopping xinetd: OK ] <br>Starting xinetd: OK ] <br>3.2.3 设定档说明<br>在范例中，有些省略的设定可以在这边找到，譬如联机的总数、同一个位址的联机数、显示档案拥有者的名称等等，希望读者细读后，可以做出最适合自己的设定。<br>格式<br>vsftpd.conf 的内容非常单纯，每一行即为一项设定。若是空白行或是开头为#的一行，将会被忽略。内容的格式只有一种，如下所示 <br>option=value <br>要注意的是，等号两边不能加空白，不然是不正确的设定。 <br>＝＝＝ascii 设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>ascii_download_enable <br>管控是否可用ASCII 模式下载。默认值为NO。 <br>ascii_upload_enable <br>管控是否可用ASCII 模式上传。默认值为NO。 <br>＝＝＝个别使用者设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>chroot_list_enable <br>如果启动这项功能，则所有的本机使用者登入均可进到根目录之外的数据夹，除了列 <br>在/etc/vsftpd.chroot_list 之中的使用者之外。默认值为NO。 <br>userlist_enable <br>用法：YES/NO <br>若是启动此功能，则会读取/etc/vsftpd.user_list 当中的使用者名称。此项功能可以在询问密码前就出现失败讯息，而不需要检验密码的程序。默认值为关闭。 <br>userlist_deny <br>用法：YES/NO <br>这个选项只有在userlist_enable 启动时才会被检验。如果将这个选项设为YES，则在/etc/vsftpd.user_list 中的使用者将无法登入 若设为NO ， 则只有在 <br>/etc/vsftpd.user_list 中的使用者才能登入。而且此项功能可以在询问密码前就出现错误讯息，而不需要检验密码的程序。 <br>user_config_dir <br>定义个别使用者设定文件所在的目录，例如定义user_config_dir=/etc/vsftpd/userconf，且主机上有使用者test1,test2，那我们可以在user_config_dir 的目录新增文件名为test1 以及test2。若是test1 登入，则会读取user_config_dir 下的test1 这个档案内的设定。默认值为无。 <br>＝＝＝欢迎语设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>dirmessage_enable <br>如果启动这个选项，使用者第一次进入一个目录时，会检查该目录下是否有.message这个档案，若是有，则会出现此档案的内容，通常这个档案会放置欢迎话语，或是对该目录的说明。默认值为开启。 <br>banner_file <br>当使用者登入时，会显示此设定所在的档案内容，通常为欢迎话语或是说明。默认值为无。 <br>ftpd_banner <br>这边可定义欢迎话语的字符串，相较于banner_file 是档案的形式，而ftpd_banner 是字串的格式。预设为无。 <br>＝＝＝特殊安全设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>chroot_local_user <br>如果设定为YES，那么所有的本机的使用者都可以切换到根目录以外的数据夹。预设值为NO。 <br>hide_ids <br>如果启动这项功能，所有档案的拥有者与群组都为ftp，也就是使用者登入使用ls -al之类的指令，所看到的档案拥有者跟群组均为ftp。默认值为关闭。 <br>ls_recurse_enable <br>若是启动此功能，则允许登入者使用ls -R 这个指令。默认值为NO。 <br>write_enable <br>用法：YES/NO <br>这个选项可以控制FTP 的指令是否允许更改file system，譬如STOR、DELE、 <br>RNFR、RNTO、MKD、RMD、APPE 以及SITE。预设是关闭。 <br>setproctitle_enable <br>用法：YES/NO <br>启动这项功能，vsftpd 会将所有联机的状况已不同的process 呈现出来，换句话说，使用ps -ef 这类的指令就可以看到联机的状态。默认值为关闭。 <br>tcp_wrappers <br>用法：YES/NO <br>如果启动，则会将vsftpd 与tcp wrapper 结合，也就是可以在/etc/hosts.allow 与/etc/hosts.deny 中定义可联机或是拒绝的来源地址。 <br>pam_service_name <br>这边定义PAM 所使用的名称，预设为vsftpd。 <br>secure_chroot_dir <br>这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限，当vsftpd 不需要file system 的权限时，就会将使用者限制在此数据夹中。默认值为/usr/share/empty <br>＝＝＝纪录文件设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>xferlog_enable <br>用法：YES/NO <br>如果启动，上传与下载的信息将被完整纪录在底下xferlog_file 所定义的档案中。预设为开启。 <br>xferlog_file <br>这个选项可设定纪录文件所在的位置，默认值为/var/log/vsftpd.log。 <br>xferlog_std_format <br>如果启动，则纪录文件将会写为xferlog 的标准格式，如同wu-ftpd 一般。默认值为关闭。 <br>＝＝＝逾时设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>accept_timeout <br>接受建立联机的逾时设定，单位为秒。默认值为60。 <br>connect_timeout <br>响应PORT 方式的数据联机的逾时设定，单位为秒。默认值为60。 <br>data_connection_timeout <br>建立数据联机的逾时设定。默认值为300 秒。 <br>idle_session_timeout <br>发呆的逾时设定，若是超出这时间没有数据的传送或是指令的输入，则会强迫断线，单位为秒。默认值为300。 <br>＝＝＝速率限制＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>anon_max_rate <br>匿名登入所能使用的最大传输速度，单位为每秒多少bytes，0 表示不限速度。默认值为0。 <br>local_max_rate <br>本机使用者所能使用的最大传输速度，单位为每秒多少bytes，0 表示不限速度。预设值为0。 <br>＝＝＝新增档案权限设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>anon_umask <br>匿名登入者新增档案时的umask 数值。默认值为077。 <br>file_open_mode <br>上传档案的权限，与chmod 所使用的数值相同。默认值为0666。 <br>local_umask <br>本机登入者新增档案时的umask 数值。默认值为077。 <br>＝＝＝port 设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>connect_from_port_20 <br>用法：YES/NO <br>若设为YES，则强迫ftp-data 的数据传送使用port 20。默认值为YES。 <br>ftp_data_port <br>设定ftp 数据联机所使用的port。默认值为20。 <br>listen_port <br>FTP server 所使用的port。默认值为21。 <br>pasv_max_port <br>建立资料联机所可以使用port 范围的上界，0 表示任意。默认值为0。 <br>pasv_min_port <br>建立资料联机所可以使用port 范围的下界，0 表示任意。默认值为0。 <br>＝＝＝其它＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>anon_root <br>使用匿名登入时，所登入的目录。默认值为无。 <br>local_enable <br>用法：YES/NO <br>启动此功能则允许本机使用者登入。默认值为YES。 <br>local_root <br>本机使用者登入时，将被更换到定义的目录下。默认值为无。 <br>text_userdb_names <br>用法：YES/NO <br>当使用者登入后使用ls -al 之类的指令查询该档案的管理权时，预设会出现拥有者的UID，而不是该档案拥有者的名称。若是希望出现拥有者的名称，则将此功能开启。默认值为NO。 <br>pasv_enable <br>若是设为NO，则不允许使用PASV 的模式建立数据的联机。默认值为开启。 <br>＝＝＝更换档案所有权＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>chown_uploads <br>用法：YES/NO <br>若是启动，所有匿名上传数据的拥有者将被更换为chown_username 当中所设定的使用者。这样的选项对于安全及管理，是很有用的。默认值为NO。 <br>chown_username <br>这里可以定义当匿名登入者上传档案时，该档案的拥有者将被置换的使用者名称。预设值为root。 <br>＝＝＝guest 设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>guest_enable <br>用法：YES/NO <br>若是启动这项功能，所有的非匿名登入者都视为guest。默认值为关闭。 <br>guest_username <br>这里将定义guest 的使用者名称。默认值为ftp。 <br>＝＝＝anonymous 设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>anonymous_enable <br>用法：YES/NO <br>管控使否允许匿名登入，YES 为允许匿名登入，NO 为不允许。默认值为YES。 <br>no_anon_password <br>若是启动这项功能，则使用匿名登入时，不会询问密码。默认值为NO。 <br>anon_mkdir_write_enable <br>用法：YES/NO <br>如果设为YES，匿名登入者会被允许新增目录，当然，匿名使用者必须要有对上层目录的写入权。默认值为NO。 <br>anon_other_write_enable <br>用法：YES/NO <br>如果设为YES，匿名登入者会被允许更多于上传与建立目录之外的权限，譬如删除或是更名。默认值为NO。 <br>anon_upload_enable <br>用法：YES/NO <br>如果设为YES，匿名登入者会被允许上传目录的权限，当然，匿名使用者必须要有对上层目录的写入权。默认值为NO。 <br>anon_world_readable_only <br>用法：YES/NO <br>如果设为YES，匿名登入者会被允许下载可阅读的档案。默认值为YES。 <br>ftp_username <br>定义匿名登入的使用者名称。默认值为ftp。 <br>deny_email_enable <br>若是启动这项功能，则必须提供一个档案/etc/vsftpd.banner_emails，内容为email <br>address。若是使用匿名登入，则会要求输入email address，若输入的email address 在此档案内，则不允许联机。默认值为NO。 <br>＝＝＝Standalone 选项＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>listen <br>用法：YES/NO <br>若是启动，则vsftpd 将会以独立运作的方式执行，若是vsftpd 独立执行，如RedHat9的默认值，则必须启动 若是vsftpd 包含在xinetd 之中，则必须关闭此功能，如RedHat8。在RedHat9 的默认值为YES。 <br>listen_address <br>若是vsftpd 使用standalone 的模式，可使用这个参数定义使用哪个IP address 提供这项服务，若是主机上只有定义一个IP address，则此选项不需使用，若是有多个IP address，可定义在哪个IP address 上提供ftp 服务。若是不设定，则所有的IP address均会提供此服务。默认值为无。 <br>max_clients <br>若是vsftpd 使用standalone 的模式，可使用这个参数定义最大的总联机数。超过这个数目将会拒绝联机，0 表示不限。默认值为0。 <br>max_per_ip <br>若是vsftpd 使用standalone 的模式，可使用这个参数定义每个ip address 所可以联机的数目。超过这个数目将会拒绝联机，0 表示不限。默认值为0。 <br>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝ <br>3.2.4 FTP 数字代码的意义 <br>110 重新启动标记应答。 <br>120 服务在多久时间内ready。 <br>125 数据链路埠开启，准备传送。 <br>150 文件状态正常，开启数据连接端口。 <br>200 命令执行成功。 <br>202 命令执行失败。 <br>211 系统状态或是系统求助响应。 <br>212 目录的状态。 <br>213 文件的状态。 <br>214 求助的讯息。 <br>215 名称系统类型。 <br>220 新的联机服务ready。 <br>221 服务的控制连接埠关闭，可以注销。 <br>225 数据连结开启，但无传输动作。 <br>226 关闭数据连接端口，请求的文件操作成功。 <br>227 进入passive mode。 <br>230 使用者登入。 <br>250 请求的文件操作完成。 <br>257 显示目前的路径名称。 <br>331 用户名称正确，需要密码。 <br>332 登入时需要账号信息。 <br>350 请求的操作需要进一部的命令。 <br>421 无法提供服务，关闭控制连结。 <br>425 无法开启数据链路。 <br>426 关闭联机，终止传输。 <br>450 请求的操作未执行。 <br>451 命令终止：有本地的错误。 <br>452 未执行命令：磁盘空间不足。 <br>500 格式错误，无法识别命令。 <br>501 参数语法错误。 <br>502 命令执行失败。 <br>503 命令顺序错误。 <br>504 命令所接的参数不正确。 <br>530 未登入。 <br>532 储存文件需要账户登入。 <br>550 未执行请求的操作。 <br>551 请求的命令终止，类型未知。 <br>552 请求的文件终止，储存位溢出。 <br>553 未执行请求的的命令，名称不正确。</p><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</br>   <img src ="http://www.blogjava.net/RomKK/aggbug/132165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:45 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GRUB多重启动管理器</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132164.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132164.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132164.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132164.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div></br><p>1. 什么是grub 　　 <br>grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写，它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系包括linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000。它可以载入操作系统的内核和初始化操作系统（如Linux,FreeBSD），或者把引导权交给操作系统（如Windows 98）来完成引导。 <br>2. grub的特点 　　 <br>grub可以代替lilo来完成对Linux的引导，特别适用于linux与其它操作系统共存情况，与lilo相比，它有以下特点： <br>支持大硬盘 　　 <br>现在大多数Linux发行版本的lilo都有同样的一个问题：根分区(/boot分区)不能分在超过1024柱面的地方，一般是在8.4G左右的地方，否则lilo不能安装，或者安装后不能正确引导系统。而grub就不会出现这种情况，只要安装时你的大硬盘是在LBA模式下，grub就可以引导根分区在8G以外的操作系统。 <br>支持开机画面 　　 <br>grub支持在引导开机的同时显示一个开机画面。对于玩家来说，这样可以制作自己的个性化开机画面；对于PC厂商，这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面，而且可以自动侦测选择最佳模式，与Windows那320x400的开机画面不可同日而语。 <br>两种执行模式 <br>　　grub不但可以通过配置文件进行例行的引导，还可以在选择引导前动态改变引导时的参数，还可以动态加载各种设备。例如你在Linux下编译了一个新的核心，但不能确定它能不能工作，你就可以在引导时动态改变grub的参数，尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能，而且支持如bash或doskey一样的历史功能，你可以用上下键来寻找以前的命令。 <br>菜单式选择 　　 <br>在lilo下，你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数，如延迟时间，默认操作系统等。 <br>分区位置改变后不必重新配置 　　 <br>lilo是通过读取硬盘上的绝对扇区来装入操作系统，因此每次分区改变都必须重新配置lilo，例如你用PQ magic调整了分区的大小，那lilo在你重新配置好之前就不能引导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存，因此只要操作系统核心的路径没有改变，grub就可以引导系统。 除此之外，Grub还有许多非常强大的功能。例如支持多种外部设备，动态装载操作系统内核，甚至可以通过网络装载操作系统核心。Grub支持多种文件系统，支持多种可执行文件格式，支持自动解压，可以引导不支持多重引导的操作系统等。 <br>3. grub的使用 <br>安装grub 　　 <br>如果已经安装了蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇区上，只需要简单打入makebootable命令就可以了。 <br>制作grub启动盘 <br>　　首先确定grub已经安装，然后进入grub的目录，键入： 　　 <br>#cd /boot/grub 　　 <br>放入一张软盘，然后敲入命令： 　　 <br>#dd if=stage1 of=/dev/fd0 bs=512 count=1 　　 <br>#dd if=/stage2 of=/dev/fd0 bs512 seek=1 　　 <br>这样就可以做好一张启动盘了。 <br>开机 　　 <br>安装了grub开机后会出现一个菜单，列出所有的启动选项。如果设置了启动画面则会显示启动画面，按Esc键则可以取消启动画面显示菜单选项。蓝点Linux所带的grub的命令提示是全中文的，在菜单下面详细列出如按e是编辑启动命令，按c是使用命令行等。用上下键可以选择菜单项，按回车启动所选项。按e键可以编辑所选项的启动命令，你可以用这个功能临时改变你的系统的启动参数，参见配置grub一节。按c键则进入命令行模式。 　　 　　 <br>在命令行模式下可以打入命令直接执行，例如你可以敲入poweroff关闭计算机。按Tab键可以列出所有支持的命令。蓝点Linux已经把grub汉化了，其中一部分命令敲入名字后会给出中文提示，显示命令的用法和参数。 <br>4. 配置grub 　　 <br>grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件，如果找不到此文件则不进入菜单模式而直接进入命令行模式。 　　 <br>menu.lst 是一个文本文件，你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令，如果一行的第一个字符为井号"#"则这一行为注释，你可以简单地用增加或减少注释行来改变配置。 <br>编辑menu.lst，一般会有以下各行 <br>timeout second <br>设定在second秒之后引导默认的操作系统。 <br>蓝点Linux默认是timeout 5，就是5秒没有其他指令就引导系统，如果设成-1，则grub会一直等待直到用户选择一个选项为止。 <br>default num <br>默认启动第num+1行选项，也就说default=0则默认启动菜单第一行的操作系统，default=1则启动第2行的系统，如此类推。 <br>splash pathname/filename <br>指出开机画面的文件所存放的路径和文件名，如 splash /boot/logo/800x600x8.img 是指用在/boot/logo路径下的800x600.img文件作为开机画面 <br>title OSname title <br>后面的字符就是你在菜单项上所看见的选项，你可以写上操作系统的名字和描述，如用 <br>title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。 <br>下面结合两个系统引导描述来解释几个引导选项的意义 <br>title BluePoint Linux, Default Mode <br>root (hd0,1) <br>kernel /boot/vmlinuz vga=auto root=/dev/hda2 <br>hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式，root=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点（"/"）。 <br>title Microsoft Windows <br>root (hd1,0) <br>chainloader (hd1,0)+1 root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区 <br>chainloader (hd1,0)+1 装入一个扇区的数据然后把引导权交给它。 <br>5. 从软盘启动grub 　　 <br>制作启动盘后可以用软盘启动引导硬盘上的操作系统 插入制作好的启动软盘，进入BIOS设定软盘启动。软盘启动成功后就会进入grub的命令行模式 <br>grub&amp;gt; 　　 <br>要启动一个操作系统，首先指定引导哪个分区上的系统，例如要引导指第一个硬盘上的第一个分区的操作系统，先键入 <br>grub&amp;gt;root (hd0,0) 　　 <br>接着如果要启动的是Windows系统，键入 grub&amp;gt;chainloader (hd0,0)+1 　　 <br>注意(hd0,0)要随着硬盘和分区的不同而改变数字。 如果要引导Linux或其他系统，应键入 <br>grub&amp;gt;kernel （hd0,0）/boot/vmlinuz root=/dev/hda1 　　 <br>注意hda1参数也要随着硬盘和分区的不同而改变，如从第二个硬盘的第一个分区引导则用hdb1。 　　最后敲入boot就可以启动系统了。 　　 <br>在任何时候不能确定命令或者命令的参数都可以按Tab获得相关的帮助。用上下键可以获得命令的历史记录。 其实这些命令就是menu.lst的启动描述，您也可以根据那些描述来自己键入启动命令，最后敲入boot就可以引导系统了。</p>
</br>
<!-- Begin #sidebar -->
<div id=sidebar>
<div id=sidebar2><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
</div><img src ="http://www.blogjava.net/RomKK/aggbug/132164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:44 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RedHat linux inittab详解</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132163.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132163.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132163.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132163.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div></br>一、什么是init<br>&nbsp;&nbsp;&nbsp; init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。 <br>内核启动（已经被载入内存，开始运行，并已初始化所有的设备驱动程序和数据结构等）之后，就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程（其PID始终为1）。 <br>内核会在过去曾使用过init的几个地方查找它，它的正确位置（对Linux系统来说）是/sbin/init。如果内核找不到init，它就会试着运行/bin/sh，如果运行失败，系统的启动也会失败。 <br>二、运行级别 <br>&nbsp;&nbsp;&nbsp; 运行级就是操作系统当前正在运行的功能级别。这个级别从1到6，具有不同的功能。其功能级别如下：<br># 0 - 停机（千万不能把initdefault 设置为0 ）<br># 1 - 单用户模式 <br># 2 - 多用户，没有 NFS <br># 3 - 完全多用户模式(标准的运行级) <br># 4 - 没有用到 <br># 5 - X11 （xwindow) <br># 6 - 重新启动 （千万不要把initdefault 设置为6——把被你黑掉的linux的initdefault设置为0或6也算是拒绝服务攻击噢！）<br>除此之外还有ABC三个运行级别，但在RHLinux中都没有意义。<br>这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件，最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中，启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6) <br>三、运行级别的配置<br>&nbsp;&nbsp;&nbsp; 运行级别的配置是在/etc/inittab行内进行的，如下所示： <br>12 : 2 : wait : / etc / init.d / rc 2 <br>各字段解释如下：<br>id:runlevels:action:process<br>&nbsp; id：是一个任意指定的四个字符以内的序列标号，在本文件内必须唯一；使用老版本的libc5（低于5.2.18）或a.out库编译出来的 sysvinit限制为2字符。注意：像getty之类的登陆进程必须使id字段与tty编号一致，如tty1需要id=1，许多老版本的登陆进程都遵循这种规则。<br>&nbsp; runlevels：表示这一行适用于运行那个/些级别（这里是2，可以有多个，表示在相应的运行级均需要运行）；另外sysinit、boot、bootwait这三个进程会忽略这个设置值。<br>&nbsp; action：表示进入对应的runlevels时，init应该运行process字段的命令的方式，常用的字段值及解释在附录内。例子中的wait表示需要运行这个进程一次并等待其结束。<br>&nbsp; process：具体应该执行的命令。例子中的/etc/init.d/rc命令启动运行级别2中应该运行的进程/命令，并负责在退出运行级时将其终止（当然在进入的runlevel中仍要运行的程序除外。）<br>当运行级别改变，并且正在运行的程序并没有在新的运行级别中指定需要运行，那么init会先发送一个SIGTERM 信号终止，然后是SIGKILL。<br>有效的action值如下：<br>&nbsp; respawn：表示init应该监视这个进程，即使其结束后也应该被重新启动。<br>&nbsp; wait：&nbsp;&nbsp; init应该运行这个进程一次，并等待其结束后再进行下一步操作。<br>&nbsp; once：&nbsp;&nbsp; init需要运行这个进程一次。<br>&nbsp; boot：&nbsp;&nbsp; 随系统启动运行，所以runlevel值对其无效。<br>&nbsp; bootwait：随系统启动运行，并且init应该等待其结束。<br>&nbsp; off：&nbsp;&nbsp;&nbsp;&nbsp; 没有任何意义。<br>&nbsp; initdefault：系统启动后的默认运行级别；由于进入相应的运行级别会激活对应级别的进程，所以对其指定process字段没有任何意义。如果inittab文件内不存在这一条记录，系统启动时在控制台上询问进入的运行级。<br>&nbsp; sysinit：&nbsp; 系统启动时准备运行的命令。比如说，这个命令将清除/tmp。可以查看/etc/rc.d/rc.sysinit脚本了解其运行了那些操作。<br>&nbsp; powerwait：允许init在电源被切断时，关闭系统。当然前提是有U P S和监视U P S并通知init电源已被切断的软件。RH linux默认没有列出该选项。<br>&nbsp; powerfail：&nbsp; 同powerwait，但init不会等待正在运行的进程结束。RH linux默认没有列出该选项。<br>&nbsp; powerokwait：当电源监视软件报告&#8220;电源恢复&#8221;时，init要执行的操作。<br>&nbsp; powerfailnow：检测到ups电源即将耗尽时，init要执行的操作，和powerwait/powerfail不同的哟。<br>&nbsp; ctrlaltdel：允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时，重新启动系统。注意，如果该系统放在一个公共场所，系统管理员可将C t r l + A l t + D e l组合键配置为别的行为，比如忽略等。我是设置成打印一句骂人的话了^o^。<br>&nbsp; kbrequest：监视到特定的键盘组合键被按下时采取的动作，现在还不完善。<br>&nbsp; ondemand：A process marked with an ondemand runlevel will be executed whenever the specified ondemand runlevel is called.&nbsp; However, no runlevel change will occur (ondemand runlevels are &#8216;a&#8217;, &#8216;b&#8217;,and &#8216;c&#8217;)，（英语太菜，那个however不知道该怎么翻译才好。惭愧！）<br>&nbsp;&nbsp;&nbsp;&nbsp; 补充：<br>&nbsp;&nbsp; 1、关于进入单用户模式，一般都是采用设置initdefault为1或者在grub/lilo中指定一个&#8220;single&#8221;或&#8220;emergency&#8221; 命令行参数来实现。其实另外还有一个更干净的方法，编辑：<br>kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh，这样init就直接启动一个shell，其他任何进程都没有启动哦，够干净吧！<br>&nbsp;&nbsp; 2、系统正在运行时，telinit命令可更改运行级别。运行级别发生变化时， init 就会从/etc/inittab运行相应的命令。</br>
<!-- Begin #sidebar -->
<div id=sidebar><div id=sidebar2>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div><img src ="http://www.blogjava.net/RomKK/aggbug/132163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:43 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置一个安全的Linux DHCP服务器</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132162.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132162.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132162.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132162.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div></br><p>DHCP是动态主机配置协议.这个协议用于向计算机自动提供IP地址,子网掩码和路由信息。网络管理员通常会分配某个范围的 IP 地址来分发给局域网上的客户机。当设备接入这个局域网时，它们会向 DHCP 服务器请求一个 IP 地址。然后 DHCP 服务器为每个请求的设备分配一个地址，直到分配完该范围内的所有 IP 地址为止。已经分配的 IP 地址必须定时地延长借用期。这个延期的过程称作 leasing，确保了当客户机设备在正常地释放 IP 地址之前突然从网络断开时被分配的地址可以归还给服务器。本文以Redhat Linux 9.0为例，介绍如何建立一个完整和安全的DHCP服务器。 <br>一、建立DHCP服务器配置文件 <br>可以使用Redhat Linux 9.0自身携带rpm包安装。安装结束后, DHCP 端口监督程序 dhcpd 配置文件是 /etc 目录中的名为 dhcpd.conf 的文件。下面手工建立/etc/dhcpd.conf文件。/etc/dhcpd.conf通常包括三部分：parameters、declarations 、option。 <br>1. DHCP配置文件中的parameters（参数）：表明如何执行任务，是否要执行任务，或将哪些网络配置选项发送给客户。主要内容见表1： <br>参数 解释 <br>ddns-update-style 配置DHCP-DNS 互动更新模式。 <br>default-lease-time 指定确省租赁时间的长度，单位是秒。 <br>max-lease-time 指定最大租赁时间长度，单位是秒。 <br>hardware 指定网卡接口类型和MAC地址。 <br>server-name 通知DHCP客户服务器名称。 <br>get-lease-hostnames flag 检查客户端使用的IP地址。 <br>fixed-address ip 分配给客户端一个固定的地址。 <br>authritative 拒绝不正确的IP地址的要求。 <br>2. DHCP配置文件中的declarations （声明）：用来描述网络布局、提供客户的IP地址等。主要内容见表2： <br>声明 解释 <br>shared-network 用来告知是否一些子网络分享相同网络。 <br>subnet 描述一个IP地址是否属于该子网。 <br>range 起始IP 终止IP 提供动态分配IP 的范围。 <br>host 主机名称 参考特别的主机。 <br>group 为一组参数提供声明。 <br>allow unknown-clients ﹔deny unknown-client 是否动态分配IP给未知的使用者。 <br>allow bootp;deny bootp 是否响应激活查询。 <br>allow booting﹔deny booting 是否响应使用者查询。 <br>filename 开始启动文件的名称，应用于无盘工作站。 <br>next-server 设置服务器从引导文件中装如主机名，应用于无盘工作站。 <br>&nbsp;<br>3. DHCP配置文件中的option（选项）：用来配置DHCP可选参数，全部用option关键字作为开始，主要内容包括见表3： <br>选项 解释 <br>subnet-mask 为客户端设定子网掩码。 <br>domain-name 为客户端指明DNS名字。 <br>domain-name-servers 为客户端指明DNS服务器IP地址。 <br>host-name 为客户端指定主机名称。 <br>routers 为客户端设定默认网关。 <br>broadcast-address 为客户端设定广播地址。 <br>ntp-server 为客户端设定网络时间服务器IP地址。 <br>ｔime－offset 为客户端设定和格林威治时间的偏移时间，单位是秒。 <br>注意：如果客户端使用的是视窗操作系统，不要选择&#8220;host-name&#8221;选项，即不要为其指定主机名称。 <br>下面是一个笔者使用的DHCP配置文件，这是一个Ｃ类网络，共126个IP地址可以分配的例子。读者可以复制后使用，注意红色部分是必须要修改的。 <br>ddns-update-style interim; <br>ignore client-updates; <br>subnet 192.168.1.0 netmask 255.255.255.0 { <br>option routers 192.168.1.254; <br>option subnet-mask 255.255.255.0; <br>option broadcast-address 192.168.1.255; <br>option domain-name-servers 192.168.1.3; <br>option domain-name "<a href="http://www.cao.com/">www.cao.com</a>";　＃ＤＮＳ名称＃ <br>option domain-name-servers 192.168.1.3; <br>option time-offset -18000; <br>range dynamic-bootp 192.168.1.128 192.168.1.255; <br>default-lease-time 21600; <br>max-lease-time 43200; <br>host ns { <br>hardware ethernet 52:54:AB:34:5B:09;＃运行DHCP的网络接口的MAC地址＃ <br>fixed-address 192.168.1.9; <br>} <br>} <br>二、建立客户租约文件 <br>运行DHCP服务器还需要一个名为 dhcpd.leases 的文件，保持所有已经分发出去的 IP 地址。在Redhat Linux 发行版本中，该文件位于 /var/lib/dhcp/ 目录中。如果您通过 RPM 安装 ISC DHCP，那么该目录应该已经存在。dhcpd.leases的文件格式为： <br>Leases address ｛statement｝ <br>一个典型的文件内容如下： <br>lease 192.168.1.255 { #DHCP服务器分配的IP地址# <br>starts 1 2005/05/02 03:02:26; # lease 开始租约时间# <br>ends 1 2005/05/02 09:02:26; # lease 结束租约时间# <br>binding state active; <br>next binding state free; <br>hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC地址# <br>uid "\001\000\000\350\240%\206"; #用来验证客户机的UID标示# <br>client-hostname "cjh1"; #客户机名称# <br>} <br>注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间（GMT），不是本地时间。 <br>第一次运行DHCP服务器时dhcpd.leases是一个空文件，也不用手工建立。如果不是通过 RPM 安装 ISC DHCP，或者 dhcpd 已经安装，那么您应该试着确定 dhcpd 将其 lease 文件写到何处，并确保该文件存在。也可以手工建立一个空文件： <br>#touch /var/lib/dhcp/dhcpd.leases <br>三、启动和检查DHCP服务器 <br>使用命令启动DHCP服务器： <br>#service dhcpd start <br>使用ps命令检查dhcpd进程： <br>#ps -ef | grep dhcpd <br>root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd <br>root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd <br>使用检查dhcpd运行的端口： <br># netstat -nutap | grep dhcpd <br>udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd </p>
<p>四、配置DHCP客户端 <br>通常网管员使用选择手工配置 DHCP 客户，需要修改 /etc/sysconfig/network 文件来启用联网；并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中，每个设备都有一个叫做 ifcfg-eth？ 的配置文件，eth？是网络设备的名称。 如eth0等。如果你想在引导时启动联网，NETWORKING 变量必须 被设为 yes。 除了此处之外/etc/sysconfig/network 文件应该包含以下行： <br>NETWORKING=yes <br>DEVICE=eth0 <br>BOOTPROTO=dhcp <br>ONBOOT=yes <br>五、DHCP配置常见错误排除 <br>通常配置DHCP 服务器很容易，不过，在这里有一些技巧可以帮助您避免出现问题。对服务器而言，要确保网卡正常工作，并具备广播功能。对客户机而言，还要确保客户机的网卡正常工作。最后，要考虑网络的拓扑，并考虑客户机向 DHCP 服务器发出的广播消息是否会受到阻碍。另外如果dhcpd进程没有启动，那么可以浏览 syslog 消息文件来确定是哪里出了问题。这个消息文件通常是 /var/log/messages。 <br>典型故障： <br>1.DHCP服务器配置完成，没有语法错误。但是网络中的客户机却没办法取得IP地址。 <br>通常是Linux DHCP服务器沒有办法接收來自255.255.255.255 的 DHCP 客户机的Request 封包造成的。一般是Linux DHCP服务器的网卡没有设置具有MULTICAST功能。为了让dhcpd(dhcp程序的守护进程)能够正常的和DHCP客户机沟通，dhcpd必须传送封包到255.255.255.255这个IP地址，但是有些Linux系统里255.255.255.255这个IP地址被用来做为监听区域子网域（local subnet）广播的 IP地址，所以需要在路由表（routing table）里加入255.255.255.255以激活MULTICAST功能； <br>使用命令： <br>route add -host 255.255.255.255 dev eth0 <br>如果报告错误消息：255.255.255.255：Unkown host <br>那么请先修改/etc/hosts加入一行： <br>255.255.255.255 dhcp <br>2. DHCP客户端程序和DHCP服务器不兼容 <br>由于Linux有许多发现版本，不同版本使用DHCP客户端程序和DHCP服务器也不相同。Linux提供了四种DHCP客户端程序：pump, dhclient, dhcpxd, 和dhcpcd。了解不同Linux发行版本的服务器端和客户端程序对于常见错误排除是必要的。笔者曾经遇到过使用SuSE Linux 9.1 DHCP服务器和使用Mandrake Linux 9.0客户机不兼容的情况。此时就必须更换客户端程序。方法是先停止客户机的网络服务，卸载原程序，安装和服务器端兼容程序。附表：主要Linux发行版使用的DHCP客户端。 <br>发行版本 <br>缺省 DHCP客户端 可选 DHCP 客户端 DHCP客户端启动 <br>脚本 附加配置文件 <br>Red Hat Linux 9.0 dhclient 无 /sbin/ifup /etc/sysconfig/network, <br>/etc/sysconfig/network-scripts/ifcfg-eth0 <br>Debian Linux 3.0 dhclient 无 /sbin/ifup /etc/network/interfaces, <br>/etc/dhclient.conf <br>Mandrake Linux 9.1 dhclient dhcpcd, dhcpxd, pump /sbin/ifup /etc/sysconfig/network, <br>/etc/sysconfig/network-scripts/ifcfg-eth0, <br>/etc/dhclient-eth0.conf <br>SuSE Linux 9.1 dhcpcd dhclient /sbin/ifup-dhcp /etc/sysconfig/network/dhcp, <br>/etc/sysconfig/network/ifcfg-eth0 <br>六、DHCP服务器的安全 <br>1. 在指定网络接口启动DHCP服务器 <br>如果你的Linux系统连接了不止一个网络界面，但是你只想让 DHCP 服务器启动其中之一，你可以配置 DHCP 服务器只在那个设备上启动。在 /etc/sysconfig/dhcpd 中，把界面的名称添加到 DHCPDARGS 的列表中： <br>DHCPDARGS=eth0 <br>或者直接使用命令： <br>Echo &#8220;DHCPDARGS=eth0&#8221;&gt;&gt; /etc/ sysconfig/dhcpd <br>这样对于带有两个网卡的防火墙机器，更加安全：一个网卡可以被配置成 DHCP 客户来从互联网上检索 IP 地址；另一个网卡可以被用作防火墙之后的内部网络的 DHCP 服务器。仅指定连接到内部网络的网卡使系统更加安全，因为用户无法通过互联网来连接它的守护进程。 <br>2. 让DHCP服务器在监牢中运行 <br>所谓&#8220;监牢&#8221;就是指通过chroot机制来更改某个软件运行时所能看到的根目录，即将某软件运行限制在指定目录中，保证该软件只能对该目录及其子目录的文件有所动作，从而保证整个服务器的安全。这样即使出现被破壞或被侵入，所受的損傷也较小。 <br>将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中，通常称这个目录为chroot jail（chroot&#8220;监牢&#8221;）。如果要在&#8220;监牢&#8221;中运行dhcpd，而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录，并将dhcpd复制到其中。同时dhcpd需要几个库文件，可以使用ldd（library Dependency Display缩写）命令，ldd作用是显示一个可执行程序必须使用的共享库。 <br>ldd dhcpd <br>libc.so.6 =&gt; /lib/tls/libc.so.6 (0x42000000) <br>/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x40000000) <br>这意味着还需要在&#8220;监牢&#8221;中创建lib目录，并将库文件复制到其中。手工完成这一工作是非常麻烦的，此时可以用jail软件包来帮助简化chroot&#8220;监牢&#8221;建立的过程。 <br>（1）Jail软件的编译和安装 <br>Jail官方网站是：<a href="http://www.jmcresearch.com/">http://www.jmcresearch.com/</a> ，最新版本：1.9a。 <br>#Wget <a href="http://www.jmcresearch.com/static/dwn/projects/jail/jail_1.9a.tar.gz">http://www.jmcresearch.com/static/dwn/projects/jail/jail_1.9a.tar.gz</a> <br>#tar xzvf jail.tar.gz ；cd jail/src <br>#make； make install <br>（2）用jail创建监牢 <br>jail软件包提供了几个Perl脚本作为其核心命令，包括mkjailenv、addjailuser和addjailsw。 <br>mkjailenv：创建chroot&#8220;监牢&#8221;目录，并且从真实文件系统中拷贝基本的软件环境。addjailsw：从真实文件系统中拷贝二进制可执行文件及其相关的其它文件（包括库文件、辅助性文件和设备文件）到该&#8220;监牢&#8221;中。addjailuser：创建新的chroot&#8220;监牢&#8221;用户。 <br>首先停止目前dhcpd服务，然后建立chroot目录： <br>#/sbin/service dhcpd start <br>#mkjailenv /chroot/ <br>mkjailenv <br>A component of Jail (version 1.9 for linux) <br><a href="http://www.gsyc.inf.uc3m.es/~assman/jail/">http://www.gsyc.inf.uc3m.es/~assman/jail/</a> <br>Juan M. Casillas <br>Making chrooted environment into /chroot <br>Doing preinstall() <br>Doing special_devices() <br>Doing gen_template_password() <br>Doing postinstall() <br>Done. <br>下面的例子展示为&#8220;监牢&#8221;添加dhcpd程序的过程 <br># addjailsw /chroot/ -P /usr/sbin/dhcpd <br>addjailsw <br>A component of Jail (version 1.9 for linux) <br><a href="http://www.gsyc.inf.uc3m.es/~assman/jail/">http://www.gsyc.inf.uc3m.es/~assman/jail/</a> <br>Juan M. Casillas <br>Guessing dhcpd args(0) <br>Warning: file /chroot//lib/tls/libc.so.6 exists. Overwritting it <br>Warning: file /chroot//lib/ld-linux.so.2 exists. Overwritting it <br>&#8230;&#8230;&#8230; <br>Done. <br>不用在意那些警告信息，因为jail会调用ldd检查dhcpd用到的库文件。而几乎所有基于共享库的二进制可执行文件都需要上述的几个库文件。接下来将dhcpd的相关文件拷贝到&#8220;监牢&#8221;中： <br># mkdir -p /chroot/dhcp/etc <br># cp /etc/dhcpd.conf /chroot/dhcp/etc/ <br># mkdir -p /chroot/dhcp/var/state/dhcp <br># touch /chroot/dhcp/var/state/dhcp/dhcp.leases <br>此时的&#8220;监牢&#8221;目录结构见图1。 <br>图1 &#8220;监牢&#8221;目录结构 <br>重新启动dhcpd： <br>[root@www root]# /chroot/usr/sbin/dhcpd <br>使用ps命令检查dhcpd进程： <br>#ps -ef | grep dhcpd <br>root 2402 1 0 14:25 ? 00:00:00 /chroot/usr/sbin/dhcpd <br>root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd <br>注意此时进程名称已经改变，使用检查dhcpd运行的端口： <br># netstat -nutap | grep dhcpd <br>udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd <br>端口号没有改变。现在dhcpd已经成功运行在&#8220;监牢&#8221;中。 <br>到此为止一个这样，一个完整和安全的 DHCP服务器就完成了。<br></p></br>
<!-- Begin #sidebar -->
<div id=sidebar><div id=sidebar2>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div>
 <img src ="http://www.blogjava.net/RomKK/aggbug/132162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:42 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux快速构建apache web服务器</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132161.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132161.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132161.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132161.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br>Apache服务器的最新稳定发布版本是httpd-2.2..0,官方下载地址是：<a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>。我们通过下面的步骤来快速的搭建一个web服务器。<br>1、&nbsp;&nbsp;&nbsp; 下载源码文件httpd-2.2.0.tar.gz 到linux服务器的某个目录。<br>2、&nbsp;&nbsp;&nbsp; 解压文件 # tar zxvf httpd-2.2.0.tar.gz .<br>3、&nbsp;&nbsp;&nbsp; 配置 # ./configure &#8211;refix=/usr/local/apache //指定安装目录，以后要删除安装就只需删除这个目录。<br>4、&nbsp;&nbsp;&nbsp; 编译和安装。 # make ; make install .<br>5、&nbsp;&nbsp;&nbsp; 编写启动脚本，把它放到目录 /etc/rc.d/init.d/里，这里取名为httpd,其内容如下：<br>&nbsp; #!/bin/bash<br>#description:http server<br>#chkconfig: 235 98 98<br>case "$1" in<br>&nbsp; start)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Starting Apache daemon..."<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/apache2/bin/apachectl -k start<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>&nbsp; stop)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Stopping Apache daemon..."<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/apache2/bin/apachectl -k stop<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>&nbsp; restart)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Restarting Apache daemon..."<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/apache2/bin/apachectl -k restart<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>&nbsp; status)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statusproc /usr/local/apache2/bin/httpd<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp; *)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Usage: $0 {start|stop|restart|status}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>Esac<br>注意：#description:http server 这一行必须加上，否则在执行命令 # chkconfig &#8211;add httpd 时会出现&#8220;service apache does not support chkconfig&#8221;的错误报告。#chkconfig: 2345 98 98 表示在执行命令 # chkconfig &#8211;add httpd 时会在目录 /etc/rc2.d/ 、/etc/rc3.d/ /etc/rc5.d 分别生成文件 S98httpd和 K98httpd。这个数字可以是别的。<br>6、&nbsp;&nbsp;&nbsp; 执行命令 # chkconfig &#8211;add httpd ，进入目录/etc/rc3.d/检查是否生成文件 S98httpd及K98httpd.<br>7、&nbsp;&nbsp;&nbsp; 启动服务 # service httpd start .
<br><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <img src ="http://www.blogjava.net/RomKK/aggbug/132161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:41 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux内核编译过程详解(kernel2.6.7)</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132160.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132160.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132160.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132160.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</br>花了几天才编译成功kernel2.6.7,其过程真可谓艰辛.古语有云:"苦尽甘来!"现在终于可以乐上一阵了.由于许多朋友对操作的顺序及某些重要的配置知之甚少或知之不详,往往病急乱投医.加之网上的信息多且烦杂,使得编译内核成功率不高,甚至造成原来的系统崩溃的也不在少数.我就是其中一个。<br>　　<br>　　其实,编译内核并不是一件难事.如果能按照正确的方法来操作,最多花上一个半小时就能搞定.是不是很受鼓舞呀!<br>　　<br>　　废话少说,现在我们马上开始.我原来的系统是redhat9.0,内核2.4.20-8,编译的内核2.6.7,仅供参考.<br>　　<br>　　共分为四部分:编译前准备-&gt;编译配置-&gt;编译过程-&gt;运行内核的常见问题<br>　　<br>　　一 编译前准备<br>　　<br>　　1)下载一份内核源代码,我下的是linux-2.6.7.tar.bz2,你可在如下地址下载它或者是更新的版本.<br>　　<br>　　<a href="http://kernel.org/pub/linux/kernel/v2.6/">http://kernel.org/pub/linux/kernel/v2.6/</a><br>　　<br>　　2) 下载最新版本的module-init-tools( "module-init-tools-3.0.tar.gz" and "modutils-2.4.21-23.src.rpm")<br>　　<br>　　<a href="http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz">http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz</a><br>　　<br>　　<a href="http://www.kernel.org/pub/linux/kernel/people/rusty/modules/modutils-2.4.21-23.src.rpm">http://www.kernel.org/pub/linux/kernel/people/rusty/modules/modutils-2.4.21-23.src.rpm</a><br>　　<br>　　3)安装module-init-tools. 它会替代depmod [/sbin/depmod]和其他工具.<br>　　<br>　　tar -zxvf module-init-tools-3.0.tar.gz<br>　　<br>　　cd module-init-tools-3.0<br>　　<br>　　./configure --prefix=/sbin<br>　　<br>　　make<br>　　<br>　　make install<br>　　<br>　　./generate-modprobe.conf /etc/modprobe.conf<br>　　<br>　　4)安装modutils-2.4.21-23.src.rpm. 你可能会看到"user rusty and group rusty not existing"的警告. 没关系,你只需强制安装就是了.如果你不对Redhat 9和Redhat 8做这几步, 你将会在"make modules_install"这一步时出现问题.<br>　　<br>　　rpm -i modutils-2.4.21-23.src.rpm<br>　　<br>　　rpmbuild -bb /usr/src/redhat/SPECS/modutils.spec<br>　　<br>　　rpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm<br>　　<br>　　5)解压缩内核源代码.把下载的源代码包放到目录/usr/src下,然后<br>　　<br>　　cd /usr/src<br>　　<br>　　tar xvfj linux-2.6.7.tar.bz2<br>　　<br>　　cd linux-2.6.7<br>　　<br>　　二 编译配置<br>　　<br>　　在这一部分涉及几个重要模块的配置请,特别注意.一般用"make menuconfig"命令来配置内核.<br>　　<br>　　输入以上命令后出现一个菜单界面,用户可以对需要的模块.下面着重讲几个重要的配置<br>　　<br>　　1)文件系统<br>　　<br>　　请务必要选中ext3文件系统,<br>　　<br>　　File systems---&gt;<br>　　<br>　　 <br>&#8226;&nbsp; Ext3 journalling file system support<br>　　<br>　　 <br>&#8226;&nbsp; Ext3 Security Labels<br>　　<br>　　 <br>&#8226;&nbsp; JBD (ext3) debugging support<br>　　<br>　　以上三项一定要选上,而且要内建(即标*). 这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项. 如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed<br>　　<br>　　2)网卡驱动<br>　　<br>　　请务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek 8139,以下就是这种网卡的配置,以供参考<br>　　<br>　　Device Drivers---&gt;<br>　　<br>　　Networking support---&gt;<br>　　<br>　　Ethernet (10 or 100Mbit) ---&gt;<br>　　<br>　　&lt;*&gt; RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)<br>　　<br>　　&lt;*&gt; RealTek RTL-8139 PCI Fast Ethernet Adapter support<br>　　<br>　　3)声卡驱动<br>　　<br>　　也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考<br>　　<br>　　Device Drivers ---&gt;<br>　　<br>　　Sound ---&gt;<br>　　<br>　　&lt;*&gt; Sound card support<br>　　<br>　　Advanced Linux Sound Architecture ---&gt;<br>　　<br>　　&lt;*&gt; Advanced Linux Sound Architecture<br>　　<br>　　&lt;*&gt; Sequencer support<br>　　<br>　　&lt; &gt; Sequencer dummy client<br>　　<br>　　&lt;*&gt; OSS Mixer API<br>　　<br>　　&lt;*&gt; OSS PCM (digital audio) API <br>&#8226;&nbsp; OSS Sequencer API<br>　　<br>　　&lt;*&gt; RTC Timer support<br>　　<br>　　PCI devices ---&gt;<br>　　<br>　　&lt;*&gt; Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111<br>　　<br>　　Open Sound System ---&gt;<br>　　<br>　　&lt; &gt; Open Sound System (DEPRECATED)<br>　　<br>　　以上三项配置关系到新内核能否正常运行,请备加注意.其他的配置如果不是很了解,大可以按默认的选择.<br>　　<br>　　三 编译 <br>　　<br>　　按如下命令编译,大概需要一个多小时,大可以好好放松一下<br>　　<br>　　make bzImage<br>　　<br>　　make modules<br>　　<br>　　make modules_install<br>　　<br>　　make install<br>　　<br>　　运行新内核之前,请检查一下/boot/grub/grub.conf的内容,下面的配置可作参考<br>　　<br>　　# grub.conf generated by anaconda<br>　　<br>　　#<br>　　<br>　　# Note that you do not have to rerun grub after making changes to this file<br>　　<br>　　# NOTICE: You have a /boot partition. This means that<br>　　<br>　　# all kernel and initrd paths are relative to /boot/, eg.<br>　　<br>　　# root (hd0,0)<br>　　<br>　　# kernel /vmlinuz-version ro root=/dev/hdc3<br>　　<br>　　# initrd /initrd-version.img<br>　　<br>　　#boot=/dev/hdc<br>　　<br>　　default=1<br>　　<br>　　timeout=10<br>　　<br>　　splashimage=(hd0,0)/grub/splash.xpm.gz<br>　　<br>　　title Red Hat Linux (2.6.7)<br>　　<br>　　root (hd0,0)<br>　　<br>　　kernel /vmlinuz-2.6.7 ro root=LABEL=/<br>　　<br>　　initrd /initrd-2.6.7.img<br>　　<br>　　title Red Hat Linux<br>　　<br>　　root (hd0,0)<br>　　<br>　　kernel /vmlinuz-2.4.20-8 ro root=LABEL=/<br>　　<br>　　initrd /initrd-2.4.20-8.img<br>　　<br>　　四 运行内核的常见问题<br>　　<br>　　1)RPM问题<br>　　<br>　　进入编译好的内核后，与RPM相关的命令有些不能使用，并出现下列错误：<br>　　<br>　　rpmdb: unable to join the environment<br>　　<br>　　error: db4 error(11) from dbenv-&gt;open: Resource temporarily unavailable<br>　　<br>　　error: cannot open Packages index using db3 - Resource temporarily unavailable (11)<br>　　<br>　　error: cannot open Packages database in /var/lib/rpm<br>　　<br>　　no packages<br>　　<br>　　解决方法是执行&#8220;export LD_ASSUME_KERNEL =2.2.25&#8221;命令，也可以将其写入/etc/bashrc。<br>　　<br>　　2)Sound问题<br>　　<br>　　声音部分的模块名也改变了。我的笔记本原来的声卡驱动是i810_audio，现在已改为snd-intel8x0。因此需要把下面的内容添加到/etc/modprobe.conf中：<br>　　<br>　　alias char-major-14 soundcore<br>　　<br>　　alias sound snd-intel8x0<br>　　<br>　　alias sound-slot-0 snd-intel8x0<br>　　<br>　　alias snd-card-0 snd-intel8x0<br>　　<br>　　alias sound-service-0-0 snd-mixer-oss<br>　　<br>　　alias sound-service-0-1 snd-seq-oss<br>　　<br>　　alias sound-service-0-3 snd-pcm-oss<br>　　<br>　　alias sound-service-0-8 snd-seq-oss<br>　　<br>　　alias sound-service-0-12 snd-pcm-oss<br>　　<br>　　install snd-intel8x0 /sbin/modprobe --ignore-install sound-slot-0 &amp;&amp;<br>　　<br>　　{ /bin/aumix-minimal -f /etc/.aumixrc -L &gt;/dev/null 2&gt;&amp;1; /bin/true; }<br>　　<br>　　remove snd-intel8x0<br>　　<br>　　{ /bin/aumix-minimal -f /etc/.aumixrc -S &gt;/dev/null 2&gt;&amp;1; /bin/true; };<br>　　<br>　　/sbin/modprobe -r --ignore-remove sound-slot-0<br>　　<br>　　然后执行&#8220;modprobe sound&#8221;加载声音模块，并使用下列命令检验声卡驱动：<br>　　<br>　　#cat /proc/asound/cards<br>　　<br>　　显示结果如下：<br>　　<br>　　0 [SI7012]: ICH - SiS SI7012<br>　　<br>　　SiS SI7012 at 0xdc00, irq 11<br>　　<br>　　3)VMware问题<br>　　<br>　　解决方法是：<br>　　<br>　　◆ 将/usr/bin/vmware-config.pl中所有的&#8220;/proc/ksyms&#8221;替换为&#8220;/proc/kallsyms&#8221;。使用&#8220;sed&#8221;命令可以达到这个目的。<br>　　<br>　　◆ 重新运行该脚本，使用内核头文件编译新的内核模块。在编译过程中如发生错误，应该进入/usr/lib/vmware/modules/source，使用下面的命令将vmnet.tar解包：<br>　　<br>　　#tar xvf vmnet.tar<br>　　<br>　　◆ 进入vmnet-only目录修改bridge.c文件。将&#8220;atomic_add(skb-&gt;truesize, &amp;sk-&gt;wmem_alloc);&#8221;修改为&#8220;atomic_add(skb-&gt;truesize, &amp;sk-&gt;sk_wmem_alloc);&#8221;，并用类似的方式将&#8220;protinfo&#8221;改为&#8220;sk_protinfo&#8221;。<br>　　<br>　　◆ 再次把vmnet-only目录用下面的命令重新打包为vmmon.tar：<br>　　<br>　　#tar cvf vmmon.tar v </br>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.blogjava.net/RomKK/aggbug/132160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:40 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统中集群及其配置实例</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132159.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132159.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132159.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132159.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</br>集群系统(Cluster)主要解决下面几个问题：<br>高可靠性（HA）。利用集群管理软件，当主服务器故障时，备份服务器能够自动接管主服务器的工作，并及时切换过去，以实现对用户的不间断服务。 <br>高性能计算（HP）。即充分利用集群中的每一台计算机的资源，实现复杂运算的并行处理，通常用于科学计算领域，比如基因分析，化学分析等。 <br>负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上，以减轻主服务器的压力，降低对主服务器的硬件和软件要求。 <br>在实际应用中，最常见的情况是利用集群解决负载平衡问题，比如用于提供WWW服务。在这里主要展示如何使用LVS(Linux Virtial Server)来实现实用的WWW负载平衡集群系统。<br>LVS简介<br>LVS是章文嵩博士发起和领导的优秀的集群解决方案，许多商业的集群产品，比如RedHat的Piranha，TurboLinux公司的Turbo Cluster等，都是基于LVS的核心代码的。在现实的应用中，LVS得到了大量的部署，请参考http: //www.linuxvirtualserver.org/deployment.html<br>关于Linux LVS的工作原理和更详细的信息，请参考<a href="http://www.linuxvirtualserver.org/">http://www.linuxvirtualserver.org</a>。<br>LVS配置实例<br>通过Linux LVS，实现WWW，Telnet服务的负载平衡。这里实现Telnet集群服务仅为了测试上的方便。<br>LVS有三种负载平衡方式，NAT（Network Address Translation），DR（Direct Routing），IP Tunneling。其中，最为常用的是DR方式，因此这里只说明DR(Direct Routing)方式的LVS负载平衡。<br>1、网络拓扑结构。 <br>&nbsp;<br>如图1所示，为测试方便，4台机器处于同一网段内，通过一交换机或者集线器相连。实际的应用中，最好能够将虚拟服务器vs1和真实服务器rs1, rs2置于于不同的网段上，即提高了性能，也加强了整个集群系统的安全性。<br>2、服务器的软硬件配置 <br>首先说明，虽然本文的测试环境中用的是3台相同配置的服务器，但LVS并不要求集群中的服务器规格划一，相反，可以根据服务器的不同配置和负载情况，调整负载分配策略，充分利用集群环境中的每一台服务器。<br>这3台服务器中，vs1作为虚拟服务器（即负载平衡服务器），负责将用户的访问请求转发到集群内部的rs1,rs2，然后由rs1,rs2分别处理。<br>client为客户端测试机器，可以为任意操作系统。<br>4台服务器的操作系统和网络配置分别为：<br>vs1: RedHat 6.2, Kernel 2.2.19<br>vs1: eth0 192.168.0.1<br>vs1: eth0:101 192.168.0.101<br>rs1: RedHat 6.2, Kernel 2.2.14<br>rs1: eth0 192.168.0.3<br>rs1: dummy0 192.168.0.101<br>rs2: RedHat 6.2, Kernel 2.2.14<br>rs2: eth0 192.168.0.4<br>rs2: dummy0 192.168.0.101<br>client: Windows 2000<br>client: eth0 192.168.0.200<br>其中，192.168.0.101是允许用户访问的IP。<br>虚拟服务器的集群配置 <br>大部分的集群配置工作都在虚拟服务器vs1上面，需要下面的几个步骤：<br>重新编译内核。 <br>首先，下载最新的Linux内核，版本号为2.2.19，下载地址为：<a href="http://www.kernel.org/">http://www.kernel.org/</a>，解压缩后置于/usr/src/linux目录下。<br>其次需要下载LVS的内核补丁，地址为：<a href="http://www.linuxvirtualserver.org/software/ipvs">http://www.linuxvirtualserver.org/software/ipvs</a>- 1.0.6-2.2.19.tar.gz。这里注意，如果你用的Linux内核不是2.2.19版本的，请下载相应版本的LVS内核补丁。将ipvs- 1.0.6-2.2.19.tar.gz解压缩后置于/usr/src/linux目录下。 <br>然后，对内核打补丁，如下操作： <br>[root@vs2 /root]# cd /usr/src/linux<br>[root@vs2 linux]# patch -p1 &lt; ipvs-1.0.6-2.2.19/ipvs-1.0.6-2.2.19.patch<br>下面就是重新配置和编译Linux的内核。特别注意以下选项：<br>1 Code maturity level options---&gt;<br>*　 [*]Prompt for development and/or incomplete code/drivers<br>2 Networking部分：<br>　[*] Kernel/User netlink socket<br>　 [*] Routing messages<br>　 &lt;*&gt; Netlink device emulation<br>*　[*] Network firewalls<br>　 [*] Socket Filtering<br>　 &lt;*&gt; Unix domain sockets<br>*　[*] TCP/IP networking<br>　 [*] IP: multicasting<br>　 [*] IP: advanced router<br>　 [ ] IP: policy routing<br>　 [ ] IP: equal cost multipath<br>　 [ ] IP: use TOS value as routing key<br>　 [ ] IP: verbose route monitoring<br>　 [ ] IP: large routing tables<br>　 [ ] IP: kernel level autoconfiguration<br>*　[*] IP: firewalling<br>　 [ ] IP: firewall packet netlink device<br>*　[*] IP: transparent proxy support<br>*　[*] IP: masquerading<br>　 --- Protocol-specific masquerading support will be built as modules.<br>*　[*] IP: ICMP masquerading<br>　 --- Protocol-specific masquerading support will be built as modules.<br>*　[*] IP: masquerading special modules support<br>*　 IP: ipautofw masq support (EXPERIMENTAL)(NEW)<br>*　 IP: ipportfw masq support (EXPERIMENTAL)(NEW)<br>*　 IP: ip fwmark masq-forwarding support (EXPERIMENTAL)(NEW)<br>*　[*] IP: masquerading virtual server support (EXPERIMENTAL)(NEW)<br>　 [*]　IP Virtual Server debugging (NEW)　&lt;--最好选择此项，以便观察LVS的调试信息<br>*　(12) IP masquerading VS table size (the Nth power of 2) (NEW)<br>*　 IPVS: round-robin scheduling (NEW)<br>*　 IPVS: weighted round-robin scheduling (NEW)<br>*　 IPVS: least-connection scheduling (NEW)<br>*　 IPVS: weighted least-connection scheduling (NEW)<br>*　 IPVS: locality-based least-connection scheduling (NEW)<br>*　 IPVS: locality-based least-connection with replication scheduling (NEW)<br>*　[*] IP: optimize as router not host<br>*　 IP: tunneling<br>　 IP: GRE tunnels over IP<br>　 [*] IP: broadcast GRE over IP<br>　 [*] IP: multicast routing<br>　 [*] IP: PIM-SM version 1 support<br>　 [*] IP: PIM-SM version 2 support<br>*　[*] IP: aliasing support<br>　 [ ] IP: ARP daemon support (EXPERIMENTAL)<br>*　[*] IP: TCP syncookie support (not enabled per default)<br>　 --- (it is safe to leave these untouched)<br>　 &lt; &gt; IP: Reverse ARP<br>　 [*] IP: Allow large windows (not recommended if &lt;16Mb of memory)<br>　 &lt; &gt; The IPv6 protocol (EXPERIMENTAL)<br>上面，带*号的为必选项。<br>然后就是常规的编译内核过程，不再赘述，请参考编译 Linux 教程<br>在这里要注意一点：如果你使用的是RedHat自带的内核或者从RedHat下载的内核版本，已经预先打好了LVS的补丁。这可以通过查看/usr/src/linux/net/目录下有没有几个ipvs开头的文件来判断：如果有，则说明已经打过补丁。<br>编写LVS配置文件，实例中的配置文件如下： <br>#lvs_dr.conf (C) Joseph Mack <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#99;&#107;&#64;&#110;&#99;&#105;&#102;&#99;&#114;&#102;&#46;&#103;&#111;&#118;">mack@ncifcrf.gov</a><br>LVS_TYPE=VS_DR<br>INITIAL_STATE=on <br>VIP=eth0:101 192.168.0.101 255.255.255.0 192.168.0.0<br>DIRECTOR_INSIDEIP=eth0 192.168.0.1 192.168.0.0 255.255.255.0 192.168.0.255 <br>SERVICE=t telnet rr rs1:telnet rs2:telnet<br>SERVICE=t www rr rs1:www rs2:www<br>SERVER_VIP_DEVICE=dummy0<br>SERVER_NET_DEVICE=eth0<br>#----------end lvs_dr.conf------------------------------------<br>将该文件置于/etc/lvs目录下。<br>使用LVS的配置脚本产生lvs.conf文件。该配置脚本可以从http: //www.linuxvirtualserver.org/Joseph.Mack/configure-lvs_0.8.tar.gz 单独下载，在ipvs-1.0.6-2.2.19.tar.gz包中也有包含。 <br>脚本configure的使用方法：<br>[root@vs2 lvs]# configure lvs.conf<br>这样会产生几个配置文件，这里我们只使用其中的rc.lvs_dr文件。<br>修改/etc/rc.d/init.d/rc.local，增加如下几行： <br>echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br>echo 1 &gt; /proc/sys/net/ipv4/ip_always_defrag<br># 显示最多调试信息<br>echo 10 &gt; /proc/sys/net/ipv4/vs/debug_level<br>配置NFS服务。这一步仅仅是为了方便管理，不是必须的步骤。假设配置文件lvs.conf文件放在/etc/lvs目录下，则/etc/exports文件的内容为：<br>/etc/lvs ro(rs1,rs2)<br>然后使用exportfs命令输出这个目录:<br>[root@vs2 lvs]# exportfs<br>如果遇到什么麻烦，可以尝试：<br>[root@vs2 lvs]# /etc/rc.d/init.d/nfs restart<br>[root@vs2 lvs]# exportfs<br>这样，各个real server可以通过NFS获得rc.lvs_dr文件，方便了集群的配置:你每次修改lvs.conf中的配置选项，都可以即可反映在rs1,rs2的相应目录里。<br>修改/etc/syslogd.conf，增加如下一行： kern.*　 /var/log/kernel_log<br>这样，LVS的一些调试信息就会写入/var/log/kernel_log文件中.<br>real server的配置<br>real server的配置相对简单，主要是是以下几点： <br>配置telnet和WWW服务。telnet服务没有需要特别注意的事项，但是对于www服务，需要修改httpd.conf文件，使得apache在虚拟服务器的ip地址上监听，如下所示：<br>Listen 192.168.0.101:80 <br>关闭real server上dummy0的arp请求响应能力。这是必须的，具体原因请参见ARP problem in LVS/TUN and LVS/DR（<a href="http://www.linuxvirtualserver.org/arp.html">http://www.linuxvirtualserver.org/arp.html</a>）。关闭dummy0的arp响应的方式有多种，比较简单地方法是，修改/etc/rc.d/rc.local文件，增加如下几行： echo 1 &gt; /proc/sys/net/ipv4/conf/all/hidden<br>ifconfig dummy0 up<br>ifconfig dummy0 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.0 up<br>echo 1 &gt; /proc/sys/net/ipv4/conf/dummy0/hidden<br>再次修改/etc/rc.d/rc.local，增加如下一行：（可以和步骤2合并）<br>echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br>LVS的测试<br>好了，经过了上面的配置步骤，现在可以测试LVS了，步骤如下：<br>分别在vs1，rs1，rs2上运行/etc/lvs/rc.lvs_dr。注意，rs1,rs2上面的/etc/lvs目录是vs2输出的。如果您的 NFS配置没有成功，也可以把vs1上的/etc/lvs/rc.lvs_dr复制到rs1,rs2上，然后分别运行。 <br>确保rs1,rs2上面的apache已经启动并且允许telnet。 <br>然后从client运行telnet 192.168.0.101，如果登录后看到如下输出就说明集群已经开始工作了:（假设以guest用户身份登录） <br>[guest@rs1 guest]$-----------说明已经登录到服务器rs1上。<br>再开启一个telnet窗口，登录后会发现系统提示变为：<br>[guest@rs2 guest]$-----------说明已经登录到服务器rs2上。<br>然后在vs2上运行如下命令：<br>[root@vs2 /root]ipvsadm<br>运行结果应该为：<br>IP Virtual Server version 1.0.6 (size=4096)<br>Prot LocalAddress:Port Scheduler Flags<br>-&gt; RemoteAddress:Port Forward Weight ActiveConn InActConn<br>TCP　192.168.0.101:telnet rr<br>-&gt; rs2:telnet Route　 1　1　0<br>-&gt; rs1:telnet Route　 1　1　0<br>TCP　192.168.0.101:www rr<br>-&gt; rs2:wwwRoute　 1　0　0<br>-&gt; rs1:wwwRoute　 1　0　0<br>至此已经验证telnet的LVS正常。<br>然后测试一下WWW是否正常：用你的浏览器查看<a href="http://192.168.0.101/">http://192.168.0.101/</a>是否有什么变化？为了更明确的区别响应来自那个real server，可以在rs1,rs2上面分别放置如下的测试页面(test.html)： <br>我是real server #1 or #2<br>然后刷新几次页面（<a href="http://192.168.0.101/test.html">http://192.168.0.101/test.html</a>），如果你看到&#8220;我是real server #1&#8221;和&#8220;我是real server #2&#8221;交替出现，说明www的LVS系统已经正常工作了。<br>但是由于Internet Explore 或者Netscape本身的缓存机制，你也许总是只能看到其中的一个。不过通过ipvsadm还是可以看出，页面请求已经分配到两个real server上了，如下所示： <br>IP Virtual Server version 1.0.6 (size=4096)<br>Prot LocalAddress:Port Scheduler Flags<br>-&gt; RemoteAddress:Port Forward Weight ActiveConn InActConn<br>TCP　192.168.0.101:telnet rr<br>-&gt; rs2:telnet Route　 1　0　0<br>-&gt; rs1:telnet Route　 1　0　0<br>TCP　192.168.0.101:www rr<br>-&gt; rs2:wwwRoute　 1　0　5<br>-&gt; rs1:wwwRoute　 1　0　4<br>或者，可以采用linux的lynx作为测试客户端，效果更好一些。如下运行命令：<br>[root@client /root]while true; do lynx -dump <a href="http://10.64.1.56/test.html">http://10.64.1.56/test.html</a>; sleep 1; done<br>这样，每隔1秒钟&#8220;我是realserver #1&#8221;和&#8220;我是realserver #2&#8221;就交替出现一次，清楚地表明响应分别来自两个不同的real server。<br>调试技巧<br>如果您的运气不好，在配置LVS的过程中也许会遇到一些困难，下面的技巧或许有帮助：<br>首先确定网络硬件没有问题，尤其是网线，ping工具就足够了。 <br>使用netstat查看端口的活动情况。 <br>使用tcpdump查看数据包的流动情况。 <br>查看/var/log/kernel_log文件。</br>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

 <img src ="http://www.blogjava.net/RomKK/aggbug/132159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:39 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>