proftpd常用命令ftpshut proftpd配置详解

发布时间:2019-12-02编辑:脚本学堂
本文介绍下,proftpd软件的配置方法,以及ftpshut命令的用法,还有proftpd中虚拟主机的配置,proftpd常用选项的说明等。有需要的朋友参考下吧。

一,首先,介绍下proftpd中一个常用的重要命令ftpshut的用法。

编辑安装的proftpd,该命令位置为:
/usr/local/proftpd/sbin/ftpshut
这个命令可以在不停止proftpd进程的前提下,定时停止ftp连接,这里将会详细说它是怎么使用的。

ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]
 

-l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
-d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
time: 在多少时间后,服务器将关闭ftp服务,格式有两种
+number 经过number分钟后关闭
MMHH 在今天MM:HH服务器将关闭

注意,这里用这个命令是把ftp服务给停了,但实际的proftpd进程还没停止,所以一般调试ftp会使用到这个命令。

举例:
再经过30分钟后,FTP服务将关闭,在这之前的20分钟不可接受任何新的ftp连接,已经建立的在服务关闭前10分钟强制断线,并在客户端显示“FTP Server Will shutdown at time”
ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"

其实ftpshut就是产生/etc/shutmsg,只要删除这个文件ftp又可以重新提供服务了,或者直接:
ftpshut -R

二,下面介绍下proftpd的基本配置吧

proftpd的配置文件格式:
 

#全局设置
设置项目1 参数1
设置项目2 参数2

#某个目录的设置
<Directory "路径名">
...
</Directory>

#关于匿名用户的设置
<Anonymous "匿名登陆的目录">
...
<Limit 限制动作>
...
</Limit>
</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等权限,还是比较实用的
ALL:所有权限
LOGIN:是否允许登陆的权限

针对上面这个Limit所应用的对象,又包括以下范围
 

AllowUser 针对某个用户允许的Limit
DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对所有用户组允许的Limit
DenyAll 针对所有用户禁止的Limit

关于限制速率的参数为:
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者

通过实例学习下proftp的配置。

1,ftp服务器支持断点续传,且最大支持同时10人在线,每个ip只允许一个连接;
2,允许ftpusers用户组只能访问自己的目录,而不能访问上级或者其他目录;
3,用户登陆服务器时不显示ftp服务器版本信息,以增加安全性;
4,建立一个kaoyan的ftp帐户,属于ftpusers组,kaoyan用户只允许下载,没有可写的权限。下载速率限制在50Kbytes/s。
5,建立一个upload用户,也属于ftpusers组,同kaoyan用户的宿主目录一样,允许upload用户上传文件和创建目录的权限,但不允许下载,并且不允许删除目录和文件的权限,上传的速率控制在100Kbytes/s。

三,用户和组添加及目录的权限设置
 

复制代码 代码示例:
group add ftpusers
useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoyan

如果只想ftpusers组的用户访问,可以设置成770都行。
设置/usr/local/proftpd/etc/proftpd.conf,内容:
注意#表示注释,对设置没影响,可以不写
 

复制代码 代码示例:

ServerName "Frank's FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30 #最多有30个proftpd的PID
User nobody
Group nobody
TimeoutStalled 10
MaxClients 10 #最多允许10个用户在线
MaxClientsPerHost 1 "对不起,一个IP只允许一个连接"
AllowStoreRestart on
#允许断点续传(上传),断点续续(下载)是默认支持的,不用设置
DisplayLogin welcome.msg #欢迎词文件
ServerIdent off #屏蔽服务器版本信息
DefaultRoot ~ ftpusers #设置ftpusers组只能访问自己的目录
<Directory />
AllowOverwrite on
</Directory>
<Directory /home/kaoyan>
<Limit WRITE> #不允许写
DenyUser kaoyan
</Limit>
<Limit RMD RNFR DELE RETR> #不允许删除,改名,下载
DenyUser upload
</Limit>
TransferRate RETR 50 user kaoyan
TransferRate STOR 100 user upload
</Directory>

#还可以通过以下方式实现:
<Anonymous ~kaoyan>
</Anonymous>
<Anonymous ~upload>
</Anonymous>

IdentLookups off #连接快些 还有后面的 UseReversedNS
requireValidshell off #匿名的一般需要加上这个
MaxLoginAttempts 1 #匿名的话1就可以了,最大密码验证次数
WtmpLog NONE #不记log到wtmp
DenyFilter *.*/|.ftpaccess #DenyFilter做一些过滤,正则表达式
#DenyFilter ~!`**/?,$@ # 根据自己需要写吧,上面的好烂tongue.gif
#LsDefaultOptions "-l" #ls参数
#AllowForeignAddress on #要允许 FXP 写成 on
CommandBufferSize 128 #最大命令长度
DirFakeUser On FTP #不显示给用户真实的用户、组
DirFakeGroup On FTP
DeferWelcome on #显示欢迎信息
PathDenyFilter "(^.ftpaccess$)" #同DenyFilter 过滤用
User nobody #proftpd 以哪个用户、组的身份运行
Group nobody

TimesGMT off #时间

<Limit LOGIN DELE RMD XRMD SITE RNFR RNTO WRITE>
DenyAll
</Limit> #出于某些考虑,开始禁掉,后面需要再打开。READ也可加过来...
#也可以这里设置允许连接的网段 Login,或者后面,建议用防火墙
<Limit ALL>
IgnoreHidden on
</Limit>

