<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Me Against The World]]></title>
<link>http://vod.pofen.com/starrysky/</link>
<description><![CDATA[No One Will Ever Be Able To Feel My Pain]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[Starry_Sky95@sina.com(StarrySky)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Me Against The World</title>
	<url>http://vod.pofen.com/starrysky/images/logos.gif</url>
	<link>http://vod.pofen.com/starrysky/</link>
	<description>Me Against The World</description>
</image>

			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=105</link>
			<title><![CDATA[人是很脆弱的]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[随笔]]></category>
			<pubDate>Tue,02 Mar 2010 23:17:27 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=105</guid>
		<description><![CDATA[今天无意间在一个好几年不见的朋友空间上看到他GF在上面写着：我老公于2009.11.23日下午离开人世，请所有的朋友为他哀悼，祝愿他一路走好。 我很震惊！怎么一个好好的人又不在了呢，这是第几个了？人类很脆弱。。]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=104</link>
			<title><![CDATA[在一个IP地址上运行多个基于域名的web站点]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Tue,01 Dec 2009 13:45:39 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=104</guid>
		<description><![CDATA[在一个IP地址上运行多个基于域名的web站点<br/>您的服务器有只一个IP地址，而在DNS中有很多域名(CNAMES)映射到这个机器。您而您想要在这个机器上运行www.example.com和www.example.org两个站点。<br/><br/>注意<br/>在您的Apache服务器配置中创建一个虚拟主机并不会自动在您的DNS中对主机名做相应更新。您必须自己在DNS中添加域名来指向您的IP地址。否则别人是无法看到您的web站点的。您可以在您的hosts文件中添加这一条目来进行测试，但这种方法仅适用于那些有这些hosts文件的机器来使用。<br/>服务器配置<br/># 确保Apache在监听80端口<br/>Listen 80<br/><br/># 为虚拟主机在所有IP地址上监听<br/>NameVirtualHost *:80<br/><br/>&lt;VirtualHost *:80&gt;<br/>DocumentRoot /www/example1<br/>ServerName www.example.com<br/><br/># 你可以在这里添加其他指令<br/><br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost *:80&gt;<br/>DocumentRoot /www/example2<br/>ServerName www.example.org<br/><br/># 你可以在这里添加其他指令<br/><br/>&lt;/VirtualHost&gt; <br/><br/>因为星号匹配所有IP地址，所以主服务器不接收任何请求。因为www.example.com首先出现在配置文件中，所以它拥有最高优先级，可以认为是默认或主服务器。这意味着如果一个请求不能与某个ServerName指令相匹配，它将会由第一个&lt;VirtualHost&gt;段所伺服。<br/><br/>注意<br/>如果您愿意，您可以用确定的IP地址来取代&#34;*&#34;。在这种情况下，VirtualHost的参数必须与NameVirtualHost的参数相符：<br/><br/>NameVirtualHost 172.20.30.40<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/># 其他 ... <br/><br/>然而，当您的IP地址无法确定的时候，使用&#34;*&#34;是很方便的，比如说，您的ISP给您配置的是动态IP地址，而您又使用了某种动态域名解析系统时。因为&#34;*&#34;匹配任何IP地址，所以在这种情况下，不论IP地址如何变化，您都不需要另外进行配置。<br/><br/>上述配置就是您在绝大多数情况下使用基于域名的虚拟主机时将要用到的。事实上，仅在一种情况下这样的配置不会让您满意：您想为不同的IP地址或是端口提供不同的内容。<br/>在多于一个IP的情况下使用基于域名的虚拟主机。<br/>注意<br/>在这里讨论的任何技术都可以推广到使用任意数量的IP地址。<br/><br/>服务器有两个IP地址。一个(172.20.30.40)用于主服务器server.domain.com ，另外一个(172.20.30.50)用于构建两个或多个虚拟主机。<br/><br/>服务器配置<br/>Listen 80<br/><br/># &#34;主&#34;服务器运行于：172.20.30.40<br/>ServerName server.domain.com<br/>DocumentRoot /www/mainserver<br/><br/># 这是另外一个IP地址<br/>NameVirtualHost 172.20.30.50<br/><br/>&lt;VirtualHost 172.20.30.50&gt;<br/>DocumentRoot /www/example1<br/>ServerName www.example.com<br/><br/># 你可以在这里添加其他指令 ...<br/><br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.50&gt;<br/>DocumentRoot /www/example2<br/>ServerName www.example.org<br/><br/># 你可以在这里添加其他指令 ...<br/><br/>&lt;/VirtualHost&gt; <br/><br/>任何不是针对172.20.30.50的请求都将由主服务器来伺服。而提交给172.20.30.50却没有主机名或没有&#34;Host:&#34;头的请求，都将由ww.example.com伺服。<br/>在不同的IP的地址(比如一个内部和一个外部地址)上提供相同的内容<br/>服务器有两个IP地址(192.168.1.1和172.20.30.40)。这个机器位于内部(局域网)网络和外部(广域网)之间。在外部，域名server.example.com指向外部地址(172.20.30.40)，而在内部则指向内部地址(192.168.1.1)。<br/><br/>服务器可以为来自内部和外部的请求提供同样的内容，您只需要一个&lt;VirtualHost&gt;配置段就可以了。<br/><br/>服务器配置<br/>NameVirtualHost 192.168.1.1<br/>NameVirtualHost 172.20.30.40<br/><br/>&lt;VirtualHost 192.168.1.1 172.20.30.40&gt;<br/>DocumentRoot /www/server1<br/>ServerName server.example.com<br/>ServerAlias server<br/>&lt;/VirtualHost&gt; <br/><br/>现在，从不同的网络提交的请求都会由同一个&lt;VirtualHost&gt;段来伺服。<br/><br/>注意<br/>在内网中，您可以使用server这个名字来代替server.example.com这个全名。<br/><br/>跟上面一样，在上述的例子里，您可以用&#34;*&#34;来代替具体的IP地址，这样就可以对所有的地址都返回相同的内容了。<br/>在不同的端口上运行不同的站点<br/>如果您想让同一个IP的不同端口伺服多个域名。您可以借助在NameVirtualHost指令中定义端口的方法来达到这个目的。如果您想使用不带&#34;name:port&#34;的&lt;VirtualHost name:port&gt;或是直接用Listen指令，您的配置将无法生效。<br/><br/>服务器配置<br/>Listen 80<br/>Listen 8080<br/><br/>NameVirtualHost 172.20.30.40:80<br/>NameVirtualHost 172.20.30.40:8080<br/><br/>&lt;VirtualHost 172.20.30.40:80&gt;<br/>ServerName www.example.com<br/>DocumentRoot /www/domain-80<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40:8080&gt;<br/>ServerName www.example.com<br/>DocumentRoot /www/domain-8080<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40:80&gt;<br/>ServerName www.example.org<br/>DocumentRoot /www/otherdomain-80<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40:8080&gt;<br/>ServerName www.example.org<br/>DocumentRoot /www/otherdomain-8080<br/>&lt;/VirtualHost&gt; <br/>建立基于IP的虚拟主机<br/>一个有两个IP地址(172.20.30.40和172.20.30.50)分别对应域名www.example.com和www.example.org的配置如下：<br/><br/>服务器配置<br/>Listen 80<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/example1<br/>ServerName www.example.com<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.50&gt;<br/>DocumentRoot /www/example2<br/>ServerName www.example.org<br/>&lt;/VirtualHost&gt; <br/><br/>如果存在主服务器，那么对没有出现在任一个&lt;VirtualHost&gt;段中的请求(比如，对localhost的请求)都会由主服务器来伺服。<br/>混用基于端口和基于IP的虚拟主机<br/>如果您的服务器有两个IP地址(172.20.30.40和172.20.30.50)分别对应域名www.example.com和www.example.org 。对每个域名，您都希望在80端口和8080端口发布您的网站。您可以这样配置：<br/><br/>服务器配置<br/>Listen 172.20.30.40:80<br/>Listen 172.20.30.40:8080<br/>Listen 172.20.30.50:80<br/>Listen 172.20.30.50:8080<br/><br/>&lt;VirtualHost 172.20.30.40:80&gt;<br/>DocumentRoot /www/example1-80<br/>ServerName www.example.com<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40:8080&gt;<br/>DocumentRoot /www/example1-8080<br/>ServerName www.example.com<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.50:80&gt;<br/>DocumentRoot /www/example2-80<br/>ServerName www.example.org<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.50:8080&gt;<br/>DocumentRoot /www/example2-8080<br/>ServerName www.example.org<br/>&lt;/VirtualHost&gt; <br/>混用基于域名和基于IP的虚拟主机<br/>您想在一些地址上配置基于域名的虚拟主机而在另外一些地址上配置基于IP的虚拟主机。<br/><br/>服务器配置<br/>Listen 80<br/><br/>NameVirtualHost 172.20.30.40<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/example1<br/>ServerName www.example.com<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/example2<br/>ServerName www.example.org<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/example3<br/>ServerName www.example3.net<br/>&lt;/VirtualHost&gt;<br/><br/># IP-based<br/>&lt;VirtualHost 172.20.30.50&gt;<br/>DocumentRoot /www/example4<br/>ServerName www.example4.edu<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.60&gt;<br/>DocumentRoot /www/example5<br/>ServerName www.example5.gov<br/>&lt;/VirtualHost&gt; <br/>将&lt;Virtual_host&gt;和mod_proxy模块一起使用<br/>下面的例子允许一个前端机器代理一个运行在其他机器上的虚拟主机。在如下示例中，在192.168.111.2机器上配置了一个同名的虚拟主机。这样，万一在同一台机器上代理了多个主机名，ProxyPreserveHostOn 指令能确保指定的主机名顺利通过代理。<br/><br/>&lt;VirtualHost *:*&gt;<br/>ProxyPreserveHost On<br/>ProxyPass / <a href="http://192.168.111.2" target="_blank" rel="external">http://192.168.111.2</a><br/>ProxyPassReverse / <a href="http://192.168.111.2" target="_blank" rel="external">http://192.168.111.2</a>/<br/>ServerName hostname.example.com<br/>&lt;/VirtualHost&gt; <br/>使用&#34;_default_&#34;虚拟主机<br/>为所有端口配置&#34;_default_&#34;虚拟主机<br/>这样配置可以捕获所有指向没指定的IP地址和端口的请求。比如：一个没被任何虚拟主机使用的地址/端口对。<br/><br/>服务器配置<br/>&lt;VirtualHost _default_:*&gt;<br/>DocumentRoot /www/default<br/>&lt;/VirtualHost&gt; <br/><br/>这样一个使用通配符端口的默认虚拟主机可以有效的防止请求被主服务器接收。<br/><br/>如果一个地址/端口对已经被一个基于域名的虚拟主机使用，那么&#34;_default_&#34;虚拟主机决不会处理发向这个地址/端口对的请求。如果一个&#34;Host:&#34;请求头中包含未知信息，或者干脆就没有，那么它会被第一个基于域名的虚拟主机(也就是在配置文件中最先出现的使用了那个地址/端口对的虚拟主机)处理。<br/><br/>您可以用AliasMatch或RewriteRule来重写任何请求，使它指向一个简单信息页面(或脚本)。<br/><br/>为不同的端口配置&#34;_default_&#34;虚拟主机<br/>与第一种一样，但我们想让服务器侦听很多端口而第二个&#34;_default_&#34;虚拟主机单独侦听80端口。<br/><br/>服务器配置<br/>&lt;VirtualHost _default_:80&gt;<br/>DocumentRoot /www/default80<br/># ...<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost _default_:*&gt;<br/>DocumentRoot /www/default<br/># ...<br/>&lt;/VirtualHost&gt; <br/><br/>侦听80端口的&#34;_default_&#34;虚拟主机(必须出现在所有使用通配符端口的虚拟主机之前)会捕获所有发向一个未指定的IP地址的请求。主服务器将不会用于伺服任何请求。<br/><br/>为单独一个端口配置&#34;_default_&#34;虚拟主机<br/>如果我们只想在80端口上建立唯一的一个&#34;_default_&#34;虚拟主机，我们应该这样配置：<br/><br/>服务器配置<br/>&lt;VirtualHost _default_:80&gt;<br/>DocumentRoot /www/default<br/>...<br/>&lt;/VirtualHost&gt; <br/><br/>发向一个未指定地址的80端口的请求将会由这个虚拟主机伺服；而发向未设定地址的其他端口的请求则由主服务器伺服。<br/>将一个基于域名的虚拟主机移植为一个基于IP的虚拟主机<br/>如果一个具有ww.example.org域名的虚拟主机(就是基于域名配置示例中的第二个)得到了自己的IP地址。为了避免一些域名服务器或代理服务器在移植期间仍对这个域名做老的解析，我们可以采用一种过渡方法：同时提供新旧两个IP地址的解析。<br/><br/>达到这个目的很简单。因为我们只要简单的把新地址(172.20.30.50)加入VirtualHost指令就行了。<br/><br/>服务器配置<br/>Listen 80<br/>ServerName www.example.com<br/>DocumentRoot /www/example1<br/><br/>NameVirtualHost 172.20.30.40<br/><br/>&lt;VirtualHost 172.20.30.40 172.20.30.50&gt;<br/>DocumentRoot /www/example2<br/>ServerName www.example.org<br/># ...<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/example3<br/>ServerName www.example.net<br/>ServerAlias *.example.net<br/># ...<br/>&lt;/VirtualHost&gt; <br/><br/>现在这个虚拟主机就可以用新地址(表现为一个基于IP的虚拟主机)和旧地址(表现为一个基于域名的虚拟主机)同时进行访问了。<br/>使用ServerPath指令<br/>如果我们在同一个服务器上运行了两个基于域名的虚拟主机。为了匹配正确的虚拟主机，客户端必须发送正确的&#34;Host:&#34;头。而旧的使用HTTP/1.0的客户端无法发送这样的头，这样Apache就无法辨别客户端想要连接哪个虚拟主机(会用主虚拟主机来伺服这个请求)。为了尽量提供向下兼容性，我们可以提供一个主虚拟主机来返回一个页面，在页面中加入指向基于域名的虚拟主机的URL前缀的链接。<br/><br/>服务器配置<br/>NameVirtualHost 172.20.30.40<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/># 主虚拟主机<br/>DocumentRoot /www/subdomain<br/>RewriteEngine On<br/>RewriteRule ^/.* /www/subdomain/index.html<br/># ...<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/subdomain/sub1<br/>ServerName www.sub1.domain.tld<br/>ServerPath /sub1/<br/>RewriteEngine On<br/>RewriteRule ^(/sub1/.*) /www/subdomain$1<br/># ...<br/>&lt;/VirtualHost&gt;<br/><br/>&lt;VirtualHost 172.20.30.40&gt;<br/>DocumentRoot /www/subdomain/sub2<br/>ServerName www.sub2.domain.tld<br/>ServerPath /sub2/<br/>RewriteEngine On<br/>RewriteRule ^(/sub2/.*) /www/subdomain$1<br/># ...<br/>&lt;/VirtualHost&gt; <br/><br/>由于ServerPath指令的作用，发送到htp://www.sub1.domain.tld/sub1/的请求总会被sub1-vhost所伺服。<br/>如果客户端发送了正确的&#34;Host:&#34;头，发送到htp://www.sub1.domain.tld、的请求只会被sub1-vhost所伺服。如果没有发送&#34;Host:&#34;头，客户端将会得到从主虚拟主机发送的信息页面。<br/><br/>请注意，这里还有一点小问题：如果客户端没有发送&#34;Host:&#34;头，发送到<a href="http://www.sub2.domain.tld/sub1/" target="_blank" rel="external">http://www.sub2.domain.tld/sub1/</a>的请求还是会被sub1-vhost所伺服。<br/>]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=103</link>
			<title><![CDATA[header中的Cache-control参数说明]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Thu,26 Nov 2009 11:32:09 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=103</guid>
		<description><![CDATA[网页的缓存是由HTTP消息头中的“Cache-control”来控制的，常见的取值有private、no-cache、max-age、must-revalidate等，默认为private。其作用根据不同的重新浏览方式分为以下几种情况：<br/><br/>（1） 打开新窗口<br/>&nbsp;&nbsp;&nbsp;&nbsp;值为private、no-cache、must-revalidate，那么打开新窗口访问时都会重新访问服务器。<br/>而如果指定了max-age值，那么在此值内的时间里就不会重新访问服务器，例如：<br/>Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)<br/><br/>（2） 在地址栏回车<br/>&nbsp;&nbsp;&nbsp;&nbsp;值为private或must-revalidate则只有第一次访问时会访问服务器，以后就不再访问。<br/>&nbsp;&nbsp;&nbsp;&nbsp;值为no-cache，那么每次都会访问。<br/>&nbsp;&nbsp;&nbsp;&nbsp;值为max-age，则在过期之前不会重复访问。<br/><br/>（3） 按后退按扭<br/>&nbsp;&nbsp; 值为private、must-revalidate、max-age，则不会重访问，<br/>&nbsp;&nbsp; 值为no-cache，则每次都重复访问<br/><br/>（4） 按刷新按扭<br/>　 无论为何值，都会重复访问<br/><br/>Cache-control值为“no-cache”时，访问此页面不会在Internet临时文章夹留下页面备份。<br/><br/>另外，通过指定“Expires”值也会影响到缓存。例如，指定Expires值为一个早已过去的时间，那么访问此网时若重复在地址栏按回车，那么每次都会重复访问： Expires: Fri, 31 Dec 1999 16:00:00 GMT<br/><br/>比如：禁止页面在IE中缓存<br/><br/>http响应消息头部设置：<br/><br/>CacheControl = no-cache<br/>Pragma=no-cache<br/>Expires = -1<br/><br/>Expires是个好东东，如果服务器上的网页经常变化，就把它设置为-1，表示立即过期。如果一个网页每天凌晨1点更新，可以把Expires设置为第二天的凌晨1点。<br/><br/>当HTTP1.1服务器指定CacheControl = no-cache时，浏览器就不会缓存该网页。<br/><br/>旧式 HTTP 1.0 服务器不能使用 Cache-Control 标题。<br/>所以为了向后兼容 HTTP 1.0 服务器，IE使用Pragma:no-cache 标题对 HTTP 提供特殊支持。<br/>如果客户端通过安全连接 (<a href="https://" target="_blank" rel="external">https://</a>)与服务器通讯，且服务器在响应中返回 Pragma:no-cache 标题，<br/>则 Internet Explorer不会缓存此响应。注意：Pragma:no-cache 仅当在安全连接中使用时才防止缓存，如果在非安全页中使用，处理方式与 Expires:-1相同，该页将被缓存，但被标记为立即过期<br/>NetSeek (2009-4-04 01:35:10)<br/>header常用指令<br/>header分为三部分：<br/>第一部分为HTTP协议的版本(HTTP-Version)；<br/>第二部分为状态代码(Status)；<br/>第三部分为原因短语(Reason-Phrase)。<br/><br/>// fix 404 pages:&nbsp;&nbsp; 用这个header指令来解决URL重写产生的404 header<br/>header(&#39;HTTP/1.1 200 OK&#39;);&nbsp;&nbsp; <br/><br/>// set 404 header:&nbsp;&nbsp; 页面没找到<br/>header(&#39;HTTP/1.1 404 Not Found&#39;);&nbsp;&nbsp; <br/><br/>//页面被永久删除，可以告诉搜索引擎更新它们的urls<br/>// set Moved Permanently header (good for redrictions)&nbsp;&nbsp; <br/>// use with location header&nbsp;&nbsp; <br/>header(&#39;HTTP/1.1 301 Moved Permanently&#39;); <br/><br/>// 访问受限<br/>header(&#39;HTTP/1.1 403 Forbidden&#39;);<br/><br/>// 服务器错误<br/>header(&#39;HTTP/1.1 500 Internal Server Error&#39;);<br/><br/>// 重定向到一个新的位置<br/>// redirect to a new location:&nbsp;&nbsp; <br/>header(&#39;Location: <a href="http://www.example.org/" target="_blank" rel="external">http://www.example.org/</a>&#39;);&nbsp;&nbsp; <br/><br/>延迟一段时间后重定向<br/>// redrict with delay:&nbsp;&nbsp; <br/>header(&#39;Refresh: 10; url=http://www.example.org/&#39;);&nbsp;&nbsp; <br/>print &#39;You will be redirected in 10 seconds&#39;;&nbsp;&nbsp; <br/><br/>// 覆盖 X-Powered-By value<br/>// override X-Powered-By: PHP:&nbsp;&nbsp; <br/>header(&#39;X-Powered-By: PHP/4.4.0&#39;);&nbsp;&nbsp; <br/>header(&#39;X-Powered-By: Brain/0.6b&#39;);&nbsp;&nbsp; <br/><br/>// 内容语言 (en = English)<br/>// content language (en = English)&nbsp;&nbsp; <br/>header(&#39;Content-language: en&#39;);&nbsp;&nbsp; <br/><br/>//最后修改时间(在缓存的时候可以用到)<br/>// last modified (good for caching)&nbsp;&nbsp; <br/>$time = time() - 60; // o&#114; filemtime($fn), etc&nbsp;&nbsp; <br/>header(&#39;Last-Modified: &#39;.gmdate(&#39;D, d M Y H:i:s&#39;, $time).&#39; GMT&#39;);&nbsp;&nbsp; <br/><br/>// 告诉浏览器要获取的内容还没有更新<br/>// header for telling the browser that the content&nbsp;&nbsp; <br/>// did not get changed&nbsp;&nbsp; <br/>header(&#39;HTTP/1.1 304 Not Modified&#39;);&nbsp;&nbsp; <br/><br/>// 设置内容的长度 (缓存的时候可以用到):<br/>// set content length (good for caching):&nbsp;&nbsp; <br/>header(&#39;Content-Length: 1234&#39;);&nbsp;&nbsp; <br/><br/>// 用来下载文件:<br/>// Headers for an download:&nbsp;&nbsp; <br/>header(&#39;Content-Type: application/octet-stream&#39;);&nbsp;&nbsp; <br/>header(&#39;Content-Disposition: attachment; filename=&#34;example.zip&#34;&#39;);&nbsp;&nbsp; <br/>header(&#39;Content-Transfer-Encoding: binary&#39;);&nbsp;&nbsp; <br/><br/>// 禁止缓存当前文档:<br/>// load the file to send:readfile(&#39;example.zip&#39;);&nbsp;&nbsp; <br/>// Disable caching of the current document:&nbsp;&nbsp; <br/>header(&#39;Cache-Control: no-cache, no-store, max-age=0, must-revalidate&#39;);&nbsp;&nbsp; <br/>header(&#39;Expires: Mon, 26 Jul 1997 05:00:00 GMT&#39;);&nbsp;&nbsp;<br/><br/>// 设置内容类型:<br/>// Date in the pastheader(&#39;Pragma: no-cache&#39;);&nbsp;&nbsp; <br/>// set content type:&nbsp;&nbsp; <br/>header(&#39;Content-Type: text/html; charset=iso-8859-1&#39;);&nbsp;&nbsp; <br/>header(&#39;Content-Type: text/html; charset=utf-8&#39;);&nbsp;&nbsp; <br/>header(&#39;Content-Type: text/plain&#39;);&nbsp;&nbsp; <br/><br/>// plain text file&nbsp;&nbsp; <br/>header(&#39;Content-Type: image/jpeg&#39;);&nbsp;&nbsp; <br/><br/>// JPG picture&nbsp;&nbsp; <br/>header(&#39;Content-Type: application/zip&#39;);&nbsp;&nbsp; <br/><br/>// ZIP file&nbsp;&nbsp; <br/>header(&#39;Content-Type: application/pdf&#39;);&nbsp;&nbsp; <br/><br/>// PDF file&nbsp;&nbsp; <br/>header(&#39;Content-Type: audio/mpeg&#39;);&nbsp;&nbsp; <br/><br/>// Audio MPEG (MP3,...) file&nbsp;&nbsp; <br/>header(&#39;Content-Type: application/x-shockwave-flash&#39;);&nbsp;&nbsp; <br/><br/>// 显示登录对话框，可以用来进行HTTP认证<br/>// Flash animation// show sign in box&nbsp;&nbsp; <br/>header(&#39;HTTP/1.1 401 Unauthorized&#39;);&nbsp;&nbsp; <br/>header(&#39;WWW-Authenticate: Basic realm=&#34;Top Secret&#34;&#39;);&nbsp;&nbsp; <br/>print &#39;Text that will be displayed if the user hits cancel o&#114; &#39;;&nbsp;&nbsp; <br/>print &#39;enters wrong login data&#39;;?&gt;<br/> <br/>]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=102</link>
			<title><![CDATA[5.25]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[随笔]]></category>
			<pubDate>Tue,26 May 2009 16:42:00 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=102</guid>
		<description><![CDATA[这个生日让我觉得温暖&nbsp;&nbsp;小样]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=101</link>
			<title><![CDATA[php扩展库]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Tue,21 Apr 2009 14:25:04 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=101</guid>
		<description><![CDATA[ZLIB：zlib-1.2.1.tar.gz 下载：<br/><a href="http://www.zlib.net/zlib-1.2.1.tar.gz" target="_blank" rel="external">http://www.zlib.net/zlib-1.2.1.tar.gz</a><br/><br/>FreeType：freetype-2.1.5.tar.gz 下载：<br/><a href="http://twtelecom.dl.sourceforge.net/...e-2.1.5.tar.gz" target="_blank" rel="external">http://twtelecom.dl.sourceforge.net/...e-2.1.5.tar.gz</a><br/><br/>PNG：libpng-1.2.5.tar.gz 下载：<br/><a href="http://twtelecom.dl.sourceforge.net/...g-1.2.5.tar.gz" target="_blank" rel="external">http://twtelecom.dl.sourceforge.net/...g-1.2.5.tar.gz</a><br/><br/>JPEG：jpegsrc.v6b.tar.gz 下载： <br/>GD：gd-2.0.18.tar.gz 下载：<br/><a href="http://www.boutell.com/gd/http/gd-2.0.18.tar.gz" target="_blank" rel="external"><a href="http://www.boutell.com" target="_blank" rel="external">http://www.boutell.com</a>/gd/http/gd-2.0.18.tar.gz</a><br/>#2.0不支持GIF？好像限制又过期了 <br/>FreeTDS：freetds-stable.tgz 下载：<br/><a href="http://ibiblio.org/pub/Linux/ALPHA/f...tds-stable.tgz" target="_blank" rel="external"><a href="http://ibiblio.org" target="_blank" rel="external">http://ibiblio.org</a>/pub/Linux/ALPHA/f...tds-stable.tgz</a><br/><br/>Cronolog：cronolog-1.6.2.tar.gz 下载：<br/><a href="http://www.cronolog.org/download/cronolog-1.6.2.tar.gz" target="_blank" rel="external"><a href="http://www.cronolog.org" target="_blank" rel="external">http://www.cronolog.org</a>/download/cronolog-1.6.2.tar.gz</a><br/><br/>Awstats：awstats-5.9.tgz 下载：<br/><a href="http://heanet.dl.sourceforge.net/sou...wstats-5.9.tgz" target="_blank" rel="external">http://heanet.dl.sourceforge.net/sou...wstats-5.9.tgz</a><br/><br/>三、安装步骤 <br/>1、安装Apache <br/>tar xzvf httpd-2.0.48.tar.gz <br/>cd httpd-2.0.48 <br/>./configure --prefix=/usr/local/apache --enable-so <br/>make <br/>make install <br/>echo &#34;/usr/local/apache/bin/apachectl start&amp;&#34; &gt;&gt; /etc/rc.d/rc.local <br/>#启动 <br/>/usr/local/apache/bin/apache start <br/>2、安装MySQL <br/>tar xzvf mysql-standard-4.0.17-pc-linux-i686.tar.gz <br/>#此处下载的的二进制分发包，故没有./configure步骤 <br/>mv mysql-standard-4.0.17-pc-linux-i686 /usr/local/mysql <br/>cd /usr/local/mysql <br/>#下步cp要看服务器硬件环境，可选small,medium,large,huge <br/>cp support-files/my-medium.cnf /etc/my.cnf <br/>echo &#34;/usr/local/mysql/bin/safe_mysqld --user=mysql&amp;&#34; &gt;&gt; /etc/rc.d/rc.local <br/>groupadd mysql <br/>useradd -g mysql mysql <br/>./scripts/mysql_install_db <br/>chown -R mysql.mysql data <br/>#启动 <br/>/usr/local/mysql/bin/safe_mysqld --user=mysql&amp; <br/>3、安装PHP <br/>A、先安装支持包（注意安装顺序） <br/>建立初始目录： <br/>#php目录 <br/>mkdir /usr/local/php <br/>mkdir /usr/local/php/modules <br/>#freetype目录 <br/>mkdir /usr/local/php/modules/freetype <br/>#jpeg目录 <br/>mkdir /usr/local/php/modules/jpeg6 <br/>mkdir /usr/local/php/modules/jpeg6/bin <br/>mkdir /usr/local/php/modules/jpeg6/lib <br/>mkdir /usr/local/php/modules/jpeg6/include <br/>mkdir /usr/local/php/modules/jpeg6/man <br/>mkdir /usr/local/php/modules/jpeg6/man/man1 <br/>#gd目录 <br/>mkdir /usr/local/php/modules/gd <br/>#freeTDS目录 <br/>mkdir /usr/local/php/modules/freetds <br/>A1、安装zlib <br/>tar xzvf zlib-1.2.1.tar.gz <br/>cd zlib-1.2.1 <br/>#不要用--prefix自定义安装目录，影响gd的安装 <br/>./configure <br/>make <br/>make install <br/>A2、安装freetype <br/>tar xzvf freetype-2.1.5.tar.gz <br/>cd freetype-2.1.5 <br/>./configure --prefix=/usr/local/php/modules/freetype <br/>make <br/>make install <br/>A3、安装libpng <br/>tar xzvf libpng-1.2.5.tar.gz <br/>#不要用--prefix自定义安装目录，影响gd的安装 <br/>cd libpng-1.2.5 <br/>cp scripts/makefile.std makefile <br/>make test <br/>make install <br/>A3、安装jpeg <br/>tar xzvf jpegsrc.v6b.tar.gz <br/>./configure --prefix=/usr/local/php/modules/jpeg6 --enable-shared --enable-static <br/>make <br/>make install <br/>A4、安装GD <br/>tar xzvf gd-2.0.18.tar.gz <br/>./configure --prefix=/usr/local/php/modules/gd --with-jpeg=/usr/local/php/modules/jpeg6 --with-png --with-zlib --with-freetype=/usr/local/php/modules/freetype <br/>make <br/>make install <br/>A5、安装FreeTDS <br/>tar zxvf freetds-stable.tgz <br/>cd freetds-stable <br/>./configure --prefix=/usr/local/php/modules/freetds <br/>make <br/>make install <br/>B、安装Cronolog <br/>tar zxvf cronolog-1.6.2.tar.gz <br/>cd cronolog-1.6.2 <br/>./configure <br/>make <br/>make install <br/>C、安装PHP <br/>tar xzvf php4-STABLE-latest.tar.tar <br/>cd php4-STABLE-latest <br/>./configure --prefix=/usr/local/php --with-jpeg=/usr/local/php/modules/jpeg6 --with-zlib --with-png --with-gd=/usr/local/php/modules/gd --with-freetype=/usr/local/php/modules/freetype --with-mssql=/usr/local/php/modules/freetds --enable-magic-quotes --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql <br/>make <br/>make install <br/>四、一些特别的配置 <br/>1、配置Apache <br/>修改httpd.conf文件： <br/>#增加处理性能 <br/>MaxClient 250 <br/>StartServers 10 <br/>#设置PHP <br/>LoadModule php4_module libexec/libphp4.so <br/>#AddModule mod_php4.c <br/>AddType application/x-httpd-php .php <br/>#This directive configures what you return as the Server HTTP response Header <br/>ServerTokens Minor <br/>#Optionally add a line containing the server version and virtual host name to server-generated pages <br/>ServerSignature Off <br/>#设置日志存储格式 <br/>CustomLog &#34;|/usr/local/sbin/cronolog /usr/local/apache/logs/access_%y%m%d.log&#34; combined <br/>2、配置Awstat <br/>#!!此程序需要perl的支持!! <br/>tar xzvf awstats-5.9.tgz <br/>mkdir /usr/local/apache/cgi-bin/webstat/ <br/>mkdir /usr/local/apache/weblog/ <br/>cd awstat/www/ <br/>cp icon/* /usr/local/apache/icons/ <br/>cp cgi-bin/ /usr/local/apache/cgi-bin/webstat/ <br/>cd /usr/local/apache/cgi-bin/webstat/ <br/>cp awstat.model.conf awstat.<br/>www.yourdomain.com.conf<br/><br/>#修改awstat.<br/><a href="http://www.yourdomain.com.conf" target="_blank" rel="external">http://www.yourdomain.com.conf</a><br/>中下...?用默认值: <br/>vi awstat.<br/>www.yourdomain.com.conf<br/><br/>LogFile=&#34;/usr/local/apache/logs/access_%YY%MM%DD.log&#34; <br/>SiteDomain=&#34;<br/>www.yourdomain.com<br/>&#34; <br/>DirData=&#34;/usr/local/apache/weblog/&#34; <br/>DirIcons=&#34;/icons&#34; <br/>#修改awstats.pl为0777 <br/>chmod 0777 awstats.pl <br/>#设置计划任务 <br/>crontab -e <br/>55 23 * * * (/usr/local/apache/cgi-bin/webstat/awstats.pl -up&#100;ate -config=<br/>www.yourdomain.com<br/>&gt;/dev/null) <br/>3、配置MySQL <br/>修改root用户密码 <br/>/usr/local/mysql/bin/mysqladmin -u root password &#39;your-new-password&#39; <br/>删除host为%和密码为空的用户 <br/>调整性能： <br/>max_connections=250 #default is 100 #影响pconnect数量 <br/>table_cache=128 #default 64，调整值根据实际情况而定，一般如果Open_tables 达到table_cache值，且Opened_tables仍在快速增长，要增大该值。 <br/>key_buffer_size= #根据实际情况而定，一般Key_reads : Key_read_requests小于1:1000 <br/>4、配置PHP <br/>默认安装的PEAR有，如果用不上的话可以删除： <br/>[PEAR] DB - installed: 1.6.0 <br/>[PEAR] HTTP - installed: 1.2.2 <br/>[PEAR] Mail - installed: 1.1.2 <br/>[PEAR] Net_SMTP - installed: 1.2.3 <br/>[PEAR] Net_Socket - installed: 1.0.1 <br/>[PEAR] XML_Parser - installed: 1.0.1 <br/>[PEAR] XML_RPC - installed: 1.0.4 <br/>更多信息请参考：<br/><a href="http://pear.php.net" target="_blank" rel="external">http://pear.php.net</a><br/><br/>五、常见问题 <br/>1、安装PHP <br/>a、checking lex output file root... ./configure: line 2425: lex: command not found <br/>configure: error: cannot find output from lex; giving up <br/>缺少flex-2.5.4a-29.i386.rpm，从linux 9.0光盘中找到flex-2.5.4a-29.i386.rpm，安装，重新编译php，ok. <br/>b、ext/gd/gd.lo(.text+0x875): undefined reference to `gdFreeFontCache&#39; <br/>*** Error code 1 <br/>php.net官方人士说是安装了不同版本的GD或者推荐安装低版本的php，但我是安装了高于php-4.3.4.tar.gz后解决了此问题。 <br/>参考：<br/><a href="http://bugs.php.net/bug.php?id=22825" target="_blank" rel="external">http://bugs.php.net/bug.php?id=22825</a><br/><br/>2、安装jpeg <br/>一定要选择./configure --enable-shared --enables-static --prefix=/usr/local方式安装，否则不能make install !!! <br/>若没有装libtool-1.4.3-5.i386.rpm,不能创建共享libjpeg库，即不是能--enable-shared指令编译。 <br/>装libtool之前要装m4-1.4.1-13.i386.rpm，automake，autoconf及 <br/>若您下载的包为zip格式jpegsr6.zip时,./configure 时出现: bad interpreter:,原因是dos换行跟unix换行符不同造成的，在editplus在转换格式后,jpeg-6a安装成功 <br/>3、安装libpng <br/>安装之前要先安装zlib， 且不有自定义目录,否则装gd时找不到库文件。 <br/>4、安装MySQL <br/>此文中因为安装的是二进制分发包，帮没有configure，如果是源码包，依照如下格式安装。 <br/>shell&gt; groupadd mysql <br/>shell&gt; useradd -g mysql mysql <br/>shell&gt; tar xzvf mysql-VERSION.tar.gz <br/>shell&gt; cd mysql-VERSION <br/>shell&gt; ./configure --prefix=/usr/local/mysql <br/>shell&gt; make <br/>shell&gt; make install <br/>shell&gt; scripts/mysql_install_db <br/>shell&gt; chown -R root /usr/local/mysql <br/>shell&gt; chown -R mysql /usr/local/mysql/data <br/>shell&gt; chgrp -R mysql /usr/local/mysql <br/>shell&gt; cp support-files/my-medium.cnf /etc/my.cnf <br/>shell&gt; /usr/local/mysql/bin/mysqld_safe --user=mysql &amp; <br/>五、参考资源 <br/>1、apache <br/><a href="http://www.apache.org" target="_blank" rel="external">http://www.apache.org</a><br/><br/>2、mysql <br/><a href="http://www.mysql.com" target="_blank" rel="external">http://www.mysql.com</a><br/><br/>3、php <br/><a href="http://www.php.net" target="_blank" rel="external">http://www.php.net</a><br/><br/>4、GD <br/><a href="http://www.boutell.com" target="_blank" rel="external">http://www.boutell.com</a><br/><br/>5、FreeTDS <br/><a href="http://ibiblio.org" target="_blank" rel="external">http://ibiblio.org</a><br/><br/>6、Cronolog <br/><a href="http://www.cronolog.org" target="_blank" rel="external">http://www.cronolog.org</a><br/><br/>7、Awstats <br/><a href="http://awstats.sourceforge.net" target="_blank" rel="external">http://awstats.sourceforge.net</a><br/><br/>8、Webalizer <br/><a href="http://www.mrunix.net/webalizer/" target="_blank" rel="external">http://www.mrunix.net/webalizer/</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=100</link>
			<title><![CDATA[apache虚拟主机]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Mon,20 Apr 2009 11:27:12 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=100</guid>
		<description><![CDATA[Listen 81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&lt;VirtualHost&nbsp;&nbsp; *:81&gt;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin&nbsp;&nbsp; webmaster@aa&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot&nbsp;&nbsp; &#34;D:/xx&#34;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerName&nbsp;&nbsp; xxx&nbsp;&nbsp; <br/>&nbsp;&nbsp;&lt;/VirtualHost&gt;&nbsp;&nbsp; <br/><br/>NameVirtualHost *:80<br/>&lt;VirtualHost *:80&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; ServerName www.xxx.com<br/>&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot &#34;D:/WebSite/finallin&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; DirectoryIndex index.html index.htm index.php<br/>&nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/websitelogs/error/phpad.bjedu.cn-error_log<br/>&nbsp;&nbsp;&nbsp;&nbsp; CustomLog /var/websitelogs/phpad.bjedu.cn-access_log common<br/>&lt;/VirtualHost&gt;<br/><br/>虚拟目录<br/>Alias /web &#34;F:/xx&#34;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;Directory &#34;F:/xx&#34;&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;Options Indexes MultiViews&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;AddOutputFilter Includes html&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;AllowOverride None&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;o&#114;der allow,deny&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;Allow from all&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/Directory&gt;]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=99</link>
			<title><![CDATA[vsftod开机启动]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Sat,18 Apr 2009 00:59:11 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=99</guid>
		<description><![CDATA[有三种方法可以实现redhat中vsftpd服务开机自启动.<br/><br/>1:在终端输入ntsysv，这里是开机自动启动的服务选项，选中vsftpd即可.<br/><br/>2:用vi打开etc/rc.local.在里面加入/usr/local/bin/vsftpd &amp;即可.<br/><br/>3:chkconfig vsftpd on<br/><br/>chkconfig用来检查服务是否启动]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=98</link>
			<title><![CDATA[vsftp配置大全]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Fri,17 Apr 2009 14:01:21 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=98</guid>
		<description><![CDATA[环境：<br/>RedHat AS4<br/>说明：<br/>如果不做说明，一般安装命令均使用ROOT权限，用 # 表示<br/>特别说明：无<br/><br/>以下文章介绍Liunx 环境下vsftpd的三种实现方法<br/><br/>一、前言<br/>Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器，目前已经被许多大型站点所采用，如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的实现有三种方式<br/>1、匿名用户形式：在默认安装的情况下，系统只提供匿名用户访问<br/>2、本地用户形式：以/etc/passwd中的用户名为认证方式<br/>3、虚拟用户形式：支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说，虚拟用户只是FTP服务器的专有用户，虚拟用户只能访问FTP服务器所提供的资源，这大大增强系统本身的安全性。相对于匿名用户而言，虚拟用户需要用户名和密码才能获取FTP服务器中的文件，增加了对用户和下载的可管理性。对于需要提供下载服务，但又不希望所有人都可以匿名下载；既需要对下载用户进行管理，又考虑到主机安全和管理方便的FTP站点来说，虚拟用户是一种极好的解决方案。<br/><br/>二、获取最新版的Vsftp程序<br/>Vsftp官方下载：<a href="ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz" target="_blank" rel="external">ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz</a>，目前已经到2.0.3版本。假设我们已经将vsftpd-2.0.3.tar.gz文件下载到服务器的/home/xuchen目录<br/><br/><br/>CODE:[Copy to clipboard]# cd /home/xuchen<br/># tar xzvf vsftpd-2.0.3.tar.gz //解压缩程序<br/># cd vsftpd-2.0.3<br/><br/><br/><br/>__________________________________<br/><br/>孤剑寒芒，流光化秋雨<br/>独行万里，为有破天时<br/>创意未来，豪气塞寰宇<br/>业经风雨，微笑顾心志 <br/><br/>返回页首 1楼 <br/>红帽企业Linux，企业应用首选 | 网管技术：网络安全 ·网络技术 ·存储备份 ·服务器及硬件技术 ·Cisco技术 | CU地区联盟 <br/><br/><br/>初学vb <br/>风云使者<br/><br/><br/>会员UID：3962<br/>注册时间：2002-2-20 15:16<br/>最后登录：2006-4-30 16:54<br/>帖子总数： 641 <br/>精华帖子： 3 <br/>积分：124<br/><br/>在线状态：...离线...<br/><br/>[会员资料] [站内短信] [Blog]<br/><br/>发表于: 2005-6-13 13:30 [引用] [投诉] [快速回复] <br/>--------------------------------------------------------------------------------<br/><br/>三、三种方式的实现 <br/>1、匿名用户形式实现<br/># vi builddefs.h \\编辑builddefs.h 文件，文件内容如下：<br/><br/>#ifndef VSF_BUILDDEFS_H<br/><br/>#define VSF_BUILDDEFS_H<br/>#undef VSF_BUILD_TCPWRAPPERS<br/>#define VSF_BUILD_PAM<br/>#undef VSF_BUILD_SSL<br/><br/>#endif /* VSF_BUILDDEFS_H */<br/>将以上undef的都改为define，支持tcp_wrappers，支持PAM认证方式，支持SSL<br/><br/># make //直接在vsftpd-2.0.3里用make编译<br/># ls -l vsftpd<br/>-rwxr-xr-x 1 root root 86088 Jun 6 12:29 vsftpd //可执行程序已被编译成功<br/><br/>创建必要的帐号，目录： <br/># useradd nobody //可能你的系统已经存在此帐号，那就不用建立<br/># mkdir /usr/share/empty //可能你的系统已经存在此目录，那就不用建立<br/># mkdir /var/ftp //可能你的系统已经存在此目录，那就不用建立<br/># useradd -d /var/ftp ftp //可能你的系统已经存在此帐号，那就不用建立<br/># chown root:root /var/ftp<br/># chmod og-w /var/ftp<br/>请记住，如果你不想让用户在本地登陆，那么你需要把他的登陆SHELL设置成/sbin/nologin，比如以上的nobody和ftp我就设置成/sbin/nologin<br/><br/>安装vsftp配置文件，可执行程序，man等:<br/># install -m 755 vsftpd /usr/local/sbin/vsftpd-ano<br/># install -m 644 vsftpd.8 /usr/share/man/man8<br/># install -m 644 vsftpd.conf.5 /usr/share/man/man5<br/># install -m 644 vsftpd.conf /etc/vsftpd-ano.conf<br/>这样就安装完成了，那么我们开始进行简单的配置<br/><br/># vi /etc/vsftpd-ano.conf ,将如下三行加入文件<br/>listen=YES<br/>listen_port=21<br/>tcp_wrappers=YES<br/>anon_root=/var/ftp //设置匿名用户本地目录，和ftp用户目录必须相同<br/>listen=YES的意思是使用standalone启动vsftpd，而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)<br/># /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &amp; //以后台方式启动vsftpd<br/>注意：每行的值都不要有空格，否则启动时会出现错误，举个例子，假如我在listen=YES后多了个空格，那我启动时就出现如下错误：<br/>500 OOPS: bad bool value in config file for: listen<br/><br/>测试搭建好的匿名用户方式<br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 (vsFTPd 2.0.3)<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): ftp<br/>331 Please specify the password.<br/>Password:<br/>230 Login successful.<br/>Remote system type is UNIX.<br/>Using binary mode to transfer files.<br/>ftp&gt;; pwd<br/>257 &#34;/&#34;<br/>ftp&gt;; quit<br/>221 Goodbye.<br/># <br/>OK，已经完成了，very nice.<br/><br/>高级配置<br/>细心的朋友可能已经看出来我们只在默认配置文件增加了四行，就实现了FTP连接（也证明了vsftpd的易用性），那么让我们传个文件吧，呀！！传输失败了（见图1）<br/>为什么呢？因为 vsftpd 是为了安全需要，/var/ftp目录不能把所有的权限打开，所以我们这时要建一个目录pub，当然也还是需要继续修改配置文件的。<br/># mkdir /var/ftp/pub<br/># chmod -R 777 /var/ftp/pub<br/><br/>为了测试方便，我们先建立一个名为kill-ano的脚本，是为了杀掉FTP程序的<br/>#!/bin/bash<br/>a=`/bin/ps -A | grep vsftpd-ano | awk {print $1}`<br/>kill -9 $a<br/><br/>那么现在大家看看我的匿名服务器配置文件吧<br/>anonymous_enable=YES //允许匿名访问，这是匿名服务器必须的<br/>write_enable=YES //全局配置可写<br/>no_anon_password=YES //匿名用户login时不询问口令<br/>anon_umask=077 //匿名用户上传的文件权限是-rw----<br/>anon_upload_enable=YES //允许匿名用户上传文件<br/>anon_mkdir_write_enable=YES //允许匿名用户建立目录<br/>anon_other_write_enable=YES //允许匿名用户具有建立目录，上传之外的权限，如重命名，删除<br/>dirmessage_enable=YES //当使用者转换目录,则会显示该目录下的.message信息<br/>xferlog_enable=YES //记录使用者所有上传下载信息<br/>xferlog_file=/var/log/vsftpd.log //将上传下载信息记录到/var/log/vsftpd.log中<br/>xferlog_std_format=YES //日志使用标准xferlog格式<br/>idle_session_timeout=600 //客户端超过600S没有动作就自动被服务器踢出<br/>data_connection_timeout=120 //数据传输时超过120S没有动作被服务器踢出<br/>chown_uploads=YES<br/>chown_username=daemon //上传文件的属主<br/>ftpd_banner=Welcome to d-1701.com FTP service. //FTP欢迎信息<br/>anon_max_rate=80000 //这是匿名用户的下载速度为80KBytes/s<br/>check_shell=NO //不检测SHELL<br/><br/>现在再测试，先kill掉再启动FTP程序<br/># ./kill-ano<br/># /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &amp;<br/>上传一个文件测试一下，怎么样？OK了吧，下载刚上传的那个文件，恩？不行，提示<br/>550 Failed to open file.<br/>传输已失败！<br/>传输队列已完成<br/>1 个文件传输失败<br/><br/>没有关系，你记得咱们设置了anon_umask=077了吗？所以你下载不了，如果你到服务器上touch 一个文件（644），测试一下，是可以被下载下来的，好了，匿名服务器就说到这里了。<br/><br/><br/>2、本地用户形式实现<br/># cd /home/xuchen/vsftpd-2.0.3 //进入vsftpd-2.0.3的源代码目录<br/># make clean //清除编译环境<br/># vi builddefs.h \\继续编辑builddefs.h 文件，文件内容如下：<br/>#ifndef VSF_BUILDDEFS_H<br/><br/>#define VSF_BUILDDEFS_H<br/>#define VSF_BUILD_TCPWRAPPERS<br/>#define VSF_BUILD_PAM<br/>#define VSF_BUILD_SSL<br/><br/>#endif /* VSF_BUILDDEFS_H */<br/>将以上define VSF_BUILD_PAM行的define改为undef，支持tcp_wrappers，不支持PAM认证方式，支持SSL，记住啊，如果支持了PAM认证方式，你本地用户是不能登陆的。<br/><br/># make //直接在vsftpd-2.0.3里用make编译<br/># ls -l vsftpd<br/>-rwxr-xr-x 1 root root 84712 Jun 6 18:56 vsftpd //可执行程序已被编译成功<br/><br/>创建必要的帐号，目录： <br/># useradd nobody //可能你的系统已经存在此帐号，那就不用建立<br/># mkdir /usr/share/empty //可能你的系统已经存在此目录，那就不用建立<br/># mkdir /var/ftp //可能你的系统已经存在此目录，那就不用建立<br/># useradd -d /var/ftp ftp //可能你的系统已经存在此帐号，那就不用建立<br/># chown root:root /var/ftp<br/># chmod og-w /var/ftp<br/>请记住，如果你不想让用户在本地登陆，那么你需要把他的登陆SHELL设置成/sbin/nologin，比如以上的nobody和ftp我就设置成/sbin/nologin<br/><br/>安装vsftp配置文件，可执行程序，man等:<br/># install -m 755 vsftpd /usr/local/sbin/vsftpd-loc<br/># install -m 644 vsftpd.8 /usr/share/man/man8<br/># install -m 644 vsftpd.conf.5 /usr/share/man/man5<br/># install -m 644 vsftpd.conf /etc/vsftpd-loc.conf<br/>这样就安装完成了，那么我们开始进行简单的配置<br/><br/># vi /etc/vsftpd-loc.conf ,将如下三行加入文件<br/>listen=YES<br/>listen_port=21<br/>tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)<br/>listen=YES的意思是使用standalone启动vsftpd，而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)，注意事项请参看匿名用户的配置。<br/>anonymous_enable=NO<br/>local_enable=YES //这两项配置说不允许匿名用户登陆，允许本地用户登陆<br/># /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf &amp; //以后台方式启动vsftpd<br/><br/>测试搭建好的匿名用户方式，先测试root用户吧 ：）<br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 (vsFTPd 2.0.3)<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): root<br/>331 Please specify the password.<br/>Password:<br/>230 Login successful.<br/>Remote system type is UNIX.<br/>Using binary mode to transfer files.<br/>ftp&gt;; pwd<br/>257 &#34;/root&#34;<br/>ftp&gt;; quit<br/>221 Goodbye.<br/>我们看到root用户可以登陆到ftp，他的登陆目录就是自己的主目录。<br/>再测试一个系统用户，那我们先建立一个用户名叫xuchen的<br/># useradd xuchen<br/># passwd xuchen<br/>Changing password for user xuchen.<br/>New UNIX password: <br/>Retype new UNIX password: <br/>passwd: all authentication tokens up&#100;ated successfully.<br/>建立好了，让我们开始测试吧！！<br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 (vsFTPd 2.0.3)<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): xuchen<br/>331 Please specify the password.<br/>Password:<br/>230 Login successful.<br/>Remote system type is UNIX.<br/>Using binary mode to transfer files.<br/>ftp&gt;; pwd<br/>257 &#34;/home/xuchen&#34;<br/>ftp&gt;; quit<br/>221 Goodbye.<br/>我们看到xuchen用户可以登陆到ftp，他的登陆目录也是自己的主目录。哈哈，又完成了！<br/>高级配置<br/>细心的朋友可能已经看出来如果我们不支持PAM认证方式，那么本地用户就可以登陆，而默认编译的vsftpd支持PAM认证方式，所以是不支持本地用户登陆的。恩，从这点说，这也是vsftp安全的一个表现----禁止本地用户登陆。<br/>我们登陆后进行测试，传一个文件上去，得，失败了，那下载个文件下来吧，恩，这是成功的（见图2），而且我们发现我们可以进入到系统根目录（见图3），这样很危险。<br/><br/>那么改配置文件吧，为了测试方便，我们先建立一个名为kill-loc的脚本，也是为了杀掉FTP程序的<br/>#!/bin/bash<br/>a=`/bin/ps -A | grep vsftpd-loc | awk {print $1}`<br/>kill -9 $a<br/><br/>现在提供我的本地用户验证服务器配置文件吧（在匿名里写过的注释我就不在这里写了）<br/>listen=YES<br/>listen_port=21<br/>tcp_wrappers=YES<br/>anonymous_enable=NO<br/>local_enable=YES<br/>write_enable=YES<br/>local_umask=022 //本地用户文件上传后的权限是-rw-r-r<br/>anon_upload_enable=NO<br/>anon_mkdir_write_enable=NO<br/>dirmessage_enable=YES<br/>xferlog_enable=YES<br/>xferlog_file=/var/log/vsftpd.log<br/>xferlog_std_format=YES<br/>connect_from_port_20=YES<br/>chroot_local_user=YES //限制用户在自己的主目录<br/>#local_root=/ftp //你可以指定所有本地用户登陆后的目录,如果不设置此项，用户都会登陆于自己的主目录，就跟咱们前面测试的结果是一样的<br/>local_max_rate=500000 //本地用户的下载速度为500KBytes/s<br/>idle_session_timeout=600<br/>data_connection_timeout=120<br/>nopriv_user= nobody //设定服务执行者为nobody,vsftpd推荐使用一个权限很低的用户，最好是没有家目录(/dev/null)，没有登陆shell（/sbin/nologin),系统会更安全<br/>ftpd_banner=Welcome to d-1701.com FTP service.<br/>check_shell=NO<br/><br/>userlist_enable=YES<br/>userlist_deny=YES<br/>userlist_file=/etc/vsftpd.denyuser<br/>以上三条设定不允许登陆的用户,用户列表存放在/etc/vsftpd.denyuser中,一行一个帐号如果我把xuchen这个用户加到vsftpd.denyuser里，那么登陆时会出现如下错误：<br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 Welcome to d-1701.com FTP service.<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): xuchen<br/>530 Permission denied.<br/>Login failed.<br/>呵呵，有意思吧，自己测试吧，本地用户登陆方式就介绍到这里吧！<br/><br/>3、虚拟用户形式实现（db及mysql形式）<br/># cd /home/xuchen/vsftpd-2.0.3 //进入vsftpd-2.0.3的源代码目录<br/># make clean //清除编译环境<br/># vi builddefs.h \\继续编辑builddefs.h 文件，文件内容如下：<br/>#ifndef VSF_BUILDDEFS_H<br/><br/>#define VSF_BUILDDEFS_H<br/>#define VSF_BUILD_TCPWRAPPERS<br/>#undef VSF_BUILD_PAM<br/>#define VSF_BUILD_SSL<br/><br/>#endif /* VSF_BUILDDEFS_H */<br/>将以上define VSF_BUILD_PAM行的undef改为define，支持tcp_wrappers，支持PAM认证方式，支持SSL，和匿名用户形式是一样的。<br/><br/># make //直接在vsftpd-2.0.3里用make编译<br/># ls -l vsftpd<br/>-rwxr-xr-x 1 root root 86088 Jun 6 22:26 vsftpd //可执行程序已被编译成功<br/><br/>创建必要的帐号，目录： <br/># useradd nobody //可能你的系统已经存在此帐号，那就不用建立<br/># mkdir /usr/share/empty //可能你的系统已经存在此目录，那就不用建立<br/># mkdir /var/ftp //可能你的系统已经存在此目录，那就不用建立<br/># useradd -d /var/ftp ftp //可能你的系统已经存在此帐号，那就不用建立<br/># chown root:root /var/ftp<br/># chmod og-w /var/ftp<br/>请记住，如果你不想让用户在本地登陆，那么你需要把他的登陆SHELL设置成/sbin/nologin，比如以上的nobody和ftp我就设置成/sbin/nologin<br/><br/>安装vsftp配置文件，可执行程序，man等:<br/># install -m 755 vsftpd /usr/local/sbin/vsftpd-pam<br/># install -m 644 vsftpd.8 /usr/share/man/man8<br/># install -m 644 vsftpd.conf.5 /usr/share/man/man5<br/># install -m 644 vsftpd.conf /etc/vsftpd-pam.conf<br/>这样就安装完成了，那么我们开始进行简单的配置<br/><br/>对于用DB库存储用户名及密码的方式来说：<br/>（1）查看系统是否有相应软件包<br/><br/># rpm –qa | grep db4<br/>db4-devel-4.2.52-7.1<br/>db4-4.2.52-7.1<br/>db4-utils-4.2.52-7.1<br/>（2）建立一个logins.txt的文件，单行为用户名，双行为密码，例如<br/># vi /home/logins.txt<br/><br/>xuchen<br/>12345<br/><br/>（3）建立数据库文件并设置文件属性<br/># db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db<br/># chmod 600 /etc/vsftpd_login.db<br/>（4）建立认证文件<br/># vi /etc/pam.d/ftp 插入如下两行<br/>auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br/>account required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br/>（5）建立一个虚拟用户<br/>useradd -d /home/vsftpd -s /sbin/nologin vsftpd<br/>ls -ld /home/vsftpd<br/>drwx------ 3 vsftpd vsftpd 1024 Jun 6 22:55 /home/vsftpd/<br/>（6）编写配置文件(注意事项请参看匿名用户的配置，这里不再赘述)<br/># vi /etc/vsftpd-pam.conf<br/>listen=YES<br/>listen_port=21<br/>tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)<br/>listen=YES的意思是使用standalone启动vsftpd，而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)<br/>anonymous_enable=NO<br/>local_enable=YES //PAM方式此处必须为YES，如果不是将出现如下错误：<br/>500 OOPS: vsftpd: both local and anonymous access disabled!<br/>write_enable=NO<br/>anon_upload_enable=NO<br/>anon_mkdir_write_enable=NO<br/>anon_other_write_enable=NO<br/>chroot_local_user=YES<br/>guest_enable=YES<br/>guest_username=vsftpd //这两行的意思是采用虚拟用户形式<br/>virtual_use_local_privs=YES //虚拟用户和本地用户权限相同<br/><br/>pasv_enable=YES //建立资料联机采用被动方式<br/>pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界，0表示任意。默认值为0。<br/>pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界，0表示任意。默认值为0。<br/>（7）启动程序<br/># /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &amp;<br/>（8）测试连通及功能<br/># vi /home/vsftpd/test //建立一个文件，内容如下<br/>1234567890<br/># chown vsftpd.vsftpd /home/vsftpd/test<br/><br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 (vsFTPd 2.0.3)<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): xuchen<br/>331 Please specify the password.<br/>Password:<br/>230 Login successful.<br/>Remote system type is UNIX.<br/>Using binary mode to transfer files.<br/>ftp&gt;; pwd<br/>257 &#34;/&#34;<br/>ftp&gt;; size test<br/>213 11<br/>ftp&gt;; quit<br/>221 Goodbye.<br/>OK，用户名为xuchen,密码为12345可以连接到FTP服务器，看不到文件列表，但可以下载已知文件名的文件，不能上传文件，非常安全吧！！<br/><br/>如果我们需要用户看到文件，怎么办？也好办,在配置文件中加入如下语句：<br/>anon_world_readable_only=NO //匿名登入者不能下载可阅读的档案，默认值为YES<br/><br/>如果需要让用户上传文件和下载文件分开，建议如下这么做<br/># vi /home/logins.txt<br/>xuchen<br/>12345<br/>upload<br/>45678<br/>//首先建立虚拟用户upload，密码为45678<br/># db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件<br/><br/># mkdir /home/vsftpd/upload<br/># vi /etc/vsftpd-pam.conf 加入如下语句<br/>user_config_dir=/etc/vsftpd_user_conf<br/># mkdir /etc/vsftpd_user_conf<br/># vi /etc/vsftpd_user_conf/upload 文件内容如下<br/>local_root=/home/vsftpd/upload<br/>write_enable=YES<br/>anon_world_readable_only=NO<br/>anon_upload_enable=YES<br/>anon_mkdir_write_enable=YES<br/>anon_other_write_enable=YES<br/><br/># chmod 700 /home/vsftpd/upload<br/># chown vsftpd.vsftpd /home/vsftpd/upload/<br/><br/>这样，xuchen用户可以下载/home/vsftpd里的文件及upload里的文件，而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西，但不能到/home/vsftpd里下载文件，很简单得实现了分用户上传和下载<br/><br/>对于用Mysql库存储用户名及密码的方式来说：<br/>就是把用户名和密码放在mysql库里，实现起来也相当简单<br/>（1）建立一个库并设置相应权限<br/># mysql –p<br/>mysql&gt;;cr&#101;ate database ftpd;<br/>mysql&gt;;use ftpd;<br/>mysql&gt;;cr&#101;ate table user(name char(20) binary,passwd char(20) binary);<br/>mysql&gt;;ins&#101;rt into user (name,passwd) values (test1,12345);<br/>mysql&gt;;ins&#101;rt into user (name,passwd) values (test2,54321);<br/>mysql&gt;;grant sel&#101;ct on ftpd.user to ftpd@localhost identified by 123456;<br/>mysql&gt;;flush privileges; 刷新权限设置<br/>mysql&gt;;quit<br/>（2）下载libpam-mysql进行安装编译<br/>下载地址如下：<br/><a href="http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz" target="_blank" rel="external">http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz</a><br/>假设我们把它放在了/home/xuchen目录下<br/># cd /home/xuchen<br/># tar xzvf pam_mysql-0.5.tar.gz<br/># cd pam_mysql <br/># make <br/># cp pam_mysql.so /lib/security<br/>（3）建立PAM认证信息<br/># vi /etc/pam.d/ftp ,内容如下<br/>auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0<br/><br/>account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0<br/><br/>注意： <br/>crypt= n <br/>crypt=0: 明文密码<br/>crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt()，encrypt()随机产生salt)<br/>crypt=2: 使用MYSQL中的password()函数加密<br/>crypt=3：表示使用md5的散列方式<br/>（4）建立本地虚拟用户<br/># useradd -d /home/ftpd -s /sbin/nologin ftpd<br/><br/>（5）下面就差修改vsftpd.conf文件了，我把我的提供给大家参考吧：）<br/># vi /etc/vsftpd-pam1.conf<br/>anonymous_enable=NO<br/>local_enable=YES<br/>write_enable=YES<br/>local_umask=022<br/>anon_upload_enable=YES<br/>anon_mkdir_write_enable=YES<br/>anon_other_write_enable=YES<br/>chroot_local_user=YES<br/>guest_enable=YES<br/>guest_username=ftpd<br/>listen=YES<br/>listen_port=21<br/>pasv_enable=YES<br/>pasv_min_port=30000<br/>pasv_max_port=30999<br/>anon_world_readable_only=NO<br/>virtual_use_local_privs=YES<br/><br/>#user_config_dir=/etc/vsftpd_user_conf<br/>可以看出，和前面的用db库来验证没有多大区别，其实就是一个东西，一个用mysql来验证，一个用db库，我个人比较倾向于用db库来验证，在这个环境下，相对于Mysql来说，安全系数更高一点。<br/><br/>（6）# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &amp; //以后台方式启动<br/><br/>（7）测试连通<br/># ftp 127.0.0.1<br/>Connected to 127.0.0.1.<br/>220 (vsFTPd 2.0.3)<br/>530 Please login with USER and PASS.<br/>530 Please login with USER and PASS.<br/>KERBEROS_V4 rejected as an authentication type<br/>Name (127.0.0.1:root): test1<br/>331 Please specify the password.<br/>Password:<br/>230 Login successful.<br/>Remote system type is UNIX.<br/>Using binary mode to transfer files.<br/>ftp&gt;; pwd<br/>257 &#34;/&#34;<br/>ftp&gt;; quit<br/>221 Goodbye.<br/>看，成功了！！这样就实现了mysql的认证方式，很简单吧？？<br/><br/>4、为FTP增加磁盘配额，从而避免恶意用户用垃圾数据塞满你的硬盘<br/>我首先要说的是这个功能是系统自带的，而不是vsftp 的功能之一，千万别搞混了。好了，我们先假设我们的系统用户ftpd的主目录是/home/ftpd，它是建立在/home分区中,那么如果我们要对ftpd用户进行磁盘限额，那我们需要修改/etc/fstab中根分区的记录，将/home分区的第4个字段改成defaults,usrquota，如下:<br/>LABEL=/home /home ext3 defaults,usrquota 1 2<br/># reboot //重新启动系统使设置生效<br/>也可以用<br/># mount -o remount /dev/sda6 ///dev/sda6的挂接点就是/home,这样可以不用启动系统。<br/>这里我还要说明一下，如果我们对一个组进行磁配额，那我们需要增加参数grpquota，例如<br/>LABEL=/home /home ext3 defaults,grpquota 1 2<br/>也可以<br/>LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2<br/>你想怎么限制都可以，自己组合参数吧。<br/># quotacheck -avu<br/>说明：a-自动开启挂载文件系统的配额，v-显示信息，u-启用用户配额or g-启用组配额<br/># edquota ftpd //为用户ftpd设置磁盘配额<br/>o&#114;<br/># edquota -g grp //为组grp设置磁盘配额<br/>系统会自动打开配额文件,如下:<br/>Disk quotas for user ftpd (uid 502):<br/>Filesystem blocks soft hard inodes soft hard<br/>/dev/sda6 424 0 0 13 0 0<br/>第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数，单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限度后，磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是，软限可以在一段时期内被超过。这段时期被称为过渡期（grace period），默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0，那个限度就不会被设置。我设置了硬块限度为1KB，是为了测试方便。<br/># quotaon -avu //打开磁盘配额监控进程，u是用户g是组，这里我没设置g参数<br/>要校验用户的配额是否被设置，我们可以使用以下命令：<br/># quota ftpd<br/>Disk quotas for user ftpd (uid 502): <br/>Filesystem blocks quota limit grace files quota limit grace<br/>/dev/sda6 424* 0 1 13 0 0 <br/># edquota –t（-g）来设置过渡期（grace period） //当然只针对软限制而言<br/>和另一个 edquota 命令相似，这个命令也会在文本编辑器中打开当前的文件系统配额：<br/>Grace period before enforcing soft limits for users:<br/>Time units may be: days, hours, minutes, o&#114; seconds<br/>Filesystem Block grace period Inode grace period<br/>/dev/sda6 7days 7days<br/>按你的需要修改后存盘退出<br/>用以下命令显示磁盘配额使用状态<br/># repquota -a 或 repquota /dev/sda6（用户配额）<br/># repquota -g -a 或 repquota -a /dev/sda6 (组的配额)<br/>如果一切按照你的意思实施了，那么我们就进行测试了！如下图4<br/><br/>我们传了一个&gt;;1k的文件，没有成功，这样我们就成功的为用户ftpd增添了磁盘配额，要是哪一天你不想加磁盘配额了，怎么办？参看如下命令：<br/>取消某个文件系统的配额限制<br/>#quotaoff -vug /dev/sda6 //删除home分区的磁盘限额<br/>#删除/etc/fstab中设置配额的部分<br/>修改软配额的最大超越时间<br/>注意：<br/>/，/boot/,/proc,/mnt/cdrom等不要使用配额，没用。而且磁盘配额不适合FAT和FAT32系统。<br/>以后当新设置了某个用户的配额，可以使用如下命令，马上生效。<br/># quotacheck -auvgm --是不尝试重新挂载文件系统<br/><br/>备注：<br/>1、vsftpd配置参数详细整理<br/>#接受匿名用户<br/>anonymous_enable=YES<br/>#匿名用户login时不询问口令<br/>no_anon_password=YES <br/>#匿名用户主目录<br/>anon_root=(none)<br/>#接受本地用户<br/>local_enable=YES<br/>#本地用户主目录<br/>local_root=(none)<br/>#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录<br/>deny_email_enable=YES<br/>#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录<br/>check_shell=YES<br/>#若启用此选项,userlist_deny选项才被启动<br/>userlist_enable=YES<br/>#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录<br/>userlist_deny=NO<br/>#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)<br/>passwd_chroot_enable=NO<br/>#定义匿名登入的使用者名称。默认值为ftp。<br/>ftp_username=FTP<br/><br/>#################用户权限控制###############<br/>#可以上传(全局控制).<br/>write_enable=YES<br/>#本地用户上传文件的umask<br/>local_umask=022<br/>#上传文件的权限配合umask使用<br/>#file_open_mode=0666<br/>#匿名用户可以上传<br/>anon_upload_enable=NO<br/>#匿名用户可以建目录<br/>anon_mkdir_write_enable=NO<br/>匿名用户其它的写权利(更改权限?)<br/>anon_other_write_enable=NO<br/>如果设为YES，匿名登入者会被允许下载可阅读的档案。默认值为YES。<br/>anon_world_readable_only=YES<br/>#如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名<br/>#guest_enable=NO<br/>所有匿名上传的文件的所属用户将会被更改成chown_username<br/>chown_uploads=YES<br/>匿名上传文件所属用户名<br/>chown_username=lightwiter<br/>#如果启动这项功能，则所有列在chroot_list_file之中的使用者不能更改根目录<br/>chroot_list_enable=YES<br/>#允许使用&#34;async ABOR&#34;命令,一般不用,容易出问题<br/>async_abor_enable=YES<br/>管控是否可用ASCII 模式上传。默认值为NO。<br/>ascii_upload_enable=YES<br/>#管控是否可用ASCII 模式下载。默认值为NO。<br/>ascii_download_enable=YES<br/>#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限，当vsftpd 不需要file system 的权限时，就会将使用者限制在此数据夹中。默认值为/usr/share/empty<br/>secure_chroot_dir=/usr/share/empty<br/><br/>###################超时设置##################<br/>#空闲连接超时<br/>idle_session_timeout=600<br/>#数据传输超时<br/>data_connection_timeout=120<br/>#PAVS请求超时<br/>ACCEPT_TIMEOUT=60<br/>#PROT模式连接超时<br/>connect_timeout=60<br/><br/>################服务器功能选项###############<br/>#开启日记功能<br/>xferlog_enable=YES<br/>#使用标准格式<br/>xferlog_std_format=YES<br/>#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.<br/>#log_ftp_protocol=NO<br/>#允许使用pasv模式<br/>pasv_enable=YES<br/>#关闭安全检查,小心呀.<br/>#pasv_promiscuous+NO<br/>#允许使用port模式<br/>#port_enable=YES<br/>#关闭安全检查<br/>#prot_promiscuous<br/>#开启tcp_wrappers支持<br/>tcp_wrappers=YES<br/>#定义PAM 所使用的名称，预设为vsftpd。<br/>pam_service_name=vsftpd<br/>#当服务器运行于最底层时使用的用户名<br/>nopriv_user=nobody<br/>#使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)<br/>pasv_address=(none)<br/><br/>#################服务器性能选项##############<br/>#是否能使用ls -R命令以防止浪费大量的服务器资源<br/>#ls_recurse_enable=YES<br/>#是否使用单进程模式<br/>#one_process_model<br/>#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式<br/>listen=YES<br/>#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时，预设会出现拥有者的UID，而不是该档案拥有者的名称。若是希望出现拥有者的名称，则将此功能开启。<br/>text_userdb_names=NO<br/>#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果<br/>use_localtime=NO<br/>#测试平台优化<br/>#use_sendfile=YES<br/><br/>################信息类设置################<br/>#login时显示欢迎信息.如果设置了banner_file则此设置无效<br/>ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站.<br/>#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容<br/>dirmessage_enable=YES<br/>#显示会话状态信息,关!<br/>#setproctitle_enable=YES<br/><br/>############## 文件定义 ##################<br/>#定义不能更改用户主目录的文件<br/>chroot_list_file=/etc/vsftpd/vsftpd.chroot_list<br/>#定义限制/允许用户登录的文件<br/>userlist_file=/etc/vsftpd/vsftpd.user_list<br/>#定义登录信息文件的位置<br/>banner_file=/etc/vsftpd/banner<br/>#禁止使用的匿名用户登陆时作为密码的电子邮件地址<br/>banned_email_file=/etc/vsftpd.banned_emails<br/>#日志文件位置<br/>xferlog_file=/var/log/vsftpd.log<br/>#目录信息文件<br/>message_file=.message<br/><br/>############## 目录定义 #################<br/>#定义用户配置文件的目录<br/>user_config_dir=/etc/vsftpd/userconf<br/>#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.<br/>local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk<br/>#匿名用户登陆后的根目录<br/>anon_root=/var/ftp<br/><br/>#############用户连接选项#################<br/>#可接受的最大client数目<br/>max_clients=100<br/>#每个ip的最大client数目<br/>max_per_ip=5<br/>#使用标准的20端口来连接ftp<br/>connect_from_port_20=YES<br/>#绑定到某个IP,其它IP不能访问<br/>listen_address=192.168.0.2<br/>#绑定到某个端口<br/>#listen_port=2121<br/>#数据传输端口<br/>#ftp_data_port=2020<br/>#pasv连接模式时可以使用port 范围的上界，0 表示任意。默认值为0。<br/>pasv_max_port=0<br/>#pasv连接模式时可以使用port 范围的下界，0 表示任意。默认值为0。<br/>pasv_min_port=0<br/><br/>##############数据传输选项#################<br/>#匿名用户的传输比率(b/s)<br/>anon_max_rate=51200<br/>#本地用户的传输比率(b/s)<br/>local_max_rate=5120000<br/><br/>########################################<br/>别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户<br/>附: 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 未执行请求的的命令，名称不正确。<br/><br/>2、VSFTPD官方资料翻译版（不完整版）---摘自中国Linux公社<br/>翻译了部分VSFTPD的官方资料。 <br/>有些知道是什么意思，但难于翻译。有些涉及专业的知识，我自己也不懂，只好按字面翻译。有些我自己看不懂，只好尽量翻译。 <br/>如果看了其中一部分觉得糊涂，请参阅官方文挡。<br/><br/>安装篇 <br/>=============== <br/>这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始，建立和安装并运行VSFTPD。<br/><br/>1）建立VSFTPD <br/>先进入解压.tar.gz文件后产生的目录内。如下： <br/>cd vsftpd-2.0.1<br/><br/>编辑&#34;builddefs.h&#34;以操作compile-time设定。（tcp_wrappers build,等）<br/><br/>输入make,回车（如果它不工作请发邮件通知我 . <br/>这将产生一个二进制文件，你可以验证一下。如下： <br/>[chris@localhost vsftpd]$ ls -l vsftpd <br/>-rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd<br/><br/>2）满足VSFTPD安装所需的一些条件 <br/>VSFTPD默认设置需要一个&#34;nobody&#34;用户，如果这个用户不存在，那么添加它。如下： <br/>[root@localhost root]# useradd nobody <br/>useradd: user nobody exists<br/><br/>VSFTPD默认设置需要一个空目录：/usr/share/empty.增加这个目录，如果它还不存在的话。如下： <br/>[root@localhost root]# mkdir /usr/share/empty/ <br/>mkdir: cannot cr&#101;ate directory `/usr/share/empty: File exists<br/><br/>如果容许匿名用户（anonymous)，那么你将需要一个&#34;ftp&#34;用户和其home目录（这个home目录不属于“ftp”用户，而且“ftp&#34;用户也对其没有写权限）在你的系统中存在。 <br/>以下命令用来创建一个&#34;ftp&#34;用户，如果它还不存在的话。 <br/>[root@localhost root]# mkdir /var/ftp/ <br/>[root@localhost root]# useradd -d /var/ftp ftp<br/><br/>（即使你的&#34;ftp&#34;用户已经存在，完成以下这两步也是很有好处的：） <br/>[root@localhost root]# chown root.root /var/ftp <br/>[root@localhost root]# chmod og-w /var/ftp<br/><br/>3）安装VSFTPD的配置、执行和帮助文件。 <br/>输入&#34;make install&#34;后会将二进制文件和帮助文件拷贝到适当的目录。 <br/>你也可以手工拷贝这些文件： <br/>cp vsftpd /usr/local/sbin/vsftpd <br/>cp vsftpd.conf.5 /usr/local/man/man5 <br/>cp vsftpd.8 /usr/local/man/man8<br/><br/>&#34;make install&#34;不会拷贝默认的配置文件，所以建议你手工拷贝： <br/>cp vsftpd.conf /etc <br/>daidong注：根据你系统版本的不同，也可能是 cp vsftpd.conf /etc/vsftpd<br/><br/>4)测试 （无inetd影响） <br/>VSFTPD能运行在独立模式（standalone)或者通过inetd(xinetd)来启动。 <br/>你能通过inetd来运行vsftpd以更好地控制它。但我们在首次运行时不这么做，以便检查系统是否现在配置正常。 <br/>编辑/etc/vsftpd.conf（daidong注：也可能是/etc/vsftpd/vsftpd.conf)，并在最下面加入以下这一行： <br/>listen=YES<br/><br/>这将告诉VSFTPD不要从inetd启动。 <br/>OK，现在试着启动FTP。 <br/>以ROOT登录。 <br/>确定你没有运行其他FTP服务（否则VSFTPD不能占用FTP所需的21端口）。 <br/>运行那个二进制文件，如下： <br/>[root@localhost root]# /usr/local/sbin/vsftpd &amp; <br/>[1] 2104<br/><br/>如果一切正常，那么你将连上FTP服务器，如下： <br/>[chris@localhost chris]$ ftp localhost <br/>Connected to localhost (127.0.0.1). <br/>220 (vsFTPd 1.1.1) <br/>Name (localhost:chris): ftp <br/>331 Please specify the password. <br/>Password: <br/>230 Login successful. Have fun. <br/>Remote system type is UNIX. <br/>Using binary mode to transfer files. <br/>ftp&gt;; ls <br/>227 Entering Passive Mode (127,0,0,1,229,133) <br/>150 Here comes the directory listing. <br/>d--x--x--x 2 0 0 4096 Jan 14 2002 bin <br/>d--x--x--x 2 0 0 4096 Apr 21 20:52 etc <br/>drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib <br/>drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub <br/>226 Directory send OK. <br/>ftp&gt;;<br/><br/>5）从inetd或者类似方式启动（官方推荐使用standalone方式） <br/>你也许想通过inetd或者类似方式启动VSFTPD，因为这能给你更多的感受。例如xinetd就有很多的设置。 <br/>（注意：VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置）。<br/><br/>如果使用标准的&#34;inetd&#34;,你需要编辑/etc/inetd.conf,在其中加入以下一行： <br/>ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd<br/><br/>（确定你删除或者注释掉一些已存在的FTP服务配置行。如果你没有安装tcp_wrappers,或者不想使用它们，那么请去掉/usr/sbin/tcpd part).<br/><br/>inetd需要指定并重新载入它的配置文件： <br/>kill -SIGHUP `pidof inetd`<br/><br/>如果你想使用&#34;xinetd&#34;,请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的xinetd功能。<br/><br/>6）为本地登录配置PAM文件（可选） <br/>如果你在一台激活了PAM的设备上运行VSFTPD，你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。 <br/>（注：如果你的PAM版本比较老，那么这个文件也许是 /etc/pam.conf).<br/><br/>做为一个标准设置，你可以拷贝一个已提供的范例文件，如下： <br/>cp RedHat/vsftpd.pam /etc/pam.d/ftp<br/><br/>7）自定义你的配置文件 <br/>完成以上的配置后，建议你安装一个配置文件。默认的配置文件位置是/etc/vsftpd.conf. 在VSFTPD软件分发包内有一个范例配置文件。 <br/>你可以拷贝其为/etc/vsftpd.conf以做进一步修改。 <br/>cp vsftpd.conf /etc <br/>（daidong注：也可能是 cp vsftpd.conf /etc/vsftpd ).<br/><br/>这个默认配置即不容许本地登录也不容许匿名用户上传，也许你希望更改这个配置。<br/><br/><br/>其它 <br/>=================== <br/>测试平台 （已通过） <br/>-流行的，功能完善的平台都能测试通过。在以下平台的较新版本，VSFTPD工作得很好。在其大部分较早的版本下，也运行正常。 <br/>- RedHat Linux <br/>- RedHat Enterprise Linux <br/>- Solaris / GNU tools (Solaris 8 o&#114; newer) <br/>- SuSE Linux <br/>- Debian Linux <br/>- OpenBSD <br/>- FreeBSD <br/>- NetBSD <br/>- HP-UX / GNU tools <br/>- IRIX / GNU tools <br/>- Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)<br/>虚拟用户1 <br/>============= <br/>这个例子示范了如何为虚拟用户设置VSFTPD/PAM。 <br/>虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全，因为这个账号只能用于FTP服务器。<br/><br/>虚拟用户经常用来提供给不大可信任的用户访问某些资源，而这些资源通常是其他普通用户不能访问的。<br/><br/>1）创建虚拟用户数据库 <br/>我们将使用pam_userdb来认证虚拟用户。这需要提供一个“db&#34;格式（一种通用数据库格式）的用户名/密码文件。 <br/>创建一个&#34;db&#34;格式的文件，首先要创建一个标准文本文件，并把用户名，密码以竖直排列方式输入。如logins.txt： <br/>tom <br/>foo <br/>fired <br/>bar <br/>这个例子中,tom用户的密码是foo.fired用户的密码是bar. <br/>以ROOT登录，创建一个数据库文件，如下： <br/>db_load -T -t hash -f logins.txt /etc/vsftpd_login.db <br/>（这要求berkeley db程序已经安装） <br/>(注：一些系统也许安装了多个版本的&#34;db&#34;,所以某些情况下你可能使用&#34;db3_load&#34;才是正确的。对于一些 Debian系统就是这样。 <br/>关键在于要让pam_userdb相信它的登录数据库是哪一个db版本所产生（一般都是db3，尽管你的系统里可能安装的是db4).）<br/><br/>这将创建/etc/vsftpd_login.db文件。显然，你希望设定这个文件的权限： <br/>chmod 600 /etc/vsftpd_login.db<br/><br/>要了解更多关于维护你的登录数据库的信息，请在&#34;berkeley DB&#34;察看相关文档： <br/><a href="http://www.sleepycat.com/docs/utility/index.html" target="_blank" rel="external">http://www.sleepycat.com/docs/utility/index.html</a><br/><br/>2）用你的新数据库创建一个PAM文件 <br/>请参考范例vsftpd.pam，它包含2行： <br/>auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login <br/>account required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br/><br/>这是告诉PAM用新的数据库去验证用户。把这个PAM文件拷贝到PAM目录，一般是/etc/pam.d <br/>cp vsftpd.pam /etc/pam.d/ftp<br/><br/>3)为虚拟用户设置home目录 <br/>useradd -d /home/ftpsite virtual <br/>ls -ld /home/ftpsite <br/>(which should give): <br/>drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite<br/><br/>我们已经创建了一个名叫&#34;virtual&#34;的用户，home目录是&#34;/home/ftpsite&#34;. <br/>我们拷贝一些东西到这个下载目录： <br/>cp /etc/hosts /home/ftpsite <br/>chown virtual.virtual /home/ftpsite/hosts<br/><br/>4）创建你的vsftpd.conf配置文件 <br/>请参考这个目录下的例子。让我们一行行地看一看这些配置： <br/>anonymous_enable=NO <br/>local_enable=YES<br/><br/>安全起见，屏蔽了匿名用户，只启用了非匿名用户（即虚拟用户使用的账号）<br/><br/>write_enable=NO <br/>anon_upload_enable=NO <br/>anon_mkdir_write_enable=NO <br/>anon_other_write_enable=NO<br/><br/>为了安全请确认这几个配置，这将关闭写的权限。<br/><br/>chroot_local_user=YES<br/><br/>这将把虚拟用户锁定在我们在以上设置的/home/ftpsite目录内。<br/><br/>guest_enable=YES <br/>guest_username=virtual<br/><br/>guest_enable非常重要-它激活了虚拟用户！而guest_username说明所有的虚拟用户都对应我们在上面设置的真实用户：“virtual&#34;. <br/>这同时确定了虚拟用户在文件系统中的位置，也就是说，虚拟用户的home目录即&#34;virtual&#34;用户的home目录：/home/ftpsite。<br/><br/>listen=YES <br/>listen_port=10021<br/><br/>这让VSFTPD以独立模式(standalone)运行，而不是从inetd方式启动。也就是说，你运行VSFTPD可执行文件就启动了FTP服务。 <br/>同时也让VSFTPD启用非标准端口10021来监听FTP请求（FTP一般使用21端口）。<br/><br/>pasv_min_port=30000 <br/>pasv_max_port=30999<br/><br/>这设定了被动模式的FTP请求端口。当你配置了一个防火墙的时候，这个配置就很好用。<br/><br/>拷贝范例配置文件到/etc <br/>cp vsftpd.conf /etc/ <br/>(daidong注：也可能是/etc/vsftpd)<br/><br/>5)启动VSFTPD <br/>到VSFTPD二进制文件所在的目录，输入： <br/>./vsftpd<br/><br/>如果一切正常，这个命令将生效。否则，你将会看到一些错误信息的反馈。<br/><br/>6）测试 <br/>启动另一个会话。（或者ctrl-z，再输入&#34;bg&#34;,让VSFTPD在后台运行）。 <br/>这是一个FTP会话的例子：<br/><br/>ftp localhost 10021 <br/>Connected to localhost (127.0.0.1). <br/>220 ready, dude (vsFTPd 1.1.0: beat me, break me) <br/>Name (localhost:chris): tom <br/>331 Please specify the password. <br/>Password: <br/>230 Login successful. Have fun. <br/>Remote system type is UNIX. <br/>Using binary mode to transfer files. <br/>ftp&gt;; pwd <br/>257 &#34;/&#34; <br/>ftp&gt;; ls <br/>227 Entering Passive Mode (127,0,0,1,117,135) <br/>150 Here comes the directory listing. <br/>226 Transfer done (but failed to open directory). <br/>ftp&gt;; size hosts <br/>213 147 <br/>ftp&gt;;<br/><br/>注释： <br/>密码是&#34;foo&#34; <br/>出现”failed to open directory“的话，别担心。这是因为/home/ftpsite目录不容许被任意浏览。 <br/>（我们可以更改anon_world_readable_only=NO以消除告警，但为了安全，还是保留这个配置）。 <br/>我们能通过size命令看到我们已经访问了被我们拷贝到这里的&#34;hosts&#34;文件。<br/><br/>vsftpd.conf <br/>anonymous_enable=NO <br/>local_enable=YES <br/>write_enable=NO <br/>anon_upload_enable=NO <br/>anon_mkdir_write_enable=NO <br/>anon_other_write_enable=NO <br/>chroot_local_user=YES <br/>guest_enable=YES <br/>guest_username=virtual <br/>listen=YES <br/>listen_port=10021 <br/>pasv_min_port=30000 <br/>pasv_max_port=30999<br/>虚拟用户2 <br/>=============== <br/>这个例子将演示如何扩展“VIRTUAL_USERS”那个范例，从而实现更复杂一点的配置。<br/><br/>让我们假定我们需要2种不同的虚拟用户：一种只能浏览并下载资源，另一种能上传文件并浏览站内资源。<br/><br/>要激活这个设置，我们将使用VSFTPD的强大的“单个用户配置”功能（是V1.1.0后出现的新功能）。<br/><br/>在前一个虚拟用户范例中，我们创建了2个用户-tom和fred. <br/>我们将实现fred有写权限以上传新文件，同时tom只能下载文件。<br/><br/>1）激活单个用户配置功能。 <br/>要激活这个功能，需要增加以下配置行到配置文件：<br/><br/>user_config_dir=/etc/vsftpd_user_conf<br/><br/>并且创建目录：<br/><br/>mkdir /etc/vsftpd_user_conf<br/><br/>2）授予tom读取所有文件和目录的权限 <br/>在上一个例子的最后，我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使/home/ftpsite完全可读，而且被上传的文件也 <br/>赋予了完全可读的权限（daidong注：意思是说这样虚拟用户就能读取所有的文件了）。但实现这个目的的另一个方法是授权tom能下载那些非完全可读的文件。<br/><br/>对于tom,他的配置文件中需要修改一个设置： <br/>anon_world_readable_only:<br/><br/>设为&#34;anon_world_readable_only=NO&#34; &gt;; /etc/vsftpd_user_conf/tom <br/>(daidong注：既把默认配置修改了anon_world_readable_only后，复制到/etc/vsftpd_user_conf下，名字为tom)<br/><br/>验证一下结果-以tom登录，“ls”将返回一个目录列表。如果以fred登录将不会如此。<br/><br/>注意：重启VSFTPD以启用配置文件/etc/vsftpd.conf(高级用户也可以发送SIGHUP给VSFTPD的监听进程).<br/><br/>3)授予freg读取所有文件/目录并创建新文件/目录的权限,但让他不能对已存在的文件/目录进行操作.<br/><br/>echo &#34;anon_world_readable_only=NO&#34; &gt;; /etc/vsftpd_user_conf/fred <br/>echo &#34;write_enable=YES&#34; &gt;;&gt;; /etc/vsftpd_user_conf/fred <br/>echo &#34;anon_upload_enable=YES&#34; &gt;;&gt;; /etc/vsftpd_user_conf/fred<br/><br/>验证一下-以tom登录,将不能上传,而fred就可以. <br/>试图删除一个文件--噢,你们俩都不行!<br/>配置详解 <br/>============= <br/>VSFTPD.CONF.5 <br/>================ <br/>名字 <br/>vsftpd.conf ：VSFTPD的配置文件<br/><br/>描述： <br/>vsftpd.conf 用来控制VSFTPD的各项功能。默认状态下，它的位置是/etc/vsftpd.conf。 <br/>（译者注：也许老的LINUX版本下，配置文件是这个位置，但新的LINUX版本，例如FC2，配置文件是在/etc/vsftpd目录下。 <br/>但是也很可能和安装方式有关，RPM包安装，配置文件是/etc/vsftpd.conf. 源码包安装：/etc/vsftpd/vsftpd.conf.我不确定。 <br/>但以后我不再特别指出了，真累！！） <br/>然而，你也可以通过修改配置行来指定到其它目录。这一点很有用，因为也许你想使用一些高级inetd功能，例如xinetd，在一个多虚拟主机的机器上调用不同的配置文件。<br/><br/>格式 <br/>VSFTPD.conf 的格式非常简单，每行要么是一个注释，要么是一个指令。注释行以#开始并被忽略掉。指令行格式如下： <br/>配置项=参数值 <br/>很重要的一点是，这个格式里不存在任何空格。 <br/>默认的，每一个配置项在配置文件里都占一编辑行，可以被修改。<br/><br/>布尔选项 <br/>参数值的布尔选项可以是： <br/>YES或者NO<br/><br/>allow_anon_ssl <br/>只有ss1_enable激活了才可以启用此项。如果设置为YES，匿名用户将容许使用安全的SSL连接服务器。 <br/>默认值：NO<br/><br/>anon_mkdir_write_enable <br/>如果设为YES，匿名用户将容许在指定的环境下创建新目录。如果此项要生效，那么配置write_enable必须被激活，并且匿名用户必须在其父目录有写权限。 <br/>默认值：NO<br/><br/>anon_other_write_enable <br/>如果设置为YES，匿名用户将被授予较大的写权限，例如删除和改名。一般不建议这么做，除非想完全授权。 <br/>默认值：NO<br/><br/>anon_upload_enable <br/>如果设为YES，匿名用户就容许在指定的环境下上传文件。如果此项要生效，那么配置write_enable必须激活。并且匿名用户必须在相关目录有写权限。 <br/>默认值：NO<br/><br/>anon_world_readable_only <br/>启用的时候，匿名用户只容许下载完全可读的文件，这也就容许了ftp用户拥有对文件的所有权，尤其是在上传的情况下。 <br/>默认值：YES<br/><br/>anonymous_enable <br/>控制是否容许匿名用户登录。如果容许，那么“ftp”和“anonymous”都将被视为“anonymous&#34;而容许登录。 <br/>默认值：YES<br/><br/>ascii_download_enable <br/>启用时，用户下载时将以ASCII模式传送文件。 <br/>默认值：NO<br/><br/>ascii_upload_enable <br/>启用时，用户上传时将以ASCII模式传送文件。 <br/>默认值：NO<br/><br/>async_abor_enable <br/>启用时，一个特殊的FTP命令&#34;async ABOR”将容许使用。只有不正常的FTP客户端要使用这一点。而且，这个功能又难于操作，所以， <br/>默认是把它关闭了。但是，有些客户端在取消一个传送的时候会被挂死（daidong注：估计是客户端无响应了），那你只有启用这个功能才能避免这种情况。 <br/>默认值：NO<br/><br/>background <br/>启用时，并且VSFTPD是“listen”模式启动的（daidong注：就是standalone模式），VSFTPD将把监听进程置于后台。但访问VSFTPD时，控制台将立即被返回到SHELL。 <br/>默认值：NO<br/><br/>check_shell <br/>注意：这个选项只对非PAM结构的VSFTPD才有效。如果关闭，VSFTPD将不检查/etc/shells以判定本地登录的用户是否有一个可用的SHELL。 <br/>默认值：YES<br/><br/>chmod_enable <br/>启用时，将容许使用SITE CHMOD命令。注意，这只能用于本地用户。匿名用户绝不能使用SITE CHMOD。 <br/>默认值：YES<br/><br/>chown_uploads <br/>如果启用，所以匿名用户上传的文件的所有者将变成在chown_username里指定的用户。这对管理FTP很有用，也许也对安全有益。 <br/>默认值：NO<br/><br/>chroot_list_enable <br/>如果激活，你要提供一个用户列表，表内的用户将在登录后被放在其home目录，锁定在虚根下（daidong注：进入FTP后，PWD一下，可以看到当前目录是&#34;/&#34;,这就是虚根。是FTP的根目录，并非FTP服务器系统的根目录）。如果chroot_local_user设为YES后，其含义会发生一点变化。 <br/>在这种情况下，这个列表内的用户将不被锁定在虚根下。 <br/>默认情况下，这个列表文件是/etc/vsftpd.chroot_list, 但你也可以通过修改chroot_list_file来改变默认值。 <br/>默认值：NO<br/><br/>chroot_local_user <br/>如果设为YES，本地用户登录后将被（默认地）锁定在虚根下，并被放在他的home目录下。 <br/>警告： <br/>这个配置项有安全的意味，特别是如果用户有上传权限或者可使用SHELL的话。在你确定的前提下，再启用它。 <br/>注意，这种安全暗示并非只存在于VSFTPD，其实是广泛用于所有的希望把用户锁定在虚根下的FTP软件。 <br/>默认值：NO<br/><br/>connect_from_port_20 <br/>这用来控制服务器是否使用20端口号来做数据传输。为安全起见，有些客户坚持启用。相反，关闭这一项可以让VSFTPD更加大众化。 <br/>默认值：NO （但在范例配置文件中，启用了，即YES）<br/><br/>deny_email_enable <br/>如果激活，你要提供一个关于匿名用户的密码E-MAIL表（daidong注：我们都知道，匿名用户是用邮件地址做密码的）以阻止以这些密码登录的匿名用户。 <br/>默认情况下，这个列表文件是/etc/vsftpd.banner_emails，但你也可以通过设置banned_email_file来改变默认值。 <br/>默认值：NO<br/><br/>dirlist_enable <br/>如果设置为NO，所有的列表命令（daidong注：如ls）都将被返回“permission denied”提示。 <br/>默认值：YES<br/><br/>dirmessage_enable <br/>如果启用，FTP服务器的用户在首次进入一个新目录的时候将显示一段信息。默认情况下，会在这个目录中查找.message文件，但你也可以 <br/>通过更改message_file来改变默认值。 <br/>默认值：NO （但在配置范例文件中启用了它）<br/><br/>download_enable <br/>如果设为NO，下载请求将返回“permission denied”。 <br/>默认值：YES<br/><br/>dual_log_enable <br/>如果启用，两个LOG文件会各自产生，默认的是/var/log/xferlog和/var/log/vsftpd.log。前一个是wu-ftpd格式的LOG，能被通用工具分析。 <br/>后一个是VSFTPD的专用LOG格式。 <br/>默认值: NO<br/><br/>force_dot_files <br/>如果激活，即使客户端没有使用“a”标记，（FTP里）以.开始的文件和目录都会显示在目录资源列表里。但是把&#34;.&#34;和&#34;..&#34;不会显示。(daidong注：即LINUX下 <br/>的当前目录和上级目录不会以‘.’或‘..’方式显示）。 <br/>默认值：NO<br/><br/>force_local_data_ssl <br/>只有在ssl_enable激活后才能启用。如果启用，所有的非匿名用户将被强迫使用安全的SSL登录以在数据线路上收发数据。 <br/>默认值：YES<br/><br/>force_local_logins_ssl <br/>只有在ssl_enable激活后才能启用。如果启用，所有的非匿名用户将被强迫使用安全的SSL登录以发送密码。 <br/>默认值：YES<br/><br/>guest_enable <br/>如果启用，所有的非匿名用户登录时将被视为”游客“，其名字将被映射为guest_username里所指定的名字。 <br/>默认值：NO<br/><br/>hide_ids <br/>如果启用，目录资源列表里所有用户和组的信息将显示为&#34;ftp&#34;. <br/>默认值：NO<br/><br/>listen <br/>如果启用，VSFTPD将以独立模式（standalone)运行，也就是说可以不依赖于inetd或者类似的东东启动。直接运行VSFTPD <br/>的可执行文件一次，然后VSFTPD就自己去监听和处理连接请求了。 <br/>默认值：NO<br/><br/>listen_ipv6 <br/>类似于listen参数的功能，但有一点不同，启用后VSFTPD会去监听IPV6套接字而不是IPV4的。这个设置和listen的设置互相排斥。 <br/>默认值：NO<br/><br/>local_enable <br/>用来控制是否容许本地用户登录。如果启用，/etc/passwd里面的正常用户的账号将被用来登录。 <br/>默认值：NO<br/><br/>log_ftp_protocol <br/>启用后，如果xferlog_std_format没有被激活，所有的FTP请求和反馈信息将被纪录。这常用于调试(debugging)。 <br/>默认值：NO<br/><br/>ls_recurse_enable <br/>如果启用，&#34;ls -R&#34;将被容许使用。这是为了避免一点点安全风险。因为在一个大的站点内，在目录顶层使用这个命令将消耗大量资源。 <br/>默认值：NO<br/><br/>no_anon_password <br/>如果启用，VSFTPD将不会向匿名用户询问密码。匿名用户将直接登录。 <br/>默认值:NO<br/><br/>no_log_lock <br/>启用时，VSFTPD在写入LOG文件时将不会把文件锁住。这一项一般不启用。它对一些工作区操作系统问题，如Solaris / Veritas文件系统共存时有用。 <br/>因为那在试图锁定LOG文件时，有时候看上去象被挂死（无响应）了。（daidong注：这我也不是很理解。所以翻译未必近乎原意。原文如下：It exists to workaround <br/>operating system bugs such as the Solaris / Veritas filesystem combination <br/>which has been observed to sometimes exhibit hangs trying to lock log files.） <br/>默认值：NO<br/><br/>one_process_model <br/>如果你的LINUX核心是2.4的，那么也许能使用一种不同的安全模式，即一个连接只用一个进程。只是一个小花招，但能提高FTP的性能。请确定需要后再启用它，而且也请确定你的 <br/>站点是否会有大量的人同时访问。 <br/>默认值：NO<br/><br/>passwd_chroot_enable (daidong注：这段自己看，无语...) <br/>if enabled, along with <br/>.BR chroot_local_user <br/>, then a chroot() jail location may be specified on a per-user basis. Each <br/>users jail is derived from their home directory string in /etc/passwd. The <br/>occurrence of /./ in the home directory string denotes that the jail is at that <br/>particular location in the path. <br/>默认值：NO<br/><br/>pasv_enable <br/>如果你不想使用被动方式获得数据连接，请设为NO。 <br/>默认值：YES<br/><br/>pasv_promiscuous <br/>如果你想关闭被动模式安全检查（这个安全检查能确保数据连接源于同一个IP地址）的话，设为YES。确定后再启用它（daidong注：原话是：只有你清楚你在做什么时才启用它！） <br/>合理的用法是：在一些安全隧道配置环境下，或者更好地支持FXP时（才启用它）。 <br/>默认值：NO<br/><br/>port_enable <br/>如果你想关闭以端口方式获得数据连接时，请关闭它。 <br/>默认值：YES<br/><br/>port_promiscuous <br/>如果你想关闭端口安全检查（这个检查可以确保对外的(outgoing)数据线路只通向客户端）时，请关闭它。确认后再做！ <br/>默认值：NO<br/><br/>run_as_launching_user <br/>如果你想让一个用户能启动VSFTPD的时候，可以设为YES。当ROOT用户不能去启动VSFTPD的时候会很有用（daidong注：应该不是说ROOT用户没有权限启动VSFTPD， <br/>而是因为别的，例如安全限制，而不能以ROOT身份直接启动VSFTPD）。强烈警告！！别启用这一项，除非你完全清楚你在做什么（daidong:无语....)！！！随意地启动这一项会导致 <br/>非常严重的安全问题，特别是VSFTPD没有或者不能使用虚根技术来限制文件访问的时候（甚至VSFTPD是被ROOT启动的）。有一个愚蠢的替代方案是启用deny_file，将其设置为{/*,*..*}等， <br/>但其可靠性却不能和虚根相比，也靠不住。 <br/>如果启用这一项，其他配置项的限制也会生效。例如，非匿名登录请求，上传文件的所有权的转换，用于连接的20端口和低于1024的监听端口将不会工作。其他一些配置项也可能被影响。 <br/>默认值:NO<br/><br/>secure_email_list_enable <br/>如果你想只接受以指定E-MAIL地址登录的匿名用户的话，启用它。这一般用来在不必要用虚拟用户的情况下，以较低的安全限制去访问较低安全级别的资源。如果启用它，匿名用户除非 <br/>用在email_password_file里指定的E-MAIL做为密码，否则不能登录。这个文件的格式是一个密码一行，而且没有额外的空格（daidong注：whitespace,译为空格，不知道是否正确）。 <br/>默认的文件名是：/etc/vsftpd.email_passwords. <br/>默认值:NO<br/><br/>session_support <br/>这将配置是否让VSFTPD去尝试管理登录会话。如果VSFTPD管理会话，它会尝试并更新utmp和wtmp。它也会打开一个pam会话（pam_session)，直到LOGOUT才会关闭它，如果使用PAM进行认证的话。 <br/>如果你不需要会话纪录，或者想VSFTPD运行更少的进程，或者让它更大众化，你可以关闭它。 <br/>注：utmp和wtmp只在有PAM的环境下才支持。 <br/>默认值:NO<br/><br/>setproctitle_enable <br/>如果启用，VSFTPD将在系统进程列表中显示会话状态信息。换句话说，进程名字将变成VSFTPD会话当前正在执行的动作（等待，下载等等）。为了安全目的，你可以关闭这一项。 <br/>默认值:NO<br/><br/>ssl_enable <br/>如果启用，vsftpd将启用openSSL，通过SSL支持安全连接。这个设置用来控制连接（包括登录）和数据线路。同时，你的客户端也要支持SSL才行。 <br/>注意：小心启用此项.VSFTPD不保证OpenSSL库的安全性。启用此项，你必须确信你安装的OpenSSL库是安全的。 <br/>默认值:NO<br/><br/>ssl_sslv2 <br/>要激活ssl_enable才能启用它。如果启用，将容许SSL V2协议的连接。TLS V1连接将是首选。 <br/>默认值:NO<br/><br/>ssl_sslv3 <br/>要激活ssl_enable才能启用它。如果启用，将容许SSL V３协议的连接。TLS V1连接将是首选。 <br/>默认值:NO<br/><br/>ssl_tlsv1 <br/>要激活ssl_enable才能启用它。如果启用，将容许TLS V1协议的连接。TLS V1连接将是首选。 <br/>默认值:YES<br/><br/>syslog_enable <br/>如果启用，系统log将取代vsftpd的log输出到/var/log/vsftpd.log.FTPD的了log工具将不工作。 <br/>默认值:NO<br/><br/>tcp_wrappers <br/>如果启用，vsftpd将被tcp_wrappers所支持。进入的(incoming）连接将被tcp_wrappers访问控制所反馈。如果tcp_wrappers设置了 <br/>VSFTPD_LOAD_CONF环境变量，那么vsftpd将尝试调用这个变量所指定的配置。 <br/>默认值:NO<br/><br/>text_userdb_names <br/>默认情况下，在文件列表中，数字ID将被显示在用户和组的区域。你可以编辑这个参数以使其使用数字ID变成文字。为了保证FTP性能，默认 <br/>情况下，此项被关闭。 <br/>默认值:NO<br/><br/>tilde_user_enable <br/>如果启用，vsftpd将试图解析类似于~chris/pics的路径名（一个&#34;~&#34;(tilde)后面跟着个用户名）。注意，vsftpd有时会一直解析路径名&#34;~&#34;和&#34;~/&#34;（在这里，～被解析成内部登录目录）。 <br/>～用户路径（～user paths)只有在当前虚根下找到/etc/passwd文件时才被解析。 <br/>默认值:NO<br/><br/>use_localtime <br/>如果启用，vsftpd在显示目录资源列表的时候，在显示你的本地时间。而默认的是显示GMT（格林尼治时间）。通过MDTM FTP命令来显示时间的话也会被这个设置所影响。 <br/>默认值:NO<br/><br/>use_sendfile <br/>一个内部设定，用来测试在你的平台上使用sendfile()系统呼叫的相关好处（benefit). <br/>默认:YES<br/><br/>userlist_deny <br/>这个设置在userlist_enable被激活后能被验证。如果你设置为NO，那么只有在userlist_file里明确列出的用户才能登录。 <br/>如果是被拒绝登录，那么在被询问密码前，用户就将被系统拒绝。 <br/>默认值:YES<br/><br/>userlist_enable <br/>如果启用，vsftpd将在userlist_file里读取用户列表。如果用户试图以文件里的用户名登录，那么在被询问用户密码前，他们就将被系统拒绝。 <br/>这将防止明文密码被传送。参见userlist_deny。 <br/>默认值:NO<br/><br/>virtual_use_local_privs <br/>如果启用，虚拟用户将拥有和本地用户一样的权限。默认情况下，虚拟用户就拥有和匿名用户一样的权限，而后者往往有更多的限制（特别是写权限）。 <br/>默认值:NO<br/><br/>write_enable <br/>这决定是否容许一些FTP命令去更改文件系统。这些命令是STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE。 <br/>默认值:NO<br/><br/>xferlog_enable <br/>如果启用，一个log文件将详细纪录上传和下载的信息。默认情况下，这个文件是/var/log/vsftpd.log，但你也可以通过更改vsftpd_log_file来指定其默认位置。 <br/>默认值:NO (但在范例配置文件中，启用了这一项）<br/><br/>xferlog_std_format <br/>如果启用，log文件将以标准的xferlog格式写入（wu-ftpd使用的格式)，以便于你用现有的统计分析工具进行分析。但默认的格式具有更好的可读性。默认情况下，log文件是在/var/log/xferlog。 <br/>但是，你可以通过修改xferlog_file来指定新路径。 <br/>默认值:NO<br/><br/>＝＝＝＝＝＝ <br/>数字选项 <br/>以下是数字配置项。这些项必须设置为非负的整数。为了方便umask设置，容许输入八进制数，那样的话，数字必须以０开始。<br/><br/>accept_timeout <br/>超时，以秒为单位，设定远程用户以被动方式建立连接时最大尝试建立连接的时间。 <br/>默认值:60<br/><br/>anon_max_rate <br/>对于匿名用户，设定容许的最大传送速率，单位：字节/秒。 <br/>默认值:0　（无限制）<br/><br/>anon_umask <br/>为匿名用户创建的文件设定权限。注意：如果你想输入８进制的值，那么其中的０不同于１０进制的０。 <br/>默认值：０７７<br/><br/>connect_timeout <br/>超时。单位：秒。是设定远程用户必须回应PORT类型数据连接的最大时间。 <br/>默认值：６０<br/><br/>data_connection_timeout <br/>超时，单位：秒。设定数据传输延迟的最大时间。时间一到，远程用户将被断开连接。 <br/>默认值：３００<br/><br/>file_open_mode <br/>对于上传的文件设定权限。如果你想被上传的文件可被执行，umask要改成０７７７。 <br/>默认值：０６６６<br/><br/>ftp_data_port <br/>设定PORT模式下的连接端口（只要connect_from_port_20被激活）。 <br/>默认值：２０<br/><br/>idle_session_timeout <br/>超时。单位：秒。设置远程客户端在两次输入FTP命令间的最大时间。时间一到，远程客户将被断开连接。 <br/>默认值：３００<br/><br/>listen_port <br/>如果vsftpd处于独立运行模式，这个端口设置将监听的FTP连接请求。 <br/>默认值：２１<br/><br/>local_max_rate <br/>为本地认证用户设定最大传输速度，单位：字节／秒。 <br/>默认值：０（无限制）<br/><br/>local_umask <br/>设置本地用户创建的文件的权限。注意：如果你想输入８进制的值，那么其中的０不同于１０进制的０。 <br/>默认值：０７７<br/><br/>max_clients <br/>如果vsftpd运行在独立运行模式，这里设置了容许连接的最大客户端数。再后来的用户端将得到一个错误信息。 <br/>默认值：０（无限制）<br/><br/>max_per_ip <br/>如果vsftpd运行在独立运行模式，这里设置了容许一个ＩＰ地址的最大接入客户端。如果超过了最大限制，将得到一个错误信息。 <br/>默认值：０（无限制）<br/><br/>pasv_max_port <br/>指定为被动模式数据连接分配的最大端口。可用来指定一个较小的范围以配合防火墙。 <br/>默认值：０（使用任何端口）<br/><br/>pasv_min_port <br/>指定为被动模式数据连接分配的最小端口。可用来指定一个较小的范围以配合防火墙。 <br/>默认值：０（使用任何端口）<br/><br/>trans_chunk_size <br/>你一般不需要改这个设置。但也可以尝试改为如８１９２去减小带宽限制的影响。 <br/>默认值：０（让vsftpd自行选择）<br/><br/>＝＝＝＝＝＝＝＝＝＝＝ <br/>STRING 配置项 <br/>以下是STRING 配置项<br/><br/>anon_root <br/>设置一个目录，在匿名用户登录后，vsftpd会尝试进到这个目录下。如果失败则略过。 <br/>默认值：无<br/><br/>banned_email_file <br/>deny_email_enable启动后，匿名用户如果使用这个文件里指定的E-MAIL密码登录将被拒绝。 <br/>默认值：/etc/vsftpd.banned_emails<br/><br/>banner_file <br/>设置一个文本，在用户登录后显示文本内容。如果你设置了ftpd_banner，ftpd_banner将无效。 <br/>默认值：无<br/><br/>chown_username <br/>改变匿名用户上传的文件的所有者。需设定chown_uploads。 <br/>默认值：ＲＯＯＴ<br/><br/>chroot_list_file <br/>这个项提供了一个本地用户列表，表内的用户登录后将被放在虚根下，并锁定在home目录。这需要chroot_list_enable项被启用。 <br/>如果chroot_local_user项被启用，这个列表就变成一个不将列表里的用户锁定在虚根下的用户列表了。 <br/>默认值：/etc/vsftpd.chroot_list<br/><br/>cmds_allowed <br/>以逗号分隔的方式指定可用的FTP命令（post　login. USER, PASS and QUIT 是始终可用的命令）。 <br/>其他命令将被屏蔽。这是一个强有力的locking down一个FTP服务器的手段。例如：cmds_allowed=PASV,RETR,QUIT <br/>默认值：无<br/><br/>deny_file <br/>这可以设置一个文件名或者目录名式样以阻止在任何情况下访问它们。并不是隐藏它们，而是拒绝任何试图对它们进行的操作（下载，改变目录层， <br/>和其他有影响的操作）。这个设置很简单，而且不会用于严格的访问控制－文件系统权限将优先生效。然而，这个设置对确定的虚拟用户设置很有用。 <br/>特别是如果一个文件能多个用户名访问的话（可能是通过软连接或者硬连接），那就要拒绝所有的访问名。 <br/>建议你为使用文件系统权限设置一些重要的安全策略以获取更高的安全性。如deny_file={*.mp3,*.mov,.private} <br/>默认值：无<br/><br/>dsa_cert_file <br/>这个设置为SSL加密连接指定了DSA证书的位置。 <br/>默认值：无（有一个RSA证书就够了）<br/><br/>email_password_file <br/>在设置了secure_email_list_enable后，这个设置可以用来提供一个备用文件。 <br/>默认值：/etc/vsftpd.email_passwords<br/><br/>ftp_username <br/>这是用来控制匿名FTP的用户名。这个用户的home目录是匿名FTP区域的根。 <br/>默认值：ftp<br/><br/>ftpd_banner <br/>当一个连接首次接入时将现实一个欢迎界面。 <br/>默认值：无（默认的界面会被显示）<br/><br/>guest_username <br/>参见相关设置guest_enable。这个设置设定了游客进入后，其将会被映射的名字。 <br/>默认：ftp<br/><br/>hide_file <br/>设置了一个文件名或者目录名列表，这个列表内的资源会被隐藏，不管是否有隐藏属性。但如果用户知道了它的存在， <br/>将能够对它进行完全的访问。hide_file里的资源和符合hide_file指定的规则表达式的资源将被隐藏。vsftpd的 <br/>规则表达式很简单，例如hide_file={*.mp3,.hidden,hide*,h?} <br/>默认值：无<br/><br/>listen_address <br/>如果vsftpd运行在独立模式下，本地接口的默认监听地址将被这个设置代替。 <br/>需要提供一个数字化的地址。 <br/>默认值：无<br/><br/>listen_address6 <br/>如果vsftpd运行在独立模式下，要为IPV6指定一个监听地址（如果listen_ipv6被启用的话）。 <br/>需要提供一个IPV6格式的地址。 <br/>默认值：无<br/><br/>local_root <br/>设置一个本地（非匿名）用户登录后，vsftpd试图让他进入到的一个目录。如果失败，则略过。 <br/>默认值：无<br/><br/>message_file <br/>当进入一个新目录的时候，会查找这个文件并显示文件里的内容给远程用户。dirmessage_enable需启用。 <br/>默认值：.message<br/><br/>nopriv_user <br/>这是vsftpd做为完全无特权的用户的名字。这是一个专门的用户，比nobody更甚。用户nobody往往用来在一些机器上做一些重要的事情。 <br/>默认值：nobody<br/><br/>pam_service_name <br/>设定vsftpd将要用到的PAM服务的名字。 <br/>默认值:ftp<br/><br/>pasv_address <br/>当使用PASV命令时，vsftpd会用这个地址进行反馈。需要提供一个数字化的IP地址。 <br/>默认值：无（地址将取自进来（incoming)的连接的套接字）<br/><br/>rsa_cert_file <br/>这个设置指定了SSL加密连接需要的RSA证书的位置。 <br/>默认值：/usr/share/ssl/certs/vsftpd.pem<br/><br/>secure_chroot_dir <br/>这个设置指定了一个空目录，这个目录不容许ftp　user写入。在vsftpd不希望文件系统被访问时，目录为安全的虚根所使用。 <br/>默认值： /usr/share/empty<br/><br/>ssl_ciphers <br/>这个设置将选择vsftpd为加密的SSL连接所用的SSL密码。详细信息参见ciphers。 <br/>默认值：DES-CBC3-SHA<br/><br/>user_config_dir <br/>这个强大的设置容许覆盖一些在手册页中指定的配置项（基于单个用户的）。用法很简单，最好结合范例。如果你把user_config_dir <br/>改为/etc/vsftpd_user_conf，那么以chris登录，vsftpd将调用配置文件/etc/vsftpd_user_conf/chris。 <br/>默认值：无<br/><br/>user_sub_token <br/>这个设置将依据一个模板为每个虚拟用户创建home目录。例如，如果真实用户的home目录通过guest_username为/home/virtual/$USER 指定， <br/>并且user_sub_token设置为 $USER ，那么虚拟用户fred登录后将锁定在/home/virtual/fred下。 <br/>默认值：无<br/><br/>userlist_file <br/>当userlist_enable被激活，系统将去这里调用文件。 <br/>默认值：/etc/vsftpd.user_list<br/><br/>vsftpd_log_file <br/>只有xferlog_enable被设置，而xferlog_std_format没有被设置时，此项才生效。这是被生成的vsftpd格式的log文件的名字。 <br/>dual_log_enable和这个设置不能同时启用。如果你启用了syslog_enable，那么这个文件不会生成，而只产生一个系统log. <br/>默认值：/var/log/vsftpd.log<br/><br/>xferlog_file <br/>这个设置是设定生成wu-ftpd格式的log的文件名。只有启用了xferlog_enable和xferlog_std_format后才能生效。 <br/>但不能和dual_log_enable同时启用。 <br/>默认值：/var/log/xferlog<br/><br/>3、未完成的实验<br/>his example should quickly show you the possibilites of per-IP configuration<br/>with vsftpds tcp_wrappers integration. This is new with v1.1.3.<br/><br/>To use this, you need vsftpd built with tcp_wrappers! This is accomplished<br/>by editing &#34;builddefs.h&#34; and changing<br/><br/>#undef VSF_BUILD_TCPWRAPPERS<br/>to<br/>#define VSF_BUILD_TCPWRAPPERS<br/><br/>And then rebuild. If you are lucky your vendor will have shipped the vsftpd<br/>binary with this already done for you.<br/><br/>Next, to enable tcp_wrappers integration, you need this in your vsftpd.conf:<br/><br/>tcp_wrappers=YES<br/><br/>And youll need a tcp_wrappers config file. An example one is supplied in this<br/>directory: hosts.allow. It lives at /etc/hosts.allow.<br/><br/>Lets have a look at the example:<br/><br/>vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf<br/>vsftpd: 192.168.1.4: DENY<br/><br/>The first line:<br/>If a client connects from 192.168.1.3, then vsftpd will apply the vsftpd<br/>config file /etc/vsftpd_tcp_wrap.conf to the session! These settings are<br/>applied ON TOP of the default vsftpd.conf.<br/>This is obviously very powerful. You might use this to apply different<br/>access restrictions for some IPs (e.g. the ability to upload).<br/>o&#114; you could give certain classes of IPs the ability to skip connection<br/>limits (max_clients=0).<br/>o&#114; you could increase / decrease the bandwidth limiter for certain classes<br/>of IPs.<br/>You get the point<br/><br/>The second line:<br/>Denies the ability of 192.168.1.4 to connect. Very useful to take care of<br/>troublemakers. And now you dont need xinetd to do it - hurrah.<br/><br/><br/>This example shows how you might set up virtual hosts. Virtual hosting is<br/>wh&#101;re different clients access your machine on different IP addresses (virtual<br/>IPs) and get redirected to different ftp sites.<br/><br/>For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,<br/>you could have the two different IPs represent two totally different FTP sites.<br/><br/>For this example, we are going to build on the &#34;INTERNET_SITE&#34; example.<br/><br/>Step 1) Set up a virtual IP address.<br/><br/>ifconfig eth0:1 192.168.1.10 up<br/>(the standard IP address is 192.168.1.2)<br/>(note - this isnt quite complete, the route for local connects hasnt been<br/>added, but it will do for now)<br/><br/><br/>Step 2) Cr&#101;ate a user / location for the new virtual site.<br/><br/>useradd -d /var/ftp_site2 ftp_site2<br/>chown root.root /var/ftp_site2<br/>chmod a+rx /var/ftp_site2<br/>umask 022<br/>mkdir /var/ftp_site2/pub<br/>echo &#34;test&#34; &gt;; /var/ftp_site2/pub/content<br/><br/><br/>Step 3) Modify the existing site to respond to the primary IP.<br/><br/>Edit /etc/xinetd.d/vsftpd, and add the config line:<br/>This example shows how you might set up virtual hosts. Virtual hosting is<br/>wh&#101;re different clients access your machine on different IP addresses (virtual<br/>IPs) and get redirected to different ftp sites.<br/><br/>For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,<br/>you could have the two different IPs represent two totally different FTP sites.<br/><br/>For this example, we are going to build on the &#34;INTERNET_SITE&#34; example.<br/><br/>Step 1) Set up a virtual IP address.<br/><br/>ifconfig eth0:1 192.168.1.10 up<br/>(the standard IP address is 192.168.1.2)<br/>(note - this isnt quite complete, the route for local connects hasnt been<br/>added, but it will do for now)<br/><br/><br/>Step 2) Cr&#101;ate a user / location for the new virtual site.<br/><br/>useradd -d /var/ftp_site2 ftp_site2<br/>chown root.root /var/ftp_site2<br/>chmod a+rx /var/ftp_site2<br/>umask 022<br/>mkdir /var/ftp_site2/pub<br/>echo &#34;test&#34; &gt;; /var/ftp_site2/pub/content<br/><br/><br/>Step 3) Modify the existing site to respond to the primary IP.<br/><br/>Edit /etc/xinetd.d/vsftpd, and add the config line:<br/><br/>bind = 192.168.1.2<br/><br/><br/>Step 4) Cr&#101;ate the new site, responding on the virtual IP.<br/><br/>cp /etc/xinetd.d/vsftpd /etc/xinetd.d/vsftpd2<br/><br/>Edit vsftpd2, and change<br/>- The bind line to refer to the IP address 192.168.1.10<br/>- Add the line<br/>server_args = /etc/vsftpd_site2.conf<br/><br/>This launches this FTP site with a different vsftpd configuration file.<br/><br/>cp /etc/vsftpd.conf /etc/vsftpd_site2.conf<br/><br/>Add two lines:<br/>ftp_username=ftp_site2<br/>ftpd_banner=This is the alt&#101;rnative FTP site.<br/><br/><br/>Step 5) Restart xinetd and test!<br/><br/>/etc/rc.d/init.d/xinetd restart<br/><br/>[chris@localhost vsftpd]$ ftp 192.168.1.2<br/>Connected to 192.168.1.2 (192.168.1.2).<br/>220 ready, dude (vsFTPd 1.1.0: beat me, break me)<br/>Name (192.168.1.2:chris): [chris@localhost vsftpd]$<br/>[chris@localhost vsftpd]$ ftp 192.168.1.2<br/>Connected to 192.168.1.2 (192.168.1.2).<br/>220 ready, dude (vsFTPd 1.1.0: beat me, break me)<br/>Name (192.168.1.2:chris):<br/>530 This FTP server is anonymous only.<br/>Login failed.<br/>ftp&gt;; quit<br/>221 Goodbye.<br/><br/>[chris@localhost vsftpd]$ ftp 192.168.1.10<br/>Connected to 192.168.1.10 (192.168.1.10).<br/>220 This is the alt&#101;rnative FTP site.<br/>Name (192.168.1.10:chris):<br/>530 This FTP server is anonymous only.<br/>Login failed.<br/>ftp&gt;;]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=97</link>
			<title><![CDATA[将apache,mysql设为linux服务开机启动]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[PHP]]></category>
			<pubDate>Mon,13 Apr 2009 22:32:24 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=97</guid>
		<description><![CDATA[mysql设为linux服务<br/><br/>cp /usr/local/mysql5/share/mysql/mysql.server /etc/init.d/mysqld <br/>chkconfig --add mysqld <br/>chkconfig --level 2345 mysqld on<br/>chown mysql:mysql -R /usr/local/mysql5/<br/>service mysqld start<br/><br/>apache设为linux服务<br/><br/>cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd<br/>vi /etc/init.d/httpd<br/><br/>在在#!/bin/sh后面加入下面两行<br/>#chkconfig:345 85 15<br/>#description: Start and stops the Apache HTTP Server.<br/><br/>然后<br/>chmod +x /etc/rc.d/init.d/httpd<br/>chkconfig --add httpd]]></description>
		</item>
		
			<item>
			<link>http://vod.pofen.com/starrysky/article.asp?id=96</link>
			<title><![CDATA[Linux安装apache跟php]]></title>
			<author>Starry_Sky95@sina.com(StarrySKY)</author>
			<category><![CDATA[随笔]]></category>
			<pubDate>Mon,13 Apr 2009 11:46:07 +0800</pubDate>
			<guid>http://vod.pofen.com/starrysky/default.asp?id=96</guid>
		<description><![CDATA[2．&nbsp;&nbsp;Apache安装<br/><br/>　　Apache是2.0.55<br/><br/>　　tar -xzvf httpd-2.0.55.tar.gz<br/><br/>　　cd httpd-2.0.55<br/><br/>　　./configure <br/>　　--prefix=/usr/local/apache2 <br/>　　--enable-shared=max <br/>　　--enable-module=rewrite <br/>　　--enable-module=so<br/><br/>　　Make<br/><br/>　　Make install<br/><br/>　　察看编译进apache的模块：<br/>　　#/usr/local/apache2/bin/httpd -l<br/>　　[root@LINUX root]# /usr/local/apache2/bin/httpd -l<br/>　　compiled-in modules:<br/>　　　　http_core.c<br/>　　　　mod_so.c<br/>　　看到以上的信息表明apache支持dso方式了。这<br/><br/>　　 <br/><br/>　　3.安装php<br/><br/>　　Php 是4.3.10<br/><br/>　　tar xfz php-4.3.10.tar.gz <br/>　　进行配置,这一步比较关键,一定要设置好,特别是要考虑到你要支持什么,比如GD库,xml,mysql等等,如果想知道详细的配置,执行 ./configure --help来获得:<br/><br/>　　# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/lib --enable-mbstring --enable-trace-vars<br/><br/>　　# make <br/>　　编译成功后出现&#34;Build complete.&#34;字样,那么就可以进行安装了: <br/>　　# make install <br/>　　#make install<br/>　　安装完成后把/usr/local/src/php-4.3.8/php.ini-dist复制到/usr/local/php/etc, 并重命名为php.ini<br/><br/>　　cp /usr/local/src/php-4.3.10/php.ini-dist /usr/local/php/lib/php.ini<br/><br/>　　vi /usr/local/apache2/conf/httpd.conf<br/>　　在httpd.conf文件中，添加 <br/><br/>　　AddType application/x-httpd-php .php <br/>　　AddType application/x-httpd-php-source .phps<br/><br/>　　然后去/usr/local/apache2/modules 看看有没有支持php的动态连接模块<br/>　　确保文件中有以下一句话，没有就自己添加在所有LoadModule之后。 <br/>　　LoadModule php4_module modules/libphp4.so<br/><br/>　　# /usr/local/apache2/bin/apachectl restart<br/><br/>　　现在apache就能够运行php了,写个文件测试一下,在/usr/local/apache2/htdocs目录下，新建一个phpinfo.php文件， <br/>　　文件中只有一行代码: <br/>　　&lt;? phpinfo(); ?&gt;;<br/><br/>　　然后在你的浏览器上输入<br/>　　<a href="http://" target="_blank" rel="external">http://</a>你的ip/phpinfo.php<br/><br/>]]></description>
		</item>
		
</channel>
</rss>
