﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-都市淘沙者-文章分类-lighttpd/nginx/HA/LVS/FTP</title><link>http://www.blogjava.net/jelver/category/43119.html</link><description>每天进步一点点</description><language>zh-cn</language><lastBuildDate>Sun, 03 Apr 2011 11:37:11 GMT</lastBuildDate><pubDate>Sun, 03 Apr 2011 11:37:11 GMT</pubDate><ttl>60</ttl><item><title>nginx+tomcat集群负载均衡中的多虚拟主机配置</title><link>http://www.blogjava.net/jelver/articles/347581.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sun, 03 Apr 2011 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/347581.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/347581.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/347581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/347581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/347581.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">原文<a href="http://hi.baidu.com/gnaiqeh/blog/item/c8024c11bfeacff2c2ce79f4.html">http://hi.baidu.com/gnaiqeh/blog/item/c8024c11bfeacff2c2ce79f4.html</a>
<p><br />
关键词：nginx tomcat 多虚拟主机 集群 负载均衡</p>
<p>虽然夜深了，但是还是解决了这个困扰我一个晚上的问题，记录下来备查。</p>
<p>接着我前不久写的这一篇来的：Linux下nginx和tomcat的整合<a href="http://hi.baidu.com/gnaiqeh/blog/item/2f43dac9e98d781a7f3e6fc7.html">http://hi.baidu.com/gnaiqeh/blog/item/2f43dac9e98d781a7f3e6fc7.html</a></p>
<p>举个例子，现在是这样的情况：我现在有a、b、c三个不同的应用，每个Tomcat集群机（一共3个）上都建立了这三个应用的虚拟主机，我要把这三个应用用一个nginx来负载均衡。</p>
<p>中间测试了很多次，失败的过程就不多说了，直接说最终解决的办法。</p>
<p>首先要把3个虚拟主机的域名（a.gnaiqeh.cn、b.gnaiqeh.cn、c.gnaiqeh.cn）都指向到nginx机的公网ip上。</p>
<p>然后还是修改nginx的配置文件nginx.conf：</p>
<p>配置文件中upstream段还是保持不变，依旧是3个tomcat集群机的地址及负载因子：<br />
&nbsp;&nbsp;&nbsp; upstream gnaiqeh {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.0.11:8080 weight=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.0.12:8080 weight=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.0.13:8080 weight=1;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>因为有3个应用，所以应该有3个server段，这里只写其中一个，其他两个只需要修改一下server_name即可：<br />
&nbsp;&nbsp;&nbsp; server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name a.gnaiqeh.cn; #另外两个是b.gnaiqeh.cn、c.gnaiqeh.cn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index index.jsp index.html index.htm;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_redirect off;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">proxy_set_header Host $host; #这一句至关重要</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header X-Real-IP $remote_addr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass <a href="http://gnaiqeh/">http://gnaiqeh</a>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error_page&nbsp;&nbsp; 500 502 503 504 /50x.html;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location = /50x.html {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>proxy_set_header是nginx的http代理模块中的一个指令。</p>
<p>在nginx中的默认proxy是只能对后面real server做端口转发的，而不能做域名转发，即默认的是：</p>
<p>proxy_set_header Host $proxy_host;</p>
<p>我们要通过域名转发就必须改为：</p>
<p>proxy_set_header Host $host;</p>
<p>最后修改tomcat的配置文件server.xml，主要是配置虚拟主机：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host name="a.gnaiqeh.cn" appBase="webapps-a"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="/mnt/a" reloadable="true" crossContext="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host name="b.gnaiqeh.cn" appBase="webapps-b"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="/mnt/b" reloadable="true" crossContext="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host name="c.gnaiqeh.cn" appBase="webapps-c"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="/mnt/c" reloadable="true" crossContext="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;</p>
<p>3台集群机均改成上面一样的。</p>
<p>然后重启nginx，重启tomcat，测试访问三个域名都通过，打完收工。</p>
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/347581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-04-03 11:03 <a href="http://www.blogjava.net/jelver/articles/347581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内网FTP服务器架设指南（proftpd版）【转帖】</title><link>http://www.blogjava.net/jelver/articles/307256.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 25 Dec 2009 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/307256.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/307256.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/307256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/307256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/307256.html</trackback:ping><description><![CDATA[<p><strong>版权声明</strong>：可以任意转载，但转载时必须标明原作者charlee、原始链接<a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/">http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/</a>以及本声明。<br />
<br />
由于最近很多人询问关于如何在内网架设FTP的问题，因此在这里把经验总结一下供大家分享。</p>
<p>本文将分为四个部分。第一部分阐述&#8220;什么是内网架设FTP&#8221;的问题。第二部分分析FTP协议的原理。第三部分阐述在内网中架设FTP服务器时会遇到的问题以及解决方法，使外网的用户能够访问位于内网的FTP服务器。第四部分为总结。建议读者能够将这五部分全部读完。如果只想要一个快速安装指南，那么请阅读第一部分和第四部分。</p>
<p>本文所使用的FTP服务器为proftpd。</p>
<!-- end Pukiwiki generated code--><!-- begin Pukiwiki generated code-->
<div class="contents"><a id="contents_2"></a>
<ul class="list1" style="padding-left: 16px; margin-left: 16px">
    <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_0">内网FTP服务器的概念 </a>
    <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_1">FTP协议原理 </a>
    <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_2">内网FTP服务器的问题及解决方案 </a>
    <ul class="list2" style="padding-left: 16px; margin-left: 16px">
        <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_3">如何使外网的客户端能够与内网的FTP服务器建立控制连接 </a>
        <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_4">如何建立数据连接 </a></li>
    </ul>
    <li><a href="http://tech.idv2.com/2004/12/02/make-ftp-with-proftpd-in-lan/#content_2_5">总结 </a></li>
</ul>
</div>
<hr class="full_hr" />
<h2 id="content_2_0">内网FTP服务器的概念</h2>
<p>设想下面的这种环境：几台计算机组成一个局域网，该局域网中拥有一台DHCP服务器负责为局域网中每台计算机分配IP地址。其中有一台计算机（或网络设备）作为网关（可以与DHCP服务器为同一台设备），网关通过拨号或其他方式连接到Internet，获取一个真实IP地址。局域网内的计算机通过网关的转发来实现与Internet的连接。我们定义该局域网内部为内网，相对地，定义Internet为外网。</p>
<p>举个例子，假设我们拥有两台计算机A、B和一个拥有拨号和DHCP功能的网关G。各自的网络配置如下：</p>
<pre>网关G:
局域网IP地址：192.168.0.1（由网关硬件指定）
局域网子网掩码：255.255.255.0（由网关硬件指定）
广域网IP地址：12.34.56.78（拨号之后获得）
计算机A:
局域网IP地址：192.168.0.10（通过网关的DHCP功能获得）
局域网子网掩码：255.255.255.0（通过网关的DHCP功能获得）
网关：192.168.0.1（通过网关的DHCP功能获得）
计算机B:
局域网IP地址：192.168.0.11（通过网关的DHCP功能获得）
局域网子网掩码：255.255.255.0（通过网关的DHCP功能获得）
网关：192.168.0.1（通过网关的DHCP功能获得） </pre>
<p>这样，从A、B发出的所有网络请求都会被发送到网关G（192.168.0.1），网关再将这些请求变换之后通过12.34.56.78发送到Internet，以实现A、B与Internet的连接。</p>
<p>需要提醒一点的是，你的网关必须拥有端口映射（Port Mapping）的功能（也称转发，Forwarding），这是下文架设服务器的先决条件。所谓端口映射功能，就是指网关能够将从外网发送到网关的指定端口的包转发到内网中指定的IP地址上。举个例子，假如我们定义了如下一条规则：将端口21映射到192.168.0.10上。那么</p>
<p>从外网发送到网关的一个包，其信息为源地址：200.12.34.56:7890，目的地址：12.34.56.78:21</p>
<p>那么网关将修改该包的目的地址，结果为源地址：200.12.34.56:7890，目的地址：192.168.0.10:21</p>
<p>并将该包发送到局域网中的192.168.0.10上。这样对于192.168.0.10来说，这个包仿佛是从Internet上直接发给自己的一样。</p>
<h2 id="content_2_1">FTP协议原理</h2>
<p>一般我们说，FTP协议使用TCP端口21。实际上这这并不准确；FTP协议使用TCP的21端口传送的是控制命令，同时使用随机端口来传送数据。也就是说，下载一个文件至少需要在客户端与服务器之间建立两个TCP连接，这两个连接分别称为控制连接和数据连接。</p>
<p>控制连接总是由客户端主动连接服务器的21端口来建立的；而数据连接则不一定。根据数据连接的建立方式的不同，FTP传送方式可分为主动方式和被动方式两种。主动方式下，服务器连接客户端的某个端口以建立数据连接；被动方式下，客户端连接服务器的某个端口来建立数据连接。</p>
<p>主动方式的连接过程如下：</p>
<ol class="list1" style="padding-left: 16px; margin-left: 16px">
    <li>客户端用随机端口连接服务器的21端口，建立控制连接，并发送用户名和密码进行登录。
    <li>客户端打开一个随机端口P进行监听，并通过控制连接将自己的IP地址和P端口的信息通知服务器。
    <li>服务器用自己的随机端口连接客户端的端口P，建立数据连接，并进行数据传送。
    <li>数据传送完毕之后，数据连接断开。
    <li>客户端通过控制连接发送结束命令，以断开控制连接，FTP交互过程结束。 </li>
</ol>
<p>被动方式的连接过程如下：</p>
<ol class="list1" style="padding-left: 16px; margin-left: 16px">
    <li>客户端用随机端口连接服务器的21端口，建立控制连接，并发送用户名和密码进行登录。（与主动方式相同）
    <li>客户端通过控制连接通知服务器使用被动方式。
    <li>服务器选择一个随机端口P进行监听，并通过控制连接将自己的IP地址和P端口的信息通知客户端。
    <li>客户端用自己的随机端口连接服务器的端口P，建立数据连接，并进行数据传送。
    <li>数据传送完毕之后，数据连接断开。（与主动方式相同）
    <li>客户端通过控制连接发送结束命令，以断开控制连接，FTP交互过程结束。（与主动方式相同） </li>
</ol>
<p>举个实际的例子来说明。下文中以S:开头的为服务器返回的信息，C:开头的为客户端命令。主动方式：</p>
<pre>S: 220 ProFTPD 1.2.10 Server（控制连接建立，服务器返回欢迎信息）
C: USER foo（发送用户名）
S: 331 Password required for foo.
C: PASS mypassword （发送密码）
S: 230 User foo logged in. （登录成功）
C: SYST （获取服务器类型）
S: 215 UNIX Type: L8
C: PWD （获取当前目录）
S: 257 "/" is current directory.
C: PORT 192,168,0,11,10,171 （客户端监听端口2731，并将IP地址和端口2731通过PORT命令通知服务器。2731为10*256+171）
S: 200 PORT command successful
C: TYPE A （设置传输方式为文本方式）
S: 200 Type set to A
C: LIST （发出获取文件列表的命令）
S: 150 Opening ASCII mode data connection for file list （服务器尝试连接客户端的2731端口以建立数据连接）
（通过数据连接发送文件列表&#8230;&#8230;）
S: 226 Transfer complete. （文件列表传送完毕，数据连接断开）
C: QUIT （退出命令） </pre>
<p>被动方式：</p>
<pre>S: 220 ProFTPD 1.2.10 Server（控制连接建立，服务器返回欢迎信息）
C: USER foo（发送用户名）
S: 331 Password required for foo.
C: PASS mypassword （发送密码）
S: 230 User foo logged in. （登录成功）
C: SYST （获取服务器类型）
S: 215 UNIX Type: L8
C: PWD （获取当前目录）
S: 257 "/" is current directory.
C: PASV （通知服务器使用被动方式）
S: 227 Entering Passive Mode (192,168,0,10,132,29).
（服务器监听端口33821，并将IP地址和端口33821通过PORT命令通知服务器。33821为132*256+29）
C: TYPE A （设置传输方式为文本方式）
S: 200 Type set to A
C: LIST （发出获取文件列表的命令）
S: 150 Opening ASCII mode data connection for file list （客户端尝试连接服务器的33821端口以建立数据连接）
（通过数据连接发送文件列表&#8230;&#8230;）
S: 226 Transfer complete. （文件列表传送完毕，数据连接断开）
C: QUIT （退出命令）
</pre>
<h2 id="content_2_2">内网FTP服务器的问题及解决方案</h2>
<p>在这里我们沿用第一部分的网络实例，并假设FTP服务器架设在计算机A（192.168.0.10）上。</p>
<h3 id="content_2_3">如何使外网的客户端能够与内网的FTP服务器建立控制连接</h3>
<p>由于控制连接的服务器端端口为21，因此我们只需要在网关的端口映射上添加一条规则，将21端口映射到192.168.0.10即可。</p>
<h3 id="content_2_4">如何建立数据连接</h3>
<p>在主动方式下，数据连接由服务器发起，相当于内网的服务器主动去连接外网的客户端，这种连接可以穿过网关正常建立，因此不需要做任何特殊设置即可实现。问题是被动连接。由于被动方式下服务器会监听随机端口并需要将自己的IP地址和端口号通知客户端，这样就产生了以下两个问题： a) 服务器仅知道自己的内网IP地址（192.168.0.10），它会将这个IP地址通知给外网的客户端，而客户端从外网是无法连接这个内网IP地址的（客户端不知道该如何路由）； b) 服务器需要监听随机端口，范围为1024-65535，出于安全起见，也考虑到可能存在其它的服务也使用该范围内的端口，因此不可能在网关上将这些端口全部映射给192.168.0.10。</p>
<p>由于以上的问题的存在，我们经常可以看到连接服务器时下方的连接日志停在</p>
<pre>150 Opening ASCII mode data connection for file list </pre>
<p>处迟迟不动，这就是因为被动数据连接无法建立。</p>
<p>对此proftpd提供了如下的解决方案。</p>
<ol class="list1" style="padding-left: 16px; margin-left: 16px">
    <li>通过MasqueradeAddress命令指定服务器通知给客户端的IP地址。即使得FTP服务器不再将自己的内网IP地址192.168.0.10通知给客户端，而是将MasqueradeAddress命令指定的IP地址通知给客户端。在proftpd.conf中添加如下命令：
    <pre>MasqueradeAddress 12.34.56.78 （指定为网关的外网地址） </pre>
    如果网关的外网地址不固定（例如通过拨号获取IP的情况），那么你需要为你的网关申请一个动态域名，并用MasqueradeAddress命令将域名指定给服务器。
    <pre>MasqueradeAddress myftpserver.vicp.net </pre>
    <li>通过PassivePorts命令来限制被动方式下监听的端口的范围。例如
    <pre>PassivePorts 60000 65535 </pre>
    这样服务器在被动方式下将仅使用60000-65535之间的端口，而不是原来的1024-65535。然后在网关上添加规则，将60000-65535的所有端口映射到192.168.0.10上。 </li>
