虽然vsftpd是款相当优秀的服务器软件,但是本人更喜欢proftpd。proftpd是一款开放源码的ftp服务器软件,是原来世界广泛使用的wu-ftpd的改进版本,修正了wu-ftpd的许多缺陷,其中最重要的变化且是最突出的是使用了类似于Apache的设置方式,使proftpd更容易配置和管理。此文系本人自己整理,如要转载,请注明出处,谢谢!
本人安装的版本是proftpd-1.3.1.tar.gz,安装于/usr/local/proftpd目录下,以下是proftpd几个重要的文件:(1)/usr/local/proftpd/etc/proftpd.conf:proftpd的最主要配置文件。
(2)/usr/local/proftpd/bin/ftpcount:用于查看目前登录的人数。
(3)/usr/local/proftpd/bin/ftptop:类似于系统命令top的显示方式,显示登录帐户信息。
(4)/usr/local/proftpd/bin/ftpwho:显示登录帐户信息。
(5)/usr/local/proftpd/sbin/proftpd:proftpd的主要执行文件
(6)/usr/local/proftpd/sbin/ftpshut:关闭proftpd的执行文件,命令格式为:ftpshut
[-R] [-l min] [-d min] time [warn-message]
当使用了ftpshut命令后,生成文件/etc/shutmsg,选项-R用于删除该文件使proftpd重启;
[-l min]:在ftp服务器关闭前几分钟内,尝试建立的连接不被接受;
[-d min]:在ftp服务器关闭前几分钟内,建立的连接被终止;
time:为必选参数,可以是用"now"立刻关闭proftpd服务器;
[warn-messgae]:关闭服务器前的警告信息。
proftpd默认是以standalone启动,但建议改为inetd启动方式,以防止分布式拒绝服务攻击,使用inetd方式必须在/etc/xinetd.d目录下建立文件proftpd,内容如下:
service ftp
{ flags =
REUSE
socket_type =
stream
wait =
no
user =
root
server =
/usr/local/proftpd/sbin/proftpd
server_args
= -c /usr/local/proftpd/etc/proftpd.conf
log_on_success += DURATION USERID
log_on_failure += USERID
disable =
no
有的资料表明还能以xinetd方式来启动,但我没有测试成功,要是哪位朋友知道的话,可分享一下。
-----------------------------------------------------------------------------------------
以下为proftpd.conf配置文件内容:
# This is a basic ProFTPD configuration
file
#========================host
setting==================================
ServerName
"FTP Server" //服务器名称
ServerType
inetd //服务器运行方式,有standalone,inetd,xinetd
ServerIdent
off //屏蔽服务器版本信息,提高安全性
DefaultServer
on //启用虚拟FTP
Port
21 //FTP监听端口
PassivePorts
65400 65500 //被动传输的端口段
AllowRetrieveRestart
on //下载时允许断点续传
AllowStoreRestart
on //上传时允许断点续传
TimeoutLogin
60 //身份验证超时时间
TimeoutIdle
300 //无动作指令超时时间
TimeoutNoTransfer
300 //无数据传输超时时间
TimeoutStalled
300 //指定一个连接的超时时间
Rootlogin
off //不允许root登录
RequireValidShell
off //关闭要求对合法shell的要求,主要用于匿名登录
MaxClients
100 //最大客户端数
MaxClientsPerHost 2 "Sorry, per IP address only have two
connection!" //每个客户端只允许两个联接,超出则显示后面定义信息
Umask 022
//权限掩码
MaxInstances
30 //proftpd线程最大数
User
nobody //以nobody身份来运行服务器
Group nobody
IdentLookups
off //和UseReverseDNS作用一样,加快联接速度
UseReverseDNS
off //使用DNS逆向解析
MaxLoginAttempts
1 //最大登录尝试次数
DeferWelcome
on //显示欢迎信息
TimesGMT
off //关闭格林威治时间,使用本地时间
WtmpLog
off //不把日志写到Wtmp
DirFakeUser
on FTP //用FTP屏蔽文件和目录的真实属主
DirFakeGroup
on FTP
MaxClientsPerUser
1 //同一个客户端只能最多1个帐号可以登陆
MaxHostsPerUser
1 //每个帐户最多允许来源ip为1个
AllowForeignAddress
off //关闭FXP,FXP为文件交换协议,用于FTP服务器之间进行文件的直接交换
CommandBufferSize
128 //最大命令长度,防止缓冲区溢出的攻击
DefaultRoot
~ driftleaf //把群组driftleaf限制在主目录内
LogFormat auth "%h %a %t \"%r\" %s" //日志的格式
LogFormat xfer "%h %u %t \"%r\" %s %b"
LogFormat write "%h %a %t \"%r\" %s %b"
ExtendedLog /var/log/proftpd/auth.log auth auth
//登录日志
ExtendedLog /var/log/proftpd/download.log read
xfer //下载日志
ExtendedLog /var/log/proftpd/upload.log write
write //写操作日志,包括上传,删除,创建目录等。
<Limit SITE_CHMOD>
DenyAll
</Limit>
<Directory /tmp>
//定义目录/tmp可覆盖
AllowOverWrite on
</Directory>
<Directory /var/ftp/*>
<Limit WRITE RNFR DELE STOR DIRS READ
CMD>
//对群组ftpadmin开放目录/var/ftp的写、更改目录名、删除文件、上传、列目录、读、改变目录的权限
AllowGroup ftpadmin</Limit>
</Directory>
#===========================anonymous
setting==================================
# A basic anonymous configuration, no upload
directories. If you do not
# want anonymous users, simply delete this entire
<Anonymous> section.
<Anonymous
/var/ftp>
//匿名登录后默认的目录,默认为/var/ftp,可根据自己情况更改
User ftp
//匿名登录后的PID
Group ftp
UserAlias anonymous
ftp //匿名别名设置为ftp,即可以用anonymous或ftp作为匿名帐户登录
AnonRequirePassword
off //不要求密码验证
MaxClients 100
//匿名登录的最大客户数
TransferRate
RETR 100 user
anonymous,ftp //匿名的最大下载速率
DisplayLogin welcome.msg
//匿名登录主目录显示的欢迎信息
DisplayChdir .message
//切换到各子目录显示的信息
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
//拒绝一切写操作
DenyAll
</Limit>
</Anonymous>
---------------------------------------------------------------------------------------------
proftpd管理:
(1)建立群组如ftpadmin
(2)改变/var/ftp的群属主,并赋予群组ftpadmin对/var/ftp/*的写权限
[root@angel]#chown -R root:ftpadmin /var/ftp/*
[root@angel]#chmod -R 775 /var/ftp/*
(3)建立管理帐号
[root@angel]#useradd -d /var/ftp -g ftpadmin -s /sbin/nologin -p ****** ftpadmin
(4)在proftpd.conf里对帐户ftpadmin的权限进行更详细的设置,如是否能离开主目录/var/ftp等
-------------------------------------------------------------------------------------------
proftpd目录权限参数:
MKD:建立目录的权限
RMD:删除目录的权限
CMD:改变目录的权限
RNFR:更改目录名的权限
DELE:删除文件的权限
STOR:从客户端上传到服务器的权限
RETR:从服务器下载到客户端的权限
READ:可读权限,但不包括列目录的权限
DIRS:列目录的权限,即能用ls命令
WRITE:写文件或目录的权限,相当于MKD和RMD
LOGIN:登陆目录的权限
针对上述代码中权限所应用的对象包括以下:
AllowUser:针对某个用户允许的Limit
DenyUser:针对某个用户禁止的Limit
AllowGroup: 针对某个用户组允许的Limit
DenyGroup:针对某个用户组禁止的Limit
AllowAll:针对所有用户允许的Limit
DenyAll:针对所有用户禁止的Limit
proftpd支持的参数:
%T:当前时间
%F:所在硬盘剩下的容量
%C:当前所在的目录
%R:Client客户端的主机名称
%L:Server服务端的主机名称
%U:使用者帐号名称
%M:最大允许联机人数
%N:目前的联机人数
%E:FTP主机管理员的Email
%i:本次上传的文件数
%o:本次下载的文件数
%t:本次上传+下载的文件数