最近公司有个客户,对VSFTP的模块集成有所不满。要求更换为PROFTP。因此对该服务器做了简单的了解和部署搭建。坑太多,简单记录下:
部署:
获取proftp源码包:ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5b.tar.gz
获取模块包(客户需要使用MD5模块):http://www.castaglia.org/proftpd/modules/proftpd-mod-md5-0.3.5.tar.gz
【编译安装】:
1、解压缩包,并将第三方库文件导入,用于加载。
#tar zxvf proftpd-mod-md5-0.3.5.tar.gz proftpd-1.3.5b.tar.gz
#cp mod_md5/mod_md5.c proftpd-1.3.5b/modules/
2、配置。<切记:安装成功后,使用proftpd -vv的命令,查看你所安装的模块是否有加载的模块,如果没有的话,全部卸载,删除解压包,重新来一遍>。
#./configure --with-modules=mod_md5:mod_tls
3、编译及安装。
#make && makeinstall
4、为了方便使用,将使用/etc/init.d/执行,如下:
#cp proftpd-1.3.5b/contrib/dist/rpm/proftpd.init.d /etc/init.d/proftpd
并检查如下:
1、/etc/sysconfig/proftpd文件是否存在,如果不存在,手动创建,并写入内容:
#echo'PROFTPD_OPTIONS="-DANONYMOUS_FTP"' > /etc/sysconfig/proftpd
2、/etc/init.d/proftpd配置文件第46行与第53行,皆修改为执行文件所在位置(/usr/local/sbin/proftpd)。
5、更改默认配置文件:
修改:Group nobody
添加:DefaultAddress X.X.X.X
至此,编译安装结束。
【基础信息】
所需文件位置:
默认源代码安装的配置文件为:/usr/local/etc/proftpd.conf
默认的可执行程序为:/usr/local/sbin/proftpd
所需相关命令:
重启:/etc/init.d/proftpd restart
debug:/usr/local/sbin/proftpd -d9n
所需日志:<需配置文件自定义>
SystemLog:
1.1.6pl1之后的版本,默认加载的mod_log.c模块实现的,记录的是有关FTP服务器错误及重启的日志。
LogFormat设置日志格式,具体的每个字段解释如下:
“%a客户ID,%A匿名用户名,%b发送请求的字节数,%d目录名(相对路径),%D目录名(绝对路径),%F上传或下载的文件名(相对路径),%f上传或下载的文件名(绝对路径),%h客户的域名,%L本服务器IP,%m客户发送的命令,%p本服务器端口,%P访问进程ID,%r客户发送的整条命令,%t本地时间,%T传送就所用的时间(秒),%u客户登录的用户名。”
TransferLog:
/var/log/xferlog这个日志是用户上传,下载,删除动作的日志,也是查询客户投诉问题的日志。
示例“Wed Jun 08 02:41:10 2016 0 61.48.32.202 9801 /home/jing/jingtest/2.txt a _ d r jing ftp 0 * c”
具体字段解释如下:
“{Wed Jun 08 02:41:10 2016 时间},{0 传输持续时间},{61.48.32.202 远程FTP客户端地址},{9801 文件大小},{/home/jing/jingtest/2.txt 文件名},{a 传输类型,b是二进制文件,a是ascii传输},{_ 特殊行为标记,C被压缩的文件,U未被压缩的文件,Ttar文件,_没有特殊行为},{d 方向,i上传,o下载,d删除},{r 用户类型,r系统用户,a匿名用户},{jing 用户名},{ftp 被调用的FTP服务器软件名字},{0 认证方式,0表示没有},{* 认证用户ID,*表示没有},{c 完成状态,c表示完成,i表示没有完成}。”
【配置信息】:
配置文件结构:
#全局设置
设置项目1 参数1
设置项目2 参数2
#某个目录的设置
...
...
#关于匿名登陆的设置
...
...
...
...
【具体配置】
#【基本配置】
#配置服务器名
ServerName "ProFTPD Default Installation"
#设置为默认服务器
DefaultServer on
#设置默认的服务器监听地址
DefaultAddress XXX.XXX.XXX.XXX
#设置服务器接收请求的端口
Port 21
#设置关闭IPv6支持
UseIPv6 off
#设置用户上传文件的权限掩码,777-022
Umask 022
#设置服务器进程运行使用的用户名
User nobody
#设置服务器进程运行使用的组
Group nobody
#设置用户被chroot锁定到各自的Home目录
DefaultRoot ~
#设置屏蔽服务器版本信息
ServerIdent off
#设置允许写入覆盖
AllowOverwrite on
#设置下载时,允许断点续传。
AllowRetrieveRestart on
#设置上传时,允许断点续传。
AllowStoreRestart on
#设置最大线程数
MaxInstances 30
#设置最大尝试连接次数
MaxLoginAttempts 3
#设置无数据传输超时时间
TimeoutNoTransfer 300
#设置禁止DNS反查
UseReverseDNS off
IdentLookups off
#设置日志格式
#LogFormat default "%h %l %u %t \"%r\" %s %b"
#AllowLogSymlinks on
LogFormat default "%a %A %h %l %u %t \"%r\" %s %b %c %d %D %f %F %L %m %T"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
#设置日志
#WtmpLog off
#ServerLog /var/log/proftp-login.log
TransferLog /var/log/xferlog
SystemLog /var/log/proftp.log
ExtendedLog /var/log/proftpd/access.log ALL default
#设置服务器运行模式,独立服务standalone,被监管inetd。这里注释是因为开启后日志有报错。
#ServerType standalone
#设置被动模式使用的端口范围。这里暂时不需要,注释
#PassivePorts 60000 65535
#设置允许root用户登录,默认禁止。
#RootLogin on
#虚拟用户没有shell,需要打开这个设定
#RquireValidShell off
#设置用户传输速率
#TransferRate STOR|RETR (Kbytes/s) USER使用者
#设置每个账号最多允许来源IP
#MaxHostsPerUser 1
#设置每个账户每个客户端最多可同时登陆1次(避免多线程)
#MaxClientsPerUser 1
#设置同一个客户端最多一个账号可以登陆
#MaxClientsPerHost 1
#设置单用户线程数
#MaxClientsPerHost 2
#设置最大用户数
#MaxClients 20
#设置身份认证超时时间
#TimeoutLogin 30
#设置连接的超时时间
#TimeoutStalled 30s
#设置客户端IDLE时间,默认600s
#TimeoutIdle 600
#设置欢迎信息,如果关闭是off。
#DisplayLogin welcome.msg
#设置切换文件夹时,显示的欢迎信息。
#DisplayChdir .message
#设置虚拟用户认证信息,用mod_auth_file.c验证登录用户名密码
#AuthOrder mod_auth_file.c #只允许虚拟用户登录
#AuthUserFile /xxx/ftp.users #存放用户名和密码的文件
#AuthGroupFile /xxx/ftp.group
#【mod_md5配置】
#我使用这个功能,主要是为了实现,lftp的quote SITE MD5 $FILENAME命令。
#首先用-vv的方式检查是否加载了这个模块,如有加载成功,配置文件如下所示:
AllowUser jing
DenyAll
MD5Engine on
#【openssl认证配置】
#这个功能是为了实现,自定义证书认证。
#同样用-vv方式检查是否加载了模块,如果加载成功,会产生/home/jingjing.wang/proftpd-1.3.5b/modules/mod_tls.c这个软连接。
#该功能需要本机部署openssl,具体部署方法,见下方【部署openssl】。
TLSEngine on
TLSLog /var/log/proftpd/proftp-tls.log
TLSProtocol TLSv1
TLSRequired on
TLSRSACertificateFile /usr/local/etc/proftpd.crt
TLSRSACertificateKeyFile /usr/local/etc/proftpd.key
TLSVerifyClient off
TLSOptions NoSessionReuseRequired
AllowUser jing
DenyAll
#【配置完成】
【部署openssl】
1、获取软件包
#wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
2、解压
#tar -xzvf openssl-1.0.2.tar.gz
3、编译安装
#cd openssl-1.0.2
#./config
#make && make install
4、生成秘钥文件
#cd /usr/local/etc/
#/usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout proftpd.key -out proftpd.crt
【异常】:
1、530 Login incorrect.Login failed.Remote system type is UNIX.Using binary mode to transfer files.
这个错误有很多问题,常见的:
1、用户设置为/sbin/nologin。<先设置允许登录,sed'/USERNAME/s/nologin/bash/g' /etc/passwd,(记得加-i)再一步步调试。>
2、家目录权限不是777。<先设置为777,chmod 777 ~再一步步调试。>
3、Limit控制权限。<先设置为All,最高权限,再一步步调试。>
4、auth验证问题。<先注释掉所有的auth,再一步步调试。也可以参照http://www.qianweikang.com/cheng-gong-jie-jue-proftpd-deng-lu-ti-shi-530-login-incorrect.htm>
2、421 Service not available, remote server has closed connection。Login failed.No control connection for command: Success
这个错误,我是误打误撞解决的,部分用户出现421,调用DEBUG调试,看到配置文件中调用MD5模块的配置有报错(
by20160608,又出现一次,我把用户名修改成/sbin/nologin后,再次出现 421,经过试验,发现还是这个模块,这个模块中的AllowUser和MD5Path需要把允许的用户名写上才可以。
3、日志报错:error: /var/log/proftpd is a world-writable directory、unable to open SystemLog '/var/log/proftpd/proftp.log': /var/log/proftpd/proftp.log is a world-writable directory
这个错误是由于日志文件的权限问题,解决办法:
chmod 755 /var/log/proftpd
chmod 640 /var/log/proftpd/*
【欢迎词设置】
关于欢迎文件的设置包含如下参数:
%T 目前的时间
%F 所在硬盘剩下的容量
%C 目前所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 目前的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文件数量
%o 本次下载的文件数量
%t 本次上传+下载的文件数量
知道这些参数,可以写出欢迎语文件,例如:
欢迎您%U, 这是你的测试FTP服务器;
目前时间是:%T;
本服务器最多允许%M个用户连接数;
目前服务器上已有%N个用户连接数;
目前你所在的目录是%C;
目录所在的硬盘还剩下%F字节。