</ol>
<p>这样，外网的客户端就可以正常访问FTP服务器了。</p>
<p>但是上面的方法并不是十全十美的。我们用MasqueradeAddress命令强制FTP通知网关的IP地址，这对于客户端位于外网的情况下是正确的，但是当客户端位于内网时，客户端可能会无法解析网关的IP地址，导致无法建立数据连接。</p>
<h2 id="content_2_5">总结</h2>
<p>内网架设FTP服务器的方法：</p>
<ol class="list1" style="padding-left: 16px; margin-left: 16px">
    <li>在proftpd.conf中利用MasqueradeAddress命令将网关的IP地址或域名指定给FTP服务器，例如
    <pre>MasqueradeAddress myftpserver.vicp.net </pre>
    或
    <pre>MasqueradeAddress 12.34.56.78 </pre>
    然后通过PassivePorts命令来限制被动方式下监听的端口的范围，例如
    <pre>PassivePorts 60000 65535 </pre>
    <li>在网关的端口映射上将第一步中指定的端口范围（例中为60000-65535）以及FTP端口21映射到FTP服务器的内网地址上。 </li>
</ol>
<img src ="http://www.blogjava.net/jelver/aggbug/307256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-12-25 13:45 <a href="http://www.blogjava.net/jelver/articles/307256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】Centos5.3+ProFTPD1.3.2+Mysql5.1配置FTP服务</title><link>http://www.blogjava.net/jelver/articles/306316.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Thu, 17 Dec 2009 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/306316.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/306316.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/306316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/306316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/306316.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<strong>&nbsp;</strong>
<p style="text-align: center;" align="center"><strong><span style="font-size: 22pt;">Centos5.3+ProFTPD1.3.2+Mysql5.1</span></strong><strong><span style="font-size: 22pt; font-family: 宋体;">配置</span></strong><strong><span style="font-size: 22pt;">FTP</span></strong><strong><span style="font-size: 22pt; font-family: 宋体;">服务<br />
<span style="font-size: 14pt;"><br />
Allen Jelver 2009-12-17<br />
</span></span></strong></p>
<p>&nbsp;废话少说了，就是利用Mysql做FTP校验，即通过数据库管理FTP用户信息，检验登录等......,进入正题.&gt;&gt;</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><strong><span style="font-size: 12pt;">一、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 12pt; font-family: 宋体;">安装</span></strong><strong><span style="font-size: 12pt;">Mysql</span></strong><strong><span style="font-size: 12pt; font-family: 宋体;">软件包</span></strong><strong><span style="font-size: 12pt;">(<span style="color: red;">64</span></span></strong><strong><span style="font-size: 12pt; color: red; font-family: 宋体;">位</span></strong><strong><span style="font-size: 12pt;">)</span></strong><strong><span style="font-size: 12pt; font-family: 宋体;">：</span></strong></p>
<p style="background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: black; font-family: 宋体;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p>MySQL-server-community-5.1.38-0.rhel5.x86_64.rpm</p>
            <p>MySQL-shared-community-5.1.38-0.rhel5.x86_64.rpm</p>
            <p>MySQL-client-community-5.1.38-0.rhel5.x86_64.rpm</p>
            <p>MySQL-devel-community-5.1.38-0.rhel5.x86_64.rpm</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: black; font-family: 宋体;">资源包可以在<a href="http://ftp.up.ac.za/pub/windows/MySQL/Downloads/MySQL-5.1/">http://ftp.up.ac.za/pub/windows/MySQL/Downloads/MySQL-5.1/</a>下载，本教程对Mysql的rpm方式安装省略，需要注意的是devel包是必须安装的，只有安装devel包后才能生成/usr/include/mysql,32位机器安装的lib路径要注意一下是/usr/lib/mysql即可，关于msyql的安装网上很多资料都可以参考。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><strong><span style="font-size: 14pt;">二、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">安装</span></strong><strong><span style="font-size: 14pt;">proftpd</span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">包</span></strong></p>
