﻿<?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>C++博客-旅途</title><link>http://www.cppblog.com/mydriverc/</link><description>如果想飞得高，就该把地平线忘掉</description><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 21:14:52 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 21:14:52 GMT</pubDate><ttl>60</ttl><item><title>超完整RedHat9.0-vsftp配置大全</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109709.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 15:56:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109709.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109709.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109709.html</trackback:ping><description><![CDATA[3.2&nbsp;VSFTP&nbsp;安全与效能兼备的ftp&nbsp;服务器&nbsp;<br>3.2.1&nbsp;VSFTP&nbsp;概述&nbsp;<br>FTP，file&nbsp;transfer&nbsp;protocol，这是档案传输的通讯协议，也是一般最常用来传送档案的方式。读者在使用RedHat9&nbsp;的时候，可能会感受到ftp&nbsp;server&nbsp;有一些改变：第一，就是ftp&nbsp;server&nbsp;只剩下vsftp，原有的wuftp&nbsp;等都没放入&nbsp;第二，就是vsftp&nbsp;从XINETD&nbsp;中独立出来，并将设定档从/etc/vsftpd.conf&nbsp;之中移到/etc/vsftpd/vsftpd.conf。&nbsp;<br>为什么做这样的改变？可以想见的是vsftp&nbsp;已有独立运作的能力，不需要XINETD&nbsp;来做更进一步的管控，并且类似sendmail、httpd、ssh、samba&nbsp;等，将设定文件的放入/etc&nbsp;下独立的目录。&nbsp;<br>FTP&nbsp;分为两类，一种为PORT&nbsp;FTP，也就是一般的FTP&nbsp;另一类是PASVFTP，分述如下：<br>PORT&nbsp;FTP&nbsp;<br>这是一般形式的FTP，首先会建立控制频道，默认值是port&nbsp;21，也就是跟port&nbsp;21&nbsp;建立联机，并透过此联机下达指令。第二，由FTP&nbsp;server&nbsp;端会建立数据传输频道，默认值为20，也就是跟port&nbsp;20&nbsp;建立联机，并透过port&nbsp;20&nbsp;作数据的传输。&nbsp;<br>PASV&nbsp;FTP&nbsp;<br>跟PORT&nbsp;FTP&nbsp;类似，首先会建立控制频道，默认值是port&nbsp;21，也就是跟port&nbsp;21&nbsp;建立联机，并透过此联机下达指令。第二，会由client&nbsp;端做出数据传输的请求，包括数据传输port&nbsp;的数字。&nbsp;<br>这两者的差异为何？PORT&nbsp;FTP&nbsp;当中的数据传输port&nbsp;是由FTP&nbsp;server&nbsp;指定，而PASV&nbsp;FTP&nbsp;的数据传输port&nbsp;是由FTP&nbsp;client&nbsp;决定。通常我们使用PASV&nbsp;FTP，是在有防火墙的环境之下，透过client&nbsp;与server&nbsp;的沟通，决定数据传输的port。<br><br>3.2.2&nbsp;范例&nbsp;<br><br>3.2.1.&nbsp;直接启动VSFTP&nbsp;服务&nbsp;<br>这个范例是套用RedHat&nbsp;的预设范例,直接启动vsftp。&nbsp;<br>[root@relay&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;start&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br><br>3.2.2.&nbsp;更换port&nbsp;提供服务：将预设的port&nbsp;21&nbsp;更换为2121<br>为了安全，或是以port&nbsp;来区隔不同的ftp&nbsp;服务，我们可能会将ftp&nbsp;port&nbsp;改为21&nbsp;之外的port，那么，可参考以下步骤。&nbsp;<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下一行&nbsp;<br>listen_port=2121&nbsp;<br>Step2.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br><br>3.2.3.&nbsp;特定使用者peter、john&nbsp;不得变更目录&nbsp;<br>使用者的预设目录为/home/username，若是我们不希望使用者在ftp&nbsp;时能够&nbsp;<br>切换到上一层目录/home，则可参考以下步骤。&nbsp;<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>将底下三行&nbsp;<br>#chroot_list_enable=YES&nbsp;<br>#&nbsp;(default&nbsp;follows)&nbsp;<br>#chroot_list_file=/etc/vsftpd.chroot_list&nbsp;<br>改为&nbsp;<br>chroot_list_enable=YES&nbsp;<br>#&nbsp;(default&nbsp;follows)&nbsp;<br>chroot_list_file=/etc/vsftpd/chroot_list&nbsp;<br>Step2.&nbsp;新增一个档案:&nbsp;/etc/vsftpd/chroot_list&nbsp;<br>内容增加两行：&nbsp;<br>peter&nbsp;<br>john&nbsp;<br>Step3.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>若是peter&nbsp;欲切换到根目录以外的目录，则会出现以下警告：&nbsp;<br>ftp&gt;&nbsp;cd&nbsp;/home&nbsp;<br>550&nbsp;Failed&nbsp;to&nbsp;change&nbsp;directory.&nbsp;<br><br>3.2.4.&nbsp;取消anonymous&nbsp;登入&nbsp;<br>若是读者的主机不希望使用者匿名登入，则可参考以下步骤。<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>将&nbsp;<br>anonymous_enable=YES&nbsp;<br>改为&nbsp;<br>anonymous_enable=NO&nbsp;<br>Step2.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br><br>3.2.5.&nbsp;安排欢迎话语<br>若是我们希望使用者在登入时，能够看到欢迎话语，可能包括对该主机的说明，或是目录的介绍，可参考以下步骤。<br>首先确定在/etc/vsftpd/vsftpd.conf&nbsp;当中是否有底下这一行&nbsp;<br>dirmessage_enable=YES&nbsp;<br>RedHat9&nbsp;的默认值是有上面这行的。&nbsp;<br>接着，在各目录之中，新增名为.message&nbsp;的档案，再这边假设有一个使用者test1，且此使用者的根目录下有个目录名为abc，那首先我们在/home/test1&nbsp;<br>之下新增.message，内容如下：&nbsp;<br>Hello~&nbsp;Welcome&nbsp;to&nbsp;the&nbsp;home&nbsp;directory&nbsp;<br>This&nbsp;is&nbsp;for&nbsp;test&nbsp;only...&nbsp;<br>接着，在/home/test1/abc&nbsp;的目录下新增.message，内容如下：&nbsp;<br>Welcome&nbsp;to&nbsp;abc's&nbsp;directory&nbsp;<br>This&nbsp;is&nbsp;subdir...&nbsp;<br>那么，当使用者test1&nbsp;登入时，会看到以下讯息：&nbsp;<br>230-&nbsp;Hello~&nbsp;Welcome&nbsp;to&nbsp;the&nbsp;home&nbsp;directory&nbsp;<br>230-&nbsp;<br>230-&nbsp;This&nbsp;is&nbsp;for&nbsp;test&nbsp;only...&nbsp;<br>230-&nbsp;<br>若是切换到abc&nbsp;的目录，则会出现以下讯息：&nbsp;<br>250-&nbsp;Welcome&nbsp;to&nbsp;abc's&nbsp;directory&nbsp;<br>250-&nbsp;<br>250-&nbsp;This&nbsp;is&nbsp;subdir&nbsp;...&nbsp;<br><br>3.2.6.&nbsp;对于每一个联机，以独立的process&nbsp;来运作<br>一般启动vsftp&nbsp;时，我们只会看到一个名为vsftpd&nbsp;的process&nbsp;在运作，但若是读者希望每一个联机，都能以独立的process&nbsp;来呈现，则可执行以下步骤。<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下一行&nbsp;<br>setproctitle_enable=YES&nbsp;<br>Step2.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>使用ps&nbsp;-ef&nbsp;的指令，可以看告不同使用者联机的情形，如下图所示：&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;ps&nbsp;-ef|grep&nbsp;ftp&nbsp;<br>root&nbsp;2090&nbsp;1&nbsp;0&nbsp;16:41&nbsp;pts/0&nbsp;00:00:00&nbsp;vsftpd:&nbsp;LISTENER&nbsp;<br>nobody&nbsp;2120&nbsp;2090&nbsp;0&nbsp;17:18&nbsp;?&nbsp;00:00:00&nbsp;vsftpd:&nbsp;192.168.10.244:&nbsp;<br>connected&nbsp;<br>test1&nbsp;2122&nbsp;2120&nbsp;0&nbsp;17:18&nbsp;?&nbsp;00:00:00&nbsp;vsftpd:&nbsp;192.168.10.244/test1:&nbsp;<br>IDLE&nbsp;<br>nobody&nbsp;2124&nbsp;2090&nbsp;0&nbsp;17:19&nbsp;?&nbsp;00:00:00&nbsp;vsftpd:&nbsp;192.168.10.244:&nbsp;<br>connected&nbsp;<br>test2&nbsp;2126&nbsp;2124&nbsp;0&nbsp;17:19&nbsp;?&nbsp;00:00:00&nbsp;vsftpd:&nbsp;192.168.10.244/test2:&nbsp;<br>IDLE&nbsp;<br>root&nbsp;2129&nbsp;1343&nbsp;0&nbsp;17:20&nbsp;pts/0&nbsp;00:00:00&nbsp;grep&nbsp;ftp&nbsp;<br>[root@home&nbsp;vsftpd]#<br><br>3.2.7.&nbsp;限制传输档案的速度：<br>本机的使用者最高速度为200KBytes/s，匿名登入者所能使用的最高速度为50KBytes/s<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下两行&nbsp;<br>anon_max_rate=50000&nbsp;<br>local_max_rate=200000&nbsp;<br>Step2.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>在这边速度的单位为Bytes/s，其中anon_max_rate&nbsp;所限制的是匿名登入的&nbsp;<br>使用者，而local_max_rate&nbsp;所限制的是本机的使用者。VSFTPD&nbsp;对于速度的限&nbsp;<br>制，范围大概在80%到120%之间，也就是我们限制最高速度为100KBytes/s，&nbsp;<br>但实际的速度可能在80KBytes/s&nbsp;到120KBytes/s&nbsp;之间，当然，若是频宽不足&nbsp;<br>时，数值会低于此限制。<br><br>3.2.8.&nbsp;针对不同的使用者限制不同的速度：<br>假设test1&nbsp;所能使用的最高速度为250KBytes/s，test2&nbsp;所能使用的最高速度为500KBytes/s。&nbsp;<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下一行&nbsp;<br>user_config_dir=/etc/vsftpd/userconf&nbsp;<br>Step2.&nbsp;新增一个目录：/etc/vsftpd/userconf&nbsp;<br>mkdir&nbsp;/etc/vsftpd/userconf&nbsp;<br>Step3.&nbsp;在/etc/vsftpd/userconf&nbsp;之下新增一个名为test1&nbsp;的档案&nbsp;<br>内容增加一行：&nbsp;<br>local_max_rate=250000&nbsp;<br>Step4.&nbsp;在/etc/vsftpd/userconf&nbsp;之下新增一个名为test2&nbsp;的档案&nbsp;<br>内容增加一行：&nbsp;<br>local_max_rate=500000&nbsp;<br>Step5.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]<br><br>3.2.9-1.&nbsp;建置一个防火墙下的ftp&nbsp;server，使用PORT&nbsp;FTP&nbsp;mode：<br>预设的ftp&nbsp;port:21&nbsp;以及ftp&nbsp;data&nbsp;port:20&nbsp;<br>启动VSFTPD&nbsp;之后执行以下两行指令，只允许port&nbsp;21&nbsp;以及port&nbsp;20&nbsp;开放，其它关闭。&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;multiport&nbsp;--dport&nbsp;21,20&nbsp;-j&nbsp;ACCEPT&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-j&nbsp;REJECT&nbsp;--reject-with&nbsp;tcp-reset<br><br>3.2.9-2.&nbsp;建置一个防火墙下的ftp&nbsp;server，使用PORT&nbsp;FTP&nbsp;mode：<br>ftp&nbsp;port:2121&nbsp;以及ftp&nbsp;data&nbsp;port:2020&nbsp;<br>Step1.&nbsp;执行以下两行指令，只允许port&nbsp;2121&nbsp;以及port&nbsp;2020&nbsp;开放，其它关闭。&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;multiport&nbsp;--dport&nbsp;2121,2020&nbsp;-j&nbsp;ACCEPT&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-j&nbsp;REJECT&nbsp;--reject-with&nbsp;tcp-reset&nbsp;<br>Step2.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下两行&nbsp;<br>listen_port=2121&nbsp;<br>ftp_data_port=2020&nbsp;<br>Step3.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>在这边要注意，8、9&nbsp;两个例子中，ftp&nbsp;client（如cuteftp）的联机方式不能够选择passive&nbsp;mode，否则无法建立数据的联机。也就是读者可以连上ftp&nbsp;<br>server，但是执行ls、get&nbsp;等等的指令时，便无法运作。<br><br>3.2.10.&nbsp;建置一个防火墙下的ftp&nbsp;server，使用PASS&nbsp;FTP&nbsp;mode：<br>ftp&nbsp;port:2121&nbsp;以及ftp&nbsp;data&nbsp;port&nbsp;从9981&nbsp;到9986。&nbsp;<br>Step1.&nbsp;执行以下两行指令，只允许port&nbsp;2121&nbsp;以及port&nbsp;9981-9990&nbsp;开放，其它关闭。&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;multiport&nbsp;--dport&nbsp;<br>2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990&nbsp;-j&nbsp;ACCEPT&nbsp;<br>iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-j&nbsp;REJECT&nbsp;--reject-with&nbsp;tcp-reset&nbsp;<br>Step2.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>新增底下四行&nbsp;<br>listen_port=2121&nbsp;<br>pasv_enable=YES&nbsp;<br>pasv_min_port=9981&nbsp;<br>pasv_max_port=9986&nbsp;<br>Step3.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>在这边要注意，在10&nbsp;这个例子中，ftp&nbsp;client（如cuteftp）的联机方式必须选择passive&nbsp;mode，否则无法建立数据的联机。也就是读者可以连上ftp&nbsp;server，但是执行ls,get&nbsp;等等的指令时，便无法运作。<br><br>3.2.11.&nbsp;将vsftpd&nbsp;与TCP_wrapper&nbsp;结合<br>若是读者希望直接在/etc/hosts.allow&nbsp;之中定义允许或是拒绝的来源地址，可执行以下步骤。这是简易的防火墙设定。&nbsp;<br>Step1.&nbsp;确定/etc/vsftpd/vsftpd.conf&nbsp;之中tcp_wrappers&nbsp;的设定为YES，如下图所&nbsp;<br>示：&nbsp;<br>tcp_wrappers=YES&nbsp;<br>这是RedHat9&nbsp;的默认值，基本上不需修改。&nbsp;<br>Step2.&nbsp;重新启动vsftpd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;vsftpd&nbsp;restart&nbsp;<br>Shutting&nbsp;down&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;vsftpd&nbsp;for&nbsp;vsftpd:&nbsp;OK&nbsp;]&nbsp;<br>Step3.&nbsp;设定/etc/hosts.allow，譬如提供111.22.33.4&nbsp;以及10.1.1.1&nbsp;到10.1.1.254&nbsp;连&nbsp;<br>线，则可做下图之设定：&nbsp;<br>vsftpd&nbsp;:&nbsp;111.22.33.4&nbsp;10.1.1.&nbsp;:&nbsp;allow&nbsp;<br>ALL&nbsp;:&nbsp;ALL&nbsp;:&nbsp;DENY<br><br>3.2.12.&nbsp;将vsftpd&nbsp;并入XINETD&nbsp;<br>若是读者希望将vsftpd&nbsp;并入XINETD&nbsp;之中，也就是7.x&nbsp;版的预设设定，那&nbsp;<br>么读者可以执行以下步骤。&nbsp;<br>Step1.&nbsp;修改/etc/vsftpd/vsftpd.conf&nbsp;<br>将&nbsp;<br>listen=YES&nbsp;<br>改为&nbsp;<br>listen=NO&nbsp;<br>Step2.&nbsp;新增一个档案：&nbsp;/etc/xinetd.d/vsftpd&nbsp;<br>内容如下：&nbsp;<br>service&nbsp;vsftpd&nbsp;<br>{&nbsp;<br>disable&nbsp;=&nbsp;no&nbsp;<br>socket_type&nbsp;=&nbsp;stream&nbsp;<br>wait&nbsp;=&nbsp;no&nbsp;<br>user&nbsp;=&nbsp;root&nbsp;<br>server&nbsp;=&nbsp;/usr/sbin/vsftpd&nbsp;<br>port&nbsp;=&nbsp;21&nbsp;<br>log_on_success&nbsp;+=&nbsp;PID&nbsp;HOST&nbsp;DURATION&nbsp;<br>log_on_failure&nbsp;+=&nbsp;HOST&nbsp;<br>}&nbsp;<br>Step3.&nbsp;重新启动xinetd&nbsp;<br>[root@home&nbsp;vsftpd]#&nbsp;/sbin/service&nbsp;xinetd&nbsp;restart&nbsp;<br>Stopping&nbsp;xinetd:&nbsp;OK&nbsp;]&nbsp;<br>Starting&nbsp;xinetd:&nbsp;OK&nbsp;]&nbsp;<br><br>3.2.3&nbsp;设定档说明<br>在范例中，有些省略的设定可以在这边找到，譬如联机的总数、同一个位址的联机数、显示档案拥有者的名称等等，希望读者细读后，可以做出最适合自己的设定。<br>格式<br>vsftpd.conf&nbsp;的内容非常单纯，每一行即为一项设定。若是空白行或是开头为#的一行，将会被忽略。内容的格式只有一种，如下所示&nbsp;<br>option=value&nbsp;<br>要注意的是，等号两边不能加空白，不然是不正确的设定。&nbsp;<br>＝＝＝ascii&nbsp;设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>ascii_download_enable&nbsp;<br>管控是否可用ASCII&nbsp;模式下载。默认值为NO。&nbsp;<br>ascii_upload_enable&nbsp;<br>管控是否可用ASCII&nbsp;模式上传。默认值为NO。&nbsp;<br>＝＝＝个别使用者设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>chroot_list_enable&nbsp;<br>如果启动这项功能，则所有的本机使用者登入均可进到根目录之外的数据夹，除了列&nbsp;<br>在/etc/vsftpd.chroot_list&nbsp;之中的使用者之外。默认值为NO。&nbsp;<br>userlist_enable&nbsp;<br>用法：YES/NO&nbsp;<br>若是启动此功能，则会读取/etc/vsftpd.user_list&nbsp;当中的使用者名称。此项功能可以在询问密码前就出现失败讯息，而不需要检验密码的程序。默认值为关闭。&nbsp;<br>userlist_deny&nbsp;<br>用法：YES/NO&nbsp;<br>这个选项只有在userlist_enable&nbsp;启动时才会被检验。如果将这个选项设为YES，则在/etc/vsftpd.user_list&nbsp;中的使用者将无法登入&nbsp;若设为NO&nbsp;，&nbsp;则只有在&nbsp;<br>/etc/vsftpd.user_list&nbsp;中的使用者才能登入。而且此项功能可以在询问密码前就出现错误讯息，而不需要检验密码的程序。&nbsp;<br>user_config_dir&nbsp;<br>定义个别使用者设定文件所在的目录，例如定义user_config_dir=/etc/vsftpd/userconf，且主机上有使用者test1,test2，那我们可以在user_config_dir&nbsp;的目录新增文件名为test1&nbsp;以及test2。若是test1&nbsp;登入，则会读取user_config_dir&nbsp;下的test1&nbsp;这个档案内的设定。默认值为无。&nbsp;<br>＝＝＝欢迎语设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>dirmessage_enable&nbsp;<br>如果启动这个选项，使用者第一次进入一个目录时，会检查该目录下是否有.message这个档案，若是有，则会出现此档案的内容，通常这个档案会放置欢迎话语，或是对该目录的说明。默认值为开启。&nbsp;<br>banner_file&nbsp;<br>当使用者登入时，会显示此设定所在的档案内容，通常为欢迎话语或是说明。默认值为无。&nbsp;<br>ftpd_banner&nbsp;<br>这边可定义欢迎话语的字符串，相较于banner_file&nbsp;是档案的形式，而ftpd_banner&nbsp;是字串的格式。预设为无。&nbsp;<br>＝＝＝特殊安全设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>chroot_local_user&nbsp;<br>如果设定为YES，那么所有的本机的使用者都可以切换到根目录以外的数据夹。预设值为NO。&nbsp;<br>hide_ids&nbsp;<br>如果启动这项功能，所有档案的拥有者与群组都为ftp，也就是使用者登入使用ls&nbsp;-al之类的指令，所看到的档案拥有者跟群组均为ftp。默认值为关闭。&nbsp;<br>ls_recurse_enable&nbsp;<br>若是启动此功能，则允许登入者使用ls&nbsp;-R&nbsp;这个指令。默认值为NO。&nbsp;<br>write_enable&nbsp;<br>用法：YES/NO&nbsp;<br>这个选项可以控制FTP&nbsp;的指令是否允许更改file&nbsp;system，譬如STOR、DELE、&nbsp;<br>RNFR、RNTO、MKD、RMD、APPE&nbsp;以及SITE。预设是关闭。&nbsp;<br>setproctitle_enable&nbsp;<br>用法：YES/NO&nbsp;<br>启动这项功能，vsftpd&nbsp;会将所有联机的状况已不同的process&nbsp;呈现出来，换句话说，使用ps&nbsp;-ef&nbsp;这类的指令就可以看到联机的状态。默认值为关闭。&nbsp;<br>tcp_wrappers&nbsp;<br>用法：YES/NO&nbsp;<br>如果启动，则会将vsftpd&nbsp;与tcp&nbsp;wrapper&nbsp;结合，也就是可以在/etc/hosts.allow&nbsp;与/etc/hosts.deny&nbsp;中定义可联机或是拒绝的来源地址。&nbsp;<br>pam_service_name&nbsp;<br>这边定义PAM&nbsp;所使用的名称，预设为vsftpd。&nbsp;<br>secure_chroot_dir&nbsp;<br>这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限，当vsftpd&nbsp;不需要file&nbsp;system&nbsp;的权限时，就会将使用者限制在此数据夹中。默认值为/usr/share/empty&nbsp;<br><br>＝＝＝纪录文件设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>xferlog_enable&nbsp;<br>用法：YES/NO&nbsp;<br>如果启动，上传与下载的信息将被完整纪录在底下xferlog_file&nbsp;所定义的档案中。预设为开启。&nbsp;<br>xferlog_file&nbsp;<br>这个选项可设定纪录文件所在的位置，默认值为/var/log/vsftpd.log。&nbsp;<br>xferlog_std_format&nbsp;<br>如果启动，则纪录文件将会写为xferlog&nbsp;的标准格式，如同wu-ftpd&nbsp;一般。默认值为关闭。&nbsp;<br><br>＝＝＝逾时设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>accept_timeout&nbsp;<br>接受建立联机的逾时设定，单位为秒。默认值为60。&nbsp;<br>connect_timeout&nbsp;<br>响应PORT&nbsp;方式的数据联机的逾时设定，单位为秒。默认值为60。&nbsp;<br>data_connection_timeout&nbsp;<br>建立数据联机的逾时设定。默认值为300&nbsp;秒。&nbsp;<br>idle_session_timeout&nbsp;<br>发呆的逾时设定，若是超出这时间没有数据的传送或是指令的输入，则会强迫断线，单位为秒。默认值为300。&nbsp;<br>＝＝＝速率限制＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>anon_max_rate&nbsp;<br>匿名登入所能使用的最大传输速度，单位为每秒多少bytes，0&nbsp;表示不限速度。默认值为0。&nbsp;<br>local_max_rate&nbsp;<br>本机使用者所能使用的最大传输速度，单位为每秒多少bytes，0&nbsp;表示不限速度。预设值为0。&nbsp;<br>＝＝＝新增档案权限设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>anon_umask&nbsp;<br>匿名登入者新增档案时的umask&nbsp;数值。默认值为077。&nbsp;<br>file_open_mode&nbsp;<br>上传档案的权限，与chmod&nbsp;所使用的数值相同。默认值为0666。&nbsp;<br>local_umask&nbsp;<br>本机登入者新增档案时的umask&nbsp;数值。默认值为077。&nbsp;<br>＝＝＝port&nbsp;设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>connect_from_port_20&nbsp;<br>用法：YES/NO&nbsp;<br>若设为YES，则强迫ftp-data&nbsp;的数据传送使用port&nbsp;20。默认值为YES。&nbsp;<br>ftp_data_port&nbsp;<br>设定ftp&nbsp;数据联机所使用的port。默认值为20。&nbsp;<br>listen_port&nbsp;<br>FTP&nbsp;server&nbsp;所使用的port。默认值为21。&nbsp;<br>pasv_max_port&nbsp;<br>建立资料联机所可以使用port&nbsp;范围的上界，0&nbsp;表示任意。默认值为0。&nbsp;<br>pasv_min_port&nbsp;<br>建立资料联机所可以使用port&nbsp;范围的下界，0&nbsp;表示任意。默认值为0。&nbsp;<br>＝＝＝其它＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>anon_root&nbsp;<br>使用匿名登入时，所登入的目录。默认值为无。&nbsp;<br>local_enable&nbsp;<br>用法：YES/NO&nbsp;<br>启动此功能则允许本机使用者登入。默认值为YES。&nbsp;<br>local_root&nbsp;<br>本机使用者登入时，将被更换到定义的目录下。默认值为无。&nbsp;<br>text_userdb_names&nbsp;<br>用法：YES/NO&nbsp;<br>当使用者登入后使用ls&nbsp;-al&nbsp;之类的指令查询该档案的管理权时，预设会出现拥有者的UID，而不是该档案拥有者的名称。若是希望出现拥有者的名称，则将此功能开启。默认值为NO。&nbsp;<br>pasv_enable&nbsp;<br>若是设为NO，则不允许使用PASV&nbsp;的模式建立数据的联机。默认值为开启。&nbsp;<br>＝＝＝更换档案所有权＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>chown_uploads&nbsp;<br>用法：YES/NO&nbsp;<br>若是启动，所有匿名上传数据的拥有者将被更换为chown_username&nbsp;当中所设定的使用者。这样的选项对于安全及管理，是很有用的。默认值为NO。&nbsp;<br>chown_username&nbsp;<br>这里可以定义当匿名登入者上传档案时，该档案的拥有者将被置换的使用者名称。预设值为root。&nbsp;<br>＝＝＝guest&nbsp;设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>guest_enable&nbsp;<br>用法：YES/NO&nbsp;<br>若是启动这项功能，所有的非匿名登入者都视为guest。默认值为关闭。&nbsp;<br>guest_username&nbsp;<br>这里将定义guest&nbsp;的使用者名称。默认值为ftp。&nbsp;<br>＝＝＝anonymous&nbsp;设定＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>anonymous_enable&nbsp;<br>用法：YES/NO&nbsp;<br>管控使否允许匿名登入，YES&nbsp;为允许匿名登入，NO&nbsp;为不允许。默认值为YES。&nbsp;<br>no_anon_password&nbsp;<br>若是启动这项功能，则使用匿名登入时，不会询问密码。默认值为NO。&nbsp;<br>anon_mkdir_write_enable&nbsp;<br>用法：YES/NO&nbsp;<br>如果设为YES，匿名登入者会被允许新增目录，当然，匿名使用者必须要有对上层目录的写入权。默认值为NO。&nbsp;<br>anon_other_write_enable&nbsp;<br>用法：YES/NO&nbsp;<br>如果设为YES，匿名登入者会被允许更多于上传与建立目录之外的权限，譬如删除或是更名。默认值为NO。&nbsp;<br>anon_upload_enable&nbsp;<br>用法：YES/NO&nbsp;<br>如果设为YES，匿名登入者会被允许上传目录的权限，当然，匿名使用者必须要有对上层目录的写入权。默认值为NO。&nbsp;<br>anon_world_readable_only&nbsp;<br>用法：YES/NO&nbsp;<br>如果设为YES，匿名登入者会被允许下载可阅读的档案。默认值为YES。&nbsp;<br>ftp_username&nbsp;<br>定义匿名登入的使用者名称。默认值为ftp。&nbsp;<br>deny_email_enable&nbsp;<br>若是启动这项功能，则必须提供一个档案/etc/vsftpd.banner_emails，内容为email&nbsp;<br>address。若是使用匿名登入，则会要求输入email&nbsp;address，若输入的email&nbsp;address&nbsp;在此档案内，则不允许联机。默认值为NO。&nbsp;<br>＝＝＝Standalone&nbsp;选项＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br>listen&nbsp;<br>用法：YES/NO&nbsp;<br>若是启动，则vsftpd&nbsp;将会以独立运作的方式执行，若是vsftpd&nbsp;独立执行，如RedHat9的默认值，则必须启动&nbsp;若是vsftpd&nbsp;包含在xinetd&nbsp;之中，则必须关闭此功能，如RedHat8。在RedHat9&nbsp;的默认值为YES。&nbsp;<br>listen_address&nbsp;<br>若是vsftpd&nbsp;使用standalone&nbsp;的模式，可使用这个参数定义使用哪个IP&nbsp;address&nbsp;提供这项服务，若是主机上只有定义一个IP&nbsp;address，则此选项不需使用，若是有多个IP&nbsp;address，可定义在哪个IP&nbsp;address&nbsp;上提供ftp&nbsp;服务。若是不设定，则所有的IP&nbsp;address均会提供此服务。默认值为无。&nbsp;<br>max_clients&nbsp;<br>若是vsftpd&nbsp;使用standalone&nbsp;的模式，可使用这个参数定义最大的总联机数。超过这个数目将会拒绝联机，0&nbsp;表示不限。默认值为0。&nbsp;<br>max_per_ip&nbsp;<br>若是vsftpd&nbsp;使用standalone&nbsp;的模式，可使用这个参数定义每个ip&nbsp;address&nbsp;所可以联机的数目。超过这个数目将会拒绝联机，0&nbsp;表示不限。默认值为0。&nbsp;<br>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&nbsp;<br><br>3.2.4&nbsp;FTP&nbsp;数字代码的意义&nbsp;<br>110&nbsp;重新启动标记应答。&nbsp;<br>120&nbsp;服务在多久时间内ready。&nbsp;<br>125&nbsp;数据链路埠开启，准备传送。&nbsp;<br>150&nbsp;文件状态正常，开启数据连接端口。&nbsp;<br>200&nbsp;命令执行成功。&nbsp;<br>202&nbsp;命令执行失败。&nbsp;<br>211&nbsp;系统状态或是系统求助响应。&nbsp;<br>212&nbsp;目录的状态。&nbsp;<br>213&nbsp;文件的状态。&nbsp;<br>214&nbsp;求助的讯息。&nbsp;<br>215&nbsp;名称系统类型。&nbsp;<br>220&nbsp;新的联机服务ready。&nbsp;<br>221&nbsp;服务的控制连接埠关闭，可以注销。&nbsp;<br>225&nbsp;数据连结开启，但无传输动作。&nbsp;<br>226&nbsp;关闭数据连接端口，请求的文件操作成功。&nbsp;<br>227&nbsp;进入passive&nbsp;mode。&nbsp;<br>230&nbsp;使用者登入。&nbsp;<br>250&nbsp;请求的文件操作完成。&nbsp;<br>257&nbsp;显示目前的路径名称。&nbsp;<br>331&nbsp;用户名称正确，需要密码。&nbsp;<br>332&nbsp;登入时需要账号信息。&nbsp;<br>350&nbsp;请求的操作需要进一部的命令。&nbsp;<br>421&nbsp;无法提供服务，关闭控制连结。&nbsp;<br>425&nbsp;无法开启数据链路。&nbsp;<br>426&nbsp;关闭联机，终止传输。&nbsp;<br>450&nbsp;请求的操作未执行。&nbsp;<br>451&nbsp;命令终止：有本地的错误。&nbsp;<br>452&nbsp;未执行命令：磁盘空间不足。&nbsp;<br>500&nbsp;格式错误，无法识别命令。&nbsp;<br>501&nbsp;参数语法错误。&nbsp;<br>502&nbsp;命令执行失败。&nbsp;<br>503&nbsp;命令顺序错误。&nbsp;<br>504&nbsp;命令所接的参数不正确。&nbsp;<br>530&nbsp;未登入。&nbsp;<br>532&nbsp;储存文件需要账户登入。&nbsp;<br>550&nbsp;未执行请求的操作。&nbsp;<br>551&nbsp;请求的命令终止，类型未知。&nbsp;<br>552&nbsp;请求的文件终止，储存位溢出。&nbsp;<br>553&nbsp;未执行请求的的命令，名称不正确。<img src ="http://www.cppblog.com/mydriverc/aggbug/109709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 23:56 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速建立简单vsftp </title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109694.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 12:37:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109694.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109694.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109694.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109694.html</trackback:ping><description><![CDATA[<p>今天一公司合作家伙说要传文件给我们这，就一文本文件非要求俺给他开个ftp,都没则了，只能给开个，从来没开过，在网络上搜索了下linux下开ftp可以用自带的vsftp也可以用软件建一个，而且听说vsftp也挺不错，就按网络教程一步步来了，这里主要是总结下自己的做法，毕竟不是每个人在要急用时候还去看一些文章的详解。<br>1.先用这几个命令看看是不是vsftpd安装正常<br>#service
vsftpd start 启动 <br>#service vsftpd stop 停止<br>#service vsftpd restart 重启<font face="Courier New"><font face="Courier New"><br>2.以上没有问题的话编辑vsftpd的配置文件<br>[root@localhost /]# </font>vi
/etc/vsftpd/vsftpd.conf&nbsp;&nbsp; //这个文件的具体内容解释可以看下面&#8220;参考文章&#8221;第一个链接<br>3.<font face="Courier New">anonymous_enable=YES 改成NO #禁止匿名访问</font><br>4.在 vsftpd.conf
中找到 <font face="Courier New">chroot_list_file=/etc/vsftpd.chroot_list把注释去掉然后建立<br></font></font>/etc/vsftpd.chroot_list文件，在文件中输入linux系统中的一个或多个用户名(一行一个)。<br><br>注：这个用户名是linux系统中root用户添加的。<br>[root@localhost
/]# useradd -s /sbin/nologin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
//这样限制用户不能使用ssh登录<br><br>5.更改ftp端口仍然在vsftpd.conf文件中：<br><font face="Courier New">tcp_wrappers=YES<br>listen_port=2121&nbsp;&nbsp;
//自定义端口号，记得不要与已有端口冲突<br>local_root=/server/apache/htdocs&nbsp;
//设定用户explorer连接ftp时候显示的目录<br></font>保存退出编辑。<br><br>6.<br>#service vsftpd
restart 重启.然后一个利用系统已有用户名登录的ftp就开通了，<br>注：#service vsftpd start
命令只是在linux开启后手动开启vsftpd的命令，如果linux重启，还要使用该命令重新启动。<br>要想开机启动vsftp服务：执行chkconfig
--level 35 vsftpd on&nbsp;
(网络查询的未实践过)<br><br>后记：<br>如果有时间研究就多看看建立虚拟用户那部分，虚拟用户相比系统用户也许会更安全些，也稍微复杂些。<br><br>引用建立虚拟用户：<br>=====================================================</p>
<p><font size="2">[root@server root]# useradd vuser #新建一个虚拟登陆指定的号!<br>[root@server
root]# vi users.txt&nbsp; #虚拟号范本一行用户名下一行密码<br>[root@server root]# db_load -T -t hash
-f users.txt /etc/vsftpd.login.db #把users.txt的内容加为虚拟用户的帐号和密码<br>[root@server
root]# chmod 600 /etc/vsftpd.login.db #为了安全修改里面的内容<br>[root@server root]# vi
/etc/pam.d/ftp&nbsp; #修改里面的内容,使之与下面的相同<br>[root@server root]# more
/etc/pam.d/ftp<br>#%PAM-1.0<br>#auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;
/lib/security/pam_listfile.so item=user sense=allow file<br>=/etc/ftpusers
onerr=succeed<br>#auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp; /lib/security/pam_pwdb.so shadow
nullok<br>#auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp; /lib/security/pam_shells.so<br>#account&nbsp;&nbsp;&nbsp;
required&nbsp;&nbsp;&nbsp; /lib/security/pam_pwdb.so<br>#session&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;
/lib/security/pam_pwdb.so<br>auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp; pam_userdb.so
db=/etc/vsftpd.login<br>account&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp; pam_userdb.so
db=/etc/vsftpd.login<br>再次修改/etc/vsftpd.conf,使其内容与anonymous有关的全部禁用,还有刚才的chroot也被列为禁用,如果想用的话保证虚拟号能常的前提下再另行测试,并在最后加入二句话:</font></p>
<p><font size="2">guest_enable=YES</font></p>
<p><font size="2">guest_username=vuser&nbsp; 接下来就是重启vsftpd</font></p>
<p><font size="2">[root@server root]# killall -HUP vsftpd&nbsp; #!<br>[root@server
root]# ftp localhost&nbsp; #测试<br>Connected to server.redhat.org.cn.<br>220 Welcome
to linfeng's ftp server.<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 (localhost:root): tom&nbsp;&nbsp; #虚拟号<br>331 Please specify the
password.<br>Password:&nbsp;&nbsp; #虚拟号tom的密码<br>230 Login successful.&nbsp; #成功<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,136,56)<br>150 Here comes the
directory listing.<br>226 Transfer done (but failed to open directory).&nbsp;&nbsp;
#怎么会禁止了呢?想一下上面的,,呵呵,这就是因为vuser用户的权限啊,只需"chmod o+r
/home/vuser"那可浏览,但不可上传,因为没有"w"位<br></font></p>
<p>=====================================<br><br>网络参考文章：<br><font face="Courier New">http://www.bianceng.cn/OS/Linux/200706/3020.htm</font><br><font face="Courier New">http://www.shineblog.com/user2/24790/archives/2005/175940.shtml</font><br>这两篇都比较详细。</p><img src ="http://www.cppblog.com/mydriverc/aggbug/109694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 20:37 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wu -ftp 安装和配置</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109686.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109686.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109686.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109686.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109686.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109686.html</trackback:ping><description><![CDATA[如何配置WU-FTP服务器 <br>本文出自: 作者: (2001-06-27 08:10:01) <br>&nbsp; &nbsp; 在众多的网络应用中，FTP（File
Transfer porotocol）有着非常重要的地位。在Internet中一 <br>&nbsp; &nbsp;
个十分重要的资源就是软件资源。而各种各样的软件资源大多数都是放在FTP服务器中的。可以说， <br>&nbsp; &nbsp;
FTP与WEB服务几乎占据了整个Internet应用的80%以上。 <br>&nbsp; &nbsp;
FTP服务可以根据服务对象的不同分为两类：一类是系统FTP服务器，它只允许系统上的合法用户使用； <br>&nbsp; &nbsp; 另一类是匿名FTP服务器，Anonymous
FTP Server，它使用任何人都可以登录到FTP服务器上去获取文件。 <br>一、选择和安装FTP服务器软件 <br>&nbsp; &nbsp;
如果你在安装LINUX系统的时候，在选择启动进程的时候选择了&#8220;ftpd&#8221;这一项的话，安装完LINUX系统后， <br>&nbsp; &nbsp;
它已经将一个默认的FTP服务器安装到系统中去了。我们已经可以利用它来实现系统FTP服务器的功能了。 <br>&nbsp; &nbsp;
我们只需在此基础上根据我们的需要进行一些个性化设定就可以了。 <br>&nbsp; &nbsp; 在绝大多数的LINUX发行版本中都选用的是WashingtonUniversity
FTP，它是一个著名的FTP服务器软件， <br>&nbsp; &nbsp; 一般简称为wu-ftp。它功能强大，能够很好地运行于众多的UNIX操作系统，例如：IBM
AIX、FreeBSD、 <br>&nbsp; &nbsp;
HP-UX、NeXTstep、Dynix、SunOS、Solaris等。所以Internet上的FTP服务器，一大半以上采用了它。 <br>&nbsp; &nbsp;
wu-ftp拥有许多强大的功能，很适于吞吐量较大的FTP服务器的管理要求： <br>&nbsp; &nbsp; 1） 可以在用户下载文件的同时对文件做自动的 <br>&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;压缩或解压缩操作； <br>&nbsp; &nbsp; 2） 可以对不同网络上的机器做不同的存取限制； <br>&nbsp; &nbsp; 3） 可以记录文件上载和下载时间； <br>&nbsp; &nbsp;
4） 可以显示传输时的相关信息，方便用户及时了 <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;解目前的传输动态； <br>&nbsp; &nbsp; 5） 可以设置最大连接数，提高了效率，有效地控
<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;制了负载。 <br>二、wu-ftp的组成 <br>&nbsp; &nbsp; 安装了wu-ftp后，你将在/bin目录下看到以下五个可执行文件：
<br>ftpd&nbsp; &nbsp;&nbsp; &nbsp; FTP服务器程序 <br>ftpshut&nbsp; &nbsp; 用于关闭FTP服务器程序 <br>ftpcount&nbsp;
&nbsp;显示目前在线人数&nbsp;&nbsp;<br>ftpwho&nbsp; &nbsp; 查看目前FTP服务器的连接情况 <br>ckconfig&nbsp; &nbsp;检查FTP服务器的设置是否正确 <br>&nbsp; &nbsp;
除了这些可执行文件以外，它还在/etc和/var目录下生成了七个配置文件： <br>/etc/ftpusers <br>/etc/ftpaccess
<br>/var/run/ftp.pids <br>/etc/ftpconversions <br>/var/log/xferlog
<br>/etc/ftpgroups <br>/etc/ftphosts <br>&nbsp; &nbsp;
系统安装了wu-ftp后，会建立一个特殊的用户ftp，并在/home目录下建立了一个ftpd目录，当用户以匿名 <br>&nbsp; &nbsp;
登录上来时，将会自动定位于这个目录下。在这个目录下一般会建立几个子目录。 <br>/home/ftpd/bin&nbsp; &nbsp; 存放一些供FTP用户使用的可 <br>&nbsp;
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;执行文件 <br>/home/ftpd/etc&nbsp; &nbsp; 存放一些供FTP用户使用的配置 <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;文件 <br>/home/ftpd/pub&nbsp; &nbsp; 存放供下载的信息 <br>/home/ftpd/incoming&nbsp; &nbsp; 存放供上载信息的空间
<br>三、wu-ftp的配置 <br>1. 查看、修改/etc/inetd.conf文件 <br>&nbsp; &nbsp;
/etc/inetd.conf文件是LINUX系统的超级服务器inetd的配置文件。它负责监听多个TCP/IP端口。当它收到 <br>&nbsp; &nbsp;
请求，就根据配置文件派生一个相应的服务器。通过使用超级服务器，其他服务就可以只在需要时才派生， <br>&nbsp; &nbsp;
从而大大节省了系统资源。而wu-ftp就是利用超极服务器inetd来监听请求的。当超级服务器inetd收到了客 <br>&nbsp; &nbsp;
户端的FTP请求时，就根据配置文件打开一个FTP服务进程。所以我们如果要使用wu-ftp，就必须确认在超级 <br>&nbsp; &nbsp;
服务器inetd的配置文件inetd.conf中有这样一句： <br>ftp stream tcp nowait root /usr/sbin/tcpd
wu.ftpd <br>以便当超级服务器收到FTP请求的时候，能够派生一个wu-ftp的FTP服务进程。（注：要确认是否有这样一行时，
<br>可以使用文件内容查找命令来确认： <br>cat /etc/inetd.conf | grep ftp&nbsp;&nbsp;<br>如果没有，则用手工加入或手工修改。
<br>2. wu-ftpd的命令选项 <br>&nbsp; &nbsp;
wu-ftpd就是wu-ftp的服务进程。它可以不带参数执行，也可以带参数执行。下面简单介绍一下wu-ftpd的执 <br>&nbsp; &nbsp; 行参数。
<br>-d&nbsp;&nbsp;当FTP服务器出错时，将错误入系统的syslog中； <br>-l&nbsp;&nbsp;将每次FTP客户端进行连接的入系统的syslog中；
<br>-t&nbsp;&nbsp;设置FTP客户端连接几分钟无操作就切断连接； <br>-a&nbsp;&nbsp;使wu-ftp使用/etc/ftpaccess的设定；
<br>-A&nbsp;&nbsp;使wu-ftp不使用/etc/ftpaccess的设定； <br>-L&nbsp;&nbsp;将FTP客户端连线后所执行的程序记录在系统的 <br>&nbsp; &nbsp;
syslog中； <br>-I&nbsp;&nbsp;将FTP客户端上载文件的日志记录在/usr/adm.xferlog文件中； <br>-o&nbsp;&nbsp;将FTP客户端下载文件的日志记录
<br>&nbsp; &nbsp; 在/usr/adm/xferlog文件中。 <br>&nbsp; &nbsp; 通过对以上参数的理解，我们建议，将上面系统安装时的那条默认配置改为： <br>ftp
stream tcp nowait root /usr/sbin/tcpd wu.ftpd &#8211;a &#8211;I&nbsp;&nbsp;<br>3.提供自动压缩、解压缩的功能 <br>&nbsp; &nbsp;
如果想让FTP服务器有自动压缩、解压缩的功能，必须先将一些压缩、解压缩的命令文件如tar、gzip、 <br>&nbsp; &nbsp;
gunzip、compress、uncompress等命令文件拷贝到/home/ftpd/bin目录下。 <br>4. 关于/etc/ftpaccess的设置
<br>&nbsp; &nbsp; 这个配置文件是FTP服务器上最重要的配置文件，它直接关系到你的FTP服务器能否正常工作，还有许多权 <br>&nbsp; &nbsp;
限上的设置。下面是一个典型的配置实例。 <br>loginfails 3 <br>class&nbsp;&nbsp;local&nbsp; &nbsp; real&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;*
<br>class&nbsp;&nbsp;remote&nbsp;&nbsp;anonymous guest&nbsp;&nbsp;*
<br>limit&nbsp;&nbsp;remote&nbsp;&nbsp;100&nbsp;&nbsp;Any&nbsp;&nbsp;/etc/ftpd/toomany.msg
<br>message&nbsp;&nbsp;/etc/ftpd/welcome.msg&nbsp;&nbsp;login <br>compress&nbsp;&nbsp;yes&nbsp;&nbsp;local remote
<br>tar&nbsp;&nbsp;yes&nbsp;&nbsp;local remote <br>private&nbsp;&nbsp;yes <br>passwd-check&nbsp;&nbsp;rfc822&nbsp;&nbsp;warn
<br>log commands&nbsp;&nbsp;real <br>log transfer&nbsp;&nbsp;anonymous guest&nbsp;&nbsp;inbound outbound
<br>log transfer&nbsp;&nbsp;real&nbsp;&nbsp;inbound <br>shutdown&nbsp;&nbsp;/etc/ftpd/shut.msg
<br>delete&nbsp;&nbsp;no&nbsp;&nbsp;anonymous,guest <br>overwrite&nbsp;&nbsp;no&nbsp;&nbsp;anonymous,guest
<br>rename&nbsp;&nbsp;no&nbsp;&nbsp;anonymous <br>chmod&nbsp;&nbsp;no&nbsp;&nbsp;anonymous,guest
<br>umask&nbsp;&nbsp;no&nbsp;&nbsp;anonymous <br>upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;*&nbsp;&nbsp;no
<br>upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/bin&nbsp;&nbsp;no <br>upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/etc&nbsp;&nbsp;no
<br>upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/pub&nbsp;&nbsp;yes&nbsp;&nbsp;real&nbsp;&nbsp;0644 dirs
<br>upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/incoming&nbsp;&nbsp;yes&nbsp;&nbsp;real guest anonymous 0644 dirs
<br>alias&nbsp;&nbsp;in&nbsp;&nbsp;/incoming <br>email&nbsp;&nbsp;<br><a  href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#117;&#101;&#115;&#116;&#64;&#120;&#120;&#120;&#46;&#110;&#101;&#116;">guest@xxx.net</a><br><br>email&nbsp;&nbsp;<br><a  href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#117;&#101;&#115;&#116;&#64;&#121;&#121;&#121;&#46;&#110;&#101;&#116;">guest@yyy.net</a><br><br>deny&nbsp;&nbsp;*.com.tw&nbsp;&nbsp;/etc/ftpd/deny.msg
<br>&nbsp; &nbsp; 下面我们逐句进行讲解，并给出每条设置的含义，以便大家触类旁通，以便根据自己FTP服务器的具体 <br>&nbsp; &nbsp; 情况进行合理的设置。 <br>1．
格式：loginfails&nbsp;&nbsp;[次数] <br>&nbsp; &nbsp;功能：设定当用户登录到FTP服务器时，允许用户输错密码的次数。 <br>&nbsp; &nbsp;实例：loginfails
3：密码输入错误三次就切断连接。 <br>2． 格式：class&nbsp;&nbsp;[类名]&nbsp;&nbsp;[real/guest/anonymous]&nbsp;&nbsp;[IP地址] <br>&nbsp;
&nbsp;功能：这个指令的功能设定FTP服务器上用户的类别。并可对客户端的IP地址进行限制，允许某部分的 <br>&nbsp;
&nbsp;IP地址或全部的IP地址访问。而在FTP服务器上的用户基本上可以分为以下三类： <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;real&nbsp;&nbsp;在该FTP服务器有合法帐号的用户；
<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;guest&nbsp;&nbsp;有记录的匿名用户； <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;anonymous&nbsp;&nbsp;权限最低的匿名用户 <br>&nbsp;
&nbsp;实例：class&nbsp;&nbsp;local&nbsp;&nbsp;real&nbsp;&nbsp;*：定义一个名为local的类，它包含了在任何地方登录(*代表所有IP地址） <br>&nbsp; &nbsp;的real用户。
<br>&nbsp; &nbsp;&nbsp; &nbsp;class&nbsp;&nbsp;remote&nbsp;&nbsp;anonymous guest&nbsp;&nbsp;*:定义一个名为remote的类，它包含了在任何地方登录的anonymous
<br>&nbsp; &nbsp;&nbsp; &nbsp;用户和guest用户。 <br>3． 格式：limit&nbsp;&nbsp;[类别]&nbsp;&nbsp;[人数]&nbsp;&nbsp;[时间]&nbsp;&nbsp;[文件名] <br>&nbsp;
&nbsp;功能：这个指令的功能为设置指定的时间内指定的类别允许连接的指定人数上限。当达到人数上限的时候， <br>&nbsp; &nbsp;显示指定文件的内容。 <br>&nbsp; &nbsp;&nbsp; &nbsp;
实例：limit&nbsp;&nbsp;remote&nbsp;&nbsp;100&nbsp;&nbsp;Any&nbsp;&nbsp;/etc/ftpd/toomany.msg：在任何时间内，remote类的访问用户达 <br>&nbsp; &nbsp;&nbsp;
&nbsp; 到100人时，将不再允许无法产生新的连接，当第101位客户要连接时，连接将失败，并象用户出示文 <br>&nbsp; &nbsp;&nbsp; &nbsp;
件/etc/ftpd/toomany.msg的内容。 <br>4． 格式：message&nbsp;&nbsp;[文件名称]&nbsp;&nbsp;[指令]&nbsp;&nbsp;<br>&nbsp;
&nbsp;功能：当用户执行所指定的指令时，系统将指定的文件内容显示出来。
<br>实例：message&nbsp;&nbsp;/etc/ftpd/welcome.msg&nbsp;&nbsp;login：当用户执行login命令时，也就是登录到FTP服务器上的时候，
<br>系统将显示文件/etc/ftpd/welcome.msg的内容。 <br>5． 格式：compress&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[类别]&nbsp;&nbsp;<br>&nbsp;
&nbsp;功能：设置哪一个类别的用户可以使用compress（压缩）功能。 <br>&nbsp;&nbsp;实例：compress&nbsp;&nbsp;yes&nbsp;&nbsp;local
remote：允许local和remote两个类别的用户都能使用&nbsp; &nbsp;&nbsp; &nbsp;compress(压缩)功能。 <br>6．
格式：tar&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[类别]&nbsp;&nbsp;<br>&nbsp; &nbsp;功能：设置哪一个类别的用户可以使用tar（归档）功能。 <br>&nbsp; &nbsp;&nbsp; &nbsp;
实例：tar&nbsp;&nbsp;yes&nbsp;&nbsp;local remote：允许local和remote两类的用户都能使用tar功能。 <br>7．
格式：private&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;<br>&nbsp; &nbsp;功能：设定是否支持群组对文件的取用。 <br>&nbsp;
&nbsp;实例：private&nbsp;&nbsp;yes：支持群组对文件的取用。 <br>8．
格式：passwd-check&nbsp;&nbsp;[none/trivial/rfc822]&nbsp;&nbsp;[enforce/warn] <br>&nbsp;
&nbsp;功能：设定对匿名用户anonymous的密码使用方式。 <br>&nbsp;&nbsp;none&nbsp; &nbsp;表示不做密码验证，任何密码都可以登录； <br>trival&nbsp;
&nbsp;表示只要输入的密码中含有字符&#8220;@&#8221;就可以登录； <br>rfc822&nbsp;&nbsp;表示密码一定要符合RFC822中所规定的E-Mail格式才能登录；
<br>enfore&nbsp;&nbsp;表示输入的密码不符合以上指定的格式就不让登录； <br>warn&nbsp; &nbsp;表示密码不符合规定时只出现警告信息，仍然能够登录。
<br>&nbsp;&nbsp;实例：passwd-check&nbsp;&nbsp;rfc822&nbsp;&nbsp;warn：希望能够得到符合规定的E-Mail作为密码，但如果不是，也允许登录。 <br>9．
格式：log command [real/guest/anonymous]&nbsp;&nbsp;<br>&nbsp; &nbsp;
功能：设置哪些用户登录后的操作记录在文件/usr/adm/xferlog中。 <br>&nbsp; &nbsp; 实例：log command
real：当real用户登录后，将他的操作记录下来。由于其它用户权限较低，所以操作不 <br>&nbsp; &nbsp; 会引起太大的安全隐患，所以一般只需记下real用
<br>户的操作就可以了。 <br>10． 格式：log
transfers&nbsp;&nbsp;[real/guest/anonymous]&nbsp;&nbsp;[inbound/outbound] <br>&nbsp;
&nbsp;功能：设置哪些用户的上载（inbound）和下载（outbound）操作做日志。 <br>&nbsp; &nbsp;实例：log transfer&nbsp;&nbsp;anonymous
guest&nbsp;&nbsp;inbound outbound：对于匿名用户要更加的关注它们的文件操作， <br>&nbsp; &nbsp;所以无论上载、下载都进行记录。 <br>&nbsp;&nbsp;log
transfer&nbsp;&nbsp;real&nbsp;&nbsp;inbound：对于合法用户则只记录他的上载记录。 <br>11． 格式：shutdown&nbsp;&nbsp;[文件名] <br>&nbsp;
&nbsp;功能：FTP服务器关闭的时间可以设置在后面所指定的文件中，当设置的时间一到，便无法登录FTP服务器了， <br>&nbsp;
&nbsp;要恢复的话只有将这个文件删掉。而这个文件必 须由指令/bin/ftpshut来生成。 <br>&nbsp; &nbsp;&nbsp; &nbsp;
实例：shutdown&nbsp;&nbsp;/etc/ftpd/shut.msg <br>12．
格式：delete&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[real/anonymous/guest] <br>&nbsp;
&nbsp;功能：设置是否允许指定用户使用delete命令删除文件。默认是允许。 <br>&nbsp;
&nbsp;实例：delete&nbsp;&nbsp;no&nbsp;&nbsp;anonymous,guest：为了更好地管理FTP服务器，一般情况下，我们不允许匿名用户执行 <br>&nbsp; &nbsp;delete命令。
<br>13． 格式：overwrite&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[real/anonymous/guest] <br>&nbsp;
&nbsp;功能：设置是否允许指定用户覆盖同名文件。默认是允许。 <br>&nbsp;
&nbsp;实例：overwrite&nbsp;&nbsp;no&nbsp;&nbsp;anonymous,guest：为了更好地管理FTP服务器，一般情况下，我们不允许匿名用户覆 <br>&nbsp; &nbsp;盖同名文件。
<br>14． 格式：rename&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[real/anonymous/guest] <br>&nbsp;
&nbsp;功能：设置是否允许指定用户使用rename命令来为文件改名。默认是允许。 <br>&nbsp;
&nbsp;实例：delete&nbsp;&nbsp;no&nbsp;&nbsp;anonymous：为了更好地管理FTP服务器，一般情况下，我们不允许匿名用户执行rename命 <br>&nbsp;
&nbsp;令改变文件名。而对有记录的匿名用户则适当的放宽，允许他们使用改名命令。 <br>15．
格式：chmod&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[real/anonymous/guest] <br>&nbsp;
&nbsp;功能：设置是否允许指定用户使用chmod命令更改文件权限。默认是允许。 <br>&nbsp;
&nbsp;实例：delete&nbsp;&nbsp;no&nbsp;&nbsp;anonymous，guest：为了更好地管理FTP服务器，一般情况下，我们不允许匿名用户执行 <br>&nbsp;
&nbsp;chmod命令更改文件权限。 <br>16． 格式：umask&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[real/anonymous/guest] <br>&nbsp;
&nbsp;功能：设置是否允许指定用户使用umask命令。默认是允许。 <br>&nbsp;
&nbsp;实例：delete&nbsp;&nbsp;no&nbsp;&nbsp;anonymous：为了更好地管理FTP服务器，一般情况下，我们不允许匿名用户执行umask命令。 <br>17．
格式：upload&nbsp;&nbsp;[根目录]&nbsp;&nbsp;[上载目录]&nbsp;&nbsp;[yes/no]&nbsp;&nbsp;[用户]&nbsp;&nbsp;[权限]&nbsp;&nbsp;[dirs/nodirs] <br>&nbsp;
&nbsp;功能：对可以上载的目录进行更加详细的设置。 <br>&nbsp;
&nbsp;实例：upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;*&nbsp;&nbsp;no：表示在子目录/home/ftpd下不允许上载； <br>&nbsp;
&nbsp;upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/bin&nbsp;&nbsp;no：表示在子目录/home/ftpd/bin下不允许上载； <br>&nbsp;
&nbsp;upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/etc&nbsp;&nbsp;no：表示在子目录/home/ftpd/etc下不允许上载； <br>&nbsp;
&nbsp;upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/pub&nbsp;&nbsp;yes&nbsp;&nbsp;real&nbsp;&nbsp;0644 dirs：允许用服务器上的合法用户在子目录/home/ftpd/pub目录
<br>&nbsp; &nbsp;下能上载权限为0644(也就是-rw-r--r--)的文件，而且在这个目录下可以新建子目录。
<br>&nbsp;&nbsp;upload&nbsp;&nbsp;/home/ftpd&nbsp;&nbsp;/incoming&nbsp;&nbsp;yes&nbsp;&nbsp;real guest anonymous 0644
dirs：允许所有的用户在子目录 <br>&nbsp;&nbsp;/home/ftpd/incoming下能上载权限为0644的文件，而且在这个目录下可以新建子目录。
<br>18． 格式：alias&nbsp;&nbsp;[目录别名]&nbsp;&nbsp;[目录名] <br>&nbsp; &nbsp;功能：给指定目录设置一个别名，在切换目录时就可以使用较短的目录别名。 <br>&nbsp;
&nbsp;实例：alias&nbsp;&nbsp;inc： /incoming：为子目录incoming设置一个别名inc：。 <br>19．
格式：email&nbsp;&nbsp;[guest的E-Mail地址] <br>&nbsp;
&nbsp;功能：只要将某些E-Mail地址设置在这个地方，那么这些用户登录到FTP服务器时，他的身份将为guest，一般权 <br>&nbsp;
&nbsp;限比real低一些，比anonymous高。 <br>&nbsp; &nbsp;实例：email <br><a  href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#117;&#101;&#115;&#116;&#64;&#120;&#120;&#120;&#46;&#110;&#101;&#116;">guest@xxx.net</a><br>&nbsp; &nbsp;email <br><a  href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#117;&#101;&#115;&#116;&#64;&#121;&#121;&#121;&#46;&#110;&#101;&#116;">guest@yyy.net</a><br>：这里仅是一个示例，实际上可&nbsp; &nbsp;&nbsp;&nbsp;以包含多个符合规范
<br>&nbsp; &nbsp;的E-Mail地址。 <br>20． 格式：deny&nbsp;&nbsp;[IP地址/域名]&nbsp;&nbsp;[说明文件] <br>&nbsp;
&nbsp;功能：这个设置可以限制哪一些IP地址或域名的用户无法登入FTP服务器。 <br>&nbsp;
&nbsp;实例：deny&nbsp;&nbsp;*.com.tw&nbsp;&nbsp;/etc/ftpd/deny.msg：设置凡是域名是以&#8220;.com.tw&#8221;结束的域名，都禁止其访问。 <br>&nbsp;
&nbsp;而将/etc/ftpd/deny.msg的内容显示给用户看。 <br>5. 设置/etc/ftpuser,禁止某些用户登录 <br>&nbsp; &nbsp;
有时我们需要禁止一些用户使用FTP服务。其实这个设置是十分简单的，只需要将要禁止的用户帐号写入文件 <br>&nbsp; &nbsp;
/etc/ftpuser中。由于从系统的安全考虑，一般我们是不希望权限过大的用户和一些与命令名相同的用户进入 <br>&nbsp; &nbsp;
FTP服务器。所以在缺省的配置中，一般以下用户已经被列入了&#8220;黑名单&#8221;。 <br>&nbsp;&nbsp;root&nbsp; &nbsp;<br>&nbsp;&nbsp;uucp <br>&nbsp;&nbsp;news <br>&nbsp;&nbsp;bin
<br>&nbsp;&nbsp;adm <br>&nbsp;&nbsp;nobody <br>&nbsp;&nbsp;lp <br>&nbsp;&nbsp;sync <br>&nbsp;&nbsp;shutdown <br>&nbsp;&nbsp;halt <br>&nbsp;&nbsp;mail&nbsp;
&nbsp;<br>6. 设置/etc/ftphosts,禁止某些来自指定机器上的登录如果你需要拒绝来自某些主机的登录，一种方法就是在
<br>/etc/ftpaccess中设置deny命令，另一种更加简单的方法就是在/etc/ftphosts中写入你要禁止的主机的IP地址或域名。 <br>7.
使新的配置生效 <br>到此为止，我们已经能够根据自己的需要对FTP服务器配置进行必要的修改和调整。而让我们重新配置后，就必须使其
<br>生效。一般的，对/etc/ftpaccess的配置是直接作用于设置后的下一次FTP服务进程。而其它的则要对inetd进程重新 <br>启动。
<br>5.4 wu-ftp相关的其他一些命令的使用 <br>5.4.1 连接数统计命令ftpcount
<br>我们可以使用ftpcount命令十分清楚地统计出当前连接到FTP服务器上的用户数目，并且同时列出上限。命令输出 <br>如下所示：
<br>Service class local&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Users(20maximum) <br>Service class
remote&nbsp; &nbsp;&nbsp; &nbsp; 5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Users(100maximum) <br>5.4.2 在线用户查看命令ftpwho
<br>我们可以使用ftpwho命令十分清楚地列出当前连接的用户的详细情况。 <br>5.4.2 FTP关闭文件生成命令ftpshut
<br>我们可以使用ftpshut命令生成一个在/etc/ftpaccess中设置的shut.msg文件，用于关机设定。ftpshut命令的格式为：
<br>Ftpshut&nbsp; &nbsp;&nbsp; &nbsp;time&nbsp; &nbsp;<br>-l&nbsp; &nbsp;这个参数设定在关闭FTP服务器功能前多少分钟时停止用户的连接； <br>-d&nbsp;
&nbsp;这个参数设定在关闭FTP服务器功能前多少分钟时切断用户连接； <br>time
指定关闭FTP服务器的时间。例如6：20分则写为0620；&nbsp;&nbsp;<br>(<br><a  href="http://www.fanqiang.com/" target="_blank">http://www.fanqiang.com</a><br>)&nbsp; &nbsp;&nbsp;&nbsp;进入【UNIX论坛】&nbsp; <br><img src ="http://www.cppblog.com/mydriverc/aggbug/109686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 16:58 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VSFTPD官方资料翻译版（不完整版）---</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109685.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109685.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109685.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109685.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109685.html</trackback:ping><description><![CDATA[<font face="幼圆">翻译了部分VSFTPD的官方资料。<br>有些知道是什么意思，但难于翻译。有些涉及专业的知识，我自己也不懂，只好按字面翻译。有些我自己看不懂，只好尽量翻译。<br>如果看了其中一部分觉得糊涂，请参阅官方文挡。<br>安装篇
<br>=============== <br>这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始，建立和安装并运行VSFTPD。
<br><br><font color="fuchsia">1</font><font color="fuchsia">）建立VSFTPD
</font><br>先进入解压.tar.gz文件后产生的目录内。如下： <br>cd vsftpd-2.0.1
<br><br>编辑"builddefs.h"以操作compile-time设定。（tcp_wrappers
build,等）<br>输入make,回车（如果它不工作请发邮件通知我 . <br>这将产生一个二进制文件，你可以验证一下。如下：
<br>[chris@localhost vsftpd]$ ls -l vsftpd <br>-rwxrwxr-x 1 chris chris 61748
Sep 27 00:26 vsftpd <br><br><font color="fuchsia">2</font><font color="fuchsia">）满足VSFTPD安装所需的一些条件
</font><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><font color="#333399">listen=YES</font> <br><br>这将告诉VSFTPD不要从inetd启动。
<br>OK，现在试着启动FTP。<br>以ROOT登录。<br>确定你没有运行其他FTP服务（否则VSFTPD不能占用FTP所需的21端口）。<br>运行那个二进制文件，如下：
<br>[root@localhost root]# <font color="#333399">/usr/local/sbin/vsftpd &amp;
</font><br>[1] 2104 <br><br>如果一切正常，那么你将连上FTP服务器，如下： <br>[chris@localhost chris]$
ftp localhost <br>Connected to localhost (127.0.0.1). <br>220 (vsFTPd 1.1.1)
<br>Name (localhost:chris): ftp <br>331 Please specify the password.
<br>Password: <br>230 Login successful. Have fun. <br>Remote system type is
UNIX. <br>Using binary mode to transfer files. <br>ftp&gt; ls <br>227 Entering
Passive Mode (127,0,0,1,229,133) <br>150 Here comes the directory listing.
<br>d--x--x--x 2 0 0 4096 Jan 14 2002 bin <br>d--x--x--x 2 0 0 4096 Apr 21 20:52
etc <br>drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib <br>drwxr-sr-x 2 0 50 4096 Jul 26
22:58 pub <br>226 Directory send OK. <br>ftp&gt;
<br><br>5）从inetd或者类似方式启动（官方推荐使用standalone方式）<br>你也许想通过inetd或者类似方式启动VSFTPD，因为这能给你更多的感受。例如xinetd就有很多的设置。<br>（注意：VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置）。<br>如果使用标准的"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>-流行的，功能完善的平台都能测试通过。在以下平台的较新版本，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><font color="red">1</font><font color="red">）创建虚拟用户数据库
</font><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>这将创建/etc/vsftpd_login.db文件。显然，你希望设定这个文件的权限：
<br>chmod 600 /etc/vsftpd_login.db <br><br>要了解更多关于维护你的登录数据库的信息，请在"berkeley
DB"察看相关文档： <br><a  href="http://www.sleepycat.com/docs/utility/index.html" target="_blank"><font color="#0000ff">http://www.sleepycat.com/docs/utility/index.html</font></a>
<br><br><font color="red">2</font><font color="red">）用你的新数据库创建一个PAM文件
</font><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><font color="red">3)</font><font color="red">为虚拟用户设置home目录<br></font>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><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>让我们假定我们需要2种不同的虚拟用户：一种只能浏览并下载资源，另一种能上传文件并浏览站内资源。<br>要激活这个设置，我们将使用VSFTPD的强大的&#8220;单个用户配置&#8221;功能（是V1.1.0后出现的新功能）。<br>在前一个虚拟用户范例中，我们创建了2个用户-tom和fred.
<br>我们将实现fred有写权限以上传新文件，同时tom只能下载文件。
<br><br>1）激活单个用户配置功能。<br>要激活这个功能，需要增加以下配置行到配置文件：
<br><br>user_config_dir=/etc/vsftpd_user_conf <br><br>并且创建目录： <br><br>mkdir
/etc/vsftpd_user_conf
<br><br>2）授予tom读取所有文件和目录的权限<br>在上一个例子的最后，我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使/home/ftpsite完全可读，而且被上传的文件也<br>赋予了完全可读的权限（daidong注：意思是说这样虚拟用户就能读取所有的文件了）。但实现这个目的的另一个方法是授权tom能下载那些非完全可读的文件。<br>对于tom,他的配置文件中需要修改一个设置：
<br>anon_world_readable_only: <br><br>设为"anon_world_readable_only=NO" &gt;
/etc/vsftpd_user_conf/tom
<br>(daidong注：既把默认配置修改了anon_world_readable_only后，复制到/etc/vsftpd_user_conf下，名字为tom)
<br><br>验证一下结果-以tom登录，&#8220;ls&#8221;将返回一个目录列表。如果以fred登录将不会如此。<br>注意：重启VSFTPD以启用配置文件/etc/vsftpd.conf(高级用户也可以发送SIGHUP给VSFTPD的监听进程).
<br><br>3)授予freg读取所有文件/目录并创建新文件/目录的权限,但让他不能对已存在的文件/目录进行操作. <br><br>echo
"anon_world_readable_only=NO" &gt; /etc/vsftpd_user_conf/fred <br>echo
"write_enable=YES" &gt;&gt; /etc/vsftpd_user_conf/fred <br>echo
"anon_upload_enable=YES" &gt;&gt; /etc/vsftpd_user_conf/fred
<br><br>验证一下-以tom登录,将不能上传,而fred就可以. <br>试图删除一个文件--噢,你们俩都不行!</font><br><img src ="http://www.cppblog.com/mydriverc/aggbug/109685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 16:55 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX下FTP的搭建-wuftp</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109675.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 06:27:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109675.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109675.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109675.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109675.html</trackback:ping><description><![CDATA[<pre>FTP服务器的安装及管理-wuftp<br><br><strong>说明：</strong><br><em>    Linux下一般最常用的工具wu-ftpd.<br><br>    wu-ftpd的安装非常容易，大多数版本的Linux中都包含了wu-ftpd的rpm软件包，你可以在安装Linux时指定装入。如果你想自行编译源代码，也可以到ftp://ftp.wu-ftpd.org下载最新版本的源代码包。 <br><br>    安装好以后，可以用ckconfig命令来检查是否已经正确安装。在/etc/passwd中可以指定ftp用户的登入目录。 <br><br>    wu-ftpd主要有以下6个配置文件： <br><br>    ftpaccess(主要配置文件，控制存取权限) <br><br>    ftpconvertions(配置文件压缩/解压缩转换) <br><br>    ftpgroups(设定ftp自己定义的群组) <br><br>    ftphosts(设定个别的用户权限) <br><br>    ftpservers(设定不同IP/Domain Name以对应到不同的虚拟主机) <br><br>    ftpusers(设定哪些帐号不能用ftp连线)</em> <br>    <br>一. ftp服务器<br>1. inetd配置文件或xinetd.conf配置文件<br>   /etc/inetd.conf文件内容如下:<br>   ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a <br><br>   /etc/xinetd.conf文件内容如下:<br>   service ftp<br>   {<br>           socket_type     = stream<br>           protocol        = tcp<br>           wait            = no<br>           user            = root<br>           #only_from       = 202.118.66.0<br>           #only_from       += 192.168.1.2<br>           #only_from       += localhost   <br>           server          = /usr/sbin/in.ftpd<br>           server_args     = -l -a<br>   }                                <br><br><br>   相关文件:/etc/services<br>   ftp-data        20/tcp<br>   ftp             21/tcp <br><br>2. ftp用户(Anonymous FTP服务器需要用到)<br>   文件:/etc/passwd和/etc/shadow<br>   <br>   /etc/passwd:<br>   ftp:x:500:50:Anonymous FTP User:/home/ftp:/bin/false <br><br>   /etc/shadow:<br>   ftp:*:10689:0:99999:7::: <br><br>   $finger ftp<br>   Login: ftp                              Name: FTP User<br>   Directory: /home/ftp                    Shell: /bin/false<br>   Never logged in.<br>   No mail.<br>   No Plan.              <br>   <br>3. DNS配置<br>   ftp  IN      CNAME   officail.domain.name.<br><br>4. 管理员邮件别名<br>   文件: /etc/mail/aliases (Solairs)<br>         /etc/aliases      (Linux)<br>         (egrep aliases /etc/mail/sendmail.cf )<br> <br>    ftp-admin:  real-user-name@domain.name<br><br>    相关命令: newaliases, 建立邮件别名<br><br><br>二. 文件系统结构<br> 1. Anonymous FTP 目录结构<br>    如下子目录:<br>    bin(ls,gzip,tar等anonymous ftp用户所要使用的二进制可执行文件)<br>    etc(passwd,group)<br>    lib(动态连接库,ld-2.0.7.so, ld-linux.so.2, ldd ../bin/ls 等)<br>    pub(可下载文件)<br><br> 2. passwd及group文件<br>    不要使用系统的passwd及group文件,最好只放所需的用户及组信息<br> passwd文件:<br>    ftpadm:x:0:0:Anonymous FTP:/home/ftp:/bin/false<br>    ftp:x:60000:60000:Anonymous FTP:/home/ftp:/bin/false <br> group文件:<br>    ftpadmin:x:0:<br>    ftp:x:60000:<br><br> 3. 文件及目录属性<br> 主目录/home/ftp   属主root, 属性555<br> bin    属主root 组wheel或other, 属性111<br> etc    同上<br> lib    属主root, 属性555<br> pub    属主为root或ftp管理员,属性555<br> <br> 确认不要用ftp作任何文件或目录的属主!<br><br> [hbwork@helius /etc]$ cd /home/ftp/<br> [hbwork@helius ftp]$ ls -l<br> total 4<br> d--x--x--x   2 root     root         1024 Apr  8 17:57 bin<br> d--x--x--x   2 root     root         1024 Jun  4 15:12 etc<br> drwxr-xr-x   2 root     root         1024 Apr  8 17:57 lib<br> dr-xr-sr-x   2 root     ftp          1024 Apr  8 11:18 pub <br> <br> $ls -l bin<br> [root@helius ftp]# ls -l bin/<br> total 250<br> ---x--x--x   1 root     root        15236 Apr 28  1998 compress<br> ---x--x--x   1 root     root        46356 Sep 11  1998 cpio<br> ---x--x--x   1 root     root        45436 Sep 11  1998 gzip<br> ---x--x--x   1 root     root        29980 Sep 11  1998 ls<br> ---x--x--x   1 root     root       110668 Sep 11  1998 tar<br> lrwxrwxrwx   1 root     root            4 May 19 16:48 zcat -&gt; gzip  <br><br> $ls -l etc<br> total 19<br> -r--r--r--   1 root     root           57 Jun  4 15:12 group<br> -r--r--r--   1 root     root        16372 Sep 11  1998 ld.so.cache<br> -r--r--r--   1 root     root           83 Jun  4 15:12 passwd <br><br>(在Solaris上建立anonymouse FTP特殊一些,请参考Wu-ftpd-faq)<br><br><br> 4. 可选目录<br>    incoming    Owner: root   Mode:1733 (chmod 1733 incoming)<br><br>三. 测试及调试<br>   egrep ftp /etc/inetd.conf<br>   ps ax |egrep inetd<br>   kill -HUP $PID<br><br>   $ftp localhost (or ftp 0)<br>   执行ls cd get 等指令看一下结果如何<br><br><br>四. wu-ftpd FTP服务器进程<br><br>   增强功能:<br>     . 允许根据用户的ip地址或主机,用户名设置不同的类<br>     . 根据设置的类,管理员可以控制其访问权限,如防止anonymous用户<br>       删除文件或覆盖已有的文件<br>     . 可以实现自动执行uncompress,compress,tar,gzip等功能<br>     . 可以记载所有的upload/download,及ftp client所发送的每个命令.<br>     . 允许平滑关掉ftp服务器<br><br>   相关配置文件:<br>       ftpaccess<br>       ftpconversions<br>       ftphosts<br>       ftpuser<br>       <br>       相关命令:<br>           strings /usr/sbin/in.ftpd |egrep ftpaccess<br><br>1. 编译 wu-ftpd<br><br>   最新版本: wu-ftpd-2.5.0<br>     ftp://ftp.dlut.edu.cn/pub/unix/ftp/servers/<br><br>   $tar -zxvf wu-ftpd-2.5.0.tar.gz<br>   $cd wu-ftpd-2.5.0<br>     建议在编译安装之前参考文件INSTALL,README,upload.configuration.HOWTO <br>     如想定制自己的wu-ftpd,可编辑文件src/pathnames.h<br>   $build help<br>      查看编译帮助<br>      <br>   $./build lnx<br>   $su<br>   #./build install<br><br>2. 命令行选项<br>   -d   Sends debugging information to syslog<br>   -a   Enable the use of the ftpaccess file(This is the default)<br>   -A   Disable the use of the ftpaccess file<br>   -L   Cause ftpd to log all USER commands.<br>   -i   Causes ftpd to log all incoming(upload) file in the xferlog <br>        file( See pathnames.h )<br>   -o   Causes ftpd to log all outgoing(download) files in the xferlog file<br><br>3. 文件ftpconversions<br>   doc/examples/, 用于指定get时的实时压缩或展开(on-the-fly).<br><br>   此文件不般情况下不用作修改<br><br>4. ftpaccess<br>  (1)定义类<br>      三种用户类型: real anonymous <br>                    guest(需要提供相应的口令)<br>      格式:<br>        class classname type[,type,...] address [ address ...]<br>  <br>      示例:<br>        class local real *.dlut.edu.cn 202.118.66 localhost<br>        class anonymous anonymous *<br><br><br>  (2)拒绝访问<br>     deny *.net.cn      /etc/ftpmsgs/msg.denied<br><br>  (3)限制访问<br>     limit class number times messages<br><br>     limit anonymous 200 SaSu<br>     limit anonymous 100 Any    /etc/ftpmsgs/msg.toomany<br><br>     <br>     loginfails 2 <br>     tar no anonymous<br>     compress no anonymous<br><br>     chmod      yes|no type [type ...]<br>     delete     yes|no type [type ...]<br>     overwrite  yes|no type [type ...]<br>     rename     yes|no type [type ...]<br>     umask      yes|no type [type ...]<br>     <br>     passwd-check       none|trivial|rfc822     enforce|warn<br><br>   (5)banner<br>      显示在用户login之前的信息<br>      banner    /etc/ftpmsg/banner.msg<br><br>      其中banner.msg文件中可以引用如下变量:<br>      %C        Current working directory<br>      %E        Email address of the administrator( email ftpadm@dlut.edu.cn)<br>      %F        可当目录下可用空间<br>      %L        hostname <br>      %M        最大允许连接数<br>      %N        同一类中当前连接数<br>      %R        The client host'name or ip address<br>      %T        Current local time<br>      %U        The name the user specified at login<br><br>      示例文件:<br>      Welcome to this test FTP Archive, running on %L.<br><br>      Please contact %E with any technical problems you may have<br>      accessing this archive.<br><br>      You are currently user %N out of a maximum %M users. It's<br>      %T in PRC.    <br><br>   (6)message命令<br>     message pathname login<br>     message pathname cwd=dir<br>     message .conents cwd=* <br>             每改变目录均显示,cwd=dir只在第一次更改时显示<br><br>   (7)readme命令<br>      readme pathname [login|cwd=dir] [class] [class]<br><br>      readme README* cwd=*<br><br>   (8)shutdown命令 (2.5.0上不正常)<br>      shutdown pathname<br><br>   (9)log命令<br><br>      log commands type [ type ...]<br><br>      log transfer type [type ...] direction[,direction]<br><br>   (10)alias <br>       alias source: /pub/local/sw/source<br><br>   (11)cdpath<br>       cdpath /pub /pub1<br><br>上载控制<br>   upload hierarchy directory yes|no owner group mode [dirs|nodirs]<br><br>下面的wu-ftpd-2.5.0 /etc/ftpaccess文件中的upload配置(大家可以试一下大工FTP<br>服务器的upload,但别传没用的过大的文件)<br><br># FTP-home-dir          archiv-dir      allow?  owner   group   mode    dirs?<br># (as in /etc/passwd)<br><br>upload  /home/ftp       *               no<br>upload  /home/ftp       /pub3/incoming/windows yes ftpadmin ftp  0664  dirs<br>upload  /home/ftp       /pub3/incoming/windows/* yes ftpadmin ftp 0664 dirs<br>upload  /home/ftp       /pub3/incoming/unix     yes     ftpadmin ftp   0666 dirs<br>upload  /home/ftp       /pub3/incoming/unix/*   yes     ftpadmin ftp   0666 dirs<br>upload  /home/ftp       /pub3/incoming/other    yes     ftpadmin ftp   0666 dirs<br>upload  /home/ftp       /pub3/incoming/other/*  yes     ftpadmin ftp   0666 dirs<br>upload  /home/ftp       /pub3/incoming/WDI      yes     ftpadmin ftp   0666 dirs<br>upload  /home/ftp       /pub3/incoming/WDI/*    yes     ftpadmin ftp   0666 dirs<br><br><br>5. ftphosts文件<br>   allow ftp    *.dlut.edu.cn<br>   allow anonymous *.dlut.edu.cn<br>   deny ftp *.dlmu.edu.cn<br>   deny ftp *.dlmu.edu.cn 202.118.80.*<br><br><br>6.实用程序<br><br>  ftpcount<br>  ftpwho<br>  ftushut<br><br>维护:<br>    建立连接时最好使用相对路径。<br>    根据软件类别建立不同的子目录。<br>    最好在每个目录中建立相应的说明文件或index文件，方便用户查找。</pre><img src ="http://www.cppblog.com/mydriverc/aggbug/109675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 14:27 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iptables 下开放ftp</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109674.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109674.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109674.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109674.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109674.html</trackback:ping><description><![CDATA[这两天在给客户安装服务器时也顺便给他们使用iptables，不用不知道，一用才发现iptables还有很多东西可以学的，比如开放ftp。<br>iptables
的filter表的INPUT链的默认策略设为了DROP，其余的链均为ACCEPT。
该服务器即要作ftp服务器，也要连上别的ftp服务器。即是说要把源端口和目的端口都开放21才行：<br>iptables -A INPUT -p tcp
&#8211;sport 21 -j ACCEPT<br>iptables -A INPUT -p tcp &#8211;dport 21 -j
ACCEPT<br>开了21端口就行了吗？不是的。先说说ftp协议。ftp协议是一个简单、保密性差（明码）的tcp协议，它的工作原理是客户端先连服务器端
的21端口，然后经过3步的握手以后建立了一条连接。要注意的是，这条连接只可以用来传输ftp的命令，只有这条连接的话是什么都传不了的，就算是用
&#8220;ls&#8221;命令来查看文件也不行。<br>建立了命令的连接以后，服务器端就要建立一条数据的连接。数据的连接又分为主动模式（port）和被动模式（passive）。ftp默认是被动
模式，主动和被动之间使用&#8221;pass&#8221;命令切换。主动模式通过20端口与客户端相连，而被动模式却使用1024以后的端口与客户端相连。由于1024以后
的端口是随机分配的，所以在被动模式下我们是不知道服务端是使用什么端口与客户端连接的。也就是说，我们是不知道iptables要开放什么端口。<br>开始我使用的是<br>iptables
-A input -p tcp &#8211;sport 1024: &#8211;dport 1024: -j
ACCEPT<br>来让ftp建立被动连接的。但觉得如果这样的话，那就等于把所以p2p的连接都开放了，不安全。<br>于是在CU上问人，终于找到了解决的方法:<br>1、加载模块。<br><font color="#ff2424"><br>modprobe ip_nat_ftp<br>modprobe ip_conntrack<br>modprobe
ip_conntrack_ftp<br></font><br>2,加上一条规则：<br><font color="#ff2424">处于server<br>iptables -A INPUT -m state &#8211;state ESTABLISHED,RELATED
-j ACCEPT</font><br><font color="#ff2424">处于client</font><br><font color="#ff2424">iptables -A OUTPUT -m state &#8211;state ESTABLISHED,RELATED -j
ACCEPT<br></font><br>允许连接保持的被动访问。<br>其实这样在重启iptables的时候所需的模块又不见了，通过不懈的努力终于找到了最终的解决方法，编辑/etc/sysconfig/iptables-config：<br>IPTABLES_MODULES="ip_conntrack_ftp"<br>IPTABLES_MODULES="ip_nat_ftp"<br>把需要加载的模块加入，无论重启系统还是iptables但ftp模块始终还是加载的。<br>搞定就这样哈哈哈，希望能在以后帮助大家来解决ftp上的问题。<br><br><br><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a  href="http://blog.chinaunix.net/u1/51714/showart_423414.html" target="_blank">http://blog.chinaunix.net/u1/51714/showart_423414.html</a> <img src ="http://www.cppblog.com/mydriverc/aggbug/109674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 14:24 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux iptables配置FTP的主动和被动模式</title><link>http://www.cppblog.com/mydriverc/archive/2010/03/14/109670.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Sun, 14 Mar 2010 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2010/03/14/109670.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/109670.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2010/03/14/109670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/109670.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/109670.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">
<p>先理解主被动的联接方式：</p>
<p>FTP协议有两种工作方式：PORT方式和PASV方式，中文意思为主动式和被动式。</p>
<p><font color="#ff0000">Port<a  href="http://www.net527.cn/a/luyoujiaohuan/"><u>模式</u></a>：</font>ftp server:tcp
21 &lt;------client:dynamic&nbsp;&nbsp;&nbsp; ftp server:tcp 20 ------&gt;client:dynamic</p>
<p><font color="#ff0000">Pasv模式：</font>ftp server:tcp 21
&lt;----client:dynamic&nbsp;&nbsp;&nbsp;&nbsp; ftp server:tcp dynamic
&lt;----client:dynamic<br><font color="#ff0000">PORT（主动）</font>方式的<a  href="http://www.net527.cn/a/luyoujiaohuan/"><u>连接</u></a>过程是：客户端向服务器的FTP端口（默认是21）发送<a  href="http://www.net527.cn/a/luyoujiaohuan/"><u>连接</u></a>请
求，服务器接受连接，建立一条命令链路。当需要传送数据时，客户
端在命令链路上用PORT命令告诉服务器：&#8220;我打开了XXXX端口，你过来连接我&#8221;。于是服务器从20端口向客户端的XXXX端口发送连接请求，建立一条
数据链路来传送数据。<br><font color="#ff0000">PASV（被动）</font>方式的连接过程是：客户端向服务器的FTP端口（默认是21）发送连接请
求，服务器接受连接，建立一条命令链路。当需要传送数据时，服务
器在命令链路上用PASV命令告诉客户端：&#8220;我打开了XXXX端口，你过来连接我&#8221;。于是客户端向服务器的XXXX端口发送连接请求，建立一条数据链路来
传送数据。</p>
<p><font face="宋体"><br></font></p>
<p><font face="宋体">#allow all ftp incoming connections<br>iptables -A INPUT -p tcp
--dport 21 -m state --state ESTABLISHED -j ACCEPT<br>iptables -A OUTPUT -p tcp
--sport 21 -m state --state NEW,ESTABLISHED -j ACCEPT</font></p>
<p><font face="宋体"># Enable active ftp transfers<br>iptables -A INPUT -p tcp
--dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT<br>iptables -A OUTPUT
-p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT</font></p>
<p><font face="宋体"># Enable passive ftp transfers<br>iptables -A INPUT -p tcp
--sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j
ACCEPT<br>iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED,RELATED -j ACCEPT</font></p>
</div><img src ="http://www.cppblog.com/mydriverc/aggbug/109670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2010-03-14 14:18 <a href="http://www.cppblog.com/mydriverc/archive/2010/03/14/109670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看某组的所有用户</title><link>http://www.cppblog.com/mydriverc/archive/2009/11/11/100744.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Wed, 11 Nov 2009 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2009/11/11/100744.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/100744.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2009/11/11/100744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/100744.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/100744.html</trackback:ping><description><![CDATA[gawk 'BEGIN {FS=":"} $4=="504" {print $1}' /etc/passwd<br><br>504是组的ID<br><br><img src ="http://www.cppblog.com/mydriverc/aggbug/100744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2009-11-11 22:30 <a href="http://www.cppblog.com/mydriverc/archive/2009/11/11/100744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>后台(crontab,at&amp;nohup)及计划任务</title><link>http://www.cppblog.com/mydriverc/archive/2009/10/26/99526.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Mon, 26 Oct 2009 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2009/10/26/99526.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/99526.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2009/10/26/99526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/99526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/99526.html</trackback:ping><description><![CDATA[<p>后台(crontab,at&amp;nohup)及计划任务</p>
<p>&#8226; 设置c r o n t a b文件，并用它来提交作业。<br>&#8226; 使用a t命令来提交作业。<br>&#8226; 在后台提交作业。<br>&#8226; 使用n o h u
p命令提交作业。<br>名词解释：<br>cron：系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业，或在一周或一月中的不同时段运行。<br>At
at命令：使用它在一个特定的时间运行一些特殊的作业，或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。<br>&amp;：使用它在后台运行一个占用时间不长的进程。<br>Nohup：用它在后台运行一个命令，即使在用户退出时也不受影响</p>
<p><br>cron和crontab<br>c r o n是系统主要的调度进程，可以在无需人工干预的情况下运行作业。c r o n t a
b命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个c r o n t a b文件来保存调度信息。可以使用它运行任意一个s h e l
l脚本或某个命令，每小时运行一次，或一周三次，这完全取决于你。每一个用户都可以有自己的c r o n t a
b文件，但在一个较大的系统中，系统管理员一般会禁止这些文件，而只在整个系统保留一个这样的文件。系统管理员是通过c r o n . d e n y和c r o n
. a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。</p>
<p>crontab的域<br>为了能够在特定的时间运行作业，需要了解c r o n t a b文件每个条目中各个域的意义和格式。</p>
<p>下面就是这些域：<br>第1列分钟1～5 9<br>第2列小时1～2 3（0表示子夜）<br>第3列日1～3 1<br>第4列月1～1
2<br>第5列星期0～6（0表示星期天）<br>第6列要运行的命令</p>
<p>下面是c r o n t a b的格式：</p>
<p>分&lt; &gt;时&lt; &gt;日&lt; &gt;月&lt; &gt;星期&lt; &gt;要运行的命令</p>
<p>其中&lt; &gt;表示空格。<br>C r o n t a
b文件的一个条目是从左边读起的，第一列是分，最后一列是要运行的命令，它位于星期的后面。</p>
<p>可以用横杠-来表示一个时间范围，例如你希望星期一至星期五运行某个作业，那么可以在星期域使用1 -
5来表示。<br>还可以在这些域中使用逗号&#8220;,&#8221;，例如你希望星期一和星期四运行某个作业，只需要使用1 ,
4来表示。<br>可以用星号*来表示连续的时间段。如果你对某个表示时间的域没有特别的限定，也应该在该域填入*。该文件的每一个条目必须含有5个时间域，而且每个域之间要用空格分隔。<br>该文件中所有的注释行要在行首用#来表示。</p>
<p>c r o n t a b文件例子：</p>
<p>30 21* * * /apps/bin/cleanup.sh</p>
<p>上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。</p>
<p>45 4 1,10,22 * * /apps/bin/backup.sh</p>
<p>上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。</p>
<p>10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;</p>
<p>上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。</p>
<p>0,30 18-23 * * * /apps/bin/dbcheck.sh</p>
<p>上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k .
s h。</p>
<p>0 23 * * 6 /apps/bin/qtrend.sh</p>
<p>上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h。</p>
<p>你可能已经注意到上面的例子中，每个命令都给出了绝对路径。当使用c r o n t a b运行s h e l
l脚本时，要由用户来给出脚本的绝对路径，设置相应的环境变量。记住，既然是用户向c r o n提交了这些作业，就要向c r o n提供所需的全部环境。不要假定c
r o n知道所需要的特殊环境，它其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量，除了一些自动设置的全局变量。<br>如果c
r o n不能运行相应的脚本，用户将会收到一个邮件说明其中的原因。</p>
<p>at命令<br>a t命令允许用户向c r o n守护进程提交作业，使其在稍后的时间运行。这里稍后的时间可能<br>是指1 0 m i
n以后，也可能是指几天以后。如果你希望在一个月或更长的时间以后运行，最好还<br>是使用c r o n t a b文件。<br>一旦一个作业被提交， a
t命令将会保留所有当前的环境变量，包括路径，不象c r o n t a
b，<br>只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户，除非你对其输出<br>进行了重定向，绝大多数情况下是重定向到某个文件中。<br>和c
r o n t a b一样，根用户可以通过/ e t c目录下的a t . a l l o w和a t . d e n y文件来控制哪些用户可以</p>
<p>使用a t命令，哪些用户不行。不过一般来说，对a t命令的使用不如对c r o n t a b的使用限制那么严<br>格。<br>a
t命令的基本形式为：<br>at [-f script] [-m -l -r] [time] [date]<br>其中，<br>-f script
是所要提交的脚本或命令。<br>-l 列出当前所有等待运行的作业。a t q命令具有相同的作用。<br>-r
清除作业。为了清除某个作业，还要提供相应的作业标识（ I D）；有些U N I X变体只<br>接受a t r m作为清除命令。<br>-m
作业完成后给用户发邮件。<br>time at命令的时间格式非常灵活；可以是H、H H . H H M M、H H : M M或H :
M，其中H和M<br>分别是小时和分钟。还可以使用a . m .或p . m .。<br>date 日期格式可以是月份数或日期数，而且a t命令还能够识别诸如t
o d a y、t o m o r r o w这样<br>的词。<br>现在就让我们来看看如何提交作业。<br>3.2.1
使用at命令提交命令或脚本<br>使用a t命令提交作业有几种不同的形式，可以通过命令行方式，也可以使用a
t命令提示符。<br>一般来说在提交若干行的系统命令时，我使用a t命令提示符方式，而在提交s h e l
l脚本时，使用<br>命令行方式。<br>如果你想提交若干行的命令，可以在a t命令后面跟上日期/时间并回车。然后就进入了a
t命<br>令提示符，这时只需逐条输入相应的命令，然后按&#8216; &lt; C T R L - D &gt;&#8217;退出。下面给出一个例子：<br>其中， &lt; E O
T &gt;就是&lt; C T R L - D &gt;。在2 1 : 1 0系统将执行一个简单的f i n
d命令。你应当已经注<br>意到，我所提交的作业被分配了一个唯一标识job
1。该命令在完成以后会将全部结果以邮件<br>的形式发送给我。<br>下面就是我从这个邮件中截取的一部分：<br>下面这些日期/时间格式都是a
t命令可以接受的：</p>
<p>如果希望向a t命令提交一个s h e l l脚本，使用其命令行方式即可。在提交脚本时使用- f选项。<br>在上面的例子中，一个叫做d b _ t a
b l e . s h的脚本将在明天下午3 : 0 0运行。<br>还可以使用e c h o命令向a t命令提交作业：<br>$ echo find /etc
-name "passwd" -print | at now +1 minute<br>3.2.2 列出所提交的作业<br>一个作业被提交后，可以使用at
-l命令来列出所有的作业：<br>其中，第一行是作业标识，后面是作业运行的日期/时间。最后一列a代表a t。还可以使用<br>a t
q命令来完成同样的功能，它是a t命令的一个链接。当提交一个作业后，它就被拷贝到<br>/ v a r / s p o o l / a
t目录中，准备在要求的时间运行。<br>3.2.3 清除一个作业<br>清除作业的命令格式为：<br>atrm [job no] 或at -r [job
no]<br>要清除某个作业，首先要执行at -l命令，以获取相应的作业标识，然后对该作业标识使用<br>at -r
命令，清除该作业。<br>有些系统使用at-r [job no]命令清除作业。<br>如果使用自己的名字登录，就不用使用- u选项，因为在执行c r o n t
a b命令时，该命令能够知道当前的用户。</p>
<p>创建一个新的crontab文件<br>在向c r o n进程提交一个c r o n t a b文件之前，要先设置环境变量E D I TO R。c r o
n进程根据它来确定使用哪个编辑器编辑c r o n t a b文件。大部份的U N I X和L I N U X用户都使用v i，如果你也是这样，那么你就编辑$
H O M E目录下的. p r o f i l e文件，在其中加入这样一行：</p>
<p>EDITOR=vi; export EDITOR</p>
<p>然后保存并退出。<br>创建一个名为&lt; u s e r &gt; c r o n的文件，其中&lt; u s e r &gt;是用户名，例如，
samcron。在该文件中加入如下的内容。</p>
<p>#(put your own initials here) echo the date to the console every<br>#15
minutes between 6pm and 6am<br>0,15,30,45 18-06 * * * /bin/echo 'date' &gt;
/dev/console</p>
<p>保存并退出。确信前面5个域用空格分隔。<br>在上面的例子中，系统将每隔1
5分钟向控制台输出一次当前时间。如果系统崩溃或挂起，从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中，用t t y
1来表示控制台，可以根据实际情况对上面的例子进行相应的修改。<br>为了提交你刚刚创建的c r o n t a b文件，可以把这个新创建的文件作为c r o
n命令的参数：</p>
<p>$su sam<br>crontab samcron</p>
<p>为了方便演示，切换到sam用户环境下，然后用crontab samcron提交给c r o n进程，它将每隔1 5分钟运行一次。</p>
<p>同时，新创建文件的一个副本已经被放在/ v a r / s p o o l / c r o n目录中，文件名就是用户名（即sam）。</p>
<p>#su<br># cat /var/spool/cron/sam<br># DO NOT EDIT THIS FILE - edit the master
and reinstall.<br># (samcron installed on Wed Nov 10 21:41:55 2004)<br># (Cron
version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)<br>#(put your
own initials here) echo the date to the console every<br>#15 minutes between 6pm
and 6am<br>0,15,30,45 18-06 * * * /bin/echo 'date' &gt; /dev/console</p>
<p>回到root下，查看/var/spool/cron/sam</p>
<p>列出crontab文件<br>为了列出c r o n t a b文件，可以用：</p>
<p>$ crontab -l</p>
<p># DO NOT EDIT THIS FILE - edit the master and reinstall.<br># (samcron
installed on Wed Nov 10 21:41:55 2004)<br># (Cron version -- $Id: crontab.c,v
2.13 1994/01/17 03:20:37 vixie Exp $)<br>#(put your own initials here) echo the
date to the console every<br>#15 minutes between 6pm and 6am<br>0,15,30,45 18-06
* * * /bin/echo 'date' &gt; /dev/console</p>
<p>你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对c r o n t a b文件做一备份：</p>
<p>$ crontab -l &gt; $HOME/mycron</p>
<p>这样，一旦不小心误删了c r o n t a b文件，可以用上一节所讲述的方法迅速恢复。</p>
<p>编辑crontab文件<br>如果希望添加、删除或编辑c r o n t a b文件中的条目，而E D I TO R环境变量又设置为v i，那么就可以用v
i来编辑c r o n t a b文件，相应的命令为：</p>
<p>$ crontab -e</p>
<p>可以像使用v i编辑其他任何文件那样修改c r o n t a b文件并退出。如果修改了某些条目或添加了新的条目，那么在保存该文件时， c r o
n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值，它会提示你。<br>例如，加入下面的一条：</p>
<p>#DT:delete core files,at 3:30am on 1,7,14,21,26 days of each month<br>30 3
1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;</p>
<p>现在保存并退出。最好在c r o n t a
b文件的每一个条目之上加入一条注释，这样就可以知道它的功能、运行时间，更为重要的是，知道这是哪位用户的作业。<br>现在让我们使用前面讲过的crontab
-l命令列出它的全部信息：</p>
<p>#(put your own initials here) echo the date to the console every<br>#15
minutes between 6pm and 6am<br>0,15,30,45 18-06 * * * /bin/echo 'date' &gt;
/dev/console</p>
<p>#DT:delete core files,at 3:30am on 1,7,14,21,26 days of each month<br>30 3
1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;</p>
<p>删除crontab文件<br>为了删除c r o n t a b文件，可以用：</p>
<p>$ crontab -r</p>
<p>恢复丢失的crontab文件<br>如果不小心误删了c r o n t a b文件，假设你在自己的$ H O M
E目录下还有一个备份，那么可以将其拷贝到/ v a r / s p o o l / c r o n / &lt; u s e r n a m e
&gt;，其中&lt; u s e r n a m e &gt;是用户名。如果由于权限问题无法完成拷贝，可以用：</p>
<p>$ crontab &lt;filename&gt;</p>
<p>其中，&lt; f i l e n a m e &gt;是你在$ H O M E目录中副本的文件名。<br>建议在自己的$ H O M
E目录中保存一个该文件的副本。编辑副本，然后重新提交新的文件。<br>有些c r o n t a b的变体有些怪异，所以在使用c r o n t a
b命令时要格外小心。如果遗漏了任何选项，c r o n t a b可能会打开一个空文件，或者看起来像是个空文件。这时敲d e l e t
e键退出，不要按&lt; C t r l - D &gt;，否则你将丢失c r o n t a b文件。</p>
<p>论坛例子<br>can't start cron file FIFO exist <br><a  href="http://www.chinaunix.net/forum/viewtopic.php?t=87026">http://www.chinaunix.net/forum/viewtopic.php?t=87026</a><br>15
1 * * * /opt/bin/ta.sh /opt/aadir &gt; /dev/null
2&gt;&amp;1中2&gt;&amp;1的意思<br><a  href="http://www.chinaunix.net/forum/viewtopic.php?t=139356">http://www.chinaunix.net/forum/viewtopic.php?t=139356</a><br>编写crontab:每周自动执行将一文件夹的内容备份,并且文件名字以生成的日期命名.
<br><a  href="http://bbs.chinaunix.net/forum/viewtopic.php?t=263863">http://bbs.chinaunix.net/forum/viewtopic.php?t=263863</a></p>
<p>at命令<br>a t命令允许用户向c r o n守护进程提交作业，使其在稍后的时间运行。一旦一个作业被提交， a
t命令将会保留所有当前的环境变量，包括路径，不象c r o n t a
b，只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户，除非你对其输出进行了重定向，绝大多数情况下是重定向到某个文件中。<br>和c r o n
t a b一样，根用户可以通过/ e t c目录下的a t . a l l o w和a t . d e n y文件来控制哪些用户可以使用a
t命令，哪些用户不行。不过一般来说，对a t命令的使用不如对c r o n t a b的使用限制那么严格。</p>
<p>a t命令的基本形式为：at [-f script] [-m -l -r] [time] [date]</p>
<p>其中，</p>
<p>-f：script 是所要提交的脚本或命令。</p>
<p>-l：列出当前所有等待运行的作业。a t q命令具有相同的作用。<br>-r：清除作业。为了清除某个作业，还要提供相应的作业标识（ I D）；有些U N
I X变体只接受a t r m作为清除命令。<br>-m：作业完成后给用户发邮件。</p>
<p>time：at命令的时间格式非常灵活；可以是H、H H . H H M M、H H : M M或H : M，其中H和M分别是小时和分钟。还可以使用a .
m .或p . m .。<br>date：日期格式可以是月份数或日期数，而且a t命令还能够识别诸如t o d a y、t o m o r r o
w这样的词。</p>
<p><br>使用at命令提交命令或脚本<br>使用a t命令提交作业有几种不同的形式，可以通过命令行方式，也可以使用a
t命令提示符。一般来说在提交若干行的系统命令时，使用a t命令提示符方式，在提交s h e l l脚本时，使用命令行方式。</p>
<p>命令行方式：at [-f script] [-m -l -r] [time] [date]</p>
<p>提示符方式：<br>以在a t命令后面跟上日期/时间并回车。然后就进入了a t命令提示符，这时只需逐条输入相应的命令，然后按&#8216; &lt; C T R L
- D &gt;&#8217;退出。</p>
<p>1、例一：提示符方式</p>
<p># su sam<br>$ at 10:40<br>warning: commands will be executed using (in order)
a) $SHELL b) login shell c) /bin/sh<br>at&gt; find /etc -name "passwd"
-print<br>at&gt; &lt;EOT&gt;<br>job 1 at 2004-11-02 10:40</p>
<p>其中， &lt; E O T &gt;就是&lt; C T R L - D &gt;。在10:40系统将执行一个简单的f i n
d命令。提交的作业被分配了一个唯一标识job 1。该命令在完成以后会将全部结果以邮件的形式发送给我。</p>
<p>下面这些日期/时间格式都是a t命令可以接受的：</p>
<p>at 5.00am May23<br>at 11.20pm<br>at now +2 hour<br>at 9am tomorrow<br>at
15:00 May24<br>at now + 10 minutes</p>
<p>2、例二：命令行方式<br>如果希望向a t命令提交一个s h e l l脚本，使用其命令行方式即可。在提交脚本时使用- f选项。</p>
<p>$ touch db_table.sh<br>$ at 3:00pm tomorrow -f db_table.sh<br>warning:
commands will be executed using (in order) a) $SHELL b) login shell c)
/bin/sh<br>job 3 at 2004-11-02 15:00</p>
<p>在上面的例子中，一个叫做d b _ t a b l e . s h的脚本将在2004-11-02 15:00运行。俺的机子时间不对。</p>
<p>3、还可以使用e c h o命令向a t命令提交作业：</p>
<p>$ echo find /etc -name "passwd" -print | at now +1 minute<br>warning:
commands will be executed using (in order) a) $SHELL b) login shell c)
/bin/sh<br>job 4 at 2004-11-01 19:07</p>
<p>列出所提交的作业<br>一个作业被提交后，可以使用at -l命令来列出所有的作业：</p>
<p>$ at -l<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-02 10:40 a sam<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-02 15:00 a
sam<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-01 19:07 a sam</p>
<p>其中，第一行是作业标识，后面是作业运行的日期/时间。最后一列a代表a t。<br>还可以使用a t q命令来完成同样的功能，它是a
t命令的一个链接。<br>直接&gt;atq,相当于&gt;at -l</p>
<p>当提交一个作业后，它就被拷贝到/ v a r / s p o o l / a t目录中，准备在要求的时间运行。</p>
<p># pwd<br>/var/spool/at<br># ls -l</p>
<p>清除一个作业</p>
<p>清除作业的命令格式为：atrm [job no] 或at -r [job no]<br>要清除某个作业，首先要执行at
-l命令，以获取相应的作业标识，然后对该作业标识使用at -r 命令，清除该作业。</p>
<p>$ at -l<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-02 10:40 a sam<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-02 15:00 a
sam<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-01 19:07 a sam<br>$at -r 3<br>$at -l<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2004-11-02 10:40 a sam<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-11-01 19:07 a sam</p>
<p>有些系统使用at-r [job
no]命令清除作业。<br>&amp;命令<br>当在前台运行某个作业时，终端被该作业占据；而在后台运行作业时，它不会占据终端。可以使用&amp;命令把作业放到后台执行。</p>
<p>该命令的一般形式为：<br>命令&amp;</p>
<p>在后台运行作业时要当心：需要用户交互的命令不要放在后台执行，因为这样你的机器就会在那里傻等。<br>不过，作业在后台运行一样会将结果输出到屏幕上，干扰你的工作。如果放在后台运行的作业会产生大量的输出，最好使用下面的方法把它的输出重定向到某个文件中：</p>
<p>command &gt;out.file 2&gt;&amp;1 &amp;</p>
<p>在上面的例子中，2&gt;&amp;1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file
的文件中。<br>当你成功地提交进程以后，就会显示出一个进程号，可以用它来监控该进程，或杀死它。<br>关于&gt;&amp;2、2&gt;&amp;1等重定向的详细解释！
<br><a  href="http://bbs.chinaunix.net/forum/viewtopic.php?t=16361">http://bbs.chinaunix.net/forum/viewtopic.php?t=16361</a></p>
<p>例一：<br>查找名为&#8220;httpd.conf&#8221;的文件，并把所有标准输出和错误输出重定向到f i n d . d t的文件中：</p>
<p># find /etc/httpd/ -name "httpd.conf" -print &gt;find.dt 2&gt;&amp;1
&amp;<br>[2] 7832<br>[1]&nbsp;&nbsp; Done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; find /etc/ -name "httpd.conf"
-print &gt;find.dt 2&gt;&amp;1 &amp;</p>
<p>成功提交该命令之后，系统给出了它的进程号7832。</p>
<p># cat find.dt<br>/etc/httpd/conf/httpd.conf<br>[2]+ Done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
find /etc/httpd/ -name "httpd.conf" -print &gt;find.dt 2&gt;&amp;1 &amp;</p>
<p>查看find.dt,可以看到执行结果<br>例二：<br>在后台执行脚本，如：有一个叫psl的脚本<br>$ps psl
&amp;<br>[7878]<br>用ps命令查看进程<br>用提交命令时所得到的进程号来监控它的运行。用p s命令和g r e p命令列出这个进程：</p>
<p># ps -x |grep 7832<br>7868 pts/0&nbsp;&nbsp;&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:00 grep 7832</p>
<p>如果系统不支持ps x命令，可以用：</p>
<p># ps -ef |grep 7832<br>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7866 7790 0 23:40 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep
7832</p>
<p>在用p s命令列出进程时，它无法确定该进程是运行在前台还是后台。<br>杀死后台进程<br>杀死后台进程可以使用k i l
l命令。当一个进程被放到后台运行时， s h e l l会给出一个进程号，我们可以根据这个进程号，用k i l l命令杀死该进程。该命令的基本形式为：</p>
<p>kill -signal [process_number]</p>
<p>现在暂且不要考虑其中的各种不同信号。<br>在杀进程的时候，执行下面的命令(你的进程号可能会不同)并按回车键。系统将会给出相应的信息告诉用户进程已经被杀死。</p>
<p>$kill 7832</p>
<p>如果系统没有给出任何信息，告诉你进程已经被杀死，那么不妨等一会儿，也许系统正在杀该进程，如果还没有回应，就再执行另外一个k i l
l命令，这次带上一个信号选项：</p>
<p>$kill - 9 7868</p>
<p>如果用上述方法提交了一个后台进程，那么在退出时该进程将会被终止。为了使后台进程能够在退出后继续运行，可以使用n o h u
p命令。<br>nohug命令<br>如果你正在运行一个进程，而且你觉得在退出帐户时该进程还不会结束，那么可以使用n o h u
p命令。该命令可以在你退出帐户之后继续运行相应的进程。N o h u p就是不挂起的意思( n ohang up)。<br>该命令的一般形式为：</p>
<p>nohup command &amp;</p>
<p>使用nohup命令提交作业<br>如果使用n o h u p命令提交作业，那么在缺省情况下该作业的所有输出都被重定向到一个名为n o h u p . o
u t的文件中，除非另外指定了输出文件：</p>
<p>nohup command &gt; myout.file 2&gt;&amp;1</p>
<p>在上面的例子中，输出被重定向到m y o u t . f i l e文件中。</p>
<p>让我们来看一个例子，验证一下在退出帐户后相应的作业是否能够继续运行。我们先提交一个名为p s 1的日志清除进程：</p>
<p>$nobup ps1</p>
<p>现在退出该s h e l l，再重新登录，然后执行下面的命令：</p>
<p>$ps x |grep ps1</p>
<p>我们看到，该脚本还在运行。如果系统不支持ps x命令，使用ps -ef|grep ps1命令。</p>
<p>一次提交几个作业<br>如果希望一次提交几个命令，最好能够把它们写入到一个s h e l l脚本文件中，并用n o h u
p命令来执行它。<br>例如，下面的所有命令都用管道符号连接在一起；我们可以把这些命令存入一个文件，并使该文件可执行。</p>
<p>cat /home/accounts/qrt_0499 | /apps/bin/trials.awk | sort | lp<br>$cat &gt;
quarterend<br>cat /home/accounts/qtr_0499 | /apps/bin/trials.awk | sort |
lp<br>&lt;ctrl-D&gt;</p>
<p>现在让它可执行：</p>
<p>$ chmod 744 quarterend</p>
<p>我们还将该脚本的所有输出都重定向到一个名为q t r. o u t的文件中。</p>
<p>nobup ./quarterend &gt; qtr.out 2&gt;</p>
<p>后台运行作业的:<br>有时我们必须要对大文件进行大量更改，或执行一些复杂的查找，这些工作最好能够在系统负荷较低时执行。<br>创建一个定时清理日志文件或完成其他特殊工作的脚本，这样只要提交一次，就可以每天晚上运行，而且无需你干预，只要看看相应的脚本日志就可以了。C
r o n和其他工具可以使系统管理任务变得更轻松。</p>
<p>*，？，[...]，[!...]等</p>
<p>" 匹配文件名中的任何字符串。<br>" 匹配文件名中的单个字符。<br>" 匹配文件名中的字母或数字字符。</p>
<p>下面就是这些特殊字符：</p>
<p>* 匹配文件名中的任何字符串，包括空字符串。<br>？ 匹配文件名中的任何单个字符。<br>[...] 匹配[ ]中所包含的任何字符。<br>[!...]
匹配[ ]中非感叹号！之后的字符。</p>
<p>当s h e l
l遇到上述字符时，就会把它们当作特殊字符，而不是文件名中的普通字符，这样用户就可以用它们来匹配相应的文件名。<br>1、*：使用星号*可以匹配文件名中的任何字符串。就不用多说了，和win下差不多<br>2、？：使用可以匹配文件名中的任何单个字符。和win差不多<br>3、[]：使用[
. . . ]可以用来匹配方括号[ ]中的任何字符。可以使用一个横杠-来连接两个字母或数字，以此来表示一个范围。<br>1)列出以i或o开头的文件名：</p>
<p>#ls [io]*</p>
<p>2)列出log.开头、后面跟随一个数字、然后可以是任意字符串的文件名：</p>
<p>#ls log.[0-9]*</p>
<p>3)与例二相反，列出log.开头、后面不跟随一个数字、然后可以是任意字符串的文件名</p>
<p>#ls log.[!0-9]*</p>
<p>4)列出所有以LPS开头、中间可以是任何两个字符，最后以1结尾的文件名：</p>
<p>#ls LPS??1</p>
<p>5)列出所有以大写字母开头的文件名：</p>
<p>$ ls [A-Z]*</p>
<p>6)列出所有以小写字母开头的文件名：</p>
<p>$ ls [a-z]*</p>
<p>7)为了列出所有以数字开头的文件名：</p>
<p>$ ls [0-9]*</p>
<p>8)列出所有以. 开头的文件名（隐含文件，例如. p r o f i l e、. r h o s t s、. h i s t o r y等）:</p>
<p>$ ls .*</p>
<p>1、我用root用户按照搂住所说的方法，怎么不好使啊！<br>root用户不用设置环境变量吧！<br>/etc/crontab所添加的内容如下：<br>10
10 * * * /var/ceshi/test.sh<br>12 10 * * * /var/ceshi/test.sh
&gt;&gt;/temp/test.txt<br>test.sh 的内容如下：<br>＃！bin/bash<br>fuser -k
/var/ceshi/test.class<br>是强行关掉一个java程序<br>2、另外我用<br>crontab -e的方法也试过就是不好使</p>
<p>10 10 * * * sh /var/ceshi/tt.sh &gt;&gt;/temp/test.txt<br>12 10 * * * sh
/var/ceshi/test.sh &gt;&gt;/temp/test.txt<br>echo nihao<br>tt.sh
中是启动java程序的，能够启动，但test.class
关不掉，且有nihao输出。<br>3、在终端直接运行test.sh程序则好使，可以关掉test.class程序<br>不知道是哪来出了问题，&nbsp;&nbsp;&nbsp;
希望高手帮帮忙！<br>又没有其它的方法来关掉一个java程序？？？</p><img src ="http://www.cppblog.com/mydriverc/aggbug/99526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2009-10-26 23:16 <a href="http://www.cppblog.com/mydriverc/archive/2009/10/26/99526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用nohup来保障后台运行的程序不因终端shell退出而终止 </title><link>http://www.cppblog.com/mydriverc/archive/2009/10/26/99525.html</link><dc:creator>旅途</dc:creator><author>旅途</author><pubDate>Mon, 26 Oct 2009 15:09:00 GMT</pubDate><guid>http://www.cppblog.com/mydriverc/archive/2009/10/26/99525.html</guid><wfw:comment>http://www.cppblog.com/mydriverc/comments/99525.html</wfw:comment><comments>http://www.cppblog.com/mydriverc/archive/2009/10/26/99525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mydriverc/comments/commentRss/99525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mydriverc/services/trackbacks/99525.html</trackback:ping><description><![CDATA[<h3 class="title">简单而有用的nohup命令在UNIX/LINUX中，普通进程用&amp;符号放到后台运行，如果启动该程序的控制台logout，则该进程随即终止。</h3>
<div class="article"><a name="more"></a>
<p><br>要实现守护进程，一种方法是按守护进程的规则去编程（本站有文章介绍过），比较麻烦；另一种方法是仍然用普通方法编程，然后用nohup命令启动程序：
<br><span style="color: #ff0000;"><span style="font-size: medium;">nohup
&lt;程序名&gt; &amp;</span>
<br></span>则控制台logout后，进程仍然继续运行，起到守护进程的作用（虽然它不是严格意义上的守护进程）。<br>使用nohup命令后，原程序的的标准输出被自动改向到当前目录下的nohup.out文件，起到了log的作用，实现了完整的守护进程功能。</p>
</div>
<p>ygwu @ 2005年04月18日 上午10:03 <br><br>For example：<br><span class="h2b"><a name="_Toc98401903"></a><a name="_Toc98337383"><span style="font-size: medium; color: #ff0000;">如何远程启动WebLogic</span></a><span style="font-size: medium; color: #ff0000;">服务?</span></span></p>
<p>用telnet远程控制服务器，远程启动WEBLOGIC服务，启动后关闭telnet，WebLogic服务也跟着停止，这是因为使用telnet启动的进程会随着telnet进程的关闭而关闭。所以我们可以使用一些UNIX下的命令来做到不关闭。</p>
<p>使用如下命令：</p>
<p><span style="font-size: medium; color: #ff0000;">nohup
startWeblogic.sh&amp;</span></p>
<p>如果想要监控标准输出可以使用：</p>
<p><span style="font-size: medium; color: #ff0000;">tail -f nohup.out</span></p>
<p>这里有一个要主意的地方.&nbsp; 就是nohup 只能工作在 sh的环境下 ,csh, bash 都不行,我的freebsd 使用的 csh ,
%提示符的,不起作用,</p>
<p>比如先输入sh 回车, 出现$提示符后,再用nohup command &amp; 就可以了.</p><img src ="http://www.cppblog.com/mydriverc/aggbug/99525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mydriverc/" target="_blank">旅途</a> 2009-10-26 23:09 <a href="http://www.cppblog.com/mydriverc/archive/2009/10/26/99525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>