<Directory /*>
HideNoAccess on
AllowOverwrite off #禁止重写覆盖,后面打开允许续传
</Directory> #AllowRetrieveRestart默认是on 也可以写进来
</Global>

ServerName "FTP server"
ServerType standalone #运行方式 还可以用 inetd xinetd
ServerIdent on "Welcome to FTP" #身份验证前显示给用户的,也可用文件,这里略
DefaultServer on
UseReverseDNS off #加快连接速度
Port 21 #FTP端口
Umask 022 #掩码 为了便于管理 用 002
PassivePorts 20000 30000 #被动模式端口段

SystemLog /var/proftpd/syslog #log 注意自己加上 logrotate 配置

MaxInstances 250 #最大
TimeoutLogin 30 #身份验证超时
TimeoutIdle 120 #发呆超时
TimeoutNoTransfer 300 #无数据传输超时
#TimeoutStalled 300

#log一些自定义格式,根据需要调整或者用默认
LogFormat myxfer "%h %u %t "%r" %s %b"
LogFormat default "%h %a %u %t "%r" %s %b $$ '%F'"
LogFormat auth "%h %a %t "%r" %s"
LogFormat write "%h %a %t "%r" %s %b"

#匿名的根目录 记得设置相应目录权限,ftp 用户应至少有 r x 权限
<Anonymous /home/ftp>
User ftp
Group ftpadmin
Umask 002
Useralias anonymous ftp

MaxClients 50 "客满(%m)" #人多时的提示信息,可以用一些变量
#RateReadBPS 500000 #限速用
MaxClientsPerHost 2 "连接数多" #一个IP的连接数
TransferLog NONE #log
ExtendedLog /var/proftpd/upload.log write myxfer #log
ExtendedLog /var/proftpd/download.log read myxfer #log

DisplayLogin etc/welcome #欢迎文件,可以用一些变量
DisplayFirstChdir .message #改变目录时显示的消息

AuthAliasOnly on #只允许 UserAlias 过的 这里只允许 anonymous 不允许ftp
<Limit LOGIN>
AllowAll
</Limit> #打开允许连接,可以这是允许访问的网段,建议防火墙

<Directory incoming>
AllowStoreRestart on #允许上传目录,可以续传,不能覆盖
<Limit WRITE>
AllowAll
</Limit> #如果不想让下载,只让上载 可以加上
#<Limit READ>DenyAll</Limit>
</Directory> #到这差不多就完了,每个目录可以写 .ftpaccess 设置权限
#后面这两个可以参考根据需要

#在FTP根目录又不让看的,上面把欢迎信息放里面了,当然可以放别的
<Directory etc>
<Limit READ WRITE DIRS>
DenyAll
</Limit>
</Directory>
<Directory Tsinghua> #限制特定IP段能看的,也可在目录的.ftpaccess里面设置
<Limit ALL>
Order deny,allow
Allow from 166.111.
</Limit>
</Directory>
</Anonymous> #完成匿名设置

#加帐号密码可以用多种方式,密码文件,数据库
#如果用系统的帐号,可以用 DefaultRoot 限制活动目录,比如把TA堵在家里 ~
#还有别的很多 根据需要自己看文档吧 比如打开MultilineRFC2228等
#
#记得设置相应目录权限,r x 一个都不能少
#记得设置文件权限(chmod/chown) 配置 .ftpaccess
#应该了解 ls rm chmod chown find xargs crontab 等命令以便进行简单管理
#kill/killall -HUP 或者用脚本 ftpshut ftpwho
#rm -f /etc/shutmsg
#相应的辅助工具很多,也可以自写脚本实现。

ProFTPD 安装在 /usr/local 下,"proftpd" 可以在/usr/local/sbin/
目录下找到,配置文件 proftpd.conf 位于:/usr/local/etc/

编辑/usr/local/etc/proftpd.conf,找到“Group xxxxxx”,修改为“Group nobody”。

要锁定用户在自己的本身的目录下,请在proftpd.conf文件里加上一句:
DefaultRoot ~

四,PROFTPD服务器相关命令
1、ftpshut:关闭FTP服务,并在/etc下生成文件shutmsg。要重新开放FTP服务,把/etc/shutmsg删除。
2、ftpcout:FTP服务器在线人数信息显示。
3、ftpwho:FTP服务器在线人员名单。

几个文件的功能及路径:
/usr/local/sbin/proftpd 执行程序
/usr/local/etc/proftpd.conf 设置文件
/usr/local/var/proftpd.pid proftpd做为一个服务的ID号

设定proftpd.conf文件,启动服务:
cd /etc/rc.d/rc3.d
ln -s /usr/local/sbin/proftpd S99proftpd
或修改/etc/rc.d/rc.local
添加:
/usr/local/sbin/proftpd start

五,在proftpd中设置虚拟主机,可以通过指令:VirtualHost来实现。
例子:
 

复制代码 代码示例:
<VirtualHost 192.168.2.35>
ServerName "virtual FTP server"
</VirtualHost>

如果只是希望通过匿名访问某个虚拟主机,则使用以下指令:
 

复制代码 代码示例:

<VirtualHost 192.168.2.35>
Serv erName "virtual FTP server"
<Limit LOGIN>
DenyAll
</Limit>

<Anonymous /usr/local/private>
User private
Group private
<Limit LOGIN>
AllowAll
</Limit>
</Anonymous>
</VirtualHost>

这样仅允许192.168.2.35主机可以匿名登录。