<p><span style="font-family: 宋体;">下载</span>proftpd-1.3.2.tar.gz</p>
<p>wget http://ftp.ntu.edu.tw/proftpd/distrib/source/proftpd-1.3.2.tar.gz</p>
<p style="margin: 0cm 0cm 0pt;"><span>
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p>cd /usr/local&nbsp;<span style="color: blue;">#</span><span style="color: blue; font-family: 宋体;">这是我放置</span><span style="color: blue;">proftpd-1.3.2.tar.gz</span><span style="color: blue; font-family: 宋体;">的目录</span></p>
            <p>tar zxvf proftpd-1.3.2.tar.gz</p>
            <p>cd proftpd-1.3.2</p>
            <p>./configure&nbsp;--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql --with-libraries=/usr/lib64/mysql</p>
            <p>make</p>
            <p>make install</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p><span style="font-family: 宋体;">首先需要声明的是以下的配置会跟你的安装目录有关，安装成功后则会生成</span>/usr/local/etc/<span style="font-family: 宋体;">目录，其中包含核心配置文件</span>proftpd.conf<span style="font-family: 宋体;">，同时在</span>/usr/local/sbin<span style="font-family: 宋体;">下有</span>proftpd<span style="font-family: 宋体;">可执行文件，通常用来启动服务用的，其中</span>pid<span style="font-family: 宋体;">文件文件是自启动脚本中创建的，这部分在后面会讲到。对以上两个目录做查看，如下图所示：</span></p>
