由 harrypotter 在 08-13-2003 21:23 发表:
ProFTPD安装配制指南!
现在大家都在vsftp,其实proftpd很好的,应该比rh自带的vs好些,找了点资料,同大家分享......... 
quote from http://it.rising.com.cn
ProFtpd快速指南
摘要
ProFTPD是一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发、发布的免费软件,也就是说任何人只要遵守GPL版权声明,都可以随意修改源始码。(2002-07-03 10:26:59)
By lanf
ProFTPD是一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发、发布的免费软件,也就是说任何人只要遵守GPL版权声明,都可以随意修改源始码。
ProFTPD设计目标是实现一个安全且易于设定的FTP Server。目前Unix或类Unix平台上FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。虽然wu-ftpd有着极佳的效能同时也是一套很好的软件,然而它却欠缺了许多Win32平台上FTP Server的一些特色,同时wu-ftpd过去也有不少的安全漏洞陆续被发现。ProFTPD的原创者本身就曾经花非常多的时间寻找wu-ftpd的漏洞加以改进并且增加许多功能。然而十分不幸的是,他很快地发现显然wu-ftpd需要全部重新的改写才能补足欠缺的设定能力以及缺乏的一些功能。ProFTPD不是从其它FTP Server的既有原始码修改而产生的,相反的,它是完全独立而完整、重新改写的FTP Server。
ProFTPD的主要包括如下特点:
单一主设置文件,包含许多指令以及其支配的组,完全都是直观的设定。如果各位对Apache Web Serve的设置不陌生的话相信一定会觉得十分容易操作设定。
每个目录都可以定义一个".ftpaccess"设置文件,就如同Apache的".htaccess"文件一样可以设定该目录的存取权限。
可设定多个虚拟FTP server,而匿名FTP服务更是十分容易。
可根据系统的负载(load)选择以单独运作(stand-alone)方式或是由inetd启动。
匿名FTP的根目录不需要特定的目录结构、系统二进制执行文件或其它系统文件。
ProFTPD不执行任何外部程序以免造成安全漏洞。
具有隐藏目录或隐藏文件,源自于Unix形式的档案权限,或是user/group类型的档案权限设定。
能够以一般使用者在单独运作(stand-alone)模式下执行,以减少某些藉由攻击方式取得root权的可能性。注:此功能与Unix的操作系统有关。
支持系统记录以及utmp/wtmp。记录的方式与wu-ftpd的标准完全兼容,也支持记录内容的延伸格式。
支持Shadow password,包括了帐号使用期限设定的功能。
编译和安装
Proftpd提供了多种安装格式,包括源代码方式、RPM方式、deb方式(debian软件包)等。本文主要讨论源代码方式的安装。
从ftp.proftpd.net下载最新版本的proftpd-1.2.0rc3到Linux服务器上。然后按照如下步骤进行处理:
[root@ftpd /]# cp proftpd-1.2.0rc3.tar.gz /usr/src/
[root@ftpd /]# cd /usr/src
[root@ftpd src]# tar xvfz proftpd-1.2.0rc3.tar.gz
[root@ftpd src]# cd proftpd-1.2.0rc3
[root@pftd proftpd-1.2.0rc3]# ./configure
[root@pftd proftpd-1.2.0rc3]# make
[root@pftd proftpd-1.2.0rc3]# make install
到现在为止,你已经完成了proftpd的编译和安装。并且在/usr/local/etc/目录下有一个默认的proftpd配置文件proftpd.conf。
启动测试
对于笔者的试验系统RedHat6.2来说,需要将该配置文件中:
Group nogroup
修改为:
Group nobody
因为redhat系统中nobody用户属于nobody组,而不是nogroup组。
若需要将proftpd设置为系统启动时自动启动则通过如下命令拷贝启动文件:
[root@ftpd proftpd-1.2.0rc3]# cp ./contrib/dist/rpm/proftpd.init.d
/etc/rc.d/init.d/proftpd
然后修改该脚本的可执行属性:
[root@ftpd /]# chmod +x /etc/rc.d/init.d/proftpd
然后编辑/etc/rc.d/init.d/functions:
修改
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
为
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin"
注:若将在运行./cofigure命令时通过--prefix选项指定将proftpd安装在/usr/sbin目录下则不需要修改fuctions文件。
然后运行命令:
[root@ftpd rc3.d]# chkconfig --level 35 proftpd on
则下次系统启动以后,proftpd将自动启动。
最后,需要确保系统当前没有ftp服务器在运行:
[root@ftpd /]# netstat -ln
若输出中不包含
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
这样的内容则可以直接启动proftpd,否则需要关闭以前的ftpd服务器。对于一般的缺省Linux安装来说,则需要通过以下的途径来关闭ftp服务器:
编辑/etc/inetd.conf文件,在
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
一行前加上#:
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
然后:
[root@ftpd /]# ps ax|grep inetd
350 ? S 0:00 inetd
得到inetd的进程号 ,重新启动inetd进程:
[root@ftpd /]# kill -HUP 350
然后通过如下命令启动proftpd:
[root@ftpd /]# /etc/rc.d/init.d/proftpd start
这时候可以通过如下命令来测试proftpd是否正常运行:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ProFTPD 1.2.0rc3 Server (ProFTPD Default Installation)[ftpd.test.com.cn]
User (192.168.2.33
none)): ideal
Password:
230 User ideal logged in.
ftp>
则现在你就拥有了一个安全可靠的ftp服务器。
FAQ
1、我安装proftpd以后,出现了问题,我如何调试?
通过通过命令/usr/local/sbin/proftpd -d9 -n启动proftpd来进行调试,则proftpd就会将调试信息打印到consle上以供调试之用。
2、为什么我的proftpf启动以后,匿名用户不能登录?
查看proftp配置文件/usr/local/etc/proftpd.conf,修改 为 (这里/home/ftp可以是任何希望匿名用户登录以后的当前根目录,但是确保要使该目录允许ftp用户访问),并且若 部分的User指令指定的用户为ftp用户,则需要在配置文件中添加如下命令指示:
RequireValidShell off
3、我如何实现一个正常用户登录以后将其的访问限定在某个目录之下?
可以通过指令DefaultRoot来实现。例如若希望将ftpusers组的用户限定在自己的home目录下,则需要首先创建该组:
/usr/sbin/groupadd ftpusers
然后将用户ideal加入到该组中:
usrmod -G ftpusers ideal
最后在在proftpd.conf文件中添加如下内容:
DefaultRoot ~ ftpusers
也可以限制用户登录以后仅仅访问自己主目录下的一个子目录:
DefaultRoot ~/anoftp ftpusers
当然也可以将用户限制在其他目录之下,而不是自己的home目录下:
DefaultRoot /tmp ftpusers
也可以限定一个用户组的某些用户被限制,而其他不作限制:
DefaultRoot ~ ftpusers,!empolyee
这个指令指示仅仅限制ftpusers组中的不是empolyee组的用户进行限制。
4、我如何使用户登陆时不显示ftp服务器版本信息,以增强安全性?
在proftpd.conf中添加如下内容:
ServerIdent off
则再次登录时,显示如下内容:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ftpd.test.com.cn FTP server ready.
User (192.168.2.33
none)):
5、在proftpd环境下如何设定虚拟主机?
可以通过指令:VirtualHost来实现,一个最简单的例子:
ServerName "virtual FTP server"
若你仅仅希望通过匿名访问某个虚拟主机,则使用如下的指令:
1<virtualhost 192.168.2.35="">
2
3ServerName "virtual FTP server"
4
5<limit login="">
6
7DenyAll
8
9</limit>
10<anonymous local="" private="" usr="">
11
12User private
13
14Group private
15
16<limit login="">
17
18AllowAll
19
20</limit>
21</anonymous>
22</virtualhost>
这样192.168.2.35的这台主机则仅仅允许匿名登录。
笔者的proftpd.conf配置文件内容为:
This is a basic ProFTPD configuration file (rename it to
'proftpd.conf' for actual use. It establishes a single server
and a single anonymous login. It assumes that you have a user/group
"nobody" and "ftp" for normal operation and anon.
ServerName "test.com.cn FTP Server"
ServerType standalone
DefaultServer on
Port 21 is the standard FTP port.
Port 21
Umask 022 is a good standard umask to prevent new dirs and files
from being group and world writable.
Umask 022
To prevent DoS attacks, set the maximum number of child processes
to 30. If you need to allow more than 30 concurrent connections
at once, simply increase this value. Note that this ONLY works
in standalone mode, in inetd mode you should use an inetd server
that allows you to limit maximum number of processes per service
(such as xinetd)
MaxInstances 30
RequireValidShell off
ServerIdent off
Set the user and group that the server normally runs at.
U