一. proftpd 简介。
proftpd是一款开放源码的ftp服务器软件,它是原来世界范围使用最广泛的wu-ftpd的改进版,它修正了wu-ftpd的许多缺陷,在许多方面进行了重大的改进,其中一个重要变化就是它学习了Apache 的配置方式,使proftpd的配置和管理更加简单易懂。本文将介绍它在Red hat Linux 9中最基本的安装和配置。
二.软件的相关资源。
官方网站:http://www.proftpd.org/
源码软件包:proftpd是开源的软件,可以去其官方网站下载。目前最新稳定版本为1.2.10。
帮助文档: 该软件包中包含。
FAQ:该软件包中包含。
配置文件样例:该软件包中包含。
三.软件的安装。
1.安装
由其官方网站中下载其源码软件包proftpd-1.2.10. tar.gz。接下来我将对安装过程的一些重要步骤,给出其解释:
tar xzvf bind-9.3.1.tar.gz 解压缩软件包。
./configure 针对机器作安装的检查和设置,大部分的工作是由机器自动完成的,但是用户可以通过一些参数来完成一定的设置,其常用选项有:
./configure --help 察看参数设置帮助。
--enable-ipv6 支持ipv6。
可以设置的参数很多,可以通过 -help察看需要的,一般情况下,默认设置就可以了。
默认情况下,安装过程应该建立了:
proftpd的deamon为/usr/local/sbin/proftpd
proftpd的配置文件,/usr/local/etc/proftpd.conf。
2.启动:
-c选项用来指定配置文件的位置,不指定的话默认位置是 /usr/local/etc/proftpd.conf 。
正常情况下proftpd应该启动了,ps aux 应该可以查到proftpd的进程,或netstat -an 也可以看到21端口的服务已经起来了。(ftp默认端口)
如果要设置开机自启动ftp server,只需在/etc/rc.d/rc.local中加入一行
/usr/local/sbin/proftpd
四.软件的配置。
1.初始配置文件
默认配置文件的位置为:
/usr/local/etc/proftpd.conf (如果文件不存在可以从压缩包中把配置文件样例拷贝过来即可)下面逐项分析其中一些常选项:(#后面的部分是注释)
ServerType 指定FTP Server 的启动类型,一般使用standalone方式比较简单,如果访问量不大,为节省资源考虑用xinetd侦听启动,必须在这里指定。Port 指定FTP的侦听端口,一般使用21端口
Umask 指定FTP server 进程的Umask 值,022与Linux系统得默认值一致。
MaxInstances 指定 FTP server 的最大连接数。
User 和Group 指定proftpd 进程启动时的有效用户ID,处于安全考虑默认的身份是nobody,有一点要指出的是,一般Red Linux 9.0 中默认是没有nogroup 这个组的,把Group指定为nobody 即可。
DefaultRoot 选项限制Linux 系统用户通过FTP方式登录时将被限制在其home 目录下。
TimeoutStalled 指定一个连接的超时时间。
AllowRetriveRestart 和AllowStroeRestart 指定允许断点续传。
这一部分,将在后面详细介绍。
2.配置文件结构分析
常用全局设置
DefaultRoot ~ # 限制每个FTP用户在自己的目录下,不可查看上一级目录
AllowRetrieveRestart on #下载时,允许断点续传
AllowStoreRestart on #上传时,允许断点续传
ServerIdent off #屏蔽服务器版本信息
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者 #设定用户传输速率
MaxHostsPerUser 1 #每个帐户最多允许来源ip为1个, 对防止ftp帐号还是比较有用的。
MaxClientsPerUser 1 #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏
MaxClientsPerHost 1 #同一个客户端只能最多1个帐号可以登陆
WtmpLog on #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。
TimeoutIdle 600 #客户端idle时间设置,默认就是600秒
DisplayLogin welcome.msg #设置ftp登陆欢迎信息文件
RootLogin on #允许root用户登录,默认是不允许的,安全起见不推荐此选项。
欢迎词设置
关于欢迎文件的设置包含如下参数:
%T 目前的时间
%F 所在硬盘剩下的容量
%C 目前所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 目前的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文件数量
%o 本次下载的文件数量
%t 本次上传+下载的文件数量
知道这些参数,可以写出一个友好的欢迎语文件,例如:
anonymous 配置块
在配置文件中anonymous配置块是非常重要的一部分,全局帐户的权限配置一般都由它来控制,下面分析一个比较常见的例子
anonymous配置块中的重点是通过Limit对指定目录进行比较详尽的权限管理,Limit的权限控制比较完整,通过不同的组合基本上可以做到各种复杂的权限控制,其控制项如下:
注:在测试是否可以下载时,不能用长度为0的空文件去测试,要用一个有内容的文件(文件大小不能为0k)。
针对上面这个Limit所应用的对象,又包括以下范围
五.一种简单实用的配置管理方式:
proftpd和mysql组合可以完成比较庞大而且完备的权限控制,但是也同样增加了管理和维护的复杂性,在这里我介绍一种简单易行的配置方法,适用于100个用户以下的应用。这种方法的核心在于巧妙的运用了设置gid位,读者最好找资料了解一下相关的知识。这种方法的配置管理工作相当少,也相当的简单,同时还可以保持一个清晰的权限系统结构。
1.思路
首先需要明确的概念是proftpd的用户与linux系统的用户的关系:linux系统的用户即为proftpd的用户。proftpd的权限控制是基于Linux系统得权限控制之上的,即用户对于某个文件或目录,必须先有Linux系统的权限,在此基础上proftpd才能设置其特有的一些权限。其实一般来说Linux自有的权限系统就是一个比较完善的权限系统了,我们完全可以只利用这个权限系统,就足可以满足我们的要求了。
我们设置一个ftp管理员ftpadmin属于ftpadmin组,ftp的根目录/ftp是ftpadmin的个人根目录,这样ftpadmin可以完成日常的管理。通过设置/ftp的gid可以保证新上传的文件是属于ftpadmin用户,加上再设置umask值002保证上传文件的组读写权限,这样管理员就可以对其管理下的文件进行管理,而同时保证了不改变该文件的属主。
ftp的用户,我们只需新建一个Linux用户,而把他的用户目录制定在/ftp之下就可以。操作起来很简单。
2.建立ftp管理员:ftpadmin
同时保证ftpadmin 是 /ftp的属主,ftpadmin 是/ftp的组属主。这样就保证了ftpadmin对要管理的/ftp目录有全部的权限。
-s /sbin/nologin 指定用户不能从shell登录,就是说只能从ftp方式登录,这样是出于安全的考虑。
修改/usr/local/etc/proftpd.conf
掩码Umask改为 002 。即组成员和所有者都可对文件夹进行增删,改等操作。其他用户可读可执行,但不可写。这样,ftpadmin用户可以通过同组的身份对所有的文件进行读写,同时也不改变其内容的原有权限。也就说,不改变这个文件夹下的文件的所有者身份,但同时又可以管理这些文件。
chmod 2775 /ftp,通过设置了文件夹的gid,以后在这个文件夹下写的所有文件,不管其所有者是谁,文件的组必定是ftpadmin(因为/ftp的组属于ftpadmin),都合理的被纳于ftpadmin的管理之下。
3.添加用户:user1
这样user1就对/ftp/user1的目录有完整的权限,而作为管理员也可以通过组权限对目录进行管理。
每当需要添加用户的时候,只需方便的简单的添加一个Linux的用户就可以了。
4.对应的配置文件:proftpd.conf中的重要条目
Umask 002 保证了新建的文件有组读写权限。
DefaultRoot ~ 保证 每个用户登录后被锁定在自己的目录里,看不到其他用户的目录。
proftpd是一款开放源码的ftp服务器软件,它是原来世界范围使用最广泛的wu-ftpd的改进版,它修正了wu-ftpd的许多缺陷,在许多方面进行了重大的改进,其中一个重要变化就是它学习了Apache 的配置方式,使proftpd的配置和管理更加简单易懂。本文将介绍它在Red hat Linux 9中最基本的安装和配置。
二.软件的相关资源。
官方网站:http://www.proftpd.org/
源码软件包:proftpd是开源的软件,可以去其官方网站下载。目前最新稳定版本为1.2.10。
帮助文档: 该软件包中包含。
FAQ:该软件包中包含。
配置文件样例:该软件包中包含。
三.软件的安装。
1.安装
由其官方网站中下载其源码软件包proftpd-1.2.10. tar.gz。接下来我将对安装过程的一些重要步骤,给出其解释:
[root@localhost root] #tar xzvf proftpd-1.2.10. tar.gz [root@localhost root] #cd bind-9.3.1 [root@localhost bind-9.3.1] #./configure [root@localhost bind-9.3.1] #make [root@localhost bind-9.3.1] #make install |
tar xzvf bind-9.3.1.tar.gz 解压缩软件包。
./configure 针对机器作安装的检查和设置,大部分的工作是由机器自动完成的,但是用户可以通过一些参数来完成一定的设置,其常用选项有:
./configure --help 察看参数设置帮助。
--enable-ipv6 支持ipv6。
可以设置的参数很多,可以通过 -help察看需要的,一般情况下,默认设置就可以了。
默认情况下,安装过程应该建立了:
proftpd的deamon为/usr/local/sbin/proftpd
proftpd的配置文件,/usr/local/etc/proftpd.conf。
2.启动:
[root@localhost root] # /usr/local/sbin/proftpd -c /usr/local/etc/proftpd.conf |
-c选项用来指定配置文件的位置,不指定的话默认位置是 /usr/local/etc/proftpd.conf 。
正常情况下proftpd应该启动了,ps aux 应该可以查到proftpd的进程,或netstat -an 也可以看到21端口的服务已经起来了。(ftp默认端口)
如果要设置开机自启动ftp server,只需在/etc/rc.d/rc.local中加入一行
/usr/local/sbin/proftpd
#!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/local/sbin/proftpd |
四.软件的配置。
1.初始配置文件
默认配置文件的位置为:
/usr/local/etc/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 " ServerType standalone DefaultServer on # Port 21 is the standard FTP port. Port 21 |
ServerType 指定FTP Server 的启动类型,一般使用standalone方式比较简单,如果访问量不大,为节省资源考虑用xinetd侦听启动,必须在这里指定。Port 指定FTP的侦听端口,一般使用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 |
Umask 指定FTP server 进程的Umask 值,022与Linux系统得默认值一致。
MaxInstances 指定 FTP server 的最大连接数。
# Set the user and group under which the server will run. User nobody Group nogroup # To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line. #DefaultRoot ~ DefaultRoot |
User 和Group 指定proftpd 进程启动时的有效用户ID,处于安全考虑默认的身份是nobody,有一点要指出的是,一般Red Linux 9.0 中默认是没有nogroup 这个组的,把Group指定为nobody 即可。
DefaultRoot 选项限制Linux 系统用户通过FTP方式登录时将被限制在其home 目录下。
# Set the maximum number of seconds a data connection is allowed # to "stall" before being aborted. #TimeoutStalled 300 AllowRetrieveRestart on AllowStoreRestart on # Normally, we want files to be overwriteable. <Directory /> AllowOverwrite on </Directory> |
TimeoutStalled 指定一个连接的超时时间。
AllowRetriveRestart 和AllowStroeRestart 指定允许断点续传。
<Anonymous ~ftp> User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit the maximum number of anonymous logins MaxClients 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message # Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit> </Anonymous> |
这一部分,将在后面详细介绍。
2.配置文件结构分析
#全局设置 设置项目1 参数1 设置项目2 参数2 #某个目录的设置 <Directory "路径名"> ... ... </Directory> #关于匿名登陆的设置 <Anonymous "匿名登陆的目录"> ... ... <Limit 限制动作> ... ... </Limit> </Anonymous> |
常用全局设置
DefaultRoot ~ # 限制每个FTP用户在自己的目录下,不可查看上一级目录
AllowRetrieveRestart on #下载时,允许断点续传
AllowStoreRestart on #上传时,允许断点续传
ServerIdent off #屏蔽服务器版本信息
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者 #设定用户传输速率
MaxHostsPerUser 1 #每个帐户最多允许来源ip为1个, 对防止ftp帐号还是比较有用的。
MaxClientsPerUser 1 #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏
MaxClientsPerHost 1 #同一个客户端只能最多1个帐号可以登陆
WtmpLog on #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。
TimeoutIdle 600 #客户端idle时间设置,默认就是600秒
DisplayLogin welcome.msg #设置ftp登陆欢迎信息文件
RootLogin on #允许root用户登录,默认是不允许的,安全起见不推荐此选项。
欢迎词设置
关于欢迎文件的设置包含如下参数:
%T 目前的时间
%F 所在硬盘剩下的容量
%C 目前所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 目前的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文件数量
%o 本次下载的文件数量
%t 本次上传+下载的文件数量
知道这些参数,可以写出一个友好的欢迎语文件,例如:
欢迎您%U, 这是T-force的测试FTP服务器; 目前时间是:%T; 本服务器最多允许%M个用户连接数; 目前服务器上已有%N个用户连接数; 目前你所在的目录是%C; 目录所在的硬盘还剩下%F字节。 |
anonymous 配置块
在配置文件中anonymous配置块是非常重要的一部分,全局帐户的权限配置一般都由它来控制,下面分析一个比较常见的例子
# A basic anonymous configuration, no upload directories. If you do not # want anonymous users, simply delete this entire <Anonymous> section. <Anonymous /ftp> #指定匿名用户登录目录 User ftp #指定本块设置的用户 Group ftp #指定本块设置的用户属组 # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp #设定用户的别名 AnonRequirePassword on #登陆需要密码 # Limit the maximum number of anonymous logins MaxClients 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message # Limit WRITE everywhere in the anonymous chroot <Directory pub/*> <Limit WRITE DELE RMD MKD READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> </Anonymous> |
anonymous配置块中的重点是通过Limit对指定目录进行比较详尽的权限管理,Limit的权限控制比较完整,通过不同的组合基本上可以做到各种复杂的权限控制,其控制项如下:
CMD:Change Working Directory 改变目录 MKD:MaKe Directory 建立目录的权限 RNFR: ReName FRom 更改目录名的权限 DELE:DELEte 删除文件的权限 RMD:ReMove Directory 删除目录的权限 RETR:RETRieve 从服务端下载到客户端的权限 STOR:STORe 从客户端上传到服务端的权限 READ:可读的权限,不包括列目录的权限, 相当于RETR,STAT等 WRITE:写文件或者目录的权限,包括MKD和RMD DIRS:是否允许列目录,相当于LIST, NLST等权限,还是比较实用的 |
注:在测试是否可以下载时,不能用长度为0的空文件去测试,要用一个有内容的文件(文件大小不能为0k)。
针对上面这个Limit所应用的对象,又包括以下范围
AllowUser 针对某个用户允许的Limit DenyUser 针对某个用户禁止的Limit AllowGroup 针对某个用户组允许的Limit DenyGroup 针对某个用户组禁止的Limit AllowAll 针对所有用户组允许的Limit DenyAll 针对所有用户禁止的Limit |
五.一种简单实用的配置管理方式:
proftpd和mysql组合可以完成比较庞大而且完备的权限控制,但是也同样增加了管理和维护的复杂性,在这里我介绍一种简单易行的配置方法,适用于100个用户以下的应用。这种方法的核心在于巧妙的运用了设置gid位,读者最好找资料了解一下相关的知识。这种方法的配置管理工作相当少,也相当的简单,同时还可以保持一个清晰的权限系统结构。
1.思路
首先需要明确的概念是proftpd的用户与linux系统的用户的关系:linux系统的用户即为proftpd的用户。proftpd的权限控制是基于Linux系统得权限控制之上的,即用户对于某个文件或目录,必须先有Linux系统的权限,在此基础上proftpd才能设置其特有的一些权限。其实一般来说Linux自有的权限系统就是一个比较完善的权限系统了,我们完全可以只利用这个权限系统,就足可以满足我们的要求了。
我们设置一个ftp管理员ftpadmin属于ftpadmin组,ftp的根目录/ftp是ftpadmin的个人根目录,这样ftpadmin可以完成日常的管理。通过设置/ftp的gid可以保证新上传的文件是属于ftpadmin用户,加上再设置umask值002保证上传文件的组读写权限,这样管理员就可以对其管理下的文件进行管理,而同时保证了不改变该文件的属主。
ftp的用户,我们只需新建一个Linux用户,而把他的用户目录制定在/ftp之下就可以。操作起来很简单。
2.建立ftp管理员:ftpadmin
[root@localhost root]groupadd ftpadmin #ftpadmin为新添加的组的名字 [root@localhost root]useradd -d /ftp -g ftpadmin -s /sbin/nologin admin [root@localhost root]chmod 2775 /ftp |
同时保证ftpadmin 是 /ftp的属主,ftpadmin 是/ftp的组属主。这样就保证了ftpadmin对要管理的/ftp目录有全部的权限。
-s /sbin/nologin 指定用户不能从shell登录,就是说只能从ftp方式登录,这样是出于安全的考虑。
修改/usr/local/etc/proftpd.conf
nobody ftpadmin nogroup ftpadmin Umask 002 #允许所有者,组用户对ftp进行管理。 |
掩码Umask改为 002 。即组成员和所有者都可对文件夹进行增删,改等操作。其他用户可读可执行,但不可写。这样,ftpadmin用户可以通过同组的身份对所有的文件进行读写,同时也不改变其内容的原有权限。也就说,不改变这个文件夹下的文件的所有者身份,但同时又可以管理这些文件。
chmod 2775 /ftp,通过设置了文件夹的gid,以后在这个文件夹下写的所有文件,不管其所有者是谁,文件的组必定是ftpadmin(因为/ftp的组属于ftpadmin),都合理的被纳于ftpadmin的管理之下。
3.添加用户:user1
useradd -d /ftp/user1 -g ftpadmin -s /sbin/nologin user1 |
这样user1就对/ftp/user1的目录有完整的权限,而作为管理员也可以通过组权限对目录进行管理。
每当需要添加用户的时候,只需方便的简单的添加一个Linux的用户就可以了。
4.对应的配置文件:proftpd.conf中的重要条目
Umask 002 DefaultRoot |
Umask 002 保证了新建的文件有组读写权限。
DefaultRoot ~ 保证 每个用户登录后被锁定在自己的目录里,看不到其他用户的目录。