<p><span style="font-family: 宋体;">说明：若在</span>make<span style="font-family: 宋体;">或</span>make install<span style="font-family: 宋体;">中有错则需要注意是否是</span>gcc<span style="font-family: 宋体;">方面的问题导致。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><strong><span style="font-size: 14pt;">三、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">配置</span></strong><strong><span style="font-size: 14pt;">Mysql</span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">认证</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 10.5pt; color: black;">认证这部分主要是配置proftpd.conf文件，在修改配置文件之前最好养成先备份一个文件的习惯，否则修改出错后没有办法找到原来的版本。并在proftpd.conf中加入以下内容， </span></p>
<p style="margin-left: 39pt; text-indent: -18pt; text-align: left;" align="left"><strong><span style="font-family: 宋体;">1．</span></strong><strong><span style="font-family: 宋体;">修改组信息</span></strong></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: red;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># Set the user and group under which the server will run.</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nobody</span></p>
            <p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt;">Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span style="color: blue;">nogroup</span></span></p>
            <p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt;">将Group对应的nogroup修改为如下的nobody</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># Set the user and group under which the server will run.</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left">User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nobody</p>
            <p style="margin-left: 21pt; text-align: left;" align="left">Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red;">nobody</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; text-align: left;" align="left"><strong><span style="font-family: 宋体;">2．</span></strong><strong><span style="font-family: 宋体;">加入数据校验配置</span></strong></p>
