﻿<?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-szhswl-文章分类-操作系统</title><link>http://www.blogjava.net/szhswl/category/27916.html</link><description>宋针还的个人空间</description><language>zh-cn</language><lastBuildDate>Wed, 12 Dec 2007 15:06:33 GMT</lastBuildDate><pubDate>Wed, 12 Dec 2007 15:06:33 GMT</pubDate><ttl>60</ttl><item><title>apache2自动启动脚本FOR RHEL AS4 U2</title><link>http://www.blogjava.net/szhswl/articles/167344.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Wed, 12 Dec 2007 13:58:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/167344.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/167344.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/167344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/167344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/167344.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">!/bin/bash&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000">#&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000">#&nbsp;httpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup&nbsp;script&nbsp;for&nbsp;the&nbsp;Apache&nbsp;HTTP&nbsp;Server&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000">#&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000">#&nbsp;chkconfig:&nbsp;-&nbsp;85&nbsp;15&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000">#&nbsp;description:&nbsp;Apache&nbsp;is&nbsp;a&nbsp;World&nbsp;Wide&nbsp;Web&nbsp;server.&nbsp;&nbsp;It&nbsp;is&nbsp;used&nbsp;to&nbsp;serve&nbsp;\&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #008000">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML&nbsp;files&nbsp;and&nbsp;CGI.&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000">#&nbsp;processname:&nbsp;httpd&nbsp;<br />
</span><span style="color: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #008000">#&nbsp;config:&nbsp;/etc/httpd/conf/httpd.conf&nbsp;<br />
</span><span style="color: #008080">&nbsp;10</span>&nbsp;<span style="color: #008000">#&nbsp;config:&nbsp;/etc/sysconfig/httpd&nbsp;<br />
</span><span style="color: #008080">&nbsp;11</span>&nbsp;<span style="color: #008000">#&nbsp;pidfile:&nbsp;/var/run/httpd.pid&nbsp;<br />
</span><span style="color: #008080">&nbsp;12</span>&nbsp;<span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;13</span>&nbsp;<span style="color: #008000">#&nbsp;Source&nbsp;function&nbsp;library.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;14</span>&nbsp;<span style="color: #000000">.</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">rc</span><span style="color: #000000">.</span><span style="color: #000000">d</span><span style="color: #000000">/</span><span style="color: #000000">init</span><span style="color: #000000">.</span><span style="color: #000000">d</span><span style="color: #000000">/</span><span style="color: #000000">functions&nbsp;<br />
</span><span style="color: #008080">&nbsp;15</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;16</span>&nbsp;<span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;[&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">f&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">sysconfig</span><span style="color: #000000">/</span><span style="color: #000000">httpd&nbsp;];&nbsp;then&nbsp;<br />
</span><span style="color: #008080">&nbsp;17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">.</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">sysconfig</span><span style="color: #000000">/</span><span style="color: #000000">httpd&nbsp;<br />
</span><span style="color: #008080">&nbsp;18</span>&nbsp;<span style="color: #000000">fi&nbsp;<br />
</span><span style="color: #008080">&nbsp;19</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;20</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;Start&nbsp;httpd&nbsp;in&nbsp;the&nbsp;C&nbsp;locale&nbsp;by&nbsp;default.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;21</span>&nbsp;<span style="color: #000000">HTTPD_LANG</span><span style="color: #000000">=</span><span style="color: #000000">${HTTPD_LANG</span><span style="color: #000000">-</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">C</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;22</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;23</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;This&nbsp;will&nbsp;prevent&nbsp;initlog&nbsp;from&nbsp;swallowing&nbsp;up&nbsp;a&nbsp;pass-phrase&nbsp;prompt&nbsp;if&nbsp;<br />
</span><span style="color: #008080">&nbsp;24</span>&nbsp;<span style="color: #008000">#&nbsp;mod_ssl&nbsp;needs&nbsp;a&nbsp;pass-phrase&nbsp;from&nbsp;the&nbsp;user.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;25</span>&nbsp;<span style="color: #000000">INITLOG_ARGS</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">""</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;26</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;27</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;Set&nbsp;HTTPD=/usr/sbin/httpd.worker&nbsp;in&nbsp;/etc/sysconfig/httpd&nbsp;to&nbsp;use&nbsp;a&nbsp;server&nbsp;<br />
</span><span style="color: #008080">&nbsp;28</span>&nbsp;<span style="color: #008000">#&nbsp;with&nbsp;the&nbsp;thread-based&nbsp;"worker"&nbsp;MPM;&nbsp;BE&nbsp;WARNED&nbsp;that&nbsp;some&nbsp;modules&nbsp;may&nbsp;not&nbsp;<br />
</span><span style="color: #008080">&nbsp;29</span>&nbsp;<span style="color: #008000">#&nbsp;work&nbsp;correctly&nbsp;with&nbsp;a&nbsp;thread-based&nbsp;MPM;&nbsp;notably&nbsp;PHP&nbsp;will&nbsp;refuse&nbsp;to&nbsp;start.&nbsp;<br />
</span><span style="color: #008080">&nbsp;30</span>&nbsp;<span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;31</span>&nbsp;<span style="color: #008000">#&nbsp;Path&nbsp;to&nbsp;the&nbsp;apachectl&nbsp;script,&nbsp;server&nbsp;binary,&nbsp;and&nbsp;short-form&nbsp;for&nbsp;messages.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;32</span>&nbsp;<span style="color: #000000">apachectl</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #0000ff">local</span><span style="color: #000000">/</span><span style="color: #000000">apache2</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apachectl&nbsp;<br />
</span><span style="color: #008080">&nbsp;33</span>&nbsp;<span style="color: #000000">httpd</span><span style="color: #000000">=</span><span style="color: #000000">${HTTPD</span><span style="color: #000000">-/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #0000ff">local</span><span style="color: #000000">/</span><span style="color: #000000">apache2</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">httpd}&nbsp;<br />
</span><span style="color: #008080">&nbsp;34</span>&nbsp;<span style="color: #000000">prog</span><span style="color: #000000">=</span><span style="color: #000000">httpd&nbsp;<br />
</span><span style="color: #008080">&nbsp;35</span>&nbsp;<span style="color: #000000">pidfile</span><span style="color: #000000">=</span><span style="color: #000000">${PIDFILE</span><span style="color: #000000">-/</span><span style="color: #000000">var</span><span style="color: #000000">/</span><span style="color: #000000">run</span><span style="color: #000000">/</span><span style="color: #000000">httpd</span><span style="color: #000000">.</span><span style="color: #000000">pid}&nbsp;<br />
</span><span style="color: #008080">&nbsp;36</span>&nbsp;<span style="color: #000000">lockfile</span><span style="color: #000000">=</span><span style="color: #000000">${LOCKFILE</span><span style="color: #000000">-/</span><span style="color: #000000">var</span><span style="color: #000000">/</span><span style="color: #0000ff">lock</span><span style="color: #000000">/</span><span style="color: #000000">subsys</span><span style="color: #000000">/</span><span style="color: #000000">httpd}&nbsp;<br />
</span><span style="color: #008080">&nbsp;37</span>&nbsp;<span style="color: #000000">RETVAL</span><span style="color: #000000">=</span><span style="color: #800000">0</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;38</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;39</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;check&nbsp;for&nbsp;1.3&nbsp;configuration&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;40</span>&nbsp;<span style="color: #000000">check13&nbsp;()&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONFFILE</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #0000ff">local</span><span style="color: #000000">/</span><span style="color: #000000">apache2</span><span style="color: #000000">/</span><span style="color: #000000">conf</span><span style="color: #000000">/</span><span style="color: #000000">httpd</span><span style="color: #000000">.</span><span style="color: #000000">conf&nbsp;<br />
</span><span style="color: #008080">&nbsp;42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GONE</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">(ServerType|BindAddress|Port|AddModule|ClearModuleList|</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GONE</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GONE</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">${GONE}AccessConfig|ResourceConfig)</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;LANG</span><span style="color: #000000">=</span><span style="color: #000000">C&nbsp;</span><span style="color: #0000ff">grep</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">Eiq&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">^[[:space:]]*($GONE)</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$CONFFILE</span><span style="color: #000000">;&nbsp;then&nbsp;<br />
</span><span style="color: #008080">&nbsp;46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<br />
</span><span style="color: #008080">&nbsp;47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000">1</span><span style="color: #000000">&gt;&amp;</span><span style="color: #800000">2</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">&nbsp;Apache&nbsp;1.3&nbsp;configuration&nbsp;directives&nbsp;found</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000">1</span><span style="color: #000000">&gt;&amp;</span><span style="color: #800000">2</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">&nbsp;please&nbsp;read&nbsp;/usr/share/doc/httpd-2.0.52/migration.html</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;failure&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">Apache&nbsp;1.3&nbsp;config&nbsp;directives&nbsp;test</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<br />
</span><span style="color: #008080">&nbsp;51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">1</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;<br />
</span><span style="color: #008080">&nbsp;53</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;54</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;55</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;The&nbsp;semantics&nbsp;of&nbsp;these&nbsp;two&nbsp;functions&nbsp;differ&nbsp;from&nbsp;the&nbsp;way&nbsp;apachectl&nbsp;does&nbsp;<br />
</span><span style="color: #008080">&nbsp;56</span>&nbsp;<span style="color: #008000">#&nbsp;things&nbsp;--&nbsp;attempting&nbsp;to&nbsp;start&nbsp;while&nbsp;running&nbsp;is&nbsp;a&nbsp;failure,&nbsp;and&nbsp;shutdown&nbsp;<br />
</span><span style="color: #008080">&nbsp;57</span>&nbsp;<span style="color: #008000">#&nbsp;when&nbsp;not&nbsp;running&nbsp;is&nbsp;also&nbsp;a&nbsp;failure.&nbsp;&nbsp;So&nbsp;we&nbsp;just&nbsp;do&nbsp;it&nbsp;the&nbsp;way&nbsp;init&nbsp;scripts&nbsp;<br />
</span><span style="color: #008080">&nbsp;58</span>&nbsp;<span style="color: #008000">#&nbsp;are&nbsp;expected&nbsp;to&nbsp;behave&nbsp;here.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;59</span>&nbsp;<span style="color: #000000">start()&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">n&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">Starting&nbsp;$prog:&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check13&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">1</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LANG</span><span style="color: #000000">=</span><span style="color: #800080">$HTTPD_LANG</span><span style="color: #000000">&nbsp;daemon&nbsp;</span><span style="color: #800080">$httpd</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$OPTIONS</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<br />
</span><span style="color: #008080">&nbsp;65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;</span><span style="color: #800080">$RETVAL</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">0</span><span style="color: #000000">&nbsp;]&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;touch&nbsp;${lockfile}&nbsp;<br />
</span><span style="color: #008080">&nbsp;66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$RETVAL</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;67</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;68</span>&nbsp;<span style="color: #000000">stop()&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">n&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">Stopping&nbsp;$prog:&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killproc&nbsp;</span><span style="color: #800080">$httpd</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<br />
</span><span style="color: #008080">&nbsp;73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;</span><span style="color: #800080">$RETVAL</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">0</span><span style="color: #000000">&nbsp;]&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;rm&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">f&nbsp;${lockfile}&nbsp;${pidfile}&nbsp;<br />
</span><span style="color: #008080">&nbsp;74</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;75</span>&nbsp;<span style="color: #000000">reload()&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">n&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">Reloading&nbsp;$prog:&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;LANG</span><span style="color: #000000">=</span><span style="color: #800080">$HTTPD_LANG</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$httpd</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$OPTIONS</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">t&nbsp;</span><span style="color: #000000">&gt;&amp;/</span><span style="color: #000000">dev</span><span style="color: #000000">/</span><span style="color: #000000">null;&nbsp;then&nbsp;<br />
</span><span style="color: #008080">&nbsp;78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">not&nbsp;reloading&nbsp;due&nbsp;to&nbsp;configuration&nbsp;syntax&nbsp;error</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;failure&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">not&nbsp;reloading&nbsp;$httpd&nbsp;due&nbsp;to&nbsp;configuration&nbsp;syntax&nbsp;error</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killproc&nbsp;</span><span style="color: #800080">$httpd</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">HUP&nbsp;<br />
</span><span style="color: #008080">&nbsp;83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;84</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;<br />
</span><span style="color: #008080">&nbsp;85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<br />
</span><span style="color: #008080">&nbsp;86</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;87</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;88</span>&nbsp;<span style="color: #008000">#</span><span style="color: #008000">&nbsp;See&nbsp;how&nbsp;we&nbsp;were&nbsp;called.&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;89</span>&nbsp;<span style="color: #000000">case&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">$1</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;in&nbsp;<br />
</span><span style="color: #008080">&nbsp;90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;start)&nbsp;<br />
</span><span style="color: #008080">&nbsp;91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;<br />
</span><span style="color: #008080">&nbsp;92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">&nbsp;93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;stop)&nbsp;<br />
</span><span style="color: #008080">&nbsp;94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop&nbsp;<br />
</span><span style="color: #008080">&nbsp;95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">&nbsp;96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;status)&nbsp;<br />
</span><span style="color: #008080">&nbsp;97</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;</span><span style="color: #800080">$httpd</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;98</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;99</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">100</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;restart)&nbsp;<br />
</span><span style="color: #008080">101</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop&nbsp;<br />
</span><span style="color: #008080">102</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;<br />
</span><span style="color: #008080">103</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">104</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;condrestart)&nbsp;<br />
</span><span style="color: #008080">105</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;[&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">f&nbsp;${pidfile}&nbsp;]&nbsp;;&nbsp;then&nbsp;<br />
</span><span style="color: #008080">106</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop&nbsp;<br />
</span><span style="color: #008080">107</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;<br />
</span><span style="color: #008080">108</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;<br />
</span><span style="color: #008080">109</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">110</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;reload)&nbsp;<br />
</span><span style="color: #008080">111</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reload&nbsp;<br />
</span><span style="color: #008080">112</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">113</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;graceful</span><span style="color: #000000">|</span><span style="color: #000000">help</span><span style="color: #000000">|</span><span style="color: #000000">configtest</span><span style="color: #000000">|</span><span style="color: #000000">fullstatus)&nbsp;<br />
</span><span style="color: #008080">114</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080">$apachectl</span><span style="color: #000000">&nbsp;$@&nbsp;<br />
</span><span style="color: #008080">115</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">116</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />
</span><span style="color: #008080">117</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">118</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">Usage:&nbsp;$prog&nbsp;{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">119</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">1</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">120</span>&nbsp;<span style="color: #000000">esac&nbsp;<br />
</span><span style="color: #008080">121</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">122</span>&nbsp;<span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">$RETVAL</span></div>
<img src ="http://www.blogjava.net/szhswl/aggbug/167344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-12 21:58 <a href="http://www.blogjava.net/szhswl/articles/167344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>找回ROOT密码</title><link>http://www.blogjava.net/szhswl/articles/166545.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Mon, 10 Dec 2007 00:40:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/166545.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/166545.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/166545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/166545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/166545.html</trackback:ping><description><![CDATA[一. Freebsd <br />
　　FreeBSD 4.7 <br />
　　当显示 boot ... 9 seconds按任意健 <br />
　　输入：boot -s <br />
　　登录以后 <br />
　　#/sbin/mount -a <br />
　　#passwd <br />
　　输入新密码. <br />
　　FreeBSD 5.* <br />
　当要求选择启动模式时按4进入单用户模式登录以后 <br />
　　#/sbin/mount -a <br />
　　#passwd <br />
　　输入新密码. <br />
　　二. Solaris <br />
　　ROOT密码遗忘的处理方法 <br />
　　1,如果还能用普通用户登陆的话,%df /etc,确定包含/etc目录分区的设备名 <br />
　　%df /etc <br />
　　/ /dev/dsk/c0t0d0s0... <br />
　　此例中是c0t0d0s0,如果你的根目录分区设备不一样的话,替换一下就可以啦 <br />
　　2,把系统盘插入cdrom中 <br />
　　3,出现提示符后,使用sync命令刷新文件系统 <br />
　　4,按下stop+A <br />
　　5,ok状态下键入boot cdrom -s <br />
　　6,在#提示符下键入mkdir /temp ,然后键入mount /dev/dsk/c0t0d0s0 /temp <br />
　　如果出现挂接不上的情况时,那么就运行fsck先 fsck /dev/rdsk/c0t0d0s0,然后在mount <br />
　　7,cd /temp/etc <br />
　　8,cp shadow shadowbak <br />
　　9,cat shadow <br />
　　得到root的口令字符串 <br />
　　root:djglcj0J:6453::::(其中djglcj0J就是root的加密后的口令字符串) <br />
　　10,sed s/djglcj0J// shadow&gt;shadownew <br />
11,cat shadownew查看是否已经变为 <br />
　　root::6453:::: <br />
　　12,cp shadownew shadow <br />
　　13,cd / <br />
　　unmount /temp <br />
　　sync <br />
　　shutdown -i0 -g0 -y <br />
　　14,取出CD后,重起系统,这时root就不需要密码啦！ <br />
　　这样也可以！ <br />
　　OK boot cdrom -s <br />
　　#TERM=sun <br />
　　#export TERM <br />
　　#mount /dev/dsk/c0t0d0s0 /a <br />
　　#vi /a/etc/shadow(删除root的加密后的密码) <br />
　　#reboot <br />
　　三. SCO UNIX <br />
　　一旦运行SCO UNIX 机器的超级用户口令忘了，可以用这个方法解决。 <br />
　　在另一台安装了SCO UNIX的机器上，以Root用户注册，进入系统，用 mkdev fd命令或命令scoadmin中的Filesystem之Floppy Filesystem Manager来制作应急启动盘，包括Boottable 盘和Root filesystem盘。 <br />
　　将上述制作的Root filesystem盘安装到硬盘上。 <br />
　　# mount /dev/fd0135ds18 /mnt <br />
　　再将硬盘上的/etc/passwd 和/tcb/files/auth/r/root两个文件拷贝到Root filesystem盘上。 <br />
　　# cp /etc/passwd /mnt <br />
　　# cp /tcb/files/auth/r/root /mnt <br />
　　卸载机器1硬盘上的软盘。 <br />
　　# umount /dev/rfd0135ds18 <br />
　　用Boot软盘去启动遗忘口令的机器，根据提示插入Root filesystem软盘，待出现"#"时，进行下面操作，将硬盘挂到软盘上： <br />
　　# mount /dev/hd0root /mnt <br />
　　备份硬盘上的/etc/passwd和/tcb/files/auth/r/root两个文件。因为这两个文件中还包含其他用户的注册信息。 <br />
　　用Root filesystem软盘上的两个文件，覆盖硬盘上的两个文件/etc/passwd 和/tcb/files/auth/r/root。 <br />
　# mkdir /cyh <br />
　　# mount /dev/fd0135ds18 /cyh <br />
　　# cd /cyh <br />
　　# cp passwd /mnt/etc <br />
　　# cp root /mnt/tcb/files/auth <br />
　　卸载安装上的两个文件系统。 <br />
　　# umount /dev/hd0root <br />
　　# umount /dev/fd0135ds18 <br />
　　取出软盘，重新启动机器，待出现Login时，以Root用户注册，键入第二台机器的超级用户口令，这样便可进入的超级用户了。 <br />
　　进入超级用户后，用Passwd和Root这两个文件的备份覆盖原来的文件，接着用passwd命令修改超级用户的口令。 <br />
　　用户可以用Alt+F2换一个窗口，以Root注册，现在用修改后的口令就能用了。 <br />
　　四. AIX 4.3.3(IBM) RS/6000 <br />
　　将第一张安装盘放入光驱，重起机器，按f5键，终端按5，进入maintance页面，选择mount rootvg的功能选项，调用password修改口令，退出即可 <br />
　　五. Linux <br />
　　三种办法： <br />
　　1.在系统进入单用户状态，直接用passwd root去更改 <br />
　　2.用安装光盘引导系统，进行linux rescue状态，将原来/分区挂接上来,作法如下： <br />
　　cd /mnt <br />
　　mkdir hd <br />
　　mount -t auto /dev/hdaX(原来/分区所在的分区号) hd <br />
　　cd hd <br />
　　chroot ./ <br />
　　passwd root <br />
　　这样可以搞定 <br />
　　3.将本机的硬盘拿下来，挂到其他的linux系统上，采用的办法与第二种相同 <br />
六. RedHat 8/RedHat9 <br />
　　（1）. lilo法 <br />
　　1. 在出现 lilo: 提示时键入 linux single <br />
　　画面显示 lilo: linux single <br />
　　2. 回车可直接进入linux命令行 <br />
　　3. #vi /etc/shadow <br />
　　将第一行，即以root开头的一行中root:后和下一个:前的内容删除， <br />
　　第一行将类似于 <br />
　　root::...... <br />
　　保存 <br />
　　4. #reboot重启，root密码为空 <br />
　　（2）. grub法 <br />
　　1. 在出现grub画面时，用上下键选中你平时启动linux的那一项(别选dos哟)，然后按e键 <br />
　　2. 再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/)，然后按e键 <br />
　　3. 修改你现在见到的命令行，加入single，结果如下： <br />
　　kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ <br />
　　4. 回车返回，然后按b键启动，即可直接进入linux命令行 <br />
　　5. #vi /etc/shadow <br />
　　将第一行，即以root开头的一行中root:后和下一个:前的内容删除， <br />
　　第一行将类似于 <br />
　　root::...... <br />
　　保存 <br />
　　6. #reboot重启，root密码为空 <br />
　　7.HP-UX <br />
　　启动时按esc 进入isl <br />
　　进入ISL后： <br />
　　isl&gt;bo pri <br />
　　(yes/no)y <br />
　　ipl&gt;hpux -is <br />
　　ipl&gt;vi /etc/passwd <br />
　　去掉root 的密码即可
<img src ="http://www.blogjava.net/szhswl/aggbug/166545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-10 08:40 <a href="http://www.blogjava.net/szhswl/articles/166545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Solaris安装和基本配置</title><link>http://www.blogjava.net/szhswl/articles/166321.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Sat, 08 Dec 2007 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/166321.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/166321.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/166321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/166321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/166321.html</trackback:ping><description><![CDATA[下载:<br />
从这个网址（http://www.sun.com/software/solaris/get.jsp） 可以下载最新的Solaris 10 3/05 for x64/x86的光盘。上去一看，有好多光盘啊，我下载了下面五张：<br />
Solaris 10 3/05 CD 1<br />
Solaris 10 3/05 CD 2<br />
Solaris 10 3/05 CD 3<br />
Solaris 10 3/05 CD 4<br />
Solaris 10 3/05 Language CD<br />
下载完Solaris 10 的光盘, 粗粗地看了一下其中的内容。第一张盘主要是Solaris 系统基本软件，第二张有许多和gnome相关的包，第三张主要是staroffice, 第四张包含了许多open source的软件如Apache/Ant/Python/TCL/mysql等等。<br />
<br />
<br />
安装准备：<br />
笔者还是喜欢用Linux 的分区工具， 通过使用http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?GXHC_JSESSIONID=-2089798192477626027&amp;GXHC_jive.user.lastvisited=1107746952510&amp;forum=14&amp;thread=6819 描述<br />
的方法做了分区。 我把自己60G的硬盘分为4个区， <br />
名称 内容 类型 大小 文件系统 描述<br />
/dev/hda1 Win-&gt;C: Primary 10G NTFS Windows XP <br />
/dev/hda2 Ext Ext 25G --- 扩展分区<br />
/dev/hda3 Linux Primary 10G EXT3 Linux <br />
/dev/hda4 Solaris Primary 11.5G Solaris Solaris x86 partition<br />
/dev/hda5 数据分区 Logical 12G FAT32 所有操作系统共享<br />
/dev/hda6 数据分区 Logical 12G FAT32 所有操作系统共享<br />
/dev/hda7 linux swap Logical 1G swap Linux swap,<br />
<br />
其中第四个主分区ID配成了0x82 (Solaris 分区), 大小为12G, 然后把自己下载的文件都先解成.iso文件并放在/dev/hda5分区下,这个分区在Windows下面是D盘.<br />
<br />
<br />
安装:<br />
笔者比较吝啬，一看要刻那么多盘，不干了。决定试试只刻第一张盘的方法。 刻好第一张盘，把BIOS设为光盘启动，然后从光盘启动。 非常顺利地看到了Solaris 的启动界面：<br />
SunOS Secondary Boot Version 4.02, 然后等待Initializing System... 选1。 Solaris Interactive, 继续等待. Configuring devices 那一步比较慢。<br />
<br />
经过几分钟的等待后就看到系统自己认识了我的Intel Pro/100 VE 网卡 iprb0， 接着又看到系统自己认识了我的显卡(Nvidia Gefore 4 420)、键盘和鼠标等， 非常高兴! <br />
要知道，在Solaris 9安装的时候，我可是费了好大的劲才配上显卡网卡的啊。(请参见<br />
http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?GXHC_JSESSIONID=-2089798192477626027&amp;GXHC_jive.user.lastvisited=1107746952510&amp;forum=14&amp;thread=6681)<br />
<br />
接着就开始配置了。 我选的是用简体中文安装，接下来配置网络、地域、时间、Root口令等，非常简单，这里我就不多说了。接下来我选择软件自动重新引导和自动弹出CD, <br />
第一张盘安装的介质我选择了CD, 后面的几张盘我都是选择了网络文件系统。 接收License Agreement后选择了初始安装、自定义安装， 选择了所有的中文的软件包并且把默认语言环境设为中文的GB18030, 没有选择任何附加产品，然后选择整个群组/缺省包， 选择磁盘上的Solaris分区，选择不保留数据，在分布文件系统时，因为是个人机器, 我只配了/ 和swap 两个文件系统<br />
<br />
我的文件系统如下<br />
/ 10G<br />
swap 1.5G<br />
接着就开始安装了。<br />
<br />
当第一张盘安装结束后， 要注意在重启过程中取出第一张光盘，否则机器又会从光盘启动。当系统提示第二张光盘的位置时，我选择了网络文件系统(目的是节约几张光盘)。<br />
前面讲到，我的Solaris 10光盘ISO文件在/dev/hda5下面，也就是Windows下的D盘，是FAT32的文件系统。我的做法是，先打开一个Terminal，然后把这个FAT32的磁盘mount 到Solaris下，最后通过lofiadm/mount命令把ISO文件 mount到Solaris下面。做法如下：<br />
1. 把FAT32的光盘mount到Solaris下面：<br />
首先建立目的目录，我打算把/dev/hda5 mount到/wind, /dev/hda6 mount到/wine. 所以，运行# mkdir /wind #mkdir /wine. <br />
接着/dev/dsk, ls 看到c0d0p0到c0d0p4, 这里c0d0p2就对应前面分区表中的/dev/hda2了，也就是那个扩展分区，里面包含了两个FAT32的logical-drive /dev/hda5和/dev/hda6。<br />
在Solaris 里面用device-name和logical-drive分别对应主分区和逻辑分区。这里扩展分区的device-name是c0d0p2，/dev/hda5逻辑分区的logical-drive 可以用c 或者数字1来表示。 /dev/hda6的logical-drive是d 或者数字2。弄清楚了这些命令就简单了。<br />
#mount -F pcfs /dev/dsk/c0d0p2:c /wind<br />
#mount -F pcfs /dev/dsk/c0d0p2:d /wine<br />
当然，要记住在/etc/vfstab里面加入下面两行，以便系统重新启动时能把FAT32的分区自动mount上<br />
/dev/dsk/c0d0p2:c /dev/rdsk/c0d0p2:c /wind pcfs 2 yes -<br />
/dev/dsk/c0d0p2:d /dev/rdsk/c0d0p2:d /wine pcfs 3 yes -<br />
<br />
参考文档：<br />
System Administration Guide: Devices and File Systems (http://docs.sun.com/app/docs/doc/817-5093)<br />
ch. 18. Mounting and Unmounting File Systems, Page 306, x86: How to Mount a PCFS (DOS) File System From a Hard Disk<br />
<br />
2. 用lofiadm/mount命令做虚拟光驱<br />
在Windows上有很多虚拟光驱程序，如Daemon, Virtual CD等，可以把.iso文件虚拟成光驱。 在Solaris下，我们用lofiadm命令。方法如下: <br />
# lofiadm -a /wind/solaris10/sol-10-GA-x86-v2-iso.iso 把.iso文件export为块设备，参数-a 表示add, 这个命令的output是/dev/lofi/1。这样我们就可以把设备/dev/lofi/1 mount到文件系统了<br />
# mount -F hsfs -o ro /dev/lofi/1 /mnt 把/dev/lofi/1 mount到/mnt<br />
<br />
然后#cd /mnt, 看到mount成功后，里面有了光盘上的内容，再回到安装界面， 在路径里面输入/mnt， 然后就能顺利安装了。接下来要装第三张盘的时候，同样到Terminal去，<br />
# umount /mnt 用来unmount, 这个不用我多说了<br />
# lofiadm -d /dev/lofi/1 <br />
接着对照第二张盘的命令来安装第三、第四张盘和语言包。<br />
装完后，系统会提示重新启动。 重启后，有CDE和JDS3两种桌面可供选择，我选择进入Java Desktop System 3的界面。<br />
<br />
大功告成！ 整个过程花了我将近2.5小时的时间。其中觉得第四张盘耗的时间最长。另外觉得JDS 3的桌面很漂亮也很方便使用。<br />
<br />
<br />
基本配置：<br />
1. 1400x1050分辨率的设置<br />
我的笔记本分辨率是1400x1050的，而Solaris 10起来后默认使用的是1280x1024的，看起来有点模糊。查了一些文档，知道需要新建一个文件/etc/X11/xorg.conf。下面是我的/etc/X11/xorg.conf的内容。<br />
[/etc/X11/xorg.conf]<br />
<br />
Section "ServerLayout"<br />
Identifier "X.org Configured"<br />
Screen 0 "Screen0" 0 0<br />
InputDevice "Mouse0" "CorePointer"<br />
InputDevice "Keyboard0" "CoreKeyboard"<br />
EndSection<br />
<br />
Section "ServerFlags"<br />
Option "HandleSpecialKeys" "Always"<br />
EndSection<br />
<br />
Section "Files"<br />
RgbPath "/usr/X11R6/lib/X11/rgb"<br />
ModulePath "/usr/X11R6/lib/modules"<br />
FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/Type1/sun/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/F3bitmaps/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/misc/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"<br />
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"<br />
EndSection<br />
<br />
Section "Module"<br />
Load "dbe"<br />
Load "extmod"<br />
Load "record"<br />
Load "xtrap"<br />
Load "bitstream"<br />
Load "speedo"<br />
Load "type1"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Keyboard0"<br />
Driver "keyboard"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Mouse0"<br />
Driver "mouse"<br />
Option "Protocol" "auto"<br />
Option "Device" "/dev/mouse"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Mouse1"<br />
Driver "mouse"<br />
Option "Protocol" "IMPS/2"<br />
Option "Device" "/dev/kdmouse"<br />
Option "SendCoreEvents"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
VendorName "Monitor Vendor"<br />
ModelName "Monitor Model"<br />
HorizSync 28.0-70.0<br />
VertRefresh 55.0-100.0<br />
DisplaySize 288 216<br />
EndSection<br />
<br />
Section "Device"<br />
### Available Driver options are:-<br />
### Values: &lt;i&gt;: integer, &lt;f&gt;: float, &lt;bool&gt;: "True"/"False",<br />
### &lt;string&gt;: "String", &lt;freq&gt;: "&lt;f&gt; Hz/kHz/MHz"<br />
### [arg]: arg optional<br />
#Option "SWcursor" # [&lt;bool&gt;]<br />
#Option "HWcursor" # [&lt;bool&gt;]<br />
#Option "NoAccel" # [&lt;bool&gt;]<br />
#Option "ShadowFB" # [&lt;bool&gt;]<br />
#Option "UseFBDev" # [&lt;bool&gt;]<br />
#Option "Rotate" # [&lt;str&gt;]<br />
#Option "VideoKey" # &lt;i&gt;<br />
Option "FlatPanel" # [&lt;bool&gt;]<br />
#Option "FPDither" # [&lt;bool&gt;]<br />
#Option "CrtcNumber" # &lt;i&gt;<br />
Option "MergedFB" "true" # [&lt;bool&gt;]<br />
Option "CRT2HSync" "31-60" # [&lt;str&gt;]<br />
Option "CRT2VRefresh" "50-75" # [&lt;str&gt;]<br />
Option "CRT2Position" "Clone" # [&lt;str&gt;]<br />
Option "MeataModes" "1400x1050-1024x768 1280x1024-1024x768 1024x768-1024x768 800x600-800x600 640x480-640x480"<br />
Identifier "Card0"<br />
Driver "nv"<br />
VendorName "nVidia Corporation"<br />
BoardName "NV17 [GeForce4 420 Go]"<br />
BusID "PCI:1:0:0"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Card0"<br />
Monitor "Monitor0"<br />
SubSection "Display"<br />
Viewport 0 0<br />
Depth 24<br />
Modes "1400x1050" "1280x1024" "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
EndSection<br />
<br />
<br />
[End of /etc/X11/xorg.conf]<br />
<br />
注意，我加入了<br />
Section "ServerFlags"<br />
Option "HandleSpecialKeys" "Always"<br />
EndSection<br />
这样在Xorg的XServer 碰到问题时，我就可以按"Alt + Ctrl + BkSp" 重新启动xserver了，非常方便。<br />
另外我还根据我的实际情况到启动-&gt;首选项-&gt;桌面首先项-&gt;显示下面更改了很多东西，这里我就不一一描述了。其中比较重要的一个是为了把字体改大，我选择了字体-&gt;细节-&gt;分辨率，把每英寸点数从96改为120，解决了1400x1050分辨率下字很小的问题。<br />
<br />
2. DHCP Client配置<br />
我公司里用的是DHCP，但问题是DHCP Server给我分配的主机名老是dhcp-12什么的，而且会变动，对于装JES什么的特别不方便。于是我修改了<br />
/etc/default/dhcpagent，把最后一行从PARAM_REQUEST_LIST=1,3,6,12,15,28,43 改为PARAM_REQUEST_LIST=1,3,6,15,28,43。<br />
去掉了选项hostname(12)。这个大家可以看注释。 另外就是加入新文件/etc/nodename, 里面的内容是自己喜欢的主机名。我用的是lap1。<br />
<br />
3. 默认权限的配置<br />
系统默认是采用安全的方案，但我的机器上面没有什么非常重要的数据，而且经常需要用root用户进行ssh,telnet,ftp等，而这些系统默认都不允许。<br />
没办法，手工改啦。<br />
ssh:<br />
/etc/ssh/sshd_config, 把PermitRootLogin改为yes。另外我曾经出现不能正常启动ssh service的情况。原因是没有在/etc/ssh下面自动生成<br />
ssh_host_rsa_key<br />
ssh_host_rsa_key.pub <br />
ssh_host_dsa_key<br />
ssh_host_dsa_key.pub<br />
等key文件， 最后我手工生成了这些文件，解决了这个问题：<br />
＃ ssh-keygen -b 1024 -t rsa1 -f /etc/ssh/ssh_host_key -N ""<br />
＃ ssh-keygen -b 1024 -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""<br />
＃ ssh-keygen -b 1024 -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""<br />
<br />
telnet:<br />
简单，修改文件/etc/default/login，把行CONSOLE=/dev/console注释掉，就可以用root用户telnet上来了<br />
ftp:<br />
只要修改/etc/ftpd/ftpusers， 把root用户注释掉就可以用root用户进行ftp了。<br />
<br />
4. 默认shell的配置。 <br />
系统默认使用的是/sbin/sh，但我喜欢使用更流行的bash, 于是修改/etc/passwd，把第一行从root:x:0:0:Super-User:/:/sbin/sh 改为root:x:0:0:Super-User:/:/bin/bash，重新登陆后发现默认shell成功更改。据说这个做法不是特别安全，但我还是喜欢这么做。<br />
<br />
5. 打印机的配置。 <br />
在Solaris 10的JDS桌面下安装打印机比较简单，只要通过启动-&gt;首选项-&gt;系统首选项-&gt;添加/删除打印机就行了。在图形界面里选择打印机-&gt;新的附加打印机或者新的网络打印机，通过图形界面就可以很简单配好打印机。<br />
<br />
<span style="font-size: 8pt">本文转自:http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp</span>
<img src ="http://www.blogjava.net/szhswl/aggbug/166321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-08 19:16 <a href="http://www.blogjava.net/szhswl/articles/166321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Solaris10中新的Dtrace工具</title><link>http://www.blogjava.net/szhswl/articles/165874.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 06 Dec 2007 11:55:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165874.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165874.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165874.html</trackback:ping><description><![CDATA[<div>DTrace即动态跟踪Dynamic Tracing，是Solaris 10的一个新功能，透过此一新功能，用户能够动态检测操作系统内核和用户进程，以更精确地掌握系统的资源使用状况，提高系统性能，减少支持成本，并进行有效的调节。1997年，供职于Sun而现已是Solaris内核开发部高级工程师的Bryan Cantrill 与他的工作组在紧张地研究一个性能问题，它出现在刚刚提及的Sun E10000服务器。该服务器在运行基准测试时，速度突然在一段时间内奇怪地降低。工作组经过六天夜以继日的工作后，终于发现了问题的根本原因。某个&#8220;愚蠢之极&#8221;的配置错误将服务器配置成了路由器。<br />
<br />
&#8220;我很受震惊，&#8221;Cantrill 说到， &#8220;这是任何一个客户都可能遇到的问题，但是他们可不敢奢望让内核开发人员为之夜以继日地工作，编写自定义代码以弄清楚问题。我们得找出一个更好的方法。&#8221;&nbsp; <br />
经过两年半的紧张开发，Cantrill和他的工作组终于研究出了这个更好的方法： Dtrace <br />
DTrace是过去十年中在操作系统方面最具意义的革新之一:<br />
Probe，Solaris中分散着30,000多的位置指针，也叫探测器probes，DTrace可激活成千上万的探测器，记录所关注的位置指定的数据，如命中，即可从该地址显示用户进程或系统内核的数据，从而了解系统，包括：<br />
1。任何函数的参数 <br />
2。内核的任何全局变量 <br />
3。函数调用的时间（NS，十亿分之一秒，无任何其它PC/Unix在ns一级精度） <br />
4。跟踪堆栈，包括指明函数调用的代码 <br />
5。函数调用时运行的进程 <br />
6。产生函数调用的线程 <br />
Probe于自定义D语言程序相关联，probe表示的格式为： <br />
provider:module:function:name <br />
1。显示当前动态系统中的动态Dtrace探针probe: <br />
# dtrace -l |more <br />
&nbsp;&nbsp; ID&nbsp;&nbsp; PROVIDER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MODULE&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; FUNCTION NAME <br />
&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; dtrace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN <br />
&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; dtrace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END <br />
&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; dtrace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ERROR <br />
&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; vminfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fasttrap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fasttrap_uwrite softlock <br />
&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; vminfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fasttrap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fasttrap_uread softlock <br />
&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_open entry <br />
&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_open return <br />
&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_close entry <br />
&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_close return <br />
&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_ioctl entry <br />
&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_ioctl return <br />
&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_info entry <br />
&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool_info return <br />
。。。 <br />
43545&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zmod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_strerror return <br />
43546&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zmod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_uncompress entry <br />
43547&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zmod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_uncompress return <br />
即当前本人V210上有43547个probe。 <br />
2。体验 dtrace 与 Unix ps 命令： <br />
如用ps看mozilla进程： <br />
# ps -e |grep mozilla <br />
&nbsp; 2386 pts/11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:00 mozilla <br />
&nbsp; 2436 pts/11&nbsp;&nbsp;&nbsp;&nbsp; 10:12 mozilla- <br />
也可使用dtrace 通过probe探针看： <br />
# dtrace -n 'syscall::exece:return { trace(execname);}' <br />
dtrace: description 'syscall::exece:return ' matched 1 probe <br />
CPU&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUNCTION:NAME <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; uname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; uname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; basename&nbsp;&nbsp; <br />
。。。 <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; sed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; mozilla-bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 1&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; csh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 1&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; mozilla&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
。。。 <br />
2。实际dtrace看的更细， <br />
如用date显示系统时间，很快就结束了，无法跟踪，体验dtrace跟踪效果： <br />
% date <br />
2005年05月24日 星期二 20时39分03秒 CST <br />
# dtrace -n 'syscall::exece: {trace(timestamp)}' <br />
ddtrace: description 'syscall::exece: ' matched 2 probes <br />
CPU&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUNCTION:NAME <br />
&nbsp; 0&nbsp; 11081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:entry&nbsp;&nbsp; 102890531281542 <br />
&nbsp; 0&nbsp; 11082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exece:return&nbsp;&nbsp; 102890532181875 <br />
即可跟踪其在第102890531281542纳秒开始读取，第102890532181875返回结果。 <br />
3。体验Dtrace 对系统调用更多的观察： <br />
如看机器忙闲状态，常用vmstat: <br />
# vmstat 1 <br />
&nbsp;kthr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; faults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu <br />
&nbsp;r b w&nbsp;&nbsp; swap&nbsp; free&nbsp; re&nbsp; mf pi po fr de sr s0 s3 s1 s1&nbsp;&nbsp; in&nbsp;&nbsp; sy&nbsp;&nbsp; cs us sy id <br />
&nbsp;0 0 0 5523680 1378352 14 48 84 1&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 0&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 341 2058&nbsp; 883&nbsp; 3&nbsp; 1 96 <br />
&nbsp;0 0 0 5368296 1218688 0 23 15&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 336 2605&nbsp; 722 10&nbsp; 1 89 <br />
&nbsp; <br />
得知产生2605多系统调用，但无和简单查找哪个进程的问题呢，试用dtrace看： <br />
# dtrace -n 'syscall::read:entry <a href="mailto:{@NUM[execname">{@NUM[execname</a>] = count();}' <br />
ddtrace: description 'syscall::read:entry ' matched 1 probe <br />
^C<br />
&nbsp;&nbsp;dtfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 <br />
&nbsp; sdtperfmeter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12 <br />
&nbsp; soffice.bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23 <br />
&nbsp; dic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23 <br />
&nbsp; dtterm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53 <br />
&nbsp; mozilla-bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 394 <br />
&nbsp; Xsun&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 545 <br />
显然发现CDE和Mozilla是产生大量系统调用的程序，看I/O分布也可： <br />
如还是Mozilla: <br />
# dtrace -n 'syscall::write:entry <a href="mailto:{@NUM[execname">{@NUM[execname</a>] = quantize(arg2);}' <br />
...&nbsp;<br />
&nbsp; mozilla-bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp; ------------- Distribution ------------- count&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |@@@@@@@@@@@@@@@@@@@@@&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 470&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 |&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; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 128 |&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; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 256 |@@@@@@@@&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; 184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512 |@@@@@@&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; 146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024 |@@@&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; 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048 |&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; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 |&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; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8192 |&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; 0&nbsp;&nbsp;&nbsp;&nbsp; <br />
... <br />
可观察到大量Mozilla产生的I/O在256-512字节间。 <br />
4。 想再仔细看程序内部情况？ <br />
truss不错： <br />
# truss /usr/sfw/bin/mozilla <br />
execve("/usr/bin/ksh", 0xFFBFF564, 0xFFBFF574)&nbsp; argc = 3 <br />
resolvepath("/usr/bin/ksh", "/usr/bin/ksh", 1023) = 12 <br />
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12 <br />
stat("/usr/bin/ksh", 0xFFBFF340)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0 <br />
open("/var/ld/ld.config", O_RDONLY)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err#2 ENOENT <br />
stat("/lib/libc.so.1", 0xFFBFEE70)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0 <br />
resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14 <br />
open("/lib/libc.so.1", O_RDONLY)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3 <br />
mmap(0x00010000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 。。。 <br />
试下dtrace: <br />
# dtrace -n 'syscall::read:return /execname =="mozilla" /{ ustack();}' <br />
dtrace: description 'syscall::read:return ' matched 1 probe <br />
CPU&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUNCTION:NAME <br />
&nbsp; 0&nbsp; 10984&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read:return&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libc.so.1`_read+0x8 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`io_readbuff+0x264 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`0x245e4 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`io_readc+0x2c <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`0x29c54 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`main+0xa30 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`_start+0x108 <br />
&nbsp; 0&nbsp; 10984&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read:return&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libc.so.1`_read+0x8 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`io_readbuff+0x264 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`0x245e4 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`io_readc+0x2c <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`0x28938 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ksh`0x28654 <br />
... <br />
看到n多调用，开始和返回，够开发人员分析的。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;总结，Dtrace功能强大，精度高，轻量，truss有时降低系统30％CPU利用率。但复杂，需对系统内核和应用熟悉，否则看不懂跟踪到的数据，估计以后CU该开Dtrace编程板块了。</div>
<img src ="http://www.blogjava.net/szhswl/aggbug/165874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-06 19:55 <a href="http://www.blogjava.net/szhswl/articles/165874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOLARIS10一些设置</title><link>http://www.blogjava.net/szhswl/articles/165870.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 06 Dec 2007 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165870.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165870.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165870.html</trackback:ping><description><![CDATA[1，进入控制台<br />
Sun Microsystems Inc.&nbsp;&nbsp; SunOS 5.10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generic January 2005<br />
You have new mail.<br />
# /usr/X11/bin/xorgconfig<br />
<br />
2，显示：<br />
This program will create a basic xorg.conf file, based on menu selections<br />
you make.&nbsp; This program will ask for a pathname when it is ready to write<br />
the file.<br />
<br />
The xorg.conf file usually resides in /etc/X11.&nbsp; If no xorg.conf file<br />
is present there, Xorg will probe the system to autoconfigure itself.<br />
You can run Xorg -configure to generate a xorg.conf file based on<br />
the results of autoconfiguration, or let this program produce a base<br />
xorg.conf file for your configuration and fine-tune it.<br />
<br />
Before continuing with this program, make sure you know what video card<br />
you have, and preferably also the chipset it uses and the amount of video<br />
memory on your video card, as well as the specifications of your monitor.<br />
<br />
Press enter to continue, or ctrl-c to abort.<br />
<br />
3，我们ENTER<br />
First specify a mouse protocol type. Choose one from the following list:<br />
<br />
&nbsp;1.&nbsp; Auto<br />
&nbsp;2.&nbsp; VUID<br />
&nbsp;3.&nbsp; SysMouse<br />
&nbsp;4.&nbsp; MouseSystems<br />
&nbsp;5.&nbsp; PS/2<br />
&nbsp;6.&nbsp; Microsoft<br />
&nbsp;7.&nbsp; Busmouse<br />
&nbsp;8.&nbsp; IMPS/2<br />
&nbsp;9.&nbsp; ExplorerPS/2<br />
10.&nbsp; GlidePointPS/2<br />
11.&nbsp; MouseManPlusPS/2<br />
12.&nbsp; NetMousePS/2<br />
13.&nbsp; NetScrollPS/2<br />
14.&nbsp; ThinkingMousePS/2<br />
<br />
The recommended protocol is Auto. If you have a very old mouse<br />
or don't want OS support or auto detection, and you have a two-button<br />
or three-button serial mouse, it is most likely of type Microsoft.<br />
<br />
Enter a protocol number: <br />
<br />
4，选择鼠标的种类，这里我们选5，PS2<br />
<br />
If your mouse has only two buttons, it is recommended that you enable<br />
Emulate3Buttons.<br />
<br />
Please answer the following question with either 'y' or 'n'.<br />
Do you want to enable Emulate3Buttons? <br />
<br />
5，要不要用鼠标的第三个键，废话当然用<br />
<br />
Now give the full device name that the mouse is connected to, for example<br />
/dev/tty00. Just pressing enter will use the default, /dev/kdmouse.<br />
<br />
Mouse device: <br />
<br />
6，鼠标的设备名，用默认的。<br />
<br />
Please select one of the following keyboard types that is the better<br />
description of your keyboard. If nothing really matches,<br />
choose 1 (Generic 101-key PC)<br />
<br />
&nbsp; 1&nbsp; Sun Type 6 USB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Sun Type 6 USB (European layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Sun Type 6 USB (Japanese layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Sun Type 6 USB (Unix layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Generic 101-key PC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp; Generic 102-key (Intl) PC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; Generic 104-key PC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 8&nbsp; Generic 105-key (Intl) PC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 9&nbsp; Sun Type 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;10&nbsp; Sun Type 4 (Canadian layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;11&nbsp; Sun Type 4 (Japanese layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;12&nbsp; Sun Type 4 (European layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;13&nbsp; Sun Type 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;14&nbsp; Sun Type 5 (European layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;15&nbsp; Sun Type 5 (Japanese layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;16&nbsp; Sun Type 5 (Unix layout)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Enter a number to choose the keyboard.<br />
<br />
7，选择键盘的类型，现在没烂键盘了吧。选7<br />
<br />
&nbsp; 1&nbsp; U.S. English&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; U.S. English w/ ISO9995-3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; U.S. English w/ deadkeys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Albanian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Arabic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp; Armenian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; Azerbaijani&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 8&nbsp; Belarusian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 9&nbsp; Belgian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;10&nbsp; Bengali&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;11&nbsp; Bosnian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;12&nbsp; Brazilian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;13&nbsp; Bulgarian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;14&nbsp; Burmese&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;15&nbsp; Canadian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;16&nbsp; French Canadian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;17&nbsp; Croatian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;18&nbsp; Croatian (US)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Enter a number to choose the country.<br />
Press enter for the next page<br />
<br />
8，语言用第一个，US<br />
<br />
Please enter a variant name for 'us' layout. Or just press enter<br />
for default variant<br />
<br />
9，回车用默认的 。<br />
<br />
Please answer the following question with either 'y' or 'n'.<br />
Do you want to select additional XKB options (group switcher,<br />
group indicator, etc.)? <br />
<br />
10，接下来是功能健的设置。我们选Y进去看看<br />
<br />
&nbsp; 1&nbsp; Right Alt key switches group while pressed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Left Alt key switches group while pressed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Left Win-key switches group while pressed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Right Win-key switches group while pressed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Both Win-keys switch group while pressed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp; Right Alt key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; Left Alt key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 8&nbsp; Caps Lock key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 9&nbsp; Shift+CapsLock changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;10&nbsp; Both Shift keys together change group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;11&nbsp; Both Alt keys together change group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;12&nbsp; Both Ctrl keys together change group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;13&nbsp; Control+Shift changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;14&nbsp; Alt+Control changes 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; <br />
&nbsp;15&nbsp; Alt+Shift changes 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; <br />
&nbsp;16&nbsp; Menu key changes 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; <br />
&nbsp;17&nbsp; Left Win-key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;18&nbsp; Right Win-key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;19&nbsp; Left Shift key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;20&nbsp; Right Shift key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;21&nbsp; Left Ctrl key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;22&nbsp; Right Ctrl key changes group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Please select the option or just press enter if none<br />
<br />
11，根据自己的喜好随意设置吧，不过应该没人会动吧<br />
<br />
&nbsp;&nbsp; Third level choosers<br />
<br />
&nbsp; 1&nbsp; Press Right Control to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Press Left Alt key to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Press Right Alt key to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Press any of Alt keys to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Press Menu key to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp; Press any of Win-keys to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; Press Left Win-key to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 8&nbsp; Press Right Win-key to choose 3rd level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Please select the option or just press enter if none<br />
<br />
12，默认回车<br />
<br />
&nbsp;&nbsp; Control Key Position<br />
<br />
&nbsp; 1&nbsp; Make CapsLock an additional Control&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Swap Control and Caps Lock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Control key at left of 'A'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Control key at bottom left&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Right Control key works as Right Alt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Please select the option or just press enter if none<br />
<br />
13，随意<br />
<br />
&nbsp;&nbsp; Use keyboard LED to show alternative group<br />
<br />
&nbsp; 1&nbsp; Num_Lock LED shows alternative group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Caps_Lock LED shows alternative group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Scroll_Lock LED shows alternative group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Please select the option or just press enter if none<br />
<br />
14，三个LED灯的设置<br />
<br />
&nbsp;&nbsp; CapsLock key behavior<br />
<br />
&nbsp; 1&nbsp; uses internal capitalization. Shift cancels Caps. <br />
&nbsp; 2&nbsp; uses internal capitalization. Shift doesn't cancel Caps.<br />
&nbsp; 3&nbsp; acts as Shift with locking. Shift cancels Caps.&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; acts as Shift with locking. Shift doesn't cancel Caps.<br />
<br />
Please select the option or just press enter if none<br />
<br />
15，大写字母锁定键指示灯的设置<br />
<br />
&nbsp;&nbsp; Alt/Win key behavior<br />
<br />
&nbsp; 1&nbsp; Add the standard behavior to Menu key.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; Alt and Meta on the Alt keys (default).&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; Meta is mapped to the Win-keys.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; Meta is mapped to the left Win-key.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; Super is mapped to the Win-keys (default).&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp; Hyper is mapped to the Win-keys.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; Right Alt is Compose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 8&nbsp; Right Win-key is Compose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 9&nbsp; Menu is Compose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;10&nbsp; Kana Lock key is locking&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;11&nbsp; Shift with numpad keys works as in MS Windows.&nbsp;&nbsp;&nbsp; <br />
&nbsp;12&nbsp; Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server.<br />
<br />
Please select the option or just press enter if none<br />
<br />
16，ALT+WIN键的设置。<br />
<br />
Now we want to set the specifications of the monitor. The two critical<br />
parameters are the vertical refresh rate, which is the rate at which the<br />
the whole screen is refreshed, and most importantly the horizontal sync rate,<br />
which is the rate at which scanlines are displayed.<br />
<br />
The valid range for horizontal sync and vertical sync should be documented<br />
in the manual of your monitor. If in doubt, check the monitor database<br />
/usr/X11/share/doc/Monitors to see if your monitor is there.<br />
<br />
Press enter to continue, or ctrl-c to abort.<br />
<br />
17，检查显卡的数据库，回车<br />
<br />
You must indicate the horizontal sync range of your monitor. You can either<br />
select one of the predefined ranges below that correspond to industry-<br />
standard monitor types, or give a specific range.<br />
<br />
It is VERY IMPORTANT that you do not specify a monitor type with a horizontal<br />
sync range that is beyond the capabilities of your monitor. If in doubt,<br />
choose a conservative setting.<br />
<br />
&nbsp;&nbsp;&nbsp; hsync in kHz; monitor type with characteristic modes<br />
&nbsp;1&nbsp; 31.5; Standard VGA, 640x480 @ 60 Hz<br />
&nbsp;2&nbsp; 31.5 - 35.1; Super VGA, 800x600 @ 56 Hz<br />
&nbsp;3&nbsp; 31.5, 35.5; 8514 Compatible, 1024x768 @ 87 Hz interlaced (no 800x600)<br />
&nbsp;4&nbsp; 31.5, 35.15, 35.5; Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz<br />
&nbsp;5&nbsp; 31.5 - 37.9; Extended Super VGA, 800x600 @ 60 Hz, 640x480 @ 72 Hz<br />
&nbsp;6&nbsp; 31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz<br />
&nbsp;7&nbsp; 31.5 - 57.0; High Frequency SVGA, 1024x768 @ 70 Hz<br />
&nbsp;8&nbsp; 31.5 - 64.3; Monitor that can do 1280x1024 @ 60 Hz<br />
&nbsp;9&nbsp; 31.5 - 79.0; Monitor that can do 1280x1024 @ 74 Hz<br />
10&nbsp; 31.5 - 82.0; Monitor that can do 1280x1024 @ 76 Hz<br />
11&nbsp; Enter your own horizontal sync range<br />
<br />
Enter your choice (1-11): <br />
<br />
18，我选7，文献也是这样选的<br />
<br />
You must indicate the vertical sync range of your monitor. You can either<br />
select one of the predefined ranges below that correspond to industry-<br />
standard monitor types, or give a specific range. For interlaced modes,<br />
the number that counts is the high one (e.g. 87 Hz rather than 43 Hz).<br />
<br />
&nbsp;1&nbsp; 50-70<br />
&nbsp;2&nbsp; 50-90<br />
&nbsp;3&nbsp; 50-100<br />
&nbsp;4&nbsp; 40-150<br />
&nbsp;5&nbsp; Enter your own vertical sync range<br />
<br />
Enter your choice: <br />
<br />
19，选2<br />
<br />
You must now enter a few identification/description strings, namely an<br />
identifier, a vendor name, and a model name. Just pressing enter will fill<br />
in default names.<br />
<br />
The strings are free-form, spaces are allowed.<br />
Enter an identifier for your monitor definition: <br />
<br />
20，用默认的吧<br />
<br />
Now we must configure video card specific settings. At this point you can<br />
choose to make a selection out of a database of video card definitions.<br />
Because there can be variation in Ramdacs and clock generators even<br />
between cards of the same model, it is not sensible to blindly copy<br />
the settings (e.g. a Device section). For this reason, after you make a<br />
selection, you will still be asked about the components of the card, with<br />
the settings from the chosen database entry presented as a strong hint.<br />
<br />
The database entries include information about the chipset, what driver to<br />
run, the Ramdac and ClockChip, and comments that will be included in the<br />
Device section. However, a lot of definitions only hint about what driver<br />
to run (based on the chipset the card uses) and are untested.<br />
<br />
If you can't find your card in the database, there's nothing to worry about.<br />
You should only choose a database entry that is exactly the same model as<br />
your card; choosing one that looks similar is just a bad idea (e.g. a<br />
GemStone Snail 64 may be as different from a GemStone Snail 64+ in terms of<br />
hardware as can be).<br />
<br />
Do you want to look at the card database? <br />
<br />
21，是否要看显卡的数据库？文献税这里键入Y和YES是不一样的结果，我看一样。。。<br />
<br />
&nbsp; 0&nbsp; * Generic VESA compatible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 1&nbsp; * Generic VGA compatible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 2&nbsp; * Unsupported VGA compatible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 3&nbsp; ** 3DLabs, TI (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [glint]&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 4&nbsp; ** 3Dfx (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [tdfx]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 5&nbsp; ** ATI (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ati]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 6&nbsp; ** ATI Radeon (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [radeon]&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 7&nbsp; ** ATI Rage 128 based (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [r128]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 8&nbsp; ** Alliance Pro Motion (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [apm]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp; 9&nbsp; ** Ark Logic (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ark]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;10&nbsp; ** Chips and Technologies (generic)&nbsp;&nbsp; [chips]&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;11&nbsp; ** Cirrus Logic (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [cirrus]&nbsp;&nbsp;&nbsp; -<br />
&nbsp;12&nbsp; ** Cyrix MediaGX (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [cyrix]&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;13&nbsp; ** DEC TGA (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [tga]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;14&nbsp; ** Intel i740 (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [i740]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;15&nbsp; ** Intel i810 (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [i810]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;16&nbsp; ** Linux framebuffer (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [fbdev]&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;17&nbsp; ** Matrox Graphics (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [mga]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
<br />
Enter a number to choose the corresponding card definition.<br />
Press enter for the next page, q to continue configuration.<br />
<br />
22，因为我在虚拟机里这页没有，回车下一页，如果是实体安装，就要选择相应的显卡<br />
<br />
&nbsp;18&nbsp; ** NVIDIA (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [nv]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;19&nbsp; ** NeoMagic (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [neomagic]&nbsp; -<br />
&nbsp;20&nbsp; ** Number Nine I128 (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [i128]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;21&nbsp; ** Rendition (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [rendition] -<br />
&nbsp;22&nbsp; ** S3 (not ViRGE or Savage) (generic) [s3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;23&nbsp; ** S3 Savage (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [savage]&nbsp;&nbsp;&nbsp; -<br />
&nbsp;24&nbsp; ** S3 ViRGE (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [s3virge]&nbsp;&nbsp; -<br />
&nbsp;25&nbsp; ** SiS (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [sis]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;26&nbsp; ** Silicon Motion (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [siliconmotion]-<br />
&nbsp;27&nbsp; ** Trident (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [trident]&nbsp;&nbsp; -<br />
&nbsp;28&nbsp; ** Tseng Labs (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [tseng]&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;29&nbsp; ** VMWare guest OS (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [vmware]&nbsp;&nbsp;&nbsp; -<br />
&nbsp;30&nbsp; 2 the Max MAXColor S3 Trio64V+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br />
&nbsp;31&nbsp; 2-the-Max MAXColor 6000&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; ET6000<br />
&nbsp;32&nbsp; 3DLabs Oxygen GMX&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; PERMEDIA 2<br />
&nbsp;33&nbsp; 928Movie&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; S3 928<br />
&nbsp;34&nbsp; AGX (generic)&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; AGX-014/15/16<br />
&nbsp;35&nbsp; ALG-5434(E)&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; CL-GD5434<br />
<br />
Enter a number to choose the corresponding card definition.<br />
Press enter for the next page, q to continue configuration.<br />
<br />
23，在虚拟机里，选29。<br />
<br />
Your selected card definition:<br />
<br />
Identifier: ** VMWare guest OS (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [vmware]<br />
Chipset:&nbsp;&nbsp;&nbsp; -<br />
Driver:&nbsp;&nbsp;&nbsp;&nbsp; vmware<br />
<br />
Press enter to continue, or ctrl-c to abort.<br />
<br />
24，确认<br />
<br />
Now you must give information about your video card. This will be used for<br />
the "Device" section of your video card in xorg.conf.<br />
<br />
It is probably a good idea to use the same approximate amount as that detected<br />
by the server you intend to use. If you encounter problems that are due to the<br />
used server not supporting the amount memory you have, specify the maximum<br />
amount supported by the server.<br />
<br />
How much video memory do you have on your video card:<br />
<br />
&nbsp;1&nbsp; 256K<br />
&nbsp;2&nbsp; 512K<br />
&nbsp;3&nbsp; 1024K<br />
&nbsp;4&nbsp; 2048K<br />
&nbsp;5&nbsp; 4096K<br />
&nbsp;6&nbsp; 8192K<br />
&nbsp;7&nbsp; 16384K<br />
&nbsp;8&nbsp; 32768K<br />
&nbsp;9&nbsp; 65536K<br />
10&nbsp; 131072K<br />
11&nbsp; 262144K<br />
12&nbsp; Other<br />
<br />
25，显存，文献上说用4M或8M都可以，我选8M<br />
<br />
You must now enter a few identification/description strings, namely an<br />
identifier, a vendor name, and a model name. Just pressing enter will fill<br />
in default names (possibly from a card definition).<br />
<br />
Your card definition is ** VMWare guest OS (generic)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [vmware].<br />
<br />
The strings are free-form, spaces are allowed.<br />
Enter an identifier for your video card definition:<br />
<br />
26，给你的显存写描述<br />
<br />
For each depth, a list of modes (resolutions) is defined. The default<br />
resolution that the server will start-up with will be the first listed<br />
mode that can be supported by the monitor and card.<br />
Currently it is set to:<br />
<br />
"1280x1024" "1024x768" "800x600" "640x480" for 8-bit<br />
"1280x1024" "1024x768" "800x600" "640x480" for 16-bit<br />
"1280x1024" "1024x768" "800x600" "640x480" for 24-bit<br />
<br />
Modes that cannot be supported due to monitor or clock constraints will<br />
be automatically skipped by the server.<br />
<br />
&nbsp;1&nbsp; Change the modes for 8-bit (256 colors)<br />
&nbsp;2&nbsp; Change the modes for 16-bit (32K/64K colors)<br />
&nbsp;3&nbsp; Change the modes for 24-bit (24-bit color)<br />
&nbsp;4&nbsp; The modes are OK, continue.<br />
<br />
Enter your choice: <br />
<br />
27，选择色深。文献是16位的，我也跟风。。。<br />
<br />
Select modes from the following list:<br />
<br />
&nbsp;1&nbsp; "640x400"<br />
&nbsp;2&nbsp; "640x480"<br />
&nbsp;3&nbsp; "800x600"<br />
&nbsp;4&nbsp; "1024x768"<br />
&nbsp;5&nbsp; "1280x1024"<br />
&nbsp;6&nbsp; "320x200"<br />
&nbsp;7&nbsp; "320x240"<br />
&nbsp;8&nbsp; "400x300"<br />
&nbsp;9&nbsp; "1152x864"<br />
&nbsp;a&nbsp; "1600x1200"<br />
&nbsp;b&nbsp; "1800x1400"<br />
&nbsp;c&nbsp; "512x384"<br />
&nbsp;d&nbsp; "1400x1050"<br />
<br />
Please type the digits corresponding to the modes that you want to select.<br />
For example, 432 selects "1024x768" "800x600" "640x480", with a<br />
default mode of 1024x768.<br />
<br />
Which modes? <br />
<br />
28，分辨率的设置，可以多选，我选5432<br />
<br />
You can have a virtual screen (desktop), which is screen area that is larger<br />
than the physical screen and which is panned by moving the mouse to the edge<br />
of the screen. If you don't want virtual desktop at a certain resolution,<br />
you cannot have modes listed that are larger. Each color depth can have a<br />
differently-sized virtual screen<br />
<br />
Please answer the following question with either 'y' or 'n'.<br />
Do you want a virtual screen that is larger than the physical screen?<br />
<br />
29，设置鼠标是否可以越过虚拟桌面，一般选N，但文献说选Y很好玩。。。。所以选Y <br />
<br />
For each depth, a list of modes (resolutions) is defined. The default<br />
resolution that the server will start-up with will be the first listed<br />
mode that can be supported by the monitor and card.<br />
Currently it is set to:<br />
<br />
"1280x1024" "1024x768" "800x600" "640x480" for 8-bit<br />
"1280x1024" "1024x768" "800x600" "640x480" for 16-bit<br />
"1280x1024" "1024x768" "800x600" "640x480" for 24-bit<br />
<br />
Modes that cannot be supported due to monitor or clock constraints will<br />
be automatically skipped by the server.<br />
<br />
&nbsp;1&nbsp; Change the modes for 8-bit (256 colors)<br />
&nbsp;2&nbsp; Change the modes for 16-bit (32K/64K colors)<br />
&nbsp;3&nbsp; Change the modes for 24-bit (24-bit color)<br />
&nbsp;4&nbsp; The modes are OK, continue.<br />
<br />
Enter your choice: <br />
<br />
30，又回到原来的地方了。选4确认模式。<br />
<br />
Please specify which color depth you want to use by default:<br />
<br />
&nbsp; 1&nbsp; 1 bit (monochrome)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2&nbsp; 4 bits (16 colors)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3&nbsp; 8 bits (256 colors)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 4&nbsp; 16 bits (65536 colors)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 5&nbsp; 24 bits (16 million colors)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
Enter a number to choose the default depth.<br />
<br />
31，默认的色深。16位的，选4<br />
<br />
I am going to write the xorg.conf file now. Make sure you don't accidently<br />
overwrite a previously configured one.<br />
<br />
Shall I write it to /etc/X11/xorg.conf? <br />
<br />
32，是否要保存配置文件？那还用说！！<br />
<br />
File has been written. Take a look at it before starting an X server. Note that<br />
the xorg.conf file must be in one of the directories searched by the server<br />
(e.g. /etc/X11) in order to be used. Within the server press<br />
ctrl, alt and '+' simultaneously to cycle video resolutions. Pressing ctrl,<br />
alt and backspace simultaneously immediately exits the server (use if<br />
the monitor doesn't sync for a particular mode).<br />
<br />
For further configuration, refer to the xorg.conf(5) manual page.<br />
<br />
33，提示OK<br />
接下来sync;init 6重启<br />
<br />
好大的桌面啊～～～^o^<br />
<br />
<img id="ViewPicture.ascx_GalleryImage" style="border-right: black 2px solid; border-top: black 2px solid; border-left: black 2px solid; width: 514px; border-bottom: black 2px solid; height: 385px" alt="" src="file:///E:/资料/HTML/solaris%2010鼠标键盘显卡分辨率刷新率等等的设置（本文在solaris10下post）%20-%20风海迷沙的程序员生活%20-%20CSDNBlog.files/r_So26.jpg" />&nbsp;<img id="ViewPicture.ascx_GalleryImage" style="border-right: black 2px solid; border-top: black 2px solid; border-left: black 2px solid; width: 578px; border-bottom: black 2px solid; height: 453px" alt="" src="file:///E:/资料/HTML/solaris%2010鼠标键盘显卡分辨率刷新率等等的设置（本文在solaris10下post）%20-%20风海迷沙的程序员生活%20-%20CSDNBlog.files/r_So27.jpg" />
<p><br />
<br />
<br />
</p>
<br />
<br />
<p id="TBPingURL" style="font-size: 8pt">本文转自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=616106</p>
<img src ="http://www.blogjava.net/szhswl/aggbug/165870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-06 19:49 <a href="http://www.blogjava.net/szhswl/articles/165870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX的VSFTP配置</title><link>http://www.blogjava.net/szhswl/articles/165850.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 06 Dec 2007 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165850.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165850.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165850.html</trackback:ping><description><![CDATA[以下文章介绍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 />
&nbsp; &nbsp;&nbsp;&nbsp;<br />
二、获取最新版的Vsftp程序 <br />
代码: <br />
# cd /home/xuchen <br />
# tar xzvf vsftpd-2.0.3.tar.gz //解压缩程序 <br />
# cd vsftpd-2.0.3<br />
三、三种方式的实现&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />
1、匿名用户形式实现 <br />
# vi builddefs.h&nbsp;&nbsp;\编辑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&nbsp;&nbsp;//直接在vsftpd-2.0.3里用make编译 <br />
# ls -l vsftpd <br />
-rwxr-xr-x&nbsp;&nbsp;1 root root 86088 Jun&nbsp;&nbsp;6 12:29 vsftpd&nbsp;&nbsp;//可执行程序已被编译成功 <br />
<br />
创建必要的帐号，目录： <br />
# useradd nobody&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <br />
# mkdir /usr/share/empty&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# mkdir /var/ftp&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# useradd -d /var/ftp ftp&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <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;&nbsp;&nbsp;//以后台方式启动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 "/" <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 }'` <br />
kill -9 $a<br />
那么现在大家看看我的匿名服务器配置文件吧 <br />
anonymous_enable=YES&nbsp;&nbsp;//允许匿名访问，这是匿名服务器必须的 <br />
write_enable=YES&nbsp;&nbsp;//全局配置可写 <br />
no_anon_password=YES //匿名用户login时不询问口令 <br />
anon_umask=077&nbsp;&nbsp;//匿名用户上传的文件权限是-rw---- <br />
anon_upload_enable=YES&nbsp;&nbsp;//允许匿名用户上传文件 <br />
anon_mkdir_write_enable=YES&nbsp;&nbsp;//允许匿名用户建立目录 <br />
anon_other_write_enable=YES&nbsp;&nbsp;//允许匿名用户具有建立目录，上传之外的权限，如重命名，删除 <br />
dirmessage_enable=YES&nbsp;&nbsp;//当使用者转换目录,则会显示该目录下的.message信息 <br />
xferlog_enable=YES&nbsp; &nbsp;//记录使用者所有上传下载信息 <br />
xferlog_file=/var/log/vsftpd.log&nbsp;&nbsp;//将上传下载信息记录到/var/log/vsftpd.log中 <br />
xferlog_std_format=YES&nbsp; &nbsp;//日志使用标准xferlog格式 <br />
idle_session_timeout=600&nbsp;&nbsp;//客户端超过600S没有动作就自动被服务器踢出 <br />
data_connection_timeout=120&nbsp;&nbsp;//数据传输时超过120S没有动作被服务器踢出 <br />
chown_uploads=YES <br />
chown_username=daemon&nbsp;&nbsp;//上传文件的属主 <br />
ftpd_banner=Welcome to d-1701.com FTP service.&nbsp;&nbsp;//FTP欢迎信息 <br />
anon_max_rate=80000&nbsp;&nbsp;//这是匿名用户的下载速度为80KBytes/s <br />
check_shell=NO&nbsp;&nbsp;//不检测SHELL<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 />
# cd /home/xuchen/vsftpd-2.0.3&nbsp;&nbsp;//进入vsftpd-2.0.3的源代码目录 <br />
# make clean&nbsp;&nbsp;//清除编译环境 <br />
# vi builddefs.h&nbsp;&nbsp;\继续编辑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&nbsp;&nbsp;//直接在vsftpd-2.0.3里用make编译 <br />
# ls -l vsftpd <br />
-rwxr-xr-x&nbsp;&nbsp;1 root root 84712 Jun&nbsp;&nbsp;6 18:56 vsftpd&nbsp;&nbsp;//可执行程序已被编译成功<br />
创建必要的帐号，目录： <br />
# useradd nobody&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <br />
# mkdir /usr/share/empty&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# mkdir /var/ftp&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# useradd -d /var/ftp ftp&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <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 />
# 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&nbsp;&nbsp;//这两项配置说不允许匿名用户登陆，允许本地用户登陆 <br />
# /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf &amp;&nbsp; &nbsp;//以后台方式启动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 "/root" <br />
ftp&gt; quit <br />
221 Goodbye. <br />
我们看到root用户可以登陆到ftp，他的登陆目录就是自己的主目录<br />
再测试一个系统用户，那我们先建立一个用户名叫sss的 <br />
# useradd sss<br />
# passwd sss<br />
Changing password for user sss. <br />
New UNIX password: <br />
Retype new UNIX password: <br />
passwd: all authentication tokens updated 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): sss<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 "/home/sss" <br />
ftp&gt; quit <br />
221 Goodbye. <br />
我们看到sss用户可以登陆到ftp，他的登陆目录也是自己的主目录。哈哈，又完成了！<br />
<br />
高级配置 <br />
细心的朋友可能已经看出来如果我们不支持PAM认证方式，那么本地用户就可以登陆，而默认编译的vsftpd支持PAM认证方式，所以是不支持本地用户登陆的。恩，从这点说，这也是vsftp安全的一个表现----禁止本地用户登陆。 <br />
我们登陆后进行测试，传一个文件上去，得，失败了，那下载个文件下来吧，恩，这是成功的（见图2），而且我们发现我们可以进入到系统根目录（见图3），这样很危险。 <br />
<br />
<br />
<br />
那么改配置文件吧，为了测试方便，我们先建立一个名为kill-loc的脚本，也是为了杀掉FTP程序的 <br />
#!/bin/bash <br />
a=`/bin/ps -A | grep vsftpd-loc | awk '{print }'` <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&nbsp;&nbsp;//本地用户文件上传后的权限是-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&nbsp;&nbsp;//你可以指定所有本地用户登陆后的目录,如果不设置此项，用户都会登陆于自己的主目录，就跟咱们前面测试的结果是一样的 <br />
local_max_rate=500000&nbsp;&nbsp;//本地用户的下载速度为500KBytes/s <br />
idle_session_timeout=600 <br />
data_connection_timeout=120 <br />
nopriv_user= nobody&nbsp; &nbsp;//设定服务执行者为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 />
3、虚拟用户形式实现（db及mysql形式） <br />
# cd /home/xuchen/vsftpd-2.0.3&nbsp;&nbsp;//进入vsftpd-2.0.3的源代码目录 <br />
# make clean&nbsp;&nbsp;//清除编译环境 <br />
# vi builddefs.h&nbsp;&nbsp;\继续编辑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&nbsp;&nbsp;//直接在vsftpd-2.0.3里用make编译 <br />
# ls -l vsftpd <br />
-rwxr-xr-x&nbsp;&nbsp;1 root root 86088 Jun&nbsp;&nbsp;6 22:26 vsftpd&nbsp;&nbsp;//可执行程序已被编译成功<br />
创建必要的帐号，目录： <br />
# useradd nobody&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <br />
# mkdir /usr/share/empty&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# mkdir /var/ftp&nbsp;&nbsp;//可能你的系统已经存在此目录，那就不用建立 <br />
# useradd -d /var/ftp ftp&nbsp;&nbsp;//可能你的系统已经存在此帐号，那就不用建立 <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 />
对于用DB库存储用户名及密码的方式来说： <br />
（1）查看系统是否有相应软件包 <br />
<br />
# rpm &#8211;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 />
（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------&nbsp;&nbsp;3 vsftpd vsftpd 1024 Jun&nbsp;&nbsp;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&nbsp;&nbsp;//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 />
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 "/" <br />
ftp&gt; size test <br />
213 11 <br />
ftp&gt; quit <br />
221 Goodbye. <br />
OK，用户名为xuchen,密码为12345可以连接到FTP服务器，看不到文件列表，但可以下载已知文件名的文件，不能上传文件，非常安全吧！！<br />
如果我们需要用户看到文件，怎么办？也好办,在配置文件中加入如下语句： <br />
anon_world_readable_only=NO&nbsp;&nbsp;//匿名登入者不能下载可阅读的档案，默认值为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 />
对于用Mysql库存储用户名及密码的方式来说： <br />
就是把用户名和密码放在mysql库里，实现起来也相当简单 <br />
（1）建立一个库并设置相应权限 <br />
# mysql &#8211;p <br />
mysql&gt;create database ftpd; <br />
mysql&gt;use ftpd; <br />
mysql&gt;create table user(name char(20) binary,passwd char(20) binary); <br />
mysql&gt;insert into user (name,passwd) values ('test1','12345'); <br />
mysql&gt;insert into user (name,passwd) values ('test2','54321'); <br />
mysql&gt;grant select 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">http://nchc.dl.sourceforge.net/s ... am_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 />
<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 />
（6）# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &amp;&nbsp; &nbsp;//以后台方式启动 <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 "/" <br />
ftp&gt; quit <br />
221 Goodbye. <br />
看，成功了！！这样就实现了mysql的认证方式，很简单吧？？<br />
<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 />
4、为FTP增加磁盘配额，从而避免恶意用户用垃圾数据塞满你的硬盘 <br />
我首先要说的是这个功能是系统自带的，而不是vsftp 的功能之一，千万别搞混了。好了，我们先假设我们的系统用户ftpd的主目录是/home/ftpd，它是建立在/home分区中,那么如果我们要对ftpd用户进行磁盘限额，那我们需要修改/etc/fstab中根分区的记录，将/home分区的第4个字段改成defaults,usrquota，如下: <br />
LABEL=/home&nbsp; &nbsp;/home&nbsp; &nbsp;ext3&nbsp; &nbsp; defaults,usrquota&nbsp; &nbsp;&nbsp;&nbsp;1 2 <br />
# reboot&nbsp;&nbsp;//重新启动系统使设置生效 <br />
也可以用 <br />
# mount -o remount /dev/sda6&nbsp;&nbsp;///dev/sda6的挂接点就是/home,这样可以不用启动系统。 <br />
这里我还要说明一下，如果我们对一个组进行磁配额，那我们需要增加参数grpquota，例如 <br />
LABEL=/home&nbsp; &nbsp;/home&nbsp; &nbsp;ext3&nbsp; &nbsp; defaults,grpquota&nbsp; &nbsp;&nbsp;&nbsp;1 2 <br />
也可以 <br />
LABEL=/home&nbsp; &nbsp;/home&nbsp; &nbsp;ext3&nbsp; &nbsp; defaults,usrquota,grpquota&nbsp; &nbsp;&nbsp;&nbsp;1 2 <br />
你想怎么限制都可以，自己组合参数吧。 <br />
# quotacheck -avu <br />
说明：a-自动开启挂载文件系统的配额，v-显示信息，u-启用用户配额or g-启用组配额 <br />
# edquota ftpd //为用户ftpd设置磁盘配额 <br />
OR <br />
# edquota -g grp&nbsp;&nbsp;//为组grp设置磁盘配额 <br />
系统会自动打开配额文件,如下: <br />
Disk quotas for user ftpd (uid 502): <br />
Filesystem&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;blocks&nbsp; &nbsp;&nbsp; &nbsp; soft&nbsp; &nbsp;&nbsp; &nbsp; hard&nbsp; &nbsp;&nbsp;&nbsp;inodes&nbsp; &nbsp;&nbsp;&nbsp;soft&nbsp; &nbsp;&nbsp;&nbsp;hard <br />
/dev/sda6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;424&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;13&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;0 <br />
第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数，单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限度后，磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是，软限可以在一段时期内被超过。这段时期被称为过渡期（grace period），默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0，那个限度就不会被设置。我设置了硬块限度为1KB，是为了测试方便。 <br />
# quotaon&nbsp;&nbsp;-avu&nbsp;&nbsp;//打开磁盘配额监控进程，u是用户g是组，这里我没设置g参数 <br />
要校验用户的配额是否被设置，我们可以使用以下命令： <br />
# quota ftpd <br />
Disk quotas for user ftpd (uid 502): <br />
Filesystem&nbsp;&nbsp;blocks&nbsp; &nbsp;quota&nbsp; &nbsp;limit&nbsp; &nbsp; grace&nbsp; &nbsp;files&nbsp; &nbsp;quota&nbsp; &nbsp;limit&nbsp; &nbsp;grace <br />
/dev/sda6&nbsp; &nbsp;&nbsp;&nbsp;424*&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp;1&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;13&nbsp; &nbsp;&nbsp; &nbsp;0&nbsp; &nbsp;&nbsp; &nbsp;0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />
# edquota &#8211;t（-g）来设置过渡期（grace period） //当然只针对软限制而言 <br />
和另一个 edquota 命令相似，这个命令也会在文本编辑器中打开当前的文件系统配额： <br />
Grace period before enforcing soft limits for users: <br />
Time units may be: days, hours, minutes, or seconds <br />
Filesystem&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Block grace period&nbsp; &nbsp;&nbsp;&nbsp;Inode grace period <br />
/dev/sda6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;7days&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;7days <br />
按你的需要修改后存盘退出 <br />
用以下命令显示磁盘配额使用状态 <br />
# repquota&nbsp;&nbsp;-a&nbsp;&nbsp;或 repquota&nbsp;&nbsp;/dev/sda6（用户配额） <br />
# repquota -g -a 或 repquota -a /dev/sda6 (组的配额) <br />
如果一切按照你的意思实施了，那么我们就进行测试了！如下图4 <br />
<br />
我们传了一个&gt;1k的文件，没有成功，这样我们就成功的为用户ftpd增添了磁盘配额，要是哪一天你不想加磁盘配额了，怎么办？参看如下命令： <br />
取消某个文件系统的配额限制 <br />
#quotaoff&nbsp;&nbsp;-vug /dev/sda6&nbsp;&nbsp;//删除home分区的磁盘限额 <br />
#删除/etc/fstab中设置配额的部分 <br />
修改软配额的最大超越时间 <br />
注意： <br />
/，/boot/,/proc,/mnt/cdrom等不要使用配额，没用。而且磁盘配额不适合FAT和FAT32系统。 <br />
以后当新设置了某个用户的配额，可以使用如下命令，马上生效。 <br />
# quotacheck -auvgm&nbsp; &nbsp;&nbsp; &nbsp; --是不尝试重新挂载文件系统<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 />
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 />
#允许使用"async ABOR"命令,一般不用,容易出问题 <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 />
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 />
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 />
#是否能使用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 />
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 />
user_config_dir=/etc/vsftpd/userconf <br />
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的. <br />
local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk <br />
#匿名用户登陆后的根目录 <br />
anon_root=/var/ftp<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 />
#匿名用户的传输比率(b/s) <br />
anon_max_rate=51200 <br />
#本地用户的传输比率(b/s) <br />
local_max_rate=5120000<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 />
=============== <br />
这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始，建立和安装并运行VSFTPD。 <br />
<br />
1）建立VSFTPD <br />
先进入解压.tar.gz文件后产生的目录内。如下： <br />
cd vsftpd-2.0.1 <br />
<br />
编辑"builddefs.h"以操作compile-time设定。（tcp_wrappers build,等） <br />
<br />
输入make,回车（如果它不工作请发邮件通知我&nbsp;&nbsp;. <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默认设置需要一个"nobody"用户，如果这个用户不存在，那么添加它。如下： <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 create directory `/usr/share/empty': File exists <br />
<br />
如果容许匿名用户（anonymous)，那么你将需要一个"ftp"用户和其home目录（这个home目录不属于&#8220;ftp&#8221;用户，而且&#8220;ftp"用户也对其没有写权限）在你的系统中存在。 <br />
以下命令用来创建一个"ftp"用户，如果它还不存在的话。 <br />
[root@localhost root]# mkdir /var/ftp/ <br />
[root@localhost root]# useradd -d /var/ftp ftp <br />
<br />
（即使你的"ftp"用户已经存在，完成以下这两步也是很有好处的：） <br />
[root@localhost root]# chown root.root /var/ftp <br />
[root@localhost root]# chmod og-w /var/ftp <br />
<br />
3）安装VSFTPD的配置、执行和帮助文件。 <br />
输入"make install"后会将二进制文件和帮助文件拷贝到适当的目录。 <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 />
"make install"不会拷贝默认的配置文件，所以建议你手工拷贝： <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 />
这将告诉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 />
5）从inetd或者类似方式启动（官方推荐使用standalone方式） <br />
你也许想通过inetd或者类似方式启动VSFTPD，因为这能给你更多的感受。例如xinetd就有很多的设置。 <br />
（注意：VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置）。 <br />
<br />
如果使用标准的"inetd",你需要编辑/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 />
如果你想使用"xinetd",请参阅我们提供的范例 /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 />
-流行的，功能完善的平台都能测试通过。在以下平台的较新版本，VSFTPD工作得很好。在其大部分较早的版本下，也运行正常。 <br />
- RedHat Linux <br />
- RedHat Enterprise Linux <br />
- Solaris / GNU tools (Solaris 8 or 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来认证虚拟用户。这需要提供一个&#8220;db"格式（一种通用数据库格式）的用户名/密码文件。 <br />
创建一个"db"格式的文件，首先要创建一个标准文本文件，并把用户名，密码以竖直排列方式输入。如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 />
(注：一些系统也许安装了多个版本的"db",所以某些情况下你可能使用"db3_load"才是正确的。对于一些 Debian系统就是这样。 <br />
关键在于要让pam_userdb相信它的登录数据库是哪一个db版本所产生（一般都是db3，尽管你的系统里可能安装的是db4).） <br />
<br />
这将创建/etc/vsftpd_login.db文件。显然，你希望设定这个文件的权限： <br />
chmod 600 /etc/vsftpd_login.db <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 />
我们已经创建了一个名叫"virtual"的用户，home目录是"/home/ftpsite". <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 />
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说明所有的虚拟用户都对应我们在上面设置的真实用户：&#8220;virtual". <br />
这同时确定了虚拟用户在文件系统中的位置，也就是说，虚拟用户的home目录即"virtual"用户的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 />
拷贝范例配置文件到/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，再输入"bg",让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 "/" <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 />
密码是"foo" <br />
出现&#8221;failed to open directory&#8220;的话，别担心。这是因为/home/ftpsite目录不容许被任意浏览。 <br />
（我们可以更改anon_world_readable_only=NO以消除告警，但为了安全，还是保留这个配置）。 <br />
我们能通过size命令看到我们已经访问了被我们拷贝到这里的"hosts"文件。 <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 />
这个例子将演示如何扩展&#8220;VIRTUAL_USERS&#8221;那个范例，从而实现更复杂一点的配置。 <br />
<br />
让我们假定我们需要2种不同的虚拟用户：一种只能浏览并下载资源，另一种能上传文件并浏览站内资源。 <br />
<br />
要激活这个设置，我们将使用VSFTPD的强大的&#8220;单个用户配置&#8221;功能（是V1.1.0后出现的新功能）。 <br />
<br />
在前一个虚拟用户范例中，我们创建了2个用户-tom和fred. <br />
我们将实现fred有写权限以上传新文件，同时tom只能下载文件。 <br />
<br />
<img src ="http://www.blogjava.net/szhswl/aggbug/165850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-06 17:25 <a href="http://www.blogjava.net/szhswl/articles/165850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VSFTP配置手册</title><link>http://www.blogjava.net/szhswl/articles/165840.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 06 Dec 2007 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165840.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165840.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165840.html</trackback:ping><description><![CDATA[<p>Redhat Linux AS + VSFTPD-1.2.0-4</p>
<p>匿名服务器的连接（独立的服务器）<br />
在/etc/vsftpd/vsftpd.conf配置文件中添加如下几项：</p>
<p><br />
&nbsp; anonymous_enable=yes (允许匿名登陆)<br />
&nbsp; dirmessage_enable=yes （切换目录时，显示目录下.message的内容）<br />
&nbsp; local_umask=022 (FTP上本地的文件权限，默认是077)<br />
&nbsp; connect_form_port_20=yes （启用FTP数据端口的数据连接）*<br />
&nbsp; xferlog_enable=yes （激活上传和下传的日志）<br />
&nbsp; xferlog_std_format=yes (使用标准的日志格式)<br />
&nbsp; ftpd_banner=XXXXX （欢迎信息）<br />
&nbsp; pam_service_name=vsftpd （验证方式）*<br />
&nbsp; listen=yes （独立的VSFTPD服务器）*<br />
功能：只能连接FTP服务器，不能上传和下传<br />
注：其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加，是属于FTP的基本选项 </p>
<p>开启匿名FTP服务器上传权限<br />
在配置文件中添加以下的信息即可：</p>
<p><br />
&nbsp; Anon_upload_enable=yes (开放上传权限)<br />
&nbsp; Anon_mkdir_write_enable=yes （可创建目录的同时可以在此目录中上传文件）<br />
&nbsp; Write_enable=yes (开放本地用户写的权限)<br />
&nbsp; Anon_other_write_enable=yes (匿名帐号可以有删除的权限)<br />
开启匿名服务器下传的权限<br />
在配置文件中添加如下信息即可：</p>
<p><br />
&nbsp; Anon_world_readable_only=no<br />
注：要注意文件夹的属性，匿名帐户是其它（other）用户要开启它的读写执行的权限<br />
（R）读-----下传 （W）写----上传 （X）执行----如果不开FTP的目录都进不去 </p>
<p>普通用户FTP服务器的连接（独立服务器）<br />
在配置文件中添加如下信息即可：</p>
<p><br />
&nbsp; Local_enble=yes （本地帐户能够登陆）<br />
&nbsp; Write_enable=no （本地帐户登陆后无权删除和修改文件）<br />
功能：可以用本地帐户登陆vsftpd服务器，有下载上传的权限<br />
注：在禁止匿名登陆的信息后匿名服务器照样可以登陆但不可以上传下传 </p>
<p>用户登陆限制进其它的目录，只能进它的主目录<br />
设置所有的本地用户都执行chroot</p>
<p><br />
&nbsp; Chroot_local_user=yes （本地所有帐户都只能在自家目录）<br />
设置指定用户执行chroot</p>
<p><br />
&nbsp; Chroot_list_enable=yes （文件中的名单可以调用）<br />
&nbsp; Chroot_list_file=/任意指定的路径/vsftpd.chroot_list<br />
注意：vsftpd.chroot_list 是没有创建的需要自己添加，要想控制帐号就直接在文件中加帐号即可 </p>
<p>限制本地用户访问FTP<br />
&nbsp; Userlist_enable=yes (用userlistlai 来限制用户访问)<br />
&nbsp; Userlist_deny=no (名单中的人不允许访问)<br />
&nbsp; Userlist_file=/指定文件存放的路径/ （文件放置的路径）<br />
注：开启userlist_enable=yes匿名帐号不能登陆 </p>
<p>安全选项<br />
&nbsp; Idle_session_timeout=600(秒) （用户会话空闲后10分钟）<br />
&nbsp; Data_connection_timeout=120（秒） （将数据连接空闲2分钟断）<br />
&nbsp; Accept_timeout=60（秒） （将客户端空闲1分钟后断）<br />
&nbsp; Connect_timeout=60（秒） （中断1分钟后又重新连接）<br />
&nbsp; Local_max_rate=50000（bite） （本地用户传输率50K）<br />
&nbsp; Anon_max_rate=30000（bite） （匿名用户传输率30K）<br />
&nbsp; Pasv_min_port=50000 （将客户端的数据连接端口改在<br />
&nbsp; Pasv_max_port=60000 50000—60000之间）<br />
&nbsp; Max_clients=200 （FTP的最大连接数）<br />
&nbsp; Max_per_ip=4 （每IP的最大连接数）<br />
&nbsp; Listen_port=5555 （从5555端口进行数据连接）<br />
查看谁登陆了FTP,并杀死它的进程<br />
&nbsp; ps &#8211;xf |grep ftp<br />
&nbsp; kill 进程号</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
vsFTP服务器的配置<br />
VSFTPD的高手篇 </p>
<p>版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 </p>
<p>[原文出处 http://www.5ilinux.com/vsftp02.html] </p>
<p>我可不是高手！！！^_^我只不过是个菜鸟，尽我的能力写出了我这个菜鸟觉得的高手篇，所以有什么错误请大家指正哦！！！ </p>
<p>环境：linux as 3.0 + vsftpd -1.2.0-4的系统架构，是在独立服务器下的哦！讨厌XINETD^_^ </p>
<p>配置本地组访问的FTP<br />
首先创建用户组 test和FTP的主目录 </p>
<p>&nbsp; groupadd test<br />
&nbsp; mkdir /tmp/test<br />
然后创建用户 </p>
<p>&nbsp; useradd -G test &#8211;d /tmp/test &#8211;M usr1<br />
注：G：用户所在的组 d：表示创建用户的自己目录的位置给予指定 </p>
<p>M：不建立默认的自家目录，也就是说在/home下没有自己的目录 </p>
<p>&nbsp; useradd &#8211;G test &#8211;d /tmp/test &#8211;M usr2<br />
接着改变文件夹的属主和权限 </p>
<p>&nbsp; chown usr1.test /tmp/test ----这表示把/tmp/test的属主定为usr1<br />
&nbsp; chmod 750 /tmp/test ----7表示wrx 5表示rx 0表示什么权限都没有<br />
这个实验的目的就是usr1有上传、删除和下载的权限 </p>
<p>而usr2只有下载的权限没有上传和删除的权限 </p>
<p>当然啦大家别忘了我们的主配置文件vsftpd.conf </p>
<p>要确定local_enable=yes、write_enable=yes、chroot_local_usr=yes这三个选项是有的哦！ </p>
<p>&nbsp;</p>
<p><br />
配置独立FTP的服务器的非端口标准模式进行数据连接<br />
这个非常容易：在VSFTPD。CONF中添加 </p>
<p>&nbsp; Listen_port=33333<br />
就可以了啦！ </p>
<p>&nbsp;</p>
<p><br />
配置单独的虚拟FTP，使用虚拟FTP用户，并使建立的四个帐户中有不同的权限<br />
（两个有读目录的权限，一个有浏览、上传、下载的权限，一个有浏览、下载、删除和改文件名的权限） </p>
<p>A：配置网卡<br />
第一块网卡地址是10.2.3.4 掩码是255.255.0.0 </p>
<p>&nbsp; ifconfig eth0:1 211.131.4.253 netmask 255.255.255.0 up<br />
B：写入/etc/sysconfig中（为了重起后IP地址不会丢失）<br />
&nbsp; cd /etc/sysconfig/network-scripts<br />
&nbsp; cp ifcfg-eth0 ifcfg-eth0:1<br />
&nbsp; vi ifcfg-eth0:1在其中修改内容如下<br />
&nbsp; DEVICE=eth0:1<br />
&nbsp; BROADCAST=211.131.4.255<br />
&nbsp; HWADDR=该网卡的MAC地址<br />
&nbsp; IPADDR=211.131.4.253<br />
&nbsp; NETMASK=255.255.255.0<br />
&nbsp; NETWORK=211.131.4.0<br />
&nbsp; onBOOT=yes<br />
&nbsp; TYPE=Ethernet<br />
&nbsp; wq退出<br />
C：进入vsftpd.conf所在的文件夹<br />
&nbsp; cp vsftpd.conf vsftpd2.conf<br />
修改vsftpd.conf添加以下信息 </p>
<p>&nbsp; Listen_address=10.2.3.4<br />
修改vsftpd2.conf添加以下信息 </p>
<p>&nbsp; Listen_address=211.131.4.253<br />
&nbsp; Ftpd_banner=this is a virtual ftp test<br />
到此虚拟的FTP服务器建立好了 </p>
<p>D：建立logins.txt<br />
&nbsp; vi /tmp/logins.txt<br />
添加入下信息： </p>
<p>&nbsp; longlei------------用户名<br />
&nbsp; longlei------------密码<br />
&nbsp; zhangweibo<br />
&nbsp; zhangweibo<br />
&nbsp; jinhui<br />
&nbsp; jinhui<br />
&nbsp; lxp<br />
&nbsp; lxp<br />
格式要按照我的来哦，一个用户名，一个密码啦 </p>
<p>E：建立访问者的口令库文件,然后修改其权限<br />
&nbsp; db_load &#8211;T &#8211;t hash &#8211;f /tmp/logins.txt /etc/vsftpd_login.db<br />
F：进如/etc/pam.d/中创建ftp.vu<br />
在此文件中添加如下信息 </p>
<p>&nbsp; auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br />
&nbsp; account required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br />
G：在/var/ftp/创建目录并改变其属性和它的属主<br />
&nbsp; useradd -d /var/ftp/test qiang<br />
&nbsp; chmod 700 /var/ftp/test<br />
在目录中添加test_file测试文件 </p>
<p>H：进入vsftpd2.conf修改其中的信息<br />
&nbsp; Listen_yes<br />
&nbsp; Anonymous_enable=no<br />
&nbsp; Local_enable=yes<br />
&nbsp; Write_enable=no<br />
&nbsp; Anon_upload_enable=no<br />
&nbsp; Anon_mkdir_write_enable=no<br />
&nbsp; Anon_other_write_enable=no<br />
&nbsp; Chroot_local_user=yes<br />
&nbsp; Guest_enable=yes----------起用虚拟用户<br />
&nbsp; Guest_username=qiang------将虚拟用户映射为本地用户<br />
&nbsp; Listen_port=5555<br />
&nbsp; Max_client=10<br />
&nbsp; Max_per_ip=1<br />
&nbsp; Ftpd_banner=this is a virtual server and users<br />
&nbsp; Pam_service_name=ftp.vu<br />
注：在主配置文件中给的权限越低，在后面分用户管理的时候对拥护的权限划分的空间就越大，因为主配置文件最高的限制服务先读主配置文件，然后再读用户的配置文件 </p>
<p>重起服务。到此虚拟USER就建好了 </p>
<p>I：在vsftpd.comf所在的目录中创建virtaul文件目录并在文件目录中创建以你用户名命名的配置文件<br />
&nbsp; Longlei zhangweibo jinhui lxp<br />
在longlei中添加： </p>
<p>&nbsp; Anon_world_readable_only=no<br />
在lxp中添加 </p>
<p>&nbsp; Anon_world_readable_only=no<br />
这样此两个用户就有了浏览目录的权限了 </p>
<p>在jinhui中添加 </p>
<p>&nbsp; Anon_world_readable_only=no<br />
&nbsp; Write_enable=yes<br />
&nbsp; Anon_upload_enable=yes<br />
此用户就有了上传、下载和浏览的权限 </p>
<p>在zhangweibo中添加 </p>
<p>&nbsp; Anon_world_readable_only=no<br />
&nbsp; Write_enable=yes<br />
&nbsp; Anon_upload_enable=yes<br />
&nbsp; Anon_other_write_enable=yes<br />
此用户就有了上传、下载、删除文件目录、修改文件名和浏览的权限 </p>
<p>J：修改vsftpd2.conf<br />
加入user_config_dir=/vsftpd.conf所在的目录/virtual </p>
<p>重起服务器就搞定了 </p>
<p>&nbsp;</p>
<p><br />
vsftpd.conf中的所有配置信息</p>
<p>&nbsp;</p>
<p>vsftpd.conf的参数：&nbsp; Anonymous_enable=yes 允许匿名登陆&nbsp; <br />
Dirmessage_enable=yes 切换目录时，显示目录下.message的内容&nbsp; <br />
Local_umask=022 FTP上本地的文件权限，默认是077&nbsp; <br />
Connect_form_port_20=yes 启用FTP数据端口的数据连接 *&nbsp; <br />
Xferlog_enable=yes 激活上传和下传的日志&nbsp; <br />
Xferlog_std_format=yes 使用标准的日志格式&nbsp; <br />
Ftpd_banner=XXXXX 欢迎信息&nbsp; <br />
Pam_service_name=vsftpd 验证方式 *&nbsp; <br />
Listen=yes 独立的VSFTPD服务器 *&nbsp; <br />
Anon_upload_enable=yes 开放上传权限&nbsp; <br />
Anon_mkdir_write_enable=yes 可创建目录的同时可以在此目录中上传文件&nbsp; <br />
Write_enable=yes 开放本地用户写的权限&nbsp; <br />
Anon_other_write_enable=yes 匿名帐号可以有删除的权限&nbsp; <br />
Anon_world_readable_only=no 放开匿名用户浏览权限&nbsp; <br />
Ascii_upload_enable=yes 启用上传的ASCII传输方式&nbsp; <br />
Ascii_download_enable=yes 启用下载的ASCII传输方式&nbsp; <br />
Banner_file=/var/vsftpd_banner_file 用户连接后欢迎信息使用的是此文件中的相关信息&nbsp; <br />
Idle_session_timeout=600(秒) 用户会话空闲后10分钟&nbsp; <br />
Data_connection_timeout=120（秒） 将数据连接空闲2分钟断&nbsp; <br />
Accept_timeout=60（秒） 将客户端空闲1分钟后断&nbsp; <br />
Connect_timeout=60（秒） 中断1分钟后又重新连接&nbsp; <br />
Local_max_rate=50000（bite） 本地用户传输率50K&nbsp; <br />
Anon_max_rate=30000（bite） 匿名用户传输率30K&nbsp; <br />
Pasv_min_port=50000 将客户端的数据连接端口改在&nbsp; <br />
Pasv_max_port=60000 50000—60000之间&nbsp; <br />
Max_clients=200 FTP的最大连接数&nbsp; <br />
Max_per_ip=4 每IP的最大连接数&nbsp; <br />
Listen_port=5555 从5555端口进行数据连接&nbsp; <br />
Local_enble=yes 本地帐户能够登陆&nbsp; <br />
Write_enable=no 本地帐户登陆后无权删除和修改文件&nbsp; <br />
下面这是一组&nbsp; <br />
Chroot_local_user=yes 本地所有帐户都只能在自家目录&nbsp; <br />
Chroot_list_enable=yes 文件中的名单可以调用&nbsp; <br />
Chroot_list_file=/任意指定的路径/vsftpd.chroot_list 前提是chroot_local_user=no&nbsp; <br />
这又是一组&nbsp; <br />
Userlist_enable=yes 在指定的文件中的用户不可以访问&nbsp; <br />
Userlist_deny=yes&nbsp; <br />
Userlist_file=/指定的路径/vsftpd.user_list&nbsp; <br />
又开始单的了&nbsp; <br />
Banner_fail=/路径/文件名 连接失败时显示文件中的内容&nbsp; <br />
Ls_recurse_enable=no&nbsp; <br />
Async_abor_enable=yes&nbsp; <br />
one_process_model=yes&nbsp; <br />
Listen_address=10.2.2.2 将虚拟服务绑定到某端口&nbsp; <br />
Guest_enable=yes 虚拟用户可以登陆&nbsp; <br />
Guest_username=所设的用户名 将虚拟用户映射为本地用户&nbsp; <br />
User_config_dir=/任意指定的路径/为用户策略自己所建的文件夹 指定不同虚拟用户配置文件的路径&nbsp; <br />
又是一组&nbsp; <br />
Chown_uploads=yes 改变上传文件的所有者为root&nbsp; <br />
Chown_username=root&nbsp; <br />
又是一组&nbsp; <br />
Deny_email_enable=yes 是否允许禁止匿名用户使用某些邮件地址&nbsp; <br />
Banned_email_file=//任意指定的路径/xx/&nbsp; <br />
又是单的&nbsp; <br />
Pasv_enable=yes 服务器端用被动模式&nbsp; <br />
User_config_dir=/任意指定的路径//任意文件目录 指定虚拟用户存放配置文件的路径&nbsp; </p>
<p>&nbsp;</p>
<p><br />
vsFTP服务器的维护<br />
现在这里还没有关于维护vsftp服务器的资料。欢迎大家编辑2 </p>
<p>vsFTP使用的一些补充<br />
补充一：如何有选择的把用户限制在家目录中呢？<br />
我们要自己建一个文件，在/etc目录中 </p>
<p>&nbsp; #touch /etc/vsftpd.chroot_list<br />
以beinan和nanbei这两个用户限制在他们所在的家目录中，而其它的FTP用户不做此限制。 </p>
<p>在vsftpd.chroot_list这个文件中，把beinan和nanbei添上去就行，注意，每个用户占一行。 </p>
<p>&nbsp; beinan<br />
&nbsp; nanbei<br />
然后改/etc/vsftpd/vsftpd.conf文件，找如下的两行 </p>
<p>&nbsp; #chroot_list_enable=YES<br />
&nbsp; #chroot_list_file=/etc/vsftpd.chroot_list<br />
把前面的#号去掉，也就是这样的 </p>
<p>&nbsp; chroot_list_enable=YES<br />
&nbsp; chroot_list_file=/etc/vsftpd.chroot_list<br />
如果没有这样的两行，就可以自己添加上去也是一样的。 </p>
<p>设置好后，重新vsFTPD服务器。 </p>
<p>补充一之补充：如何把系统内所有的FTP用户都限制在家目录中呢？？经juliaugong兄的提示，我查找了vsFTPd的洋文说明，证明这个选项是一刀切的解决所有的用户都能限制在家目录中 </p>
<p>我们可以通过更改vsftpd.conf文件，加入如下的一行 </p>
<p>&nbsp; chroot_local_user=YES<br />
改完配制文件，不要忘记重启vsFTPd服务器 </p>
<p>&nbsp;</p>
<p><br />
&nbsp; [root@linuxsir001 root]# /etc/init.d/vsftpd restart<br />
&nbsp; 关闭 vsftpd： [ 确定 ]<br />
&nbsp; 为 vsftpd 启动 vsftpd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]#<br />
补充二：打开vsFTP服务器的日志功能<br />
把下面xferlog_file前面的#号对掉，也就是把vsftp的log功能打开，这样我们就能在/var/log目录下查看vsftpd.log。这是vsFTP的日志功能，这对于我们来说是极为重要的。 </p>
<p>&nbsp; #xferlog_file=/var/log/vsftpd.log<br />
补充三：如何让绑定IP到vsFTP？<br />
也就是说，如何让用户只能通过某个IP来访问FTP。其实这个功能很有意思。如果绑定的是内网的IP，外部是没有办法访问的。如果绑定的是对外服务的IP，内网也只能通过对外服务的IP来访问FTP </p>
<p>在/etc/vsftpd/vsftpd.conf中加一行，以我的局域网为例，请看第一帖中的操作环境，这样外网就不能访问我的FTP了，内网也可能通过192.168.0.2来访问FTP </p>
<p>&nbsp; listen_address=192.168.0.2<br />
加完后，要重启vsFTP服务器 </p>
<p>&nbsp; [root@linuxsir001 root]# /etc/init.d/vsftpd restart<br />
&nbsp; 关闭 vsftpd： [ 确定 ]<br />
&nbsp; 为 vsftpd 启动 vsftpd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]#<br />
补充四：如何让vsFTP服务器限制链接数，以及每个IP最大的链接数？？<br />
答：应该改vsFTP服务器的配制文件vsftpd.conf，加入下面的两行： </p>
<p>&nbsp; max_clients=数字<br />
&nbsp; max_per_ip=数字<br />
举例：我想让我的vsFTP最大支持链接数为100个，每个IP，最多能支持5个链接，所以我应该在vsftpd.conf中加上如下的两行： </p>
<p>&nbsp; max_clients=100<br />
&nbsp; max_per_ip=5<br />
改好了配制文件，不要忘记启动vsftp服务器。 </p>
<p>&nbsp;</p>
<p><br />
补充五：如何限制下载的速度？<br />
anon_max_rate=数字 注：这是匿名的下载速度 local_max_rate=数字 注：这是vsFTP服务器上普通用户的下载速度 </p>
<p>注：这个数字的单位是字节，所以我们要计算一下。比如我想让匿名用户和vsFTP上的用户都以80KB下载，所以这个数字应该是1024x80=81920 所以我们要在vsftpd.conf中加入下面的两行 </p>
<p>&nbsp; anon_max_rate=81920<br />
&nbsp; local_max_rate=81920<br />
不要忘记重启vsftpd服务 </p>
<p>补充六：我的硬盘空间有限，怎么办？<br />
我的硬盘空间有限，如何把帐号ftp默认的路径/var/ftp更改到别处？或者是，我的linux所有的目录都放在/根分区，因为空间紧张，我能否把ftp这个用户的默认路径放到别的分区？ </p>
<p>可以，应该如下操作! </p>
<p>首先要把ftp这个用户删除 </p>
<p>&nbsp; #userdel -r ftp <br />
会有错误信息，不过不用理，这是正常的。 </p>
<p>然后我们再把这个用户添加上，比如我想为帐号ftp的家目录设置在/mnt/LinG/ftp，我们就可以如下操作 </p>
<p>&nbsp; [root@linuxsir001 root]# mkdir /mnt/LinG<br />
&nbsp; [root@linuxsir001 root]# adduser -d /mnt/LinG/ftp -g ftp -s /sbin/nologin ftp<br />
仅仅是这样做还不行，因为这样还是不能让匿名用户找到它的家目录，所以我们必须改变/mnt/LinG/ftp这个目录的权限。 </p>
<p>&nbsp; [root@linuxsir001 root]# chmod 755 /mnt/LinG/ftp/<br />
&nbsp; [root@linuxsir001 root]# chown -R root.root /mnt/LinG/ftp/</p>
<p>&nbsp;</p>
<p>补充七：如何定制欢迎信息<br />
如何在我们登入有些FTP之后，会出现类似：欢迎您来到LinuxSir FTP，在这里，您会得到最真诚的帮助，如果有什么问题和建议，请来信，多谢。 </p>
<p>实现这个并不难，我们可以查看vsftpd.cof文件中，是否有这行。 </p>
<p>&nbsp; dirmessage_enable=YES<br />
如果没有就加上，如果dirmessage_enable=YES前面有#号，就把#号去掉。 </p>
<p>然后我们制定一个.message文件，写上您想要写的东西，比如是.message的内容是如下的： </p>
<p>&nbsp; 欢迎您来到LinuxSir FTP！<br />
&nbsp; 在这里，您会得到最真诚的帮助；<br />
&nbsp; 如果有什么问题和建议，请来信，多谢。<br />
我们可以用编辑器来写这个.message，我想这个过程就不用说了吧。 </p>
<p>然后我们把.message这个文件复制到各个用户的家目录中。比如我的FTP的一个用户是beinan，这个用户所在的家目录是/home/beinan </p>
<p>我们就要把.message放在/home/beinan这个目录下。如果系统用户ftp，他的目录就是/var/ftp这个目录，这个是默认的，当匿名用户登入时就访问的是/var/ftp这个目录。我们要让匿名用户能看到欢迎信息。就要把.message放在/var/ftp目录中。其它的用户，也无非就是类似的操作。 </p>
<p>&nbsp;</p>
<p><br />
补充八：如何实现虚拟路径？<br />
比如： /home/a 映射为ftp://localhost/a /home/b/c 则为ftp://localhost/c </p>
<p>其实这个不能说是vsFTPd的内容，其实我们早就接触过了，可能我们没有注意，我们可以通过如下的方法来实现。 </p>
<p>&nbsp; #mount --bind [原有的目录] [新目录]<br />
比如我的ftp的默认目录是/var/ftp，我想把/mnt/LinG/WinSoft文件夹，映射到/var/ftp目录中，我就如下操作 </p>
<p>我们要先在/var/ftp目录中建一个目录 </p>
<p>&nbsp; #mkdir /var/ftp/WinSoft<br />
然后执行mount命令 </p>
<p>&nbsp; #mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft<br />
这样就OK了。 </p>
<p>&nbsp;</p>
<p><br />
补充九：如何上匿名访问、上传，并支持下载和执行？<br />
在默认的情况下，vsftp是不支持匿名用户的访问的，所以我们要自己打开相应的选项。现在我针对这个问题，我们要打开如下的选项。 </p>
<p>&nbsp; anonymous_enable=YES 注：允许匿名访问<br />
&nbsp; anon_upload_enable=YES 注：允许上传<br />
&nbsp; anon_mkdir_write_enable=YES 注：允许建立相应的目录<br />
&nbsp; anon_umask=022 把上传到FTP的文件或者目录改变权限<br />
当然打开这些选项还是不行的，我们还要让匿名写入文件的上一级目录有写入权，以我所做的FTP为例，我所做的FTP的匿名访问的目录是/var/ftp，在vsFTPd中，/var/ftp这个目录是不能让匿名用户有写入权限的，这是为了安全考虑，所以我们必须自己在/var/ftp目录中建一个目录，让这个目录有写入权。 </p>
<p>比如：我在/var/ftp目录建一个upload目录，然后把它的权限设置成777，这样匿名用户就能写入了。 </p>
<p>&nbsp; #mkdir /var/ftp/upload <br />
&nbsp; #chmod 777 /var/ftp/upload<br />
改了一系列的文件，不要忘记重启vsFTPd服务器 </p>
<p>我是用standalone模式的，当然用下面的方法 </p>
<p>&nbsp; [root@linuxsir001 root]# service vsftpd restart<br />
&nbsp; 关闭 vsftpd： [ 确定 ]<br />
&nbsp; 为 vsftpd 启动 vsftpd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]#<br />
如果您用的是xinetd模式来启动vsFTPd，我们要重启xinetd服务器 </p>
<p>&nbsp; [root@linuxsir001 root]# service xinetd restart<br />
&nbsp; 停止 xinetd： [ 确定 ]<br />
&nbsp; 启动 xinetd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]# ]</p>
<p>&nbsp;</p>
<p>补充十：通过pam认证方式，添加虚拟用户</p>
<p>通过pam认证，用db_load添加用户，是真正的虚拟用户。现在我们简单的介绍一下，通过以后的学习，我们再深入补充： </p>
<p>1。在/etc/pam.d/目录中创建一个文件ftp </p>
<p>&nbsp; [root@linuxsir001 root]# touch /etc/pam.d/ftp<br />
2。在/etc/pam.d/ftp里面加上如下的两行 </p>
<p>&nbsp; auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br />
&nbsp; account required /lib/security/pam_userdb.so db=/etc/vsftpd_login<br />
3。创建一系统的用户名用密码的文件logins.txt </p>
<p>&nbsp; [root@linuxsir001 root]# touch logins.txt<br />
在logins.txt文件中，输入如下的内容。这个内容您可以自己来定。比如我下面的。其实linuxsir007是FTP的虚拟用户名，123456是linuxsir007的密码；linuxsir008是虚拟用户名，234567是linuxsir008的密码，以此类推，您想加入几个就是几个；下面是我添加的FTP的虚拟用户名和密码。 </p>
<p>&nbsp; linuxsir007<br />
&nbsp; 123456<br />
&nbsp; linuxsir008<br />
&nbsp; 234567<br />
&nbsp; linuxsir009<br />
&nbsp; 567890<br />
&nbsp; linuxsir010<br />
&nbsp; 678901<br />
&nbsp; linuxsir011<br />
&nbsp; 789012<br />
4。创建一个真实的用户名linuxsir006，这个linuxsir006的用户，所在的家目录由您来定。我在这里不多说了。我是按系统默认的来添加的。 </p>
<p>&nbsp; [root@linuxsir001 root]# useradd linuxsir006<br />
5。把/etc/hosts复制到/home/linuxsir006，并改变它的属主 </p>
<p>&nbsp; [root@linuxsir001 root]#cp /etc/hosts /home/linuxsir006/hosts<br />
&nbsp; [root@linuxsir001 root]#chown linuxsir006.linuxsir006 /home/linuxsir006/hosts <br />
6。通过db_load来创建虚拟用户的库文件。我们在前面建的logins.txt文件，我是放在了/root用户目录下。所以咱们得把目录切换到/root目录来创建虚拟用户的库文件。 </p>
<p>&nbsp; [root@linuxsir001 root]# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db<br />
7。更改vsftpd.conf文件，加入如下的几行 </p>
<p>&nbsp; pam_service_name=ftp<br />
&nbsp; guest_enable=YES<br />
&nbsp; guest_username=linuxsir006<br />
&nbsp; anon_world_readable_only=NO<br />
8。重启vsFTPd服务器；改了一系列的文件，不要忘记重启vsFTPd服务器 </p>
<p>我是用standalone模式的，当然用下面的方法 </p>
<p>&nbsp; [root@linuxsir001 root]# service vsftpd restart<br />
&nbsp; 关闭 vsftpd： [ 确定 ]<br />
&nbsp; 为 vsftpd 启动 vsftpd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]#<br />
如果您用的是xinetd模式来启动vsFTPd，我们要重启xinetd服务器 </p>
<p>&nbsp; [root@linuxsir001 root]# service xinetd restart<br />
&nbsp; 停止 xinetd： [ 确定 ]<br />
&nbsp; 启动 xinetd： [ 确定 ]<br />
&nbsp; [root@linuxsir001 root]#<br />
9。如果您想让用户登入FTP时，登入成功的相应的信息，请把您制作的.message复制到您的用户的家目录中，这方面的请参考前面的补充。 </p>
<p>10。测试： </p>
<p>&nbsp; [root@linuxsir001 root]# ftp 192.168.0.1<br />
&nbsp; Connected to 192.168.0.1.<br />
&nbsp; 220 (vsFTPd 1.1.3)<br />
&nbsp; 530 Please login with USER and PASS.<br />
&nbsp; 530 Please login with USER and PASS.<br />
&nbsp; KERBEROS_V4 rejected as an authentication type<br />
&nbsp; Name (192.168.0.1:root): linuxsir007<br />
&nbsp; 331 Please specify the password.<br />
&nbsp; Password:<br />
&nbsp; 230-欢迎光临LinuxSir自由FTP<br />
&nbsp; 230-在这里，您将得到最真诚的帮助！<br />
&nbsp; 230-本站限度为30KB！<br />
&nbsp; 230-每个IP限四个线程<br />
&nbsp; 230-请大家遵守FTP的有关规定。<br />
&nbsp; 230-多谢合作！<br />
&nbsp; 230-<br />
&nbsp; 230-LinuxSir管理部<br />
&nbsp; 230 Login successful. Have fun.<br />
&nbsp; Remote system type is UNIX.<br />
&nbsp; Using binary mode to transfer files.<br />
&nbsp; ftp&gt; ls<br />
&nbsp; 227 Entering Passive Mode (192,168,0,1,85,171)<br />
&nbsp; 150 Here comes the directory listing.<br />
&nbsp; -rw-r--r-- 1 ftp ftp 174 Jun 01 12:59 hosts<br />
&nbsp; drwxr-xr-x 3 ftp ftp 4096 Jun 01 13:29 linuxsir008<br />
&nbsp; drwxr-xr-x 2 ftp ftp 4096 Jun 01 13:24 sun<br />
&nbsp; 226 Directory send OK.<br />
&nbsp; ftp&gt;<br />
补充十一：如何把系统默认用standalone启动改为用xinetd启动？<br />
如何把Redhat 9.0中系统默认安装的vsftpd-1.1.3-8.i386.rpm，系统默认vsFTPd是用standalone启动方式 ，改为xinetd启动方式 ？如果是用源码包安装的，安装后就是xinetd模式，如果是用RPM包安装的，在Redhat 9.0中，应该用下面的方法来解决。 </p>
<p>1.在/etc/xinetd.d/目录中创建一个文件vsftpd </p>
<p>&nbsp; [root@linuxsir001 root]# touch /etc/xinetd.d/vsftpd<br />
/etc/xinetd.d/vsftpd内容如下： </p>
<p>&nbsp; service ftp<br />
&nbsp; {<br />
&nbsp; socket_type = stream<br />
&nbsp; wait = no<br />
&nbsp; user = root<br />
&nbsp; server = /usr/sbin/vsftpd<br />
&nbsp; # server_args =<br />
&nbsp; # log_on_success += DURATION USERID<br />
&nbsp; # log_on_failure += USERID<br />
&nbsp; nice = 10<br />
&nbsp; disable = no<br />
&nbsp; }<br />
2。复制vsftpd.conf到/etc/目录下，因为xinetd对vsFTPd配制文件应该在/etc目录下，所以我们就必须把这个文件复制到/etc目录下，否则会出现系统中local用户无法登入，也就是说，不复制这个文件会出现ftp非匿名用户无法访问，只能用匿名用户访问。 </p>
<p>&nbsp; [root@linuxsir001 root]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd.conf<br />
3。更改配制文件/etc/vsftpd.conf，把如下的项注掉：也就是把 </p>
<p>&nbsp; listen=YES<br />
改为 </p>
<p>&nbsp; #listen=YES<br />
或者是把这行删除也行。 </p>
<p>4。把/etc/init.d/vsftpd这个文件删除。其实最好的备份到别处，因为我们有时实验来实验去，可能还会转到standalone模式启动。我就直接移动到别的目录，比如是/root下面的backup目录。 </p>
<p>&nbsp;</p>
<p><br />
&nbsp; [root@linuxsir001 root]#mkdir /root/backup<br />
&nbsp; [root@linuxsir001 root]# mv /etc/init.d/vsftpd /root/backup<br />
5。运行ntsysv，把vsftpd的服务取消 </p>
<p>&nbsp; [root@linuxsir001 root]#ntsysv<br />
&nbsp; [ ] vsftpd <br />
6。重启xinetd服务 </p>
<p>&nbsp; [root@linuxsir001 root]# service xinetd restart<br />
<br />
</p>
<p style="font-size: 8pt">本文转自:<a class="external" title="http://www.5ilinux.com/vsftp01.html" href="http://www.5ilinux.com/vsftp01.html">http://www.5ilinux.com/vsftp01.html</a></p>
<img src ="http://www.blogjava.net/szhswl/aggbug/165840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-06 16:53 <a href="http://www.blogjava.net/szhswl/articles/165840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX9中vsftpd的配置手册</title><link>http://www.blogjava.net/szhswl/articles/165789.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 06 Dec 2007 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165789.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165789.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165789.html</trackback:ping><description><![CDATA[本文档基于RedHat Linux 9和VSFTPD-1.1.3-8。如果有不同版本，则有专门文字说明。 <br />
<br />
1、VSFTPD简述 <br />
<br />
　　如果试问哪种FTP服务器最安全？那么在UNIX和Linux中，首推的就是VSFTP（Very Secure FTP Daemon，非常安全的FTP服务器）。顾名思义，VSFTPD设计的出发点就是安全性。同时随着版本的不断升级，VSFTPD在性能和稳定性上也取得了极大的进展。象RedHat、SUSE、Debian、GNU、GNOME、KDE等一些大型站点都采用VSFTPD作为它们的FTP服务器。大家可以到http://vsftpd.beasts.org/了解它的最新情况。 <br />
<br />
2、VSFTPD的安装 <br />
<br />
2.1、RHL9+vsftpd-.1.1.3-8.i386.rpm包的安装 <br />
<br />
　　VSFTPD的安装很简单。在RHL9中，在图形界面下依次执行&#8220;Main Menu&#8221;－&#8220;System Settings&#8221;－&#8220;Add/Remove Applications&#8221;－选择FTP服务器－&#8220;更新&#8221;，或者在字符界面中执行以下命令，就可以完成安装。 <br />
　　rpm -ivh vsftpd-1.1.3-8.i386.rpm <br />
<br />
2.2、vsftpd-1.2.0.tar.gz的安装 <br />
<br />
　　⑴准备条件 <br />
<br />
　　VSFTPD默认配置中需要&#8220;nobody&#8221;用户。在系统中添加此用户，如果用户已经存在，useradd命令有相应提示。 <br />
　　[root@hpe45 root]# useradd nobody <br />
　　useradd: user nobody exists <br />
<br />
　　VSFTPD默认配置中需要&#8220;/usr/share/empty&#8221;目录。在系统中此目录，如果目录已经存在，mkdir命令有相应提示。 <br />
　　[root@hpe45 root]# mkdir /usr/share/empty/ <br />
　　mkdir: cannot create directory '/usr/share/empty': File exists <br />
<br />
　　VSFTPD提供匿名FTP服务时，需要&#8220;ftp&#8221;用户和一个有效的匿名目录。 <br />
　　[root@hpe45 root]# mkdir /var/ftp/ <br />
　　[root@hpe45 root]# useradd -d /var/ftp ftp <br />
　　接下来的操作对于ftp用户是否已经存在都是有用的。 <br />
　　[root@hpe45 root]# chown root.root /var/ftp <br />
　　[root@hpe45 root]# chmod og-w /var/ftp <br />
<br />
　　⑵编译VSFTPD <br />
<br />
　　从官方站点下载到/root目录，执行以下命令： <br />
　　[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz <br />
　　[root@hpe45 root]# cd vsftpd-1.2.0 <br />
　　[root@hpe45 vsftpd-1.2.0]# make <br />
<br />
　　⑶安装编译好的VSFTPD <br />
<br />
　　执行&#8220;make install&#8221;将编译好的二进制文件、手册等复制到相应目录。在RHL9上，可能需要手动执行以下复制： <br />
　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd <br />
　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5 <br />
　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8 <br />
　　此外，&#8220;make install&#8221;没有复制简单的配置文件，建议执行以下命令： <br />
　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc <br />
<br />
　　⑷为本地用户设置PAM <br />
<br />
　　如果允许本地用户登录VSFTPD，执行以下操作： <br />
　　[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp <br />
<br />
3、VSFTPD的文件结构 <br />
<br />
　　VSFTPD的文件结构是很简洁的，主要包括： <br />
　　/usr/sbin/vsftpd ---- VSFTPD的主程序 <br />
　　/etc/rc.d/init.d/vsftpd ---- 启动脚本 <br />
　　/etc/vsftpd/vsftpd.conf ---- 主配置文件 <br />
　　/etc/pam.d/vsftpd ---- PAM认证文件 <br />
　　/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件 <br />
　　/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件 <br />
　　/var/ftp ---- 匿名用户主目录 <br />
　　/var/ftp/pub　　　　　　---- 匿名用户的下载目录 <br />
　　此外，还有一些说明文档和手册文件。 <br />
<br />
　　此外VSFTPD的日志文件位于/etc/logrotate.d/vsftpd.log。 <br />
<br />
4、VSFTPD的启动与停止 <br />
<br />
　　VSFTPD可以单独(Standalone)方式运行，如同httpd、named这类的服务器的运行方式，这是RHL9中默认的方式；也可以采用xinetd方式运行，这是RHL7.x、8中的默认方式。具体的运行方式由参数listen决定。从RHL中VSFTPD的运行方式，也可以看出VSFTPD的逐步发展。 <br />
<br />
　　当listen参数值为YES时，RHL9中的默认值，VSFTPD单独运行，我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。命令如下： <br />
　　/etc/rc.d/init.d/vsftpd start|stop|restart <br />
<br />
　　如果说在RHL9上，您还希望使用Xinetd启动VSFTPD的运行方式，那么首先要将vsftpd.conf配置文件中的listen参数值改为NO。其次，生成一个/etc/xinetd.d/vsftpd文件，内容如下： <br />
　　service vsftpd <br />
　　{ <br />
　　disable = no <br />
　　socket_type = stream <br />
　　wait = no <br />
　　user = root <br />
　　server = /usr/sbin/vsftpd <br />
　　port = 21 <br />
　　log_on_success += PID HOST DURATION <br />
　　log_on_failure += HOST <br />
　　} <br />
　　通过修改disable值为no或yes，并重新启动xinetd，从而启动或停止VSFTPD。 <br />
<br />
　　由于VSFTPD的单独模式已经拥有足够的能力，所以后面6中讨论到的应用，都是以单独模式来运行的，而非Xinetd方式。 <br />
<br />
　　注：还可以直接执行vsftpd来启动FTP服务，关闭时使用&#8220;kill&#8221;命令。 <br />
　　[root@hpe45 root]# /usr/local/sbin/vsftpd &amp; <br />
<br />
5、VSFTPD的设置选项 <br />
<br />
　　VSFTPD的配置文件/etc/vsftpd/vsftpd.conf是个文本文件。以&#8220;#&#8221;字符开始的行是注释行。每个选项设置为一行，格式为&#8220;option=value&#8221;，注意&#8220;=&#8221;号两边不能留空白符。除了这个主配置文件外，还可以给特定用户设定个人配置文件，具体介绍见后。 <br />
　　VSFTPD包中所带的vsftpd.conf文件配置比较简单，而且非常偏执狂的（文档自称:-)）。我们可以根据实际情况对其进行一些设置，以使得VSFTPD更加可用。 <br />
<br />
5.1、连接选项 <br />
<br />
　　本部分主要是一些与建立FTP链接相关的选项。 <br />
<br />
5.1.1、监听地址与控制端口 <br />
<br />
　　listen_address=ip address <br />
　　此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了在主机的哪个IP地址上监听FTP请求，即在哪个IP地址上提供FTP服务。对于只有一个IP地址的主机，不需要使用此参数。对于多址主机，不设置此参数，则监听所有IP地址。默认值为无。 <br />
<br />
　　listen_port=port_value <br />
　　指定FTP服务器监听的端口号(控制端口)，默认值为21。此选项在standalone模式下生效。 <br />
<br />
5.1.2、FTP模式与数据端口 <br />
<br />
　　FTP 分为两类，PORT FTP和PASV FTP，PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的，都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接，并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口，默认值为20。PASV FTP由FTP客户端决定数据传输的端口。PASV FTP这种做法，主要是考虑到存在防火墙的环境下，由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口)，决定两者之间的数据传输端口更为方便一些。 <br />
<br />
　　port_enable=YES|NO <br />
　　如果你要在数据连接时取消PORT模式时，设此选项为NO。默认值为YES。 <br />
<br />
　　connetc_from_port_20=YES|NO <br />
　　控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用，NO不使用。默认值为NO，但RHL自带的vsftpd.conf文件中此参数设为YES。 <br />
<br />
　　ftp_data_port=port number <br />
　　设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。 <br />
<br />
　　port_promiscuous=YES|NO <br />
　　默认值为NO。为YES时，取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。 <br />
<br />
　　pasv_enable=YES|NO <br />
　　YES，允许数据传输时使用PASV模式。NO，不允许使用PASV模式。默认值为YES。 <br />
<br />
　　pasv_min_port=port number <br />
　　pasv_max_port=port number <br />
　　设定在PASV模式下，建立数据传输所可以使用port范围的下界和上界，0 表示任意。默认值为0。把端口范围设在比较高的一段范围内，比如50000-60000，将有助于安全性的提高。 <br />
<br />
　　pasv_promiscuous=YES|NO <br />
　　此选项激活时，将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。 <br />
<br />
　　pasv_address= <br />
　　此选项为一个数字IP地址，作为PASV命令的响应。默认值为none，即地址是从呼入的连接套接字(incoming connectd socket)中获取。 <br />
<br />
5.1.3 ASCII模式 <br />
<br />
　　默认情况下，VSFTPD是禁止使用ASCII传输模式。即使FTP客户端使用asc命令，指明要使用ASCII模式，但是，VSFTPD表面上接受了asc命令，而在实际传输文件时，还是使用二进制方式。下面选项控制VSFTPD是否使用ASCII传输模式。 <br />
<br />
　　ascii_upload_enable=YES|NO <br />
　　控制是否允许使用ascii模式上传文件，YES允许，NO不允许，默认为NO。 <br />
<br />
　　ascii_download_enable=YES|NO <br />
　　控制是否允许使用ascii模式下载文件，YES允许，NO不允许，默认为NO。 <br />
<br />
5.2、性能与负载控制 <br />
<br />
5.2.1、超时选项 <br />
<br />
　　idle_session_timeout= <br />
　　空闲（发呆）用户会话的超时时间，若是超出这时间没有数据的传送或是指令的输入，则会强迫断线。单位为秒，默认值为300。 <br />
<br />
　　data_connection_timeout= <br />
　　空闲的数据连接的超时时间。默认值为300 秒。 <br />
<br />
　　accept_timeout=numerical value <br />
　　接受建立联机的超时设定，单位为秒。默认值为60。 <br />
<br />
　　connect_timeout=numerical value <br />
　　响应PORT方式的数据联机的超时设定，单位为秒。默认值为60。以上两个选项针对客户端的，将使客户端空闲1分钟后自动中断连接，并在中断1分钟后自动激活连接。 <br />
<br />
5.2.2 负载控制 <br />
<br />
　　max_clients=numerical value <br />
　　此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发连接数，当超过此连接数时，服务器拒绝客户端连接。默认值为0，表示不限最大连接数。 <br />
 <br />
　　max_per_ip=numerical value <br />
　　此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0，表示不限制。 <br />
<br />
　　anon_max_rate=value <br />
　　设定匿名用户的最大数据传输速度value，以Bytes/s为单位。默认无。 <br />
<br />
　　local_max_rate=value <br />
　　设定用户的最大数据传输速度value，以Bytes/s为单位。默认无。此选项对所有的用户都生效。此外，也可以在用户个人配置文件中使用此选项，以指定特定用户可获得的最大数据传输速率。 <br />
　　步骤如下： <br />
　　①在vsftpd.conf中指定用户个人配置文件所在的目录，如： <br />
　　user_config_dir=/etc/vsftpd/userconf <br />
　　②生成/etc/vsftpd/userconf目录。 <br />
　　③用户个人配置文件是在该目录下，与特定用户同名的文件，如： <br />
　　/etc/vsftpd/userconf/xiaowang <br />
　　④在用户的个人配置文件中设置local_max_rate参数，如： <br />
　　local_max_rate=80000 <br />
　　以上步骤设定FTP用户xiaowang的最大数据传输速度为80KBytes/s。 <br />
<br />
　　VSFTPD 对于速度控制的变化范围大概在80%到120%之间。比如我们限制最高速度为100KBytes/s， 但实际的速度可能在80KBytes/s 到120KBytes/s 之间。当然，若是线路带宽不足时，速率自然会低于此限制。 <br />
<br />
5.3 用户选项 <br />
<br />
　　VSFTPD的用户分为三类：匿名用户、本地用户（local user）以及虚拟用户（guest）。 <br />
<br />
5.3.1、匿名用户 <br />
<br />
　　anonymous_enable=YES|NO <br />
　　控制是否允许匿名用户登录，YES允许，NO不允许，默认值为YES。 <br />
<br />
　　ftp_username= <br />
　　匿名用户所使用的系统用户名。默认下，此参数在配置文件中不出现，值为ftp。 <br />
<br />
　　no_anon_password=YES|NO <br />
　　控制匿名用户登入时是否需要密码，YES不需要，NO需要。默认值为NO。 <br />
　　 <br />
　　deny_email_enable=YES|NO <br />
　　此参数默认值为NO。当值为YES时，拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户。即，当匿名用户使用banned_email_file文件中所列出的e-mail进行登录时，被拒绝。显然，这对于阻击某些Dos攻击有效。当此参数生效时，需追加banned_email_file参数 <br />
<br />
　　banned_email_file=/etc/vsftpd.banned_emails <br />
　　指定包含被拒绝的e-mail地址的文件，默认文件为/etc/vsftpd.banned_emails。 <br />
<br />
　　anon_root= <br />
　　设定匿名用户的根目录，即匿名用户登入后，被定位到此目录下。主配置文件中默认无此项，默认值为/var/ftp/。 <br />
<br />
　　anon_world_readable_only=YES|NO <br />
　　控制是否只允许匿名用户下载可阅读文档。YES，只允许匿名用户下载可阅读的文件。NO，允许匿名用户浏览整个服务器的文件系统。默认值为YES。 <br />
<br />
　　anon_upload_enable=YES|NO <br />
　　控制是否允许匿名用户上传文件，YES允许，NO不允许，默认是不设值，即为NO。除了这个参数外，匿名用户要能上传文件，还需要两个条件：一，write_enable参数为YES;二，在文件系统上，FTP匿名用户对某个目录有写权限。 <br />
<br />
　　anon_mkdir_write_enable=YES|NO <br />
　　控制是否允许匿名用户创建新目录，YES允许，NO不允许，默认是不设值，即为NO。当然在文件系统上，FTP匿名用户必需对新目录的上层目录拥有写权限。 <br />
<br />
　　anon_other_write_enable=YES|NO <br />
　　控制匿名用户是否拥有除了上传和新建目录之外的其他权限，如删除、更名等。YES拥有，NO不拥有，默认值为NO。 <br />
<br />
　　chown_uploads=YES|NO <br />
　　是否修改匿名用户所上传文件的所有权。YES，匿名用户所上传的文件的所有权将改为另外一个不同的用户所有，用户由chown_username参数指定。此选项默认值为NO。 <br />
<br />
　　chown_username=whoever <br />
　　指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。 <br />
<br />
5.3.2、本地用户 <br />
<br />
　　在使用FTP服务的用户中，除了匿名用户外，还有一类在FTP服务器所属主机上拥有账号的用户。VSFTPD中称此类用户为本地用户（local users），等同于其他FTP服务器中的real用户。 <br />
<br />
　　local_enable=YES|NO <br />
　　控制vsftpd所在的系统的用户是否可以登录vsftpd。默认值为YES。 <br />
<br />
　　local_root= <br />
　　定义所有本地用户的根目录。当本地用户登入时，将被更换到此目录下。默认值为无。 <br />
<br />
　　user_config_dir= <br />
　　定义用户个人配置文件所在的目录。用户的个人配置文件为该目录下的同名文件。个人配置文件的格式与vsftpd.conf格式相同。例如定义user_config_dir=/etc/vsftpd/userconf，并且主机上有用户xiaowang,lisi，那我们可以在user_config_dir的目录新增名为xiaowang、lisi的两个文件。当用户lisi 登入时，VSFTPD则会读取user_config_dir下lisi这个文件中的设定值，应用于用户lisi。默认值为无。 <br />
<br />
5.3.3、虚拟用户 <br />
<br />
　　guest_enable=YES|NO <br />
　　若是启动这项功能，所有的非匿名登入者都视为guest。默认值为关闭。 <br />
<br />
　　guest_username= <br />
　　定义VSFTPD的guest用户在系统中的用户名。默认值为ftp。 <br />
<br />
5.4、安全措施 <br />
<br />
5.4.1、用户登录控制 <br />
<br />
　　pam_service_name=vsftpd <br />
　　指出VSFTPD进行PAM认证时所使用的PAM配置文件名，默认值是vsftpd，默认PAM配置文件是/etc/pam.d/vsftpd。 <br />
<br />
　　/etc/vsftpd.ftpusers <br />
　　VSFTPD禁止列在此文件中的用户登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。 <br />
<br />
　　userlist_enable=YES|NO <br />
　　此选项被激活后，VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时，该用户在提示输入密码之前就被禁止了。即该用户名输入后，VSFTPD查到该用户名在列表，VSFTPD就直接禁止掉该用户，不会再进行询问密码等后续步聚。默认值为NO。 <br />
<br />
　　userlist_file=/etc/vsftpd.user_list <br />
　　指出userlist_enable选项生效后，被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list。 <br />
<br />
　　userlist_deny=YES|NO <br />
　　决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES，默认值，禁止文件中的用户登录，同时也不向这些用户发出输入口令的提示。NO，只允许在文件中的用户登录FTP服务器。 <br />
　　 <br />
　　tcp_wrappers=YES|NO <br />
　　在VSFTPD中使用TCP_Wrappers远程访问控制机制，默认值为YES。 <br />
<br />
5.4.2、目录访问控制 <br />
<br />
　　chroot_list_enable=YES|NO <br />
　　锁定某些用户在自家目录中。即当这些用户登录后，不可以转到系统的其他目录，只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。 <br />
<br />
　　chroot_list_file=/etc/vsftpd/chroot_list <br />
　　指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。通常该文件是/etc/vsftpd/chroot_list。此选项默认不设置。 <br />
<br />
　　chroot_local_users=YES|NO <br />
　　将本地用户锁定在自家目录中。当此项被激活时，chroot_list_enable和chroot_local_users参数的作用将发生变化，chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后，可能带来安全上的冲突，特别是当用户拥有上传、shell访问等权限时。因此，只有在确实了解的情况下，才可以打开此参数。默认值为NO。 <br />
<br />
　　passwd_chroot_enable <br />
　　当此选项激活时，与chroot_local_user选项配合，chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO。 <br />
<br />
5.4.3、文件操作控制 <br />
<br />
　　hide_ids=YES|NO <br />
　　是否隐藏文件的所有者和组信息。YES，当用户使用"ls -al"之类的指令时，在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。 <br />
<br />
　　ls_recurse_enable=YES|NO <br />
　　YES，允许使用"ls -R" 指令。这个选项有一个小的安全风险，因为在一个大型FTP站点的根目录下使用"ls -R"会消耗大量系统资源。默认值为NO。 <br />
<br />
　　write_enable=YES|NO <br />
　　控制是否允许使用任何可以修改文件系统的FTP 的指令，比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默认值为NO，不过自带的简单配置文件中打开了该选项。 <br />
<br />
　　secure_chroot_dir= <br />
　　这选项指向一个空目录，并且ftp用户对此目录无写权限。当vsftpd不需要访问文件系统时，这个目录将被作为一个安全的容器，用户将被限制在此目录中。默认目录为/usr/share/empty。 <br />
<br />
5.4.4、新增文件权限设定 <br />
<br />
　　anon_umask= <br />
　　匿名用户新增文件的umask 数值。默认值为077。 <br />
<br />
　　file_open_mode= <br />
　　上传档案的权限，与chmod 所使用的数值相同。如果希望上传的文件可以执行，设此值为0777。默认值为0666。 <br />
<br />
　　local_umask= <br />
　　本地用户新增档案时的umask 数值。默认值为077。不过，其他大多数的FTP服务器都是使用022。如果您的用户希望的话，可以修改为022。在自带的配置文件中此项就设为了022。 <br />
<br />
5.5、提示信息 <br />
<br />
　　ftpd_banner=login banner string <br />
　　此参数定义了login banner string（登录欢迎语字符串）。用户可以自行修改。预设值为无。当ftpd_banner设置后，将取代系统原来的欢迎词。 <br />
<br />
　　banner_file=/directory/vsftpd_banner_file <br />
　　此项指定一个文本文件，当使用者登入时，会显示此该文件的内容，通常为欢迎话语或是说明。默认值为无。与ftpd_banner相比，banner_file是文本文件的形式，而ftpd_banner是字串格式。banner_file选项将取代ftpd_banner选项。 <br />
<br />
　　dirmessage_enable=YES|MO <br />
　　控制是否启用目录提示信息功能。YES启用，NO不启用，默认值为YES。此功能启用后，当用户进入某一个目录时，会检查该目录下是否有message_file选项所指定的文档，若是有，则会出现此文档的内容，通常这个档案会放置欢迎话语，或是对该目录的说明。 <br />
<br />
　　message_file= <br />
　　此选项，仅在dirmessage_enable选项激活方生效。默认值为.message。 <br />
<br />
5.6、日志设置 <br />
<br />
　　xferlog_enable=YES|NO <br />
　　控制是否启用一个日志文件，用于详细记录上传和下载。该日志文件由xferlog_file选项指定。默认值为NO，但简单配置文件中激活此选项。 <br />
<br />
　　xferlog_file= <br />
　　这个选项设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。 <br />
<br />
　　xferlog_std_format=YES|NO <br />
　　控制日志文件是否使用xferlog的标准格式，如同wu-ftpd一样。使用xferlog格式，可以重新使用已经存在的传输统计生成器。然而，默认的日志格式更为可读性。默认值为NO，但自带的配置文件中激活了此选项。 <br />
<br />
　　log_ftp_protocol=YES|NO <br />
　　当此选项激活后，所有的FTP请求和响应都被记录到日志中。提供此选项时，xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。 <br />
<br />
5.7、其他设置 <br />
<br />
　　setproctitle_enable=YES|NO <br />
　　YES，VSFTPD将在系统进程列表中显示每个会话(session)的状态。也就是说，进程报告将显示每个vsftpd会话在做什么(挂起、下载等)，如用ps -ef|grep ftp。出于安全的目的，可以考虑将此选项关闭。NO，进程报告只显示一个vsftpd进程在运行。默认值为NO。 <br />
<br />
　　text_userdb_names=YES|No <br />
　　当使用者登入后使用ls -al 之类指令时，目录列表的用户和组信息域，默认是出现拥有者的UID，而不是该档案拥有者的名称。若是希望出现拥有者的名称，则将此功能开启。默认值为NO。 <br />
<br />
　　user_localtime=YES|NO <br />
　　默认为NO。YES，VSFTPD显示目录列表时使用你本地时区的时间。默认是显示GMT时间。同样，由ftp命令&#8220;MDTM&#8221;返回的时间值也受此选项影响。 <br />
<br />
　　check_shell=YES|NO <br />
　　此选项仅对不使用PAM方式的VSFTPD生效。当此选项关闭后，当本地用户登录时，VSFTPD不会检查/etc/shells文件以寻找一个有效的用户shell。默认为YES。 <br />
<br />
　　nopriv_user= <br />
　　指定一个用户，当VSFTPD不想要什么权限时，使用此用户身份。这用户最好是一个专用的用户，而不是用户nobody。在大多数的机器上，nobody用户被用于大量重要的事情。默认值为nobody。 <br />
<br />
　　pam_service_name= <br />
　　指明VSFTPD使用用PAM验证服务时的PAM配置文件名。默认值为ftp。 <br />
<br />
6、VSFTPD应用 <br />
<br />
　　本部分介绍VSFTPD的具体应用方法。 <br />
<br />
6.1、允许匿名用户上传文件 <br />
<br />
　　在vsftpd.conf文件中修改或增加以下选项： <br />
　　write_enable=YES <br />
　　anon_world_readable_only=NO <br />
　　anon_upload_enable=YES <br />
　　anon_mkdir_write_enable=YES <br />
<br />
　　然后创建供匿名用户上传文件的目录，并设定权限： <br />
　　# mkdir /var/ftp/incoming <br />
　　# chmod o+w /var/ftp/incoming <br />
　　由于匿名用户（ftp）上传文件，需要对incoming目录进行操作，而incoming为root所有，匿名用户（ftp）对于incoming来说是其他用户，所以要加入其他用户（o）的写权限。 <br />
<br />
6.2、限制用户在自家目录 <br />
<br />
　　在默认配置中，本地用户可以切换到自家目录以外的目录进行浏览，并在权限范围内进行上传和下载，这无疑是个不安全因素。 <br />
　　我们可以设置chroot，让本地用户登录后只能访问自家目录，无法访问其他目录。相关的选项有三个：chroot_local_user、chroot_list_enable、chroot_list_file。限制用户在自家目录有两种做法： <br />
　　1、限制所有的本地用户在自家目录 <br />
　　chroot_local_user=YES <br />
　　这种做法，可能会带来一些安全性上的冲突。参见前面的chroot_local_user选项描述。 <br />
　　2、限制部分本地用户在自家目录 <br />
　　chroot_local_user=NO <br />
　　chroot_list_enable=YES <br />
　　chroot_list_file=/etc/vsftpd.chroot_list <br />
　　在/etc/vsftpd.chroot_list文件中加入要限制的本地用户名。注意一个用户名一行。 <br />
<br />
6.3、配置高安全级别的匿名FTP服务器 <br />
<br />
　　VSFTPD自带的简单配置文件已经自称是偏执狂了，这里看看能否更加偏执一些，:)。有些选项默认已经采用安全性的设置，这里就不再写出了。 <br />
<br />
　　#只允许匿名访问，不允许本地用户访问 <br />
　　anonymous_enable=YES <br />
　　local_enable=NO <br />
<br />
　　#使用ftpd_banner取代VSFTPD默认的欢迎词，免得泄漏相关信息 <br />
　　ftpd_banner=Welcome to this FTP Server <br />
　　#只让匿名用户浏览可阅读的文件，不可以浏览整个系统 <br />
　　anon_world_readable_only=YES <br />
　　#隐藏文件的所有者和组信息，匿名用户看到的文件的所有者和组全变为ftp <br />
　　hide_ids=YES <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 />
　　#使用单独模式，并指定监听的IP地址 <br />
　　listen_address=ip address <br />
　　#对连接进行控制，还有超时时间，那就根据具体情况再说了。 <br />
　　connect_from_port_20=YES <br />
　　pasv_min_port=50000 <br />
　　pasv_max_port=60000 <br />
　　#控制并发数，限定每个IP地址的并发数，这个嘛，根据用户自已定了。 <br />
　　max_clients=numerical value <br />
　　max_per_ip=numerical value <br />
　　#限定下载速度，具体限多大，就由用户自己定了，80KB/s，也很快了吧。 <br />
　　anon_max_rate=80000 <br />
<br />
　　#启用详细的日志记录格式 <br />
　　xferlog_enable=YES <br />
<br />
6.4、基于IP地址的虚拟FTP服务器 <br />
<br />
　　假定服务器有两个IP地址，192.168.0.1和192.168.0.2。VSFTPD是建立在192.168.0.1上的，现在我们在192.168.0.2上再提供一个虚拟FTP服务器。如何在一台服务器上使用多个IP 地址，请参考相关文档。 <br />
<br />
　　1、创建虚拟FTP服务器的根目录。 <br />
　　mkdir -p /var/ftp2/pub <br />
　　确保/var/ftp2和/var/ftp2/pub目录的拥有者和组均为root，掩码为755。 <br />
<br />
　　2、增加虚拟FTP服务器的匿名用户帐号。原先的FTP服务器使用系统用户ftp作为其匿名用户帐号。我们要增加一个ftp2用于虚拟FTP服务器。 <br />
　　useradd -d /var/ftp2 -M ftp2 <br />
<br />
　　3、创建虚拟FTP服务器的配置文件。复制原来的vsftpd.conf作为虚拟FTP服务器的配置文件，并修改相关参数。 <br />
　　cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf <br />
　　新添或修改以下参数： <br />
　　listen=YES <br />
　　listen_address=192.168.0.2 <br />
　　ftp_username=ftp2 <br />
<br />
　　注：由于VSFTPD默认是监听所有的IP地址，当我们设定基于IP的虚拟FTP服务器时，为防止原来的FTP服务器与虚拟FTP服务器发生监听上的冲突，原FTP服务器需要指定监听的IP地址。在这里，原来的配置文件中就要设置listen_address=192.168.0.1。 <br />
<br />
　　4、启动虚拟FTP服务器。 <br />
<br />
　　/etc/rc.d/init.d/vsftpd脚本在启动时，扫描/etc/vsftpd/目录下所有的*.conf文件，按照*.conf文件的先后，依次启用vsftpd进程，每个vsftpd进程对应一个.conf文件。即，&#8220;ls /etc/vsftpd/&#8221;列表的次序与&#8220;ps -aux |grep vsftpd&#8221;中的顺序一样。当然了，&#8220;ps -aux | grep vsftpd&#8221;中也显示出vsftpd所使用的配置文件，从中也可以看哪个vsftpd进程对应哪个FTP服务器。如果没有列出配置文件，那就是默认的vsftpd.conf，那么该进程也就是原来的FTP服务器进程。 <br />
　　由于第3步中虚拟FTP服务器的配置文件被命名为vsftpd2.conf文件，所以我们可以用/etc/rc.d/init.d/vsftpd脚本同时启动或关闭原FTP服务器和新加的虚拟FTP服务器。 <br />
　　以下命令单独启动虚拟FTP服务器： <br />
　　/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &amp; <br />
　　单独关闭虚拟FTP服务器，用&#8220;ps -aux | grep vsftpd&#8221;查出进程号，再用kill指令杀死虚拟FTP的进程。 <br />
<br />
6.5、虚拟用户的配置 <br />
<br />
6.5.1、VSFTPD的虚拟用户介绍 <br />
<br />
　　VSFTPD的本地用户本身是系统的用户，除了可以登录FTP服务器外，还可以登录系统使用其他系统资源，而VSFTPD的虚拟用户则是FTP服务的专用用户，虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限，而不需要其他系统资源的用户或情况来说，采用虚拟用户方式是很适合的。 <br />
　　VSFTPD的虚拟用户采用单独的用户名/口令保存方式，与系统账号（passwd/shadow）分离，这大大增强了系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令，如hash;也可以将用户/口令保存在数据库服务器中，如MySQL等。VSFTPD验证虚拟用户，则采用PAM方式。由于虚拟用户的用户名/口令被单独保存，因此在验证时，VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证，这就是guest用户，这正如同匿名用户也需要有一个系统用户ftp一样。当然，guest用户也可以被认为是用于映射虚拟用户。 <br />
　　配置虚拟用户分为几部分：guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等。具体的配置方法，参考下面小节。注：在后面的例子中，假定存在虚拟用户xiaotong和xiaowang。 <br />
<br />
6.5.2 用户创建和目录设置 <br />
<br />
　　在系统中添加vsftpdguest用户，作为虚拟用户在系统中的代表。 <br />
<br />
　　useradd vsftpdguest <br />
<br />
　　当虚拟用户登录后，所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录，修改vsftpdguest的自家目录即可。 <br />
<br />
6.5.3、配置文件的设置 <br />
<br />
6.5.3.1、基本设置。 <br />
<br />
　　在vsftpd.conf配置文件中，加入以下参数： <br />
　　guest_enable=YES <br />
　　guest_username=vsftpdguest <br />
<br />
6.5.3.2、虚拟用户的权限配置。 <br />
<br />
　　VSFTPD-1.2.0添加了virtual_use_local_privs参数，当该参数激活（YES）时，虚拟用户使用与本地用户相同的权限。当此参数关闭（NO）时，虚拟用户使用与匿名用户相同的权限，这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比，后者更加严格一些，特别是在有写访问的情形下。默认情况下此参数是关闭的（NO）。 <br />
　　下面先介绍virtual_use_local_privs=NO时，即VSFTPD-1.2.0之前版本对虚拟用户权限的配置方法： <br />
<br />
　　①控制虚拟用户浏览目录 <br />
　　如果让用户不能浏览目录，但仍可以对文件操作，那么需要执行以下二个步骤：一，配置文件中，anon_world_readable_only=YES。二，虚拟用户目录的权限改为只能由vsftpdguest操作： <br />
　　[root@hpe45 vsftpd]# chown vsftpdguest.vsftpdguest /home/vsftpdguest <br />
　　[root@hpe45 vsftpd]# chmod 700 /home/vsftpdguest <br />
　　②允许虚拟用户上传文件 <br />
　　write_enable=YES <br />
　　anon_upload_enable=YES <br />
　　③允许虚拟用户修改文件名和删除文件 <br />
　　anon_other_write_enable=YES <br />
　　由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限，最好是禁止匿名用户登录。 <br />
<br />
　　在VSFTPD-1.2.0中当virtual_use_local_privs=YES时，只需write_enable=YES，虚拟用户就可以就拥有写权限。 <br />
<br />
6.5.3.3、虚拟用户的其他配置 <br />
<br />
　　①限定虚拟用户在自家目录。 <br />
<br />
　　chroot_local_user=NO <br />
　　chroot_list_enable=YES <br />
　　chroot_list_file=/etc/vsftpd.chroot_list <br />
　　在/etc/vsftpd.chroot_list文件中加入xiaotong和xiaowang。 <br />
　　或者，chroot_local_user=YES <br />
<br />
　　②虚拟用户的个人配置。 <br />
<br />
　　如果想让个别的虚拟用户拥有自己特别的配置，同样可以建立虚拟用户的个人配置文件。在主配置文件中加入： <br />
　　user_config_dir=/etc/vsftpd/vsftpd_user_conf <br />
　　生成/etc/vsftpd/vsftpd_user_conf目录，在该目录下建立与特定虚拟用户同名的文件： <br />
　　[root@hpe45 vsftpd]# mkdir vsftpd_user_conf <br />
　　[root@hpe45 vsftpd]# cd vsftpd_user_conf <br />
　　[root@hpe45 vsftpd_user_conf]# touch xiaowang <br />
　　然后在xiaowang文件中就可以加入专对xiaowang生效的选项设置了。 <br />
　　注：如果在个人配置文件中加入chroot_local_user=YES是无效的。 <br />
<br />
6.5.3.4、虚拟用户个人目录设置 <br />
<br />
　　大家可以发现，无论是哪个虚拟用户，登录后所在的目录都是/home/vsftpdguest，即都是guest_username用户的自家目录。下面，介绍如何为每个虚拟用户建立自家目录。 <br />
　　一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的自家目录。以xiaowang为例，在第上步的基础上，首先/etc/vsftpd/vsftpd_user_conf/xiaowang文件中加入： <br />
　　local_root=/home/xiaowang <br />
　　新建xiaowang目录，并将权限设为vsftpdguest： <br />
　　[root@hpe45 home]# mkdir xiaowang <br />
　　[root@hpe45 home]# chown vsftpdguest.vsftpdguest ./xiaowang <br />
<br />
6.5.4、MySQL保存虚拟用户 <br />
<br />
　　本节介绍如何将虚拟用户的用户名和口令保存在MySQL的数据库中。这主要分二个部分，一是将用户和口令保存在数据库，二是设置相应的PAM认证。为了方便论述，做如下假定：数据库vsftpdvu，表users，字段name和passwd用于保存虚拟用户的用户名和口令；为了安全，只授权vsftpdguest读vsftpdvu数据库的users表。 <br />
<br />
　　1、虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。首先，创建数据库vsftpdvu以及表users，并插入虚拟用户xiaotong、xiaowang。执行以下命令： <br />
　　[root@hpe45 vsftpd]#mysql -p <br />
　　mysql&gt;create database vsftpdvu; <br />
　　mysql&gt;use vsftpdvu; <br />
　　mysql&gt;create table users(name char(16) binary,passwd char(16) binary); <br />
　　mysql&gt;insert into users (name,passwd) values ('xiaotong',password('qqmywife')); <br />
　　mysql&gt;insert into users (name,passwd) values ('xiaowang',password('ttmywife')); <br />
　　mysql&gt;quit <br />
<br />
　　然后，授权vsftpdguest只能读vsftpdvu数据库的users表。执行以下命令： <br />
　　[root@hpe45 vsftpd]#mysql -u root mysql -p <br />
　　mysql&gt;grant select on vsftpdvu.users to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#118;&#115;&#102;&#116;&#112;&#100;&#103;&#117;&#101;&#115;&#116;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;"><font color="#808080">vsftpdguest@localhost</font></a> identified by 'i52serial0'; <br />
　　mysql&gt;quit <br />
<br />
　　如果要验证刚才的操作是否成功可以执行下面命令： <br />
　　[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu <br />
　　mysql&gt;select * from users; <br />
　　如果成功，将会列出xiaotong、xiaowang和加密后的密码。 <br />
<br />
　　2、设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目（http://sourceforge.net/projects/pam-mysql/）。首先从网站下载它的程序包pam_myql-0.5.tar.gz，复制到/root目录中。在编译安装之前，要确保mysql-devel的RPM包已经安装在你的机器上，如果没有请从RHL安装光盘中安装该包。然后，执行以下命令： <br />
　　[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz <br />
　　[root@hpe45 root]#cd pam_mysql <br />
　　[root@hpe45 pam_mysql]#make <br />
　　[root@hpe45 pam_mysql]#make install <br />
　　make install这一步可能会出现错误，那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。 <br />
　　接下来，我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件，加入以下内容： <br />
　　auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2 <br />
　　account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2 <br />
　　上面涉及到的参数，只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数，crypt=0，口令以明文方式（不加密）保存在数据库中；crypt=1，口令使用UNIX系统的DES加密方式加密后保存在数据库中；crypt=2，口令经过MySQL的password()函数加密后保存。
<img src ="http://www.blogjava.net/szhswl/aggbug/165789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-06 13:58 <a href="http://www.blogjava.net/szhswl/articles/165789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>