ProFTPD

简介

ProFTPD是一个安全、配置简单的FTP服务器软件,该软件采用与Apache相似的配置格式,比较容易配置与管理。在该项目开发之前,

最流行的FTP软件是wu-ftp,wu-ftp具有很高的性能,但缺乏Win32FTP服务器的一些特色功能,而且wu-ftp的安全问题一直存在。

ProFTPD借鉴了wu-ftp的优点,并且增加了很多wu-ftp所不具备的功能

安装

wget  ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4c.tar.gz

tar -zxvf proftpd-1.3.4c.tar.gz -C /usr/src

cd /usr/src/proftpd-1.3.4c/

./configure --prefix=/usr/local/proftpd --sysconfdir=/etc/ --enable-nls --enable-openssl --enable-shadow

make && make install

安装完成后,ProFTPD主程序目录位于/usr/local/proftpd目录下,服务器主配置文件为/etc/proftpd.conf。下面通过修改PATH变量增加

proftpd命令的搜索路径,并为proftpd创建启动账户

PATH=$PATH:/usr/local/proftpd/bin

useradd -M -s /sbin/nologin proftp

配置文件解析

ProFTPD主配置文件分三部分:全局设置、目录设置和匿名访问设置。全局设置为全局生效的参数,参数与值直接使用空格分离。目录设置

可以指定共享路径以及相关权限,目录设置使用<Directory "路径">开头,以</Directory>结尾,使用Limit设置路径权限。最后如果需要

开启匿名账户访问,则使用<anonymous "路径"></anonymous>设置匿名访问权限及访问策略

ProFTPD权限设置

ProFTPD可以通过在目录属性中添加<Limit>的方式设置访问权限,访问权限设置可以根据自己的实际需求有选择的添加,下表列出了权限

指令以及对应的功能说明

虚拟用户应用案例

ABC网站设计公司有商务部、页面设计部、开发部、运维部四个部门,各部门用户访问FTP后可以看到所有的目录,但只可以访问本部门的目录,且需要开启

FTP日志功能,FTP认证采用基于文件认证的方式,共享目录为/var/ftp

1、创建启动账户及共享目录

useradd -M -s /sbin/nologin proftp

mkdir -p /var/proftp/{develop,ops,sales,design}

chmod 777 /var/proftpd/{deelop,ops,sales,design}

2、修改配置文件

部署服务最主要的步骤就是修改配置文件,下面的输出是proftpd主配置文件/etc/proftpd.conf被修改后的内容,部分参数在初始化配置文件中不存在,需要手动输入

3、创建虚拟账户

修改完成配置文件,接下来就需要创建访问FTP所需要的账户和密码,proftpd提供了一个ftppasswd命令,使用该命令就可以创建我们

需要的账户信息。

该命令的描述和用法如下

描述:创建用户文件、组文件,默认创建的用户文件为 ftp.passwd

选项:--passwd        创建密码文件,即 AuthUserFile指定的文件

   --group         创建组文件

   --name         指定创建的用户名

   --uid           指定用户虚拟UID

   --gid           指定虚拟GID

   --home         指定用户家目录

   --shell          指定用户shell

   --file          指定创建的文件名,默认为ftpd.passwd

cd /usr/local/proftpd

ftppasswd --passwd --name=tomcat --uid=1001 --gid=1001 --home=/home/nohome --shell=/bin/false

ftppasswd --passwd --name=jacob --uid=1002 --gid=1002 --home=/home/nohome --shell=/bin/false

ftppasswd --passwd --name=jack --uid=1003 --gid=1003 --home=/home/nohome --shell=/bin/false

ftppasswd --passwd --name=sales1 --uid=1004 --gid=1004 --home=/home/nohome --shell=/bin/false

ftppasswd --passwd --name=design1 --uid=1005 --gid=1005 --home=/home/nohome --shell=/bin/false

4、启动proftpd服务

/usr/local/proftpd/sbin/proftpd

常见问题分析

1、如何对匿名账户隐藏一个目录

使用HideGroup或HideUser指令可以隐藏目录。

<Anonymous ~ftp>

...

<Directory test>

  HideUser user1

</Directory>

2、如何限制带宽

在新的ProFTPD1.28版本后,软件加入了TransferRate指令,该指令支持对每个连接限制带宽,限制对上传与下载都有效

3、如何限制上传和下载文件的最大容量

proftpd1.2.7rc1版本后提供了 MaxRetrieveFileSize和 MaxStoreFileSize,用来控制上传和下载文件的最大容量

4、如何隐藏proftpd软件的版本信息,防止针对版本漏洞的攻击

在主配置文件中添加ServerIdent off指令,即可对用户隐藏软件的版本信息

5、如何确保proftpd可以开机启动

源码安装的proftpd软件并不提供开机启动脚本,需要我们自己编写。将proftpd的启动脚本存放在/etc/init.d目录下,使用

chkconfig --add proftpd将服务加入开机启动项,最后通过命令chkconfig proftpd on将该服务设置为2345级别开机启动

 1 #!/bin/bash
 2 
 3 #Startup script for proftpd
 4 #chkconfig:- 89 77
 5 #Description:Proftpd is a secure and configurable FTP Server.
 6 #Program:/usr/local/proftpd/sbin/proftpd
 7 #Configure file:/etc/proftpd.conf
 8 
 9 #Synopsis:
10 #    proftpd --help {start|stop|restart|status}
11 
12 #Define variable
13 Proftpd=/usr/local/proftpd/sbin/proftpd
14 Pidfile=/usr/local/proftpd/var/proftpd.pid
15 Program=$(basename $0)
16 Hint_color="echo -en \\033[1;32m"
17 Orig_color="echo -e \\033[0m"
18 Tab="\t\t\t\t\t\t\t\t"
19 #Functions
20 
21 useage(){
22     echo "Usage:$Program [--help] {start|stop|restart|status}"
23 }
24 
25 start(){
26     if [ -e $Pidfile ];then
27         echo "Proftpd alread running..."
28     else
29         echo -en "Starting Proftpd:${Tab}[ "
30         /usr/local/proftpd/sbin/proftpd
31         ${Hint_color}Ok;${Orig_color}" ]"
32     fi
33 }
34 
35 stop(){
36     if [ -e $Pidfile ];then
37         echo -en "Stopping Proftpd:${Tab}[ "
38         kill -TERM $(cat ${Pidfile})
39         ${Hint_color}OK;${Orig_color}" ]"
40     else
41         echo "Proftpd already stopped."
42     fi
43 }
44 
45 status(){
46     if [ -e $Pidfile ];then
47         echo "Proftpd ($(cat $Pidfile)) is running..."
48     else
49         echo "Proftpd is stopped."
50     fi
51 }
52 
53 if [ $# -gt 0 ];then
54     case $1 in
55         start)
56             start
57             ;;
58         stop)
59             stop
60             ;;
61         restart)
62             stop
63             sleep 0.2
64             start
65             ;;
66         status)
67             status
68             ;;
69         --help|*)
70             useage
71     esac
72 else
73     useage
74 fi
proftpd

 

posted @ 2017-06-05 23:55  王学勤  阅读(1009)  评论(0)    收藏  举报