<p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># </span><span style="font-family: 宋体;">屏蔽服务器版本信息 <br />
            ServerIdent off</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># </span><span style="font-family: 宋体;">数据库连接的信息，ftpusers是数据库名， localhost是主机名，3306是端口号，root是连接数据库的用户名，123456是密码。</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">SQLConnectInfo ftpusers@localhost:3306 root 123456</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># </span><span style="font-family: 宋体;">数据的认证方式</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;"># Backend</span><span style="font-family: 宋体;">表示用户认证方式为MySQL数据库的认证方式&nbsp; <br />
            # Plaintext表示明文认证方式，排在最前面的为最先使用的方式 </span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">SQLAuthTypes Backend Plaintext</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#</span><span style="color: black; font-family: 宋体;">指定用来做用户认证的表的有关信息。("</span><span style="font-family: 宋体;">users</span><span style="color: black; font-family: 宋体;">"</span><span style="color: black; font-family: 宋体;">和"</span><span style="font-family: 宋体;">grps</span><span style="color: black; font-family: 宋体;">"</span><span style="color: black; font-family: 宋体;">是数据表名字，其后为字段信息)</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">SQLUserInfo users userid passwd uid gid home shell</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">SQLGroupInfo grps grpname gid members</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#</span><span style="color: black; font-family: 宋体;">设置如果shell为空时允许用户登录：</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="font-family: 宋体;">RequireValidShell off&nbsp;&nbsp; </span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#</span><span style="color: black; font-family: 宋体;"><a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">数据库</span></a>的鉴别</span><span style="color: black; font-family: 宋体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">SQLAuthenticate users groups usersetfast groupsetfast</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#如果home目录不存在，则<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a>会为根据它的home项新建一个目录：</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#</span><span style="color: black; font-family: 宋体;">注意SQLHomedirOnDemand已经在1.3.2以后的版本中改名为</span><span style="font-family: 宋体;">CreateHome</span></p>
            <p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt;">CreateHome on</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">#</span><span style="color: black; font-family: 宋体;">设置系统运行日志和文件传输日志</span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">SystemLog /var/log/proftpd.syslog </span></p>
            <p style="margin-left: 21pt; text-align: left;" align="left"><span style="color: black; font-family: 宋体;">TransferLog /var/log/proftpd.transferlog</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt;"><strong><span style="font-size: 10.5pt; color: black;">3．</span></strong><strong><span style="font-size: 10.5pt; color: black;">建立相应的<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a>用户</span></strong></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">在本例中，只整个FTP服务只提供一个有效的<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a></span>用户ftpuser和组ftpgrp，当然你也可以设置多个<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a>用户。但出于安全的考虑，我只设一个，用他来启动FTP daemon，并把所有的FTP用户映射过这个用户。</p>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: justify;"><span style="font-size: 10.5pt; color: black;">先建立</span><span style="font-size: 10.5pt; color: black;">ftpgrp</span><span style="font-size: 10.5pt; color: black;">组：<br />
