<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>飞向梦想</title>
	<atom:link href="http://blog.sitearth.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.sitearth.com</link>
	<description>站在巨人的肩上</description>
	<lastBuildDate>Tue, 06 Mar 2012 08:07:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>coreseek3.2安装</title>
		<link>http://blog.sitearth.com/coreseek3-2%e5%ae%89%e8%a3%85?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=coreseek3-2%25e5%25ae%2589%25e8%25a3%2585</link>
		<comments>http://blog.sitearth.com/coreseek3-2%e5%ae%89%e8%a3%85#comments</comments>
		<pubDate>Tue, 06 Mar 2012 08:07:46 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[Sphinx]]></category>
		<category><![CDATA[coreseek]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[中文全文检索]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=114</guid>
		<description><![CDATA[Sphinx 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包。 coreseek-3.2.13基于Sphinx 0.9.9 release开发，为Sphinx 贡献了： · GBK编码的数据源支持 · 采用Chih-Hao Tsai MMSEG算法的中文分词器 · 中文使用手册 全面支持：Freebsd 6、7、8、Redhat、CentOS、Fedora、Debian、Ubuntu、Gentoo、OpenSUSE、Slackware、ArchLinux、Windows XP、Windows 2003、Windows 7、Windows Server 2008等各类32位以及64位操作系统！ 下面开始安装 1.安装准备程序 yum -y install gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel 2.安装mmseg wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13.tar.gz cd coreseek-3.2.13 mmseg和csft都在这个目录下 cd mmseg-3.2.13/ ./configure &#8211;prefix=/usr/local/mmseg3 出现如下错误提示： configure: creating ./config.status config.status: creating Makefile config.status: creating [...]]]></description>
			<content:encoded><![CDATA[<p>Sphinx 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包。<br />
coreseek-3.2.13基于Sphinx 0.9.9 release开发，为Sphinx 贡献了：<br />
· GBK编码的数据源支持<br />
· 采用Chih-Hao Tsai MMSEG算法的中文分词器<br />
· 中文使用手册<br />
全面支持：Freebsd 6、7、8、Redhat、CentOS、Fedora、Debian、Ubuntu、Gentoo、OpenSUSE、Slackware、ArchLinux、Windows XP、Windows 2003、Windows 7、Windows Server 2008等各类32位以及64位操作系统！</p>
<p>下面开始安装<br />
<strong>1.安装准备程序</strong></p>
<pre>
yum -y install gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel
</pre>
<p><span id="more-114"></span><br />
<strong>2.安装mmseg</strong><br />
wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13.tar.gz<br />
cd coreseek-3.2.13<br />
mmseg和csft都在这个目录下<br />
cd mmseg-3.2.13/<br />
./configure &#8211;prefix=/usr/local/mmseg3<br />
出现如下错误提示：</p>
<pre>
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: error: cannot find input file: src/Makefile.in
</pre>
<p>采用一下方法处理</p>
<pre>
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean
./configure --prefix=/usr/local/mmseg
make
make install
</pre>
<p>安装完成后，mmseg使用的词典和配置文件，自动安装在/usr/local/mmseg/etc中</p>
<p><strong>3.安装csft</strong></p>
<pre>
cd csft-3.2.13
./configure --prefix=/usr/local/coreseek --without-python --with-mysql --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
</pre>
<p>顺利通过<br />
make时出错<br />
/home/src/coreseek-3.2.13/csft-3.2.13/src/tokenizer_zhcn.h:70: undefined reference to `libiconv_open&#8217;<br />
/home/src/coreseek-3.2.13/csft-3.2.13/src/tokenizer_zhcn.h:73: undefined reference to `libiconv&#8217;<br />
试了多种方案，无效。然后以带&#8211;without-iconv的参数安装通过。但是在indexer索引的时候会出错。创建索引时提示：unknown charset type &#8216;zh_cn.gbk&#8217;。查看文档中的说明：对于中文用户，可选的值还可以有“zh_cn.utf-8 ”和“zh_cn.gbk”。当设置charset_type值为上面的两种时，系统默认您开启了中文分词特性。当设置charset_type = zh_cn.gbk，系统在configure时 会检测libiconv，如果存在，则开启转码机制以支持gbk；如果不存在则只支持utf-8 。因此，通过&#8211;without-iconv的方法安装也是不可行的。</p>
<p>最后找到如下方法，修改src/Makefile，<br />
搜索LIBS找到这行：<br />
LIBS = -lm -lz -lexpat  -L/usr/local/lib -lrt  -lpthread<br />
修改为：<br />
LIBS = -lm -lz -lexpat -liconv -L/usr/local/lib -lrt  -lpthread<br />
编译终于通过了，Coreseek3.2.13安装完成。</p>
<p>PS：coreseek支持latin1,GBK,UTF-8编码的MYSQL索引，原版的sphinx只支持单字节字符集和UTF-8编码。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/coreseek3-2%e5%ae%89%e8%a3%85/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CentOS上FTP服务配置</title>
		<link>http://blog.sitearth.com/centos%e4%b8%8aftp%e6%9c%8d%e5%8a%a1%e9%85%8d%e7%bd%ae?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=centos%25e4%25b8%258aftp%25e6%259c%258d%25e5%258a%25a1%25e9%2585%258d%25e7%25bd%25ae</link>
		<comments>http://blog.sitearth.com/centos%e4%b8%8aftp%e6%9c%8d%e5%8a%a1%e9%85%8d%e7%bd%ae#comments</comments>
		<pubDate>Mon, 05 Mar 2012 02:44:33 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=113</guid>
		<description><![CDATA[1.安装 一般在CentOS上都自动安装了vsftd，若没有安装则可以使用以下步骤进行安装 yum -y install vsftpd touch /var/log/vsftpd.log # 创建vsftp的日志文件 在CentOS中，这样就可以完成了一个简单的匿名FTP的搭建。你可以通过访问ftp://yourip来进行，不过这个FTP没有任何权限。 2.基于匿名的FTP架设 （略） 3.基于虚拟用户的FTP架设 所谓虚拟用户就是没有使用真实的帐户，只是通过某种手段达到映射帐户和设置权限的目的。 1）我们在/etc/vsftpd/vsftpd.conf中做如下CentOS FTP服务配置： anonymous_enable=NO 设定不允许匿名访问 local_enable=YES 设定本地用户可以访问。注：如使用虚拟宿主用户，在该项目设定为NO的情况下所有虚拟用户将无法访问。 chroot_list_enable=YES 使用户不能离开主目录 xferlog_file=/var/log/vsftpd.log 设定vsftpd的服务日志保存路径。注意，该文件默认不存在。必须要手动touch出来 ascii_upload_enable=YES ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能。 pam_service_name=vsftpd PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证 以下这些是关于Vsftpd虚拟用户支持的重要CentOS FTP服务配置项目。默认vsftpd.conf中不包含这些设定项目，需要自己手动添加CentOS FTP服务配置。 guest_enable=YES 设定启用虚拟用户功能。 guest_username=ftp 指定虚拟用户的宿主用户。-CentOS中已经有内置的ftp用户了 user_config_dir=/etc/vsftpd/vuser_conf 设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名) 2）创建chroot list，将用户ftp加入其中： touch /etc/vsftpd/chroot_list echo ftp >> /etc/vsftpd/chroot_list 3）进行认证： 首先，安装Berkeley DB工具，很多人找不到db_load的问题就是没有安装这个包。 yum install db4 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1.安装</strong></p>
<p>一般在CentOS上都自动安装了vsftd，若没有安装则可以使用以下步骤进行安装<br />
yum -y install vsftpd<br />
touch /var/log/vsftpd.log # 创建vsftp的日志文件<br />
在CentOS中，这样就可以完成了一个简单的匿名FTP的搭建。你可以通过访问ftp://yourip来进行，不过这个FTP没有任何权限。</p>
<p><strong>2.基于匿名的FTP架设</strong></p>
<p>（略）</p>
<p><strong>3.基于虚拟用户的FTP架设</strong></p>
<p>所谓虚拟用户就是没有使用真实的帐户，只是通过某种手段达到映射帐户和设置权限的目的。<br />
<span id="more-113"></span><br />
1）我们在/etc/vsftpd/vsftpd.conf中做如下CentOS FTP服务配置：<br />
anonymous_enable=NO 设定不允许匿名访问<br />
local_enable=YES 设定本地用户可以访问。注：如使用虚拟宿主用户，在该项目设定为NO的情况下所有虚拟用户将无法访问。<br />
chroot_list_enable=YES 使用户不能离开主目录<br />
xferlog_file=/var/log/vsftpd.log 设定vsftpd的服务日志保存路径。注意，该文件默认不存在。必须要手动touch出来<br />
ascii_upload_enable=YES<br />
ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能。<br />
pam_service_name=vsftpd PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证<br />
以下这些是关于Vsftpd虚拟用户支持的重要CentOS FTP服务配置项目。默认vsftpd.conf中不包含这些设定项目，需要自己手动添加CentOS FTP服务配置。<br />
guest_enable=YES 设定启用虚拟用户功能。<br />
guest_username=ftp 指定虚拟用户的宿主用户。-CentOS中已经有内置的ftp用户了<br />
user_config_dir=/etc/vsftpd/vuser_conf 设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)</p>
<p>2）创建chroot list，将用户ftp加入其中：</p>
<pre>
touch /etc/vsftpd/chroot_list
echo ftp >> /etc/vsftpd/chroot_list
</pre>
<p>3）进行认证：<br />
首先，安装Berkeley DB工具，很多人找不到db_load的问题就是没有安装这个包。<br />
yum install db4 db4-utils<br />
然后，创建用户密码文本/etc/vsftpd/vuser_passwd.txt ，注意奇行是用户名，偶行是密码<br />
ftpuser1<br />
ftppass1<br />
ftpuser2<br />
ftppass2<br />
接着，.生成虚拟用户认证的db文件</p>
<pre>
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
</pre>
<p>随后，编辑认证文件/etc/pam.d/vsftpd，全部注释掉原来语句<br />
再增加以下两句</p>
<pre>
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
</pre>
<p>最后，创建虚拟用户个性CentOS FTP服务文件</p>
<pre>
mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/ftpuser1
</pre>
<p>内容如下：</p>
<pre>
local_root=/opt/var/ftp1 虚拟用户的根目录(根据实际修改)
write_enable=YES 可写
anon_umask=022 掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
</pre>
<p><strong>4.启动vsftp服务器</strong></p>
<pre>
mkdir /opt/var/ftp/ftpuser1
chmod 777 /opt/var/ftp/ftpuser1
service vsftpd start
</pre>
<p>TroubleShootings：<br />
1.553 Could not create file<br />
一般都是SELinux的问题，设置SELinux的一个值，重启服务器即可。<br />
setsebool -P ftpd_disable_trans 1<br />
service vsftpd restart</p>
<p>2.500 OOPS: bad bool value in config file for: write_enable<br />
注意你的CentOS FTP服务文件中保证每一行最后没有任何空格，一般出错就是在多余的空格上。</p>
<p><em>原文出自：http://os.51cto.com/art/201003/191220.htm</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/centos%e4%b8%8aftp%e6%9c%8d%e5%8a%a1%e9%85%8d%e7%bd%ae/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SVN钩子(hook)的使用</title>
		<link>http://blog.sitearth.com/svn%e9%92%a9%e5%ad%90hook%e7%9a%84%e4%bd%bf%e7%94%a8?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=svn%25e9%2592%25a9%25e5%25ad%2590hook%25e7%259a%2584%25e4%25bd%25bf%25e7%2594%25a8</link>
		<comments>http://blog.sitearth.com/svn%e9%92%a9%e5%ad%90hook%e7%9a%84%e4%bd%bf%e7%94%a8#comments</comments>
		<pubDate>Tue, 28 Feb 2012 02:43:11 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[svn]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[hook]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=111</guid>
		<description><![CDATA[版权声明：原创作品，转载请务必以超链接形式标明文章 原始出处 、作者和本声明，否则将追究法律责任。 svn 就不用多说了，一个版本控制工具（subversion）。 钩子（hook）是与一些版本库事件触发的程序，在 svn 执行一个操作时，那会相应的首先去调用相关的钩子程序（如果存在的话），例如，要在一个用户执行完毕一个 commit 操作之后，让钩子程序去自动更新测试服务器的文件，需要做的就是建立一个 post-commit 的钩子文件，钩子文件在 svn 版本库 hooks 目录下，即存放 svn 版本数据的文件夹。钩子文件应该在 svn/project/hooks (其中 project 为版本库)，文件夹内已经存在有一些.tmpl文件，这些只是一些模板或者说是示例文件，它们不会被执行。 钩子脚本的具体写法就是 linux 中 shell 脚本程序的写法,请根据自己 svn 所在的操作系统和 shell 程序进行相应的编写，以 post-commit 为例： 在 svn/hooks/ 目录下建立 post-commit 文件，并输入以下内容 #!/bin/sh REPOS="$1" REV="$2" export LANG=zh_CN.GB2312 /usr/local/bin/svn update /www 说明：REPOS 即第一个变量 $1 是 svn 数据库的地址，REV 即第二的变量 $2 是 [...]]]></description>
			<content:encoded><![CDATA[<p><div style="margin-bottom:10px;border:1px dashed #ccc;padding:3px;color:#00F;">版权声明：原创作品，转载请务必以超链接形式标明文章 原始出处 、作者和本声明，否则将追究法律责任。 </div><br />
svn 就不用多说了，一个版本控制工具（subversion）。</p>
<p>钩子（hook）是与一些版本库事件触发的程序，在 svn 执行一个操作时，那会相应的首先去调用相关的钩子程序（如果存在的话），例如，要在一个用户执行完毕一个 commit 操作之后，让钩子程序去自动更新测试服务器的文件，需要做的就是建立一个 post-commit 的钩子文件，钩子文件在 svn 版本库 hooks 目录下，即存放 svn 版本数据的文件夹。钩子文件应该在 svn/project/hooks (其中 project 为版本库)，文件夹内已经存在有一些.tmpl文件，这些只是一些模板或者说是示例文件，它们不会被执行。</p>
<p>钩子脚本的具体写法就是 linux 中 shell 脚本程序的写法,请根据自己 svn 所在的操作系统和 shell 程序进行相应的编写，以 post-commit 为例：<br />
在 svn/hooks/ 目录下建立 post-commit 文件，并输入以下内容</p>
<pre>
#!/bin/sh
REPOS="$1"
REV="$2"
export LANG=zh_CN.GB2312
/usr/local/bin/svn update /www
</pre>
<p>说明：REPOS 即第一个变量 $1 是 svn 数据库的地址，REV 即第二的变量 $2 是 commit 之后的版本号，注意：脚本左边不能留空格。<br />
然后让这个脚本可执行就可以了</p>
<p>现在，提交一个新版本的时候，svn 会自动更新 /www 目录下的文件到最新版本，不用再手工同步了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/svn%e9%92%a9%e5%ad%90hook%e7%9a%84%e4%bd%bf%e7%94%a8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>codeigniter的url去掉index.php</title>
		<link>http://blog.sitearth.com/codeigniter%e7%9a%84url%e5%8e%bb%e6%8e%89index-php?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=codeigniter%25e7%259a%2584url%25e5%258e%25bb%25e6%258e%2589index-php</link>
		<comments>http://blog.sitearth.com/codeigniter%e7%9a%84url%e5%8e%bb%e6%8e%89index-php#comments</comments>
		<pubDate>Thu, 19 Jan 2012 07:18:11 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=108</guid>
		<description><![CDATA[版权声明：原创作品，转载请务必以超链接形式标明文章 原始出处 、作者和本声明，否则将追究法律责任。 最近使用codeigniter做了个网站，为了保持url的美观，也为了安全起见，决定去掉url中的index.php。 起初google了半天也没找到正确的写法，最后还是自己边看手册边摸索地写了出来，自己学到了很多，同时也分享给大家。 CI中的路径配置是 $config['uri_protocol'] = &#8216;AUTO&#8217;; 其它配置没有测试，请自己尝试。 以下是nginx.conf的配置： server { listen 80; server_name abc.com; root /www/abc; location / { index index.php index.html; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; // 此处last不可换用break } } # location ~ ^/index\.php(/.*)+$ { // 不可在此处 # return 404; // 限制访问index.php # } // 否则整个网站将不能访问 location ^~ [...]]]></description>
			<content:encoded><![CDATA[<p><div style="margin-bottom:10px;border:1px dashed #ccc;padding:3px;color:#00F;">版权声明：原创作品，转载请务必以超链接形式标明文章 原始出处 、作者和本声明，否则将追究法律责任。 </div><br />
最近使用codeigniter做了个网站，为了保持url的美观，也为了安全起见，决定去掉url中的index.php。</p>
<p>起初google了半天也没找到正确的写法，最后还是自己边看手册边摸索地写了出来，自己学到了很多，同时也分享给大家。</p>
<p>CI中的路径配置是<br />
$config['uri_protocol']	= &#8216;AUTO&#8217;;<br />
其它配置没有测试，请自己尝试。</p>
<p>以下是nginx.conf的配置：<br />
<span id="more-108"></span></p>
<pre>
server {
  listen       80;
  server_name  abc.com;
  root   /www/abc;
  location / {
    index  index.php index.html;
    if (!-e $request_filename) {
       rewrite  ^/(.*)$  /index.php/$1  last; // 此处last不可换用break
    }
  }
# location ~ ^/index\.php(/.*)+$ { // 不可在此处
#   return 404;                // 限制访问index.php
# }                      // 否则整个网站将不能访问
   location ^~ /(application|system) {
     deny  all;
     break;
   }
   location ~ /\. {
     deny  all;
   }
   location ~ \.php($|/) {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      set            $script     $uri;
      set            $path_info  "";
      if ($request_uri ~ "^/index\.php") { // 此处是$request_uri，不是$uri
         return 404;
      }
      if ($uri ~ "^(.+?\.php)(/.*)$") {  // 此处是$uri，不是$request_uri
         set  $script     $1;
         set  $path_info  $2;
      }
      include        fastcgi_params;
      fastcgi_param  PATH_INFO        $path_info;
      fastcgi_param  SCRIPT_FILENAME  /www/abc/index.php;
      fastcgi_param  SCRIPT_NAME      $script;
   }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/codeigniter%e7%9a%84url%e5%8e%bb%e6%8e%89index-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu11.10安装vmware-tools</title>
		<link>http://blog.sitearth.com/ubuntu11-10%e5%ae%89%e8%a3%85vmware-tools?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu11-10%25e5%25ae%2589%25e8%25a3%2585vmware-tools</link>
		<comments>http://blog.sitearth.com/ubuntu11-10%e5%ae%89%e8%a3%85vmware-tools#comments</comments>
		<pubDate>Mon, 16 Jan 2012 04:59:30 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vmware tools]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=107</guid>
		<description><![CDATA[在vm上安装ubuntu11.10，本想安装vmware-tools，结果出现找不到smp_lock.h文件的错误，编译中止。google了一下，原因是新的2.6.39以后的内核，已经木有这个文件了。 最后还是采用以下方案解决了问题： http://archive.blackbuntu.com/bb03/vmware-patch/ 选择：vmware2.6.39guest.tar.bz2 解压缩，运行patch-modules_2.6.39.sh ok，安装成功！]]></description>
			<content:encoded><![CDATA[<p>在vm上安装ubuntu11.10，本想安装vmware-tools，结果出现找不到smp_lock.h文件的错误，编译中止。google了一下，原因是新的2.6.39以后的内核，已经木有这个文件了。<br />
最后还是采用以下方案解决了问题：</p>
<p>http://archive.blackbuntu.com/bb03/vmware-patch/</p>
<p>选择：vmware2.6.39guest.tar.bz2<br />
解压缩，运行patch-modules_2.6.39.sh</p>
<p>ok，安装成功！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/ubuntu11-10%e5%ae%89%e8%a3%85vmware-tools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP的standard和passive两种连接类型</title>
		<link>http://blog.sitearth.com/ftp%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%bf%9e%e6%8e%a5%e7%b1%bb%e5%9e%8b?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ftp%25e7%259a%2584%25e4%25b8%25a4%25e7%25a7%258d%25e8%25bf%259e%25e6%258e%25a5%25e7%25b1%25bb%25e5%259e%258b</link>
		<comments>http://blog.sitearth.com/ftp%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%bf%9e%e6%8e%a5%e7%b1%bb%e5%9e%8b#comments</comments>
		<pubDate>Mon, 26 Dec 2011 07:33:04 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[ftp]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=105</guid>
		<description><![CDATA[FTP支持两种模式，一种方式叫做Standard (也就是 PORT方式，主动方式)，一种是 Passive (也就是PASV，被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。 PORT 和 PASV的简单区别如下： Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接，通过这个通道发送命令，客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候，服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。 Passive模式在建立控制通道的时候和Standard模式类似，但建立连接后发送的不是Port命令，而是Pasv命令。FTP服务器收到Pasv命令后，随机打开一个高端端口（端口号大于1024）并且通知客户端在这个端口上传送数据的请求，客户端连接FTP服务器此端口，然后FTP服务器将通过这个端口进行数据的传送，这个时候FTP server不再需要建立一个新的和客户端之间的连接。 因为IE浏览器默认使用的是Passive（被动）模式，所以要连接Linux服务器大于1024端口，而防火墙并没有开发1024以上的端口，导致登录ftp服务器被防火墙阻止。]]></description>
			<content:encoded><![CDATA[<p>FTP支持两种模式，一种方式叫做Standard (也就是 PORT方式，主动方式)，一种是 Passive (也就是PASV，被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。</p>
<p>PORT 和 PASV的简单区别如下：</p>
<p>Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接，通过这个通道发送命令，客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候，服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。</p>
<p>Passive模式在建立控制通道的时候和Standard模式类似，但建立连接后发送的不是Port命令，而是Pasv命令。FTP服务器收到Pasv命令后，随机打开一个高端端口（端口号大于1024）并且通知客户端在这个端口上传送数据的请求，客户端连接FTP服务器此端口，然后FTP服务器将通过这个端口进行数据的传送，这个时候FTP server不再需要建立一个新的和客户端之间的连接。</p>
<p>因为IE浏览器默认使用的是Passive（被动）模式，所以要连接Linux服务器大于1024端口，而防火墙并没有开发1024以上的端口，导致登录ftp服务器被防火墙阻止。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/ftp%e7%9a%84%e4%b8%a4%e7%a7%8d%e8%bf%9e%e6%8e%a5%e7%b1%bb%e5%9e%8b/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5.3.x中弃用的功能</title>
		<link>http://blog.sitearth.com/php5-3-x%e4%b8%ad%e5%bc%83%e7%94%a8%e7%9a%84%e5%8a%9f%e8%83%bd?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php5-3-x%25e4%25b8%25ad%25e5%25bc%2583%25e7%2594%25a8%25e7%259a%2584%25e5%258a%259f%25e8%2583%25bd</link>
		<comments>http://blog.sitearth.com/php5-3-x%e4%b8%ad%e5%bc%83%e7%94%a8%e7%9a%84%e5%8a%9f%e8%83%bd#comments</comments>
		<pubDate>Wed, 07 Dec 2011 02:13:24 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php5.3]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=104</guid>
		<description><![CDATA[PHP 5.3.0 新增了两个错误等级: E_DEPRECATED 和 E_USER_DEPRECATED. 错误等级 E_DEPRECATED 被用来说明一个函数或者功能已经被弃用. E_USER_DEPRECATED 等级目的在于表明用户代码中的弃用功能, 类似于 E_USER_ERROR 和 E_USER_WARNING 等级. 下面是被弃用的 INI 指令列表. 使用下面任何指令都将导致 E_DEPRECATED 错误. define_syslog_variables register_globals register_long_arrays safe_mode magic_quotes_gpc magic_quotes_runtime magic_quotes_sybase 弃用 INI 文件中以 &#8216;#&#8217; 开头的注释. 弃用函数: call_user_method() (使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array() 替代) define_syslog_variables() dl() ereg() (使用 preg_match() 替代) ereg_replace() (使用 preg_replace() 替代) eregi() (使用 [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 5.3.0 新增了两个错误等级: E_DEPRECATED<br />
和 E_USER_DEPRECATED. 错误等级 E_DEPRECATED 被用来说明一个函数或者功能已经被弃用. E_USER_DEPRECATED 等级目的在于表明用户代码中的弃用功能, 类似于<br />
E_USER_ERROR 和 E_USER_WARNING 等级.</p>
<p>下面是被弃用的 INI 指令列表. 使用下面任何指令都将导致 E_DEPRECATED 错误.</p>
<p>    define_syslog_variables</p>
<p>    register_globals</p>
<p>    register_long_arrays</p>
<p>    safe_mode</p>
<p>    magic_quotes_gpc</p>
<p>    magic_quotes_runtime</p>
<p>    magic_quotes_sybase</p>
<p>    弃用 INI 文件中以 &#8216;#&#8217; 开头的注释.<br />
<span id="more-104"></span><br />
弃用函数:</p>
<p>    call_user_method() (使用 call_user_func() 替代)</p>
<p>    call_user_method_array() (使用 call_user_func_array() 替代)</p>
<p>    define_syslog_variables()</p>
<p>    dl()</p>
<p>    ereg() (使用 preg_match() 替代)</p>
<p>    ereg_replace() (使用 preg_replace()<br />
    替代)</p>
<p>    eregi() (使用 preg_match() 配合<br />
    &#8216;i&#8217; 修正符替代)</p>
<p>    eregi_replace() (使用 preg_replace()<br />
    配合 &#8216;i&#8217; 修正符替代)</p>
<p>    set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime()</p>
<p>    session_register() (使用 $_SESSION 超全部变量替代)</p>
<p>    session_unregister() (使用 $_SESSION 超全部变量替代)</p>
<p>    session_is_registered() (使用 $_SESSION 超全部变量替代)</p>
<p>    set_socket_blocking() (使用 stream_set_blocking() 替代)</p>
<p>    split() (使用 preg_split() 替代)</p>
<p>    spliti() (使用 preg_split() 配合 &#8216;i&#8217; 修正符替代)</p>
<p>    sql_regcase()</p>
<p>    mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代)</p>
<p>    mysql_escape_string() (使用 mysql_real_escape_string() 替代)</p>
<p>    废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代.</p>
<p>    mktime() 的 is_dst 参数. 使用新的时区处理函数替代.</p>
<p>弃用的功能:</p>
<p>    弃用通过引用分配 new 的返回值.</p>
<p>    调用时传递引用被弃用.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/php5-3-x%e4%b8%ad%e5%bc%83%e7%94%a8%e7%9a%84%e5%8a%9f%e8%83%bd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL帐户创建与删除、口令更改</title>
		<link>http://blog.sitearth.com/mysql%e5%b8%90%e6%88%b7%e5%88%9b%e5%bb%ba%e4%b8%8e%e5%88%a0%e9%99%a4%e3%80%81%e5%8f%a3%e4%bb%a4%e6%9b%b4%e6%94%b9?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql%25e5%25b8%2590%25e6%2588%25b7%25e5%2588%259b%25e5%25bb%25ba%25e4%25b8%258e%25e5%2588%25a0%25e9%2599%25a4%25e3%2580%2581%25e5%258f%25a3%25e4%25bb%25a4%25e6%259b%25b4%25e6%2594%25b9</link>
		<comments>http://blog.sitearth.com/mysql%e5%b8%90%e6%88%b7%e5%88%9b%e5%bb%ba%e4%b8%8e%e5%88%a0%e9%99%a4%e3%80%81%e5%8f%a3%e4%bb%a4%e6%9b%b4%e6%94%b9#comments</comments>
		<pubDate>Mon, 05 Dec 2011 05:34:30 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[帐户]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=102</guid>
		<description><![CDATA[1. 创建用户账户 可以用三种方式创建MySQL账户： 1 使用GRANT语句 2 直接操作MySQL授权表 3 使用CREATE USER语句 最好的方法是使用GRANT语句，因为这样更精确，错误少。 创建账户的其它方法是使用MySQL账户管理功能的第三方程序。phpMyAdmin即是一个程序。 下面的示例说明如何使用MySQL客户端程序来设置新用户。为了更改，你必须以MySQL root用户连接MySQL服务器，并且root账户必须有mysql数据库的INSERT权限和RELOAD管理权限。 首先，使用MySQL程序以MySQL root用户来连接服务器： MySQL --user=root MySQL 如果你为root账户指定了密码，还需要为该MySQL命令和本节中的其它命令提供&#8211;password或-p选项。 以root连接到服务器上后，可以添加新账户。下面的语句使用GRANT来设置四个新账户： GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION; GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; GRANT USAGE [...]]]></description>
			<content:encoded><![CDATA[<p>1. 创建用户账户</p>
<p>可以用三种方式创建MySQL账户：<br />
1 使用GRANT语句</p>
<p>2 直接操作MySQL授权表</p>
<p>3 使用CREATE USER语句</p>
<p>最好的方法是使用GRANT语句，因为这样更精确，错误少。</p>
<p>创建账户的其它方法是使用MySQL账户管理功能的第三方程序。phpMyAdmin即是一个程序。</p>
<p>下面的示例说明如何使用MySQL客户端程序来设置新用户。为了更改，你必须以MySQL root用户连接MySQL服务器，并且root账户必须有mysql数据库的INSERT权限和RELOAD管理权限。</p>
<p>首先，使用MySQL程序以MySQL root用户来连接服务器：</p>
<pre>
MySQL --user=root MySQL
</pre>
<p>如果你为root账户指定了密码，还需要为该MySQL命令和本节中的其它命令提供&#8211;password或-p选项。<br />
<span id="more-102"></span><br />
以root连接到服务器上后，可以添加新账户。下面的语句使用GRANT来设置四个新账户：</p>
<pre>
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
GRANT USAGE ON *.* TO 'dummy'@'localhost';
</pre>
<p>除了GRANT，你可以直接用INSERT语句创建相同的账户，然后使用FLUSH PRIVILEGES告诉服务器重载授权表：</p>
<pre>
mysql --user=root mysql
</pre>
<pre>
INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin', Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
</pre>
<p>当你用INSERT创建账户时使用FLUSH PRIVILEGES的原因是告诉服务器重读授权表。否则，只有重启服务器后更改方会被注意到。使用 GRANT，则不需要使用FLUSH PRIVILEGES。</p>
<p>用INSERT使用PASSWORD()函数是为了加密密码。GRANT语句为你加密密码，因此不需要PASSWORD()。</p>
<p>&#8216;Y&#8217;值启用账户权限。对于admin账户，还可以使用更加可读的INSERT扩充的语法（使用SET）。</p>
<p>在为dummy账户的INSERT语句中，只有user表中的Host、User和Password列记录为指定的值。没有一个权限列为显式设置，因此MySQL将它们均指定为 默认值&#8217;N'。这样等同于GRANT USAGE的操作。</p>
<p>请注意要设置超级用户账户，只需要创建一个权限列设置为&#8217;Y'的user表条目。user表权限为全局权限，因此其它 授权表不再需要条目。</p>
<p>第三种方法，CREATE USER语句。</p>
<pre>
mysql --user=root mysql
</pre>
<pre>
create user 'jian'@'localhost' identified by 'my123'；#账户密码设置和grant语句类似
</pre>
<p>2.删除用户账户</p>
<p>要想移除账户，应使用DROP USER语句.</p>
<pre>
drop user 'jian'@'localhost';
</pre>
<p>3.更改账户口令</p>
<p>设置MySQL用户帐号密码的方法有三种：</p>
<p>使用mysqladmin程序：</p>
<pre>
mysqladmin -h localhost -u root password "password"   #设置在本地以root身分登录的密码
mysqladmin -h remote -u root password "password"      #设置远程主机以root身分登录的密码
</pre>
<p>在初始设置时，这两条语句都要运行，以确保数据库本地访问和网络访问的安全。</p>
<p>通过set password这条SQL语句设置：</p>
<pre>
set password for 'root'@'localhost' = password('password');
set password for 'root'@'remote' = password('password');
</pre>
<p>直接修改user权限表：</p>
<pre>
use mysql;
update user set password=password('password') where user='root';
flush privileges;                            #重载权限表，使修改马上生效
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/mysql%e5%b8%90%e6%88%b7%e5%88%9b%e5%bb%ba%e4%b8%8e%e5%88%a0%e9%99%a4%e3%80%81%e5%8f%a3%e4%bb%a4%e6%9b%b4%e6%94%b9/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux上源码安装Subversion</title>
		<link>http://blog.sitearth.com/linux%e4%b8%8a%e6%ba%90%e7%a0%81%e5%ae%89%e8%a3%85subversion?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=linux%25e4%25b8%258a%25e6%25ba%2590%25e7%25a0%2581%25e5%25ae%2589%25e8%25a3%2585subversion</link>
		<comments>http://blog.sitearth.com/linux%e4%b8%8a%e6%ba%90%e7%a0%81%e5%ae%89%e8%a3%85subversion#comments</comments>
		<pubDate>Fri, 02 Dec 2011 08:06:49 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[svn]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[源码]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=99</guid>
		<description><![CDATA[subversion(以下简称svn)是近年来崛起的版本管理工具，能够比较好得替换cvs。 svn主要有2种运行方式： 1. 独立运行的服务器 2. 与apache集成 二种方式各有利弊，可以根据自己的需要进行配置，我不需要Http进行访问，只需要客户端可以Commit &#038; update 就可以，下面是选择的第一种方式——独立运行的SVN服务器。 svn存储版本数据也有2种方式： 1. BDB&#8211;Berkeley Datebase 2. FSFS&#8211;文件存储 BDB方式在服务器中断时，有可能锁住数据，所以还是FSFS方式更安全一点。 下面正式进入安装阶段 下载源码 wget http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz wget http://subversion.tigris.org/downloads/subversion-deps-1.6.17.tar.gz 解压并进行编译前的配置 tar xfvz subversion-1.6.17.tar.gz tar xfvz subversion-deps-1.6.17.tar.gz //安装subversion依赖的所有包，必须先安装这个压缩文件里的包 cd subversion-1.6.17 ./configure -–prefix=/usr/local/subversion --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --with-zlib -enable-maintainer-mode --without-berkeley-db 注：以svnserve方式运行，不加apache编译参数。以fsfs格式存储版本库，不编译berkeley-db 且configure时出现下面WARNING,我们直接忽略即可。因为不使用BDB存储。 configure: WARNING: we have configured without BDB filesystem support You don't seem [...]]]></description>
			<content:encoded><![CDATA[<p>subversion(以下简称svn)是近年来崛起的版本管理工具，能够比较好得替换cvs。</p>
<p>svn主要有2种运行方式：</p>
<p>1. 独立运行的服务器<br />
2. 与apache集成</p>
<p>二种方式各有利弊，可以根据自己的需要进行配置，我不需要Http进行访问，只需要客户端可以Commit &#038; update 就可以，下面是选择的第一种方式——独立运行的SVN服务器。</p>
<p>svn存储版本数据也有2种方式：</p>
<p>1. BDB&#8211;Berkeley Datebase<br />
2. FSFS&#8211;文件存储</p>
<p>BDB方式在服务器中断时，有可能锁住数据，所以还是FSFS方式更安全一点。</p>
<p>下面正式进入安装阶段<br />
<span id="more-99"></span><br />
下载源码</p>
<pre>
wget http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.17.tar.gz
</pre>
<p>解压并进行编译前的配置</p>
<pre>
tar xfvz subversion-1.6.17.tar.gz
tar xfvz subversion-deps-1.6.17.tar.gz      //安装subversion依赖的所有包，必须先安装这个压缩文件里的包
cd subversion-1.6.17
./configure -–prefix=/usr/local/subversion --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --with-zlib -enable-maintainer-mode --without-berkeley-db
</pre>
<p>注：以svnserve方式运行，不加apache编译参数。以fsfs格式存储版本库，不编译berkeley-db<br />
且configure时出现下面WARNING,我们直接忽略即可。因为不使用BDB存储。</p>
<pre>
configure: WARNING: we have configured without BDB filesystem support

You don't seem to have Berkeley DB version 4.0.14 or newer
installed and linked to APR-UTIL. We have created Makefiles which
will build without the Berkeley DB back-end; your repositories will
use FSFS as the default back-end. You can find the latest version of
Berkeley DB here:

http://www.sleepycat.com/download/index.shtml
</pre>
<p>编译安装</p>
<pre>
make
make install
</pre>
<p>如果 make install 出现下面错误：<br />
error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or dictionary</p>
<pre>
#1、编辑/etc/ld.so.conf文件：
vi /etc/ld.so.conf
# 添加下面一行
/usr/local/lib
#2、保存后运行ldconfig。
/sbin/ldconfig
#3、再重新运行make install 问题得到解决。
make install
#注：ld.so.conf和ldconfig用于维护系统动态链接库
</pre>
<p>测试是否安装成功：</p>
<pre>
/usr/local/svn/bin/svnserve --version
</pre>
<p>为方便操作，在/etc/profile最后加入 SVN Path：</p>
<pre>
#1、编辑/etc/profile文件，添加PATH
vi /etc/profile
#比如像下面这样添加：
PATH=/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/svn/bin:$PATH
#添加完成执行，马上生效：
source /etc/profile
#测试查看设置是否成功
echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/svn/bin:......
#上面已经包含了“/usr/local/svn/bin”，说明已经成功。
</pre>
<p>新建目录和初始化版本库：</p>
<pre>
#新建SVN存放数据文件的版本库目录
mkdir -p /data/svn/repos
#初始化版本库，生成相关配置文件：
svnadmin create /data/svn/repos
</pre>
<p>开始设置配置svnserve.conf：</p>
<pre>
vi /data/svn/repos/conf/svnserve.conf
[general]
anon-access = none # 注意这里必须设置，否则所有用户不用密码就可以访问
auth-access = write
password-db = passwd
authz-db = authz
realm = repos
</pre>
<p>注意：对用户配置文件的修改立即生效，不必重启svn。</p>
<p>初始化版本库完成，开始设置passwd 用户账号信息：</p>
<pre>
vi /data/svn/repos/conf/passwd
[users]
user1 = passwd1
user2 = passwd2
</pre>
<p>设置authz 用户访问权限：</p>
<pre>
vi /data/svn/repos/conf/authz
[groups]
grp = user1, user2       // grp 组包括两个用户 user1, user2

[/]
user1=       // user1 对根目录没有任何权限
user2 = rw     // user2 对根目录有读写权限

[repos:/test]     // 对 repos 仓库的 test 项目进行权限限制
@grp = rw      // 限制grp 组对 test 项目有读写权限
user2 =          // 限制 user2 所有权限，其它用户有读写权限
</pre>
<p>新建svn用户和启动svn服务器：</p>
<pre>
useradd svn -r -s /sbin/nologin         // -r 表示建立为系统级用户
chown -R svn:svn /data/svn
svnserve -d --listen-port 12345 -r /data/svn         // 监听12345端口，默认为3690；-r 指定svn根目录
</pre>
<p>配置subversion可以自动随系统启动：编辑/etc/xinetd.conf文件，加入如下行，“svn stream tcp nowait svn /usr/local/subversion/bin/svnserve svnserve -i -r /data/svn”。其中，第二个“svn”是指定的运行服务的用户名，“/usr/local/subversion/bin/svnserve”是服务的执行程序所在完整路径，再后面的是服务的运行参数，-i表示以inetd的方式启动。 </p>
<p>查看进程</p>
<pre>
ps -ef|grep svn
#如果显示如下，即为启动成功：
svn    1234    1   0 13:33  ?    00:00:00 svnserve -d --listen-port 12345 -r /data/svn
</pre>
<p>检查是否能够访问</p>
<pre>
telnet {your-server-ip} 12345     //检查端口
</pre>
<p>如果telnet 检查不通，有可能是防火墙(iptables)里面端口没开：<br />
vi /etc/sysconfig/iptables<br />
#加入一下行<br />
-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 12345 -j ACCEPT<br />
#保存完成，重启 iptables<br />
/etc/init.d/iptables restart<br />
[/shell]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/linux%e4%b8%8a%e6%ba%90%e7%a0%81%e5%ae%89%e8%a3%85subversion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS下iptables详解</title>
		<link>http://blog.sitearth.com/centos%e4%b8%8biptables%e8%af%a6%e8%a7%a3?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=centos%25e4%25b8%258biptables%25e8%25af%25a6%25e8%25a7%25a3</link>
		<comments>http://blog.sitearth.com/centos%e4%b8%8biptables%e8%af%a6%e8%a7%a3#comments</comments>
		<pubDate>Fri, 02 Dec 2011 07:03:53 +0000</pubDate>
		<dc:creator>一棵葱</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[防火墙]]></category>

		<guid isPermaLink="false">http://blog.sitearth.com/?p=98</guid>
		<description><![CDATA[1. 引言 CentOS 內置了一个非常強劲的防火牆，统称为 iptables，但更正确的名称是 iptables／netfilter。iptables 是一个用戶空间的模块。作为用戶，你在命令行就是通过它将防火牆规则放进缺省的表裡。netfilter 是一个核心模块，它內置於內核中，进行实际的过滤。iptables 有很多前缀图像界面可以让用戶新增或定义规则，但它们很多时不及使用命令行般有灵活性，而且限制用戶了解实际发生的事情。我们将会学习 iptables 的命令行界面。 在我们正式应付 iptables 前，我们必须对它的运作有一个基本的理解。iptables 利用到 IP 地址、协议（tcp、udp、icmp）及端口这些概念。我们不需要成为这些方面的专家（因为我们可以找到所需的信息），但对它们有一般的理解会有帮助。 iptables 将规则放进缺省的规则链（INPUT、OUTPUT 及 FORWARD），而所有流量（IP 压缩）都会被相关的规则链检查，根据当中的规则判断如何处理每个压缩，例如：接纳或丟棄它。这些动作称为目标，而最常见的两个缺省目标就是 DROP 来丟棄压缩；或 ACCEPT 来接纳压缩。 规则链 我们可以在过滤表的 3 条缺省规则链內加入规则，来处理通过这些规则链的压缩。它们分別是： * INPUT &#8211; 所有以主机为目的地的压缩。 * OUTPUT &#8211; 所有源自主机的压缩。 * FORWARD &#8211; 这些压缩的目的地或来源地都不是主机，但路经主机（由它选路）。假若你的主机是一个路由器，这条规则链将会被应用。 我们将会花费最多时间处理 INPUT 规则链，借以过滤进入我们的机器的压缩 —— 亦即是将坏蛋拒诸门外。 规则是以列表的方式被加进每条规则链。每个压缩会被头一条规则开始检查，才至最后一条。假若压缩与其中一条规则吻合，相应的动作便会被执行，例如接纳（ACCEPT）或丟棄（DROP）压缩。一但有吻合的规则，这个压缩便会按照规则来处理，而不再被规则链內的其它规则所检查。假如压缩通过所有检查而不符合任何规则链內的任何一条规则，那应这条规则链的缺省动作将会被执行。这就是所谓的缺省政策，可以设置为接纳（ACCEPT）或丟棄（DROP）压缩。 规则链拥有缺省政策这个概念带来两个基本的可能性，而我们必须考虑它们才能決定如何组织我们的防火牆。 1. 我们可以缺省一个政策来丟棄（DROP）所有压缩，然后刻意加入规则来接纳（ACCEPT）源自被信任的 IP 地址的压缩，或者打开那些提供服务的端口，如：bittorrent、FTP 服务器、网页服务器、Samba 文件服务器等。 [...]]]></description>
			<content:encoded><![CDATA[<p>1. 引言</p>
<p>CentOS 內置了一个非常強劲的防火牆，统称为 iptables，但更正确的名称是 iptables／netfilter。iptables 是一个用戶空间的模块。作为用戶，你在命令行就是通过它将防火牆规则放进缺省的表裡。netfilter 是一个核心模块，它內置於內核中，进行实际的过滤。iptables 有很多前缀图像界面可以让用戶新增或定义规则，但它们很多时不及使用命令行般有灵活性，而且限制用戶了解实际发生的事情。我们将会学习 iptables 的命令行界面。</p>
<p>在我们正式应付 iptables 前，我们必须对它的运作有一个基本的理解。iptables 利用到 IP 地址、协议（tcp、udp、icmp）及端口这些概念。我们不需要成为这些方面的专家（因为我们可以找到所需的信息），但对它们有一般的理解会有帮助。</p>
<p>iptables 将规则放进缺省的规则链（INPUT、OUTPUT 及 FORWARD），而所有流量（IP 压缩）都会被相关的规则链检查，根据当中的规则判断如何处理每个压缩，例如：接纳或丟棄它。这些动作称为目标，而最常见的两个缺省目标就是 DROP 来丟棄压缩；或 ACCEPT 来接纳压缩。</p>
<p>规则链</p>
<p>我们可以在过滤表的 3 条缺省规则链內加入规则，来处理通过这些规则链的压缩。它们分別是：</p>
<p>    * INPUT &#8211; 所有以主机为目的地的压缩。<br />
    * OUTPUT &#8211; 所有源自主机的压缩。<br />
    * FORWARD &#8211; 这些压缩的目的地或来源地都不是主机，但路经主机（由它选路）。假若你的主机是一个路由器，这条规则链将会被应用。</p>
<p>我们将会花费最多时间处理 INPUT 规则链，借以过滤进入我们的机器的压缩 —— 亦即是将坏蛋拒诸门外。<br />
<span id="more-98"></span><br />
规则是以列表的方式被加进每条规则链。每个压缩会被头一条规则开始检查，才至最后一条。假若压缩与其中一条规则吻合，相应的动作便会被执行，例如接纳（ACCEPT）或丟棄（DROP）压缩。一但有吻合的规则，这个压缩便会按照规则来处理，而不再被规则链內的其它规则所检查。假如压缩通过所有检查而不符合任何规则链內的任何一条规则，那应这条规则链的缺省动作将会被执行。这就是所谓的缺省政策，可以设置为接纳（ACCEPT）或丟棄（DROP）压缩。</p>
<p>规则链拥有缺省政策这个概念带来两个基本的可能性，而我们必须考虑它们才能決定如何组织我们的防火牆。</p>
<p>1. 我们可以缺省一个政策来丟棄（DROP）所有压缩，然后刻意加入规则来接纳（ACCEPT）源自被信任的 IP 地址的压缩，或者打开那些提供服务的端口，如：bittorrent、FTP 服务器、网页服务器、Samba 文件服务器等。</p>
<p>又或者，</p>
<p>2. 我们可以缺省一个政策来接纳（ACCEPT）所有压缩，然后刻意加入规则来拦截（DROP）来自有问题的 IP 地址或系列的压缩，也或者阻止压缩进出只作私人用途或未提供服务的端口。</p>
<p>普遍来說，第一个方法多数用在 INPUT 规则链，因为我们会希望控制哪些东西可以访问我们的机器；而第二个方法多数用在 OUTPUT 规则链，因为我们多数信赖那些离开（源自）我们机器的压缩。</p>
<p>2. 準备开始</p>
<p>在命令行上使用 iptables 需要 root 的权限，因此你必须化身为 root 用戶来做下面的事情。</p>
<p>[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]</p>
<p>注意： 我们将会停用 iptables 及复位你的防火牆规则，因此假若你依赖你的 Linux 防火牆作为第一道防線，请特別留意这点。</p>
<p>iptables 应该缺省被安装在所有 CentOS 3.x、4.x 及 5.x 上。你可以这樣来检查 iptables 是否已安装在你的系统上：</p>
<p>$ rpm -q iptables<br />
iptables-1.3.5-1.2.1</p>
<p>要知道 iptables 是否正在运作中，我们可以检查 iptables 这个模块是否已被装入，並利用 -L 这个选项来查看活动的规则：</p>
<p># lsmod | grep ip_tables<br />
ip_tables              29288 1 iptable_filter<br />
x_tables               29192 6 ip6t_REJECT,ip6_tables,ipt_REJECT,xt_state,xt_tcpudp,ip_tables</p>
<p># iptables -L<br />
Chain INPUT (policy ACCEPT)<br />
target     prot opt source               destination<br />
RH-Firewall-1-INPUT all &#8212; anywhere             anywhere<br />
Chain FORWARD (policy ACCEPT)<br />
target     prot opt source               destination<br />
RH-Firewall-1-INPUT all &#8212; anywhere             anywhere<br />
Chain OUTPUT (policy ACCEPT)<br />
target     prot opt source               destination<br />
Chain RH-Firewall-1-INPUT (2 references)<br />
target     prot opt source               destination<br />
ACCEPT     all &#8212; anywhere             anywhere<br />
ACCEPT     icmp &#8212; anywhere             anywhere            icmp any<br />
ACCEPT     esp &#8212; anywhere             anywhere<br />
ACCEPT     ah   &#8212; anywhere             anywhere<br />
ACCEPT     udp &#8212; anywhere             224.0.0.251         udp dpt:mdns<br />
ACCEPT     udp &#8212; anywhere             anywhere            udp dpt:ipp<br />
ACCEPT     tcp &#8212; anywhere             anywhere            tcp dpt:ipp<br />
ACCEPT     all &#8212; anywhere             anywhere            state RELATED,ESTABLISHED<br />
ACCEPT     tcp &#8212; anywhere             anywhere            state NEW tcp dpt:ssh<br />
REJECT     all &#8212; anywhere             anywhere            reject-with icmp-host-prohibited</p>
<p>从上面我们可看见缺省的规则，与及访问 SSH 服务用的规则。</p>
<p>如果 iptables 並未被执行，你可以这樣啟用它：</p>
<p># system-config-securitylevel</p>
<p>3. 创建一组简单的规则</p>
<p>[attachment:ArtWork/WikiDesign/icon-admonition-attention.png]</p>
<p>注意： 此刻我们将会清除缺省的规则集。如果你是通过 SSH 远程连接到一台服务器来进行学习，你有可能会将自己拒诸这台机器之外。你必须将缺省的输入（input）政策改为接纳（accept），然后才清除现有规则，接著你要预先加入一条容许你自己访问机器的规则，避免你将自己封锁在外。</p>
<p>我们会採用一个以样例为本的方法来查看 iptables 的不同指令。在首个样例中，我们会创建一组简单的规则来设置一个「状态压缩检验」（SPI）防火牆，容许对外的连接但拦截一切无用的对內连接：</p>
<p># iptables -P INPUT ACCEPT<br />
# iptables -F<br />
# iptables -A INPUT -i lo -j ACCEPT<br />
# iptables -A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
# iptables -A INPUT -p tcp &#8211;dport 22 -j ACCEPT<br />
# iptables -P INPUT DROP<br />
# iptables -P FORWARD DROP<br />
# iptables -P OUTPUT ACCEPT<br />
# iptables -L -v</p>
<p>你应该得到这樣的输出：</p>
<p>Chain INPUT (policy DROP 0 packets, 0 bytes)<br />
pkts bytes target     prot opt in     out     source               destination<br />
    0     0 ACCEPT     all &#8212; lo     any     anywhere             anywhere<br />
    0     0 ACCEPT     all &#8212; any    any     anywhere             anywhere            state RELATED,ESTABLISHED<br />
    0     0 ACCEPT     tcp &#8212; any    any     anywhere             anywhere            tcp dpt:ssh<br />
Chain FORWARD (policy DROP 0 packets, 0 bytes)<br />
pkts bytes target     prot opt in     out     source               destination<br />
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)<br />
pkts bytes target     prot opt in     out     source               destination</p>
<p>现在让我们逐一看看以上的 8 个指令，並理解我们实际做了甚麼：</p>
<p>   1.</p>
<p>      iptables -P INPUT ACCEPT 假如利用远程连接，我们必须临时将 INPUT 链的缺省政策改为 ACCEPT，否则当我们清除现有的规则集时，便会将自己封锁在服务器之外。<br />
   2.</p>
<p>      iptables -F 我们利用 -F 选项来清除一切现存的规则，好让我们能夠在崭新的状态下加入的规则。<br />
   3.</p>
<p>      iptables -A INPUT -i lo -j ACCEPT 现在是时候加入一些规则了。我们利用 -A 选项来附加（新增）规则到某条链，而这裡所指的是 INPUT 链。接著我们利用 -i 选项（interface「界面」之意）来指定那些符合或来自 lo（localhost、127.0.0.1）界面的压缩。最后我们 -j（jump「跳至」）符合这条规则的目标动作：在这裡是 ACCEPT。所以这条规则会导致所有转至 localhost 界面的对內压缩获得接纳。一般来說这是必须的，因为很多软件预期能夠与 localhost 适配器沟通。<br />
   4.</p>
<p>      iptables -A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT 这是担负起大部份工作的规则，而我们再一次将它加进（-A）INPUT 链內。这裡我们利用 -m 选项来装入一个模块（state）。state 模块能夠查看一个压缩並判断它的状态是 NEW、ESTABLISHED 抑或 RELATED。NEW 指內进的压缩属於不是由主机啟主导的新增连接。ESTABLISHED 及 RELATED 指內进的压缩隸属於一条现存的连接，或者与现存的连接有关系。<br />
   5.</p>
<p>      iptables -A INPUT -p tcp &#8211;dport 22 -j ACCEPT 现在我们加入一条规则来容许 SSH 通过 tcp 端口 22 来连接。这樣做是要防止我们连接到远程系统的 SSH 连接意外地被封销。我们稍后会更详细解释这条规则。<br />
   6.</p>
<p>      iptables -P INPUT DROP 这个 -P 选项设置某条规则链上的缺省政策。我们现在可以将 INPUT 链的缺省政策改为 DROP。意思就是，不符合任何一条规则的对內压缩将会被丟棄。要是我们通过 SSH 远程连接而沒有加入上一条规则，此刻我们便会被封锁於系统之外。<br />
   7.</p>
<p>      iptables -P FORWARD DROP 同樣地，在这裡我们将 FORWARD 链的缺省政策设为 DROP，因为我们並不是用计算机作为路由器，所以理应沒有任何压缩路经它。<br />
   8.</p>
<p>      iptables -P OUTPUT ACCEPT 而最后，我们将 OUTPUT 链的缺省政策设为 ACCEPT，因为我们想容许所有对外的流量（由於我们信任我们的用戶）。<br />
   9.</p>
<p>      iptables -L -v 最后，我们可以列出（-L）刚加入的规则，並检查它们是否被正确地装入。</p>
<p>我们需要做的最后一件事情，就是存储我们的规则，好让它们在下次开机时会自动被重新装入：</p>
<p># /sbin/service iptables save</p>
<p>这 樣做会执行 iptables 的 init 腳本，它会执行 /sbin/iptables-ave 並将现有的 iptables 设置写进 /etc/sysconfig/iptables。开机时，iptables 的 init 腳本会通过 /sbin/iptables-restore 这个指令重新施用存储在 /etc/sysconfig/iptables 內的规则。</p>
<p>很明显的，在指令殼內输入这堆指令会颇乏味，因此运用 iptables 的最简易方法就是创建一个代你做以上一切的腳本。你可以将上面的指令输入到你喜欢的文字编辑器內並存储为 myfirewall，例如：</p>
<p>#!/bin/bash<br />
#<br />
# iptables 样例设置腳本<br />
#<br />
# 清除 iptables 內一切现存的规则<br />
#<br />
iptables -F<br />
#<br />
# 容让 SSH 连接到 tcp 端口 22<br />
# 当通过 SSH 远程连接到服务器，你必须这樣做才能群免被封锁於系统外<br />
#<br />
iptables -A INPUT -p tcp &#8211;dport 22 -j ACCEPT<br />
#<br />
# 设置 INPUT、FORWARD、及 OUTPUT 链的缺省政策<br />
#<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
iptables -P OUTPUT ACCEPT<br />
#<br />
# 设置 localhost 的访问权<br />
#<br />
iptables -A INPUT -i lo -j ACCEPT<br />
#<br />
# 接纳属於现存及相关连接的压缩<br />
#<br />
iptables -A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
#<br />
# 存储设置<br />
#<br />
/sbin/service iptables save<br />
#<br />
# 列出规则<br />
#<br />
iptables -L -v</p>
<p>註： 我们可以在腳本內加入註释来提醒自己正在做甚麼。</p>
<p>现在令腳本可以被执行：</p>
<p># chmod +x myfirewall</p>
<p>我们现在可以编辑这个腳本，並在指令殼內用以下指令来执行它：</p>
<p># ./myfirewall</p>
<p>4. 界面</p>
<p>在上一个范本中，我们看见如何能接纳所有来自某个界面的压缩，也就是 localhost 界面：</p>
<p>iptables -A INPUT -i lo -j ACCEPT</p>
<p>假设我们现在有两个独立的界面，分別是将我们连接到內联网的 eth0 及连接到外部互联网的 ppp0 拨号调制解调器（或者 eth1 适配器）。我们或许会想接纳所有来自內联网的对內压缩，但依然过滤那些来自互联网的压缩。我们可以这樣做：</p>
<p>iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A INPUT -i eth0 -j ACCEPT</p>
<p>让特別留意 —— 假如你接纳来自互联网界面（例如 ppp0 拨号调制解调器）的所有压缩：</p>
<p>iptables -A INPUT -i ppp0 -j ACCEPT</p>
<p>你便等同於停用了我们的防火牆！</p>
<p>5. IP 地址</p>
<p>将整个界面开放给对內的压缩也许不夠严谨，而你想拥有更多控制权来決定接纳甚麼及拒絕甚麼。现在假设我们拥有一群採用 192.168.0.x 私人网络的计算机。我们可以打开防火牆给来自某个被信任 IP 地址（例如 192.168.0.4）的对內压缩：</p>
<p># 接纳来自被信任 IP 地址的压缩<br />
iptables -A INPUT -s 192.168.0.4 -j ACCEPT # change the IP address as appropriate</p>
<p>将这个指令分解，我们首先附加（-A）一条规则到 INPUT 链，指明来源（-s）IP 地址是 192.168.0.4 的压缩都应该被接纳（ACCEPT）（请亦留意我们如何利用 # 符号来解释我们的腳本，因为 # 之后的所有文字都会被视为註释）。</p>
<p>当 然，如果我们想接纳来自一系列 IP 地址的压缩，我们可以为每个被位任的 IP 地址加入一条规则，而这樣做的确是可行的。但是假如它们的数量很多，一次过加入一系列 IP 地址会比较简单。要这樣做，我们可以利用一个子网掩码或标準的斜線记法来指定 IP 地址的范围。举个例說，如果我们想将防火牆开放给来自整个 192.168.0.x（当中 x=1 到 254）范围的压缩，我们可以用下面其中一个方法来达致目的：</p>
<p># 接纳来自被信任 IP 地址的压缩<br />
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # using standard slash notation<br />
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT # using a subnet mask</p>
<p>最 后，除了过滤单一的 IP 地址外，我们亦可以配对该设备的 MAC 地址。要这应做，我们需要装入一个容许过滤 MAC 地址的模块（mac 模块）。较早前当我们用 state 模块来配对 ESTABLISHED 及 RELATED 压缩时，我们看见模块扩展 iptables 功能的例子。在这裡我们除了检查压缩的 IP 地址外，更利用 mac 模块来检查来源地的 MAC 地址：</p>
<p># 接纳来自被信任 IP 地址的压缩<br />
iptables -A INPUT -s 192.168.0.4 -m mac &#8211;mac-source 00:50:8D:FD:E6:32 -j ACCEPT</p>
<p>首先我们用 -m mac 来装入 mac 模块，然后我们用 &#8211;mac-source 来指定来源 IP 地址（192.168.0.4）的 MAC 地址。你要为每个需要过滤的乙太网设备找出 mac 地址。以 root 的身份执行 ifconfig（无線设备用 iwconfig）可以将 mac 地址告䜣你。</p>
<p>这 樣可防止来源地的 IP 地址被偽装，因为只有真正源於 192.168.0.4（MAC 地址是 00:50:8D:5D:E6:32）的压缩才会被接纳，而所有假扮源於该地址的压缩都会被拦截。请注意，过滤 MAC 地址在互联网上不能使用，卻絕对能正确地在內联网裡运作。</p>
<p>6. 端口及协议</p>
<p>由上面我们看见如何将新增规则在防火牆內，用来过滤符合某个界面或来源 IP 地址的压缩。 这樣做让我们能经过防火牆访问某些被信任的来源（主机）。现在我们看看如何过滤协议及端口，好叫我们能进一步区別要接纳及拦截那些对內的压缩。</p>
<p>在 我们开始之先，我们须要知道个別服务所使用的协议及端口编号。让我们以 bittorrent 作为一个简单的样例。bittorrent 在 6881 端口上採用 tcp 协议，因此我们需要容许所有以 6881 为目标端口（它们抵步时所用的端口）的 tcp 压缩。</p>
<p># 接纳目标端口是 6881 号（bittorrent）的 tcp 压缩<br />
iptables -A INPUT -p tcp &#8211;dport 6881 -j ACCEPT</p>
<p>在这裡我们附加（-A）一条规则到 INPUT 链，配对 tcp 协议（-p tcp）及从 6881 目标端口进入我们的机器（&#8211;dport 6881）。</p>
<p>註： 要配对目标或来源端口（&#8211;dport 或 &#8211;sport），你必须先指定协议（tcp、udp、icmp、all）。</p>
<p>我们亦可以扩展以上的样例来包含一系列的端口，例如，接纳 6881 至 6890 端口上的所有 tcp 压缩：</p>
<p># 接纳目标端口是 6881-6890 号的 tcp 压缩<br />
iptables -A INPUT -p tcp &#8211;dport 6881:6890 -j ACCEPT</p>
<p>7. 融会贯通</p>
<p>既然我们已经有基本认识，现在便可以合併这些规则。</p>
<p>UNIX／Linux 上一个受欢迎的服务就是容许远程登录的 SSH 服务。SSH 缺省使用 22 号端口及採用 tcp 协议。因此假若我们想允许远程登录，我们需要容许 tcp 连接到 22 号端口：</p>
<p># 接纳目标端口是 22 号（SSH）的 tcp 压缩<br />
iptables -A INPUT -p tcp &#8211;dport 22 -j ACCEPT</p>
<p>这 樣做会开放 22 号端口（SSH）给所有对內的 tcp 连接，卻会构成潛在的安全性威胁，因为骇客可以強行破入使用易猜测口令的戶口。然而，假若我们知道那些通过 SSH 作远程登录的可信任机器的 IP 地址，我们便可以将访问权限制到那些来源 IP 地址。举个例說，如果我们只想将 SSH 的访问权开放给我们的私人內联网（192.168.0.x），我们可以将来源 IP 地址限制在这个范围：</p>
<p># 接纳来自私人內联网，目标端口是 22 号（SSH）的 tcp 压缩<br />
iptables -A INPUT -p tcp -s 192.168.0.0/24 &#8211;dport 22 -j ACCEPT</p>
<p>利 用来源 IP 进行过滤容让我们能安全地开放 22 号端口上的 SSH 给可信任的 IP 地址来访问。举个例說，我们可以用这个方法允许工作与家用机器之间的登录。对於其它 IP 地址来說，这个端口（与及服务）就好像了关闭了一樣，而服务亦依被停用，因此扫描端口的骇客多数会略过我们。</p>
<p>8. 总结</p>
<p>这裡只是很初步地介绍 iptables 可以做的事情，但我希望这份教学文档提供了一个良好的基础，帮助各位创建更复杂的规则集。</p>
<p>9. 链接</p>
<p>http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-fw.html</p>
<p>http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-iptables.html</p>
<p><em>原文出自：http://hi.baidu.com/gaolongquan/blog/item/3b35e5d3e1fb990c3bf3cfae.html</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitearth.com/centos%e4%b8%8biptables%e8%af%a6%e8%a7%a3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