</span><span style="font-size: 10.5pt; color: black;">groupadd -g 5500 -r ftpgrp&nbsp;&nbsp;&nbsp; //</span><span style="font-size: 10.5pt; color: black;">增加一个组</span><span style="font-size: 10.5pt; color: black;">ID</span><span style="font-size: 10.5pt; color: black;">为</span><span style="font-size: 10.5pt; color: black;">5500</span><span style="font-size: 10.5pt; color: black;">的</span><span style="font-size: 10.5pt; color: black;">ftpgrp</span><span style="font-size: 10.5pt; color: black;">组</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: justify;"><span style="font-size: 10.5pt; color: black;">建立</span><span style="font-size: 10.5pt; color: black;">ftpuser</span><span style="font-size: 10.5pt; color: black;">用户：<br />
</span><span style="font-size: 10.5pt; color: black;">useradd -u 5501 -g 5500 -d /home/ftp -s /bin/bash -r ftpuser</span><span style="font-size: 10.5pt; color: black;"><br />
</span><span style="font-size: 10.5pt; color: black;">为</span><span style="font-size: 10.5pt; color: black;">ftpuser</span><span style="font-size: 10.5pt; color: black;">建立home，把所有的FTP user 活动空间全放在此目录下：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: justify;"><span style="font-size: 10.5pt; color: black;">mkdir /home/ftp</span></p>
            <p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: justify;"><span style="font-size: 10.5pt; color: black;">chown </span><span style="font-size: 10.5pt; color: black;">ftpuser</span><span style="font-size: 10.5pt; color: black;"> /home/ftp</span></p>
            <p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: justify;"><span style="font-size: 10.5pt; color: black;">chgrp </span><span style="font-size: 10.5pt; color: black;">ftpgrp &nbsp;</span><span style="font-size: 10.5pt; color: black;">/home/ftp</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt;"><strong><span style="font-size: 10.5pt; color: black;">4．</span></strong><strong><span style="font-size: 10.5pt; color: black;">初始化数据库</span></strong></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">1）创建数据库和表</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">create database </span><span style="font-size: 10.5pt;">ftpusers<span style="color: black;">;</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">use </span><span style="font-size: 10.5pt;">ftpusers<span style="color: black;">;</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">建立一个用户表</span><span style="font-size: 10.5pt; color: black;">USERS</span><span style="font-size: 10.5pt; color: black;">，这个表是必须的：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <span style="font-size: 10.5pt; color: black;"><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;USERS&nbsp;(<br />
            <br />
            userid&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            <br />
            passwd&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            <br />
            uid&nbsp;</span><span style="color: #000000; font-weight: bold;">INT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            <br />
            gid&nbsp;</span><span style="color: #000000; font-weight: bold;">INT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            <br />
            home&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">,<br />
            <br />
            shell&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;"><br />
            <br />
            );</span></span></td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">此表是为了用户认证所需要的，其中userid、passwd是必不可少的，userid是用做FTP服务的用户名；passwd是指此用户的密码；uid是<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a></span>用户的ID，也就是所映射的<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a>用户；gid是所属<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a>组的ID；home是该用户所在的HOME目录；shell可以为该用户指定相应的shell。当然你可以建立更多的字段，例如：用来记录用户登录次数的count，或者是日期的date，如果你对配置熟悉了之后，你可以根据自己的喜欢添加更多的功能。</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: 10.5pt; color: black;">另外，若需要对组成员管理之类的功能则需要添加GRPS表：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
            <br />
            Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
            http://www.CodeHighlighter.com/<br />
            <br />
            --><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;GRPS&nbsp;(<br />
            grpname&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            gid&nbsp;</span><span style="color: #000000; font-weight: bold;">SMALLINT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
            members&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;"><br />
            );<br />
            </span></div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">其中grpname是组的名称，gid是<a href="http://www.ahaoz.com/" target="_blank"><span style="color: black; text-decoration: none;">系统</span></a></span>组的ID，members是组的成员。注意：多成员，<span style="font-size: 10.5pt; color: black;">他们之间要用逗号隔开，不能使用空格。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">2）增加用户,在数据库USERS表和GRPS表中插入数据：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: 10.5pt; color: black;">
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <span style="font-size: 10.5pt; color: black;"><span style="color: #0000ff;">INSERT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INTO</span><span style="color: #000000;">&nbsp;USERS&nbsp;(userid,&nbsp;passwd,&nbsp;uid,&nbsp;gid,&nbsp;home,&nbsp;shell)&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">&nbsp;(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">allen</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">123456</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5501</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5500</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">/home/ftp/allen</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;"</span><span style="color: #808080;">/</span><span style="color: #000000;">usr</span><span style="color: #808080;">/</span><span style="color: #000000;">local</span><span style="color: #808080;">/</span><span style="color: #000000;">test.sh");<br />
            <br />
            </span><span style="color: #0000ff;">INSERT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INTO</span><span style="color: #000000;">&nbsp;USERS&nbsp;(userid,&nbsp;passwd,&nbsp;uid,&nbsp;gid,&nbsp;home,&nbsp;shell)&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">&nbsp;(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">kitty</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">222222</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5502</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5500</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">/home/ftp/kitty</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;"</span><span style="color: #808080;">/</span><span style="color: #000000;">usr</span><span style="color: #808080;">/</span><span style="color: #000000;">local</span><span style="color: #808080;">/</span><span style="color: #000000;">test2.sh");<br />
            <br />
            </span><span style="color: #0000ff;">INSERT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INTO</span><span style="color: #000000;">&nbsp;GRPS&nbsp;(grpname,gid,members)&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">&nbsp;(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ftpgrp</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5500</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">allen,kitty</span><span style="color: #ff0000;">'</span><span style="color: #000000;">);<br />
            <br />
            flush&nbsp;</span><span style="color: #0000ff;">privileges</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">//</span><span style="color: #000000;">刷新数据库</span></span></td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><strong><span style="font-size: 14pt;">四、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">配置自启动服务</span></strong></p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">从编译安装路径中拷贝</span>proftpd.init.d<span style="font-family: 宋体;">文件到</span>/etc/rc.d/init.d/<span style="font-family: 宋体;">中，并重命名为</span>proftpd<span style="font-family: 宋体;">，授予可执行权限后，通过</span>chkconfig --add<span style="font-family: 宋体;">命令将其加为自启动服务即可，具体操作如下：</span>&nbsp;&nbsp; <span>
<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p>cp /usr/local/proftpd-1.3.2/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/</p>
            <p>cd /etc/rc.d/init.d</p>
            <p>mv proftpd.init.d proftpd</p>
            <p>chmod +x proftpd</p>
            <p>#<span style="font-family: 宋体;">加入为服务</span></p>
            <p>chkconfig --add proftpd</p>
            <p>chkconfig --level 3 proftpd on</p>
            <p><span style="font-size: 9pt; color: black; font-family: Tahoma;">#</span><span style="font-size: 9pt; color: black; font-family: 宋体;">这样，就可以分别通过以下方式来完成启动、停止、重启</span><span style="font-size: 9pt; color: black; font-family: Tahoma;">Proftpd</span><span style="font-size: 9pt; color: black; font-family: 宋体;">的工作了</span><span style="font-size: 9pt; color: black; font-family: Tahoma;"><br />
            service profptd start<br />
            service proftpd stop<br />
            service proftpd restart</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span></p>
<p style="margin-left: 21pt; text-indent: 0.75pt;"><span style="font-family: 宋体;">常用指令：</span></p>
<p style="margin-left: 21pt; text-indent: 0.75pt;">pgrep proftpd <span style="font-family: 宋体;">注：查看服务器是不是启动起来了；如果没有进程，说明失败；</span><br />
pkill proftpd <span style="font-family: 宋体;">注：杀死</span>proftpd<span style="font-family: 宋体;">的进程；也就是关掉服务器；</span></p>
<p style="margin-left: 21pt; text-indent: 0.75pt;"><span style="font-family: 宋体;">查看</span>proftpd<span style="font-family: 宋体;">日志：</span>tail -f /var/log/proftpd.syslog</p>
<p style="margin-left: 21pt; text-indent: 0.75pt;"><span style="font-family: 宋体;">查看</span>proftpd<span style="font-family: 宋体;">传输文件日志：</span>tail -f /var/log/<span style="color: black; font-family: 宋体;">proftpd.transferlog</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><strong><span style="font-size: 14pt;">五、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体;">配置磁盘限额</span></strong></p>
<p><span style="font-family: 宋体;">暂时未做，以后更新<br />
<br />
<br />
<strong>后记：</strong><br />
很多资料都是来参考网络上的资料整理的，配置环境测试通过，所以本文章可以随意转载,不过最好也能够标注原帖出处:）<br />
<br />
主要参考：<br />
<a title="http://blog.ixpub.net/html/92/10996892-2512.html" href="http://blog.ixpub.net/html/92/10996892-2512.html">http://blog.ixpub.net/html/92/10996892-2512.html</a><br />
<a title="http://hi.baidu.com/fei33352/blog/item/73acf881b0972bddbc3e1ed2.html" href="http://hi.baidu.com/fei33352/blog/item/73acf881b0972bddbc3e1ed2.html">http://hi.baidu.com/fei33352/blog/item/73acf881b0972bddbc3e1ed2.html</a></span></p>
<img src ="http://www.blogjava.net/jelver/aggbug/306316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-12-17 16:37 <a href="http://www.blogjava.net/jelver/articles/306316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>