安装pureftpd(转)超详细版

庄实
2023-12-01

原来linux下的ftp server一直用vsftp,今天接手一台安装pureftpd的服务器,由于原来没接触过,郁闷死我了。
开始看了几篇中文安装手册,都是说pureftpd和mysql结合的,我这台服务器没用mysql,用的pureftpd.pdb。在这台上添加ftp用户登录总是提示验证失败,无奈在一台测试机上从头开始安装pureftpd
下载 pure-ftpd-1.0.21.tar.bz2(www.pureftpd.org

#wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.bz2
#tar jxf pure-ftpd-1.0.21.tar.bz2
#cd pure-ftpd-1.0.21
#./configure \
--prefix=/usr/local/pureftpd \
--with-language=simplified-chinese \
--with-welcomemsg \
--with-quotas \
--with-puredb \
--with-diraliases \ 
--with-ratios \ 
--with-ftpwho \ 
--with-throttling
#make
#make install
#make clean
#mkdir /usr/local/pureftpd/etc
#groupadd ftpgroup
#useradd -g ftpgroup -d /dev/null -s /etc ftpuser
#cp /root/pure-ftpd-1.0.21/configuration-file/pure-ftpd.conf /usr/loca/pureftpd/etc/
#cp /root/pure-ftpd-1.0.21/configuration-file/pure-config.pl /usr/loca/pureftpd/sbin/

修改/usr/loca/pureftpd/etc/pure-ftpd.conf,找到
# PureDB                        /etc/pureftpd.pdb
改为
PureDB                        /usr/local/pureftpd/etc/pureftpd.pdb
修改/usr/loca/pureftpd/sbin/pure-config.pl的权限为755
添加一个ftp帐号test,指定目录为/data/ftp/
#/usr/local/pureftpd/bin/pure-pw useradd test -u ftpuser -d /data/ftp/
启动pureftpd
#/usr/loca/pureftpd/sbin/pure-config.pl /usr/loca/pureftpd/etc/pure-ftpd.conf
这时候如果登录ftp会提示
421 Unable to read the indexed puredb file (or old format detected) - Try pure-pw mkdb
执行
#/usr/local/pureftpd/bin/pure-pw mkdb
再登录,一切正常。执行这条命令是让pureftpd根据/usr/loca/pureftpd/etc/pureftpd.passwd(这个文件是在执行pure-pw useradd的时候自动生成的)生成/usr/local/pureftpd/etc/pureftpd.pdb
到这里服务器已经可以正常运行了
再用pure-pw useradd添加另一个ftp帐号登录,又提示“验证失败”,重启pureftpd也不行,郁闷了好一会后找到原因:
执行pure-pw的命令后只是更改了pureftpd.passwd文件,必须执行pure-pw mkdb重新生成pureftpd.pdb才生效。
我说在刚接手的服务器上添加帐号不行呢,就是因为没有执行pure-pw mkdb

管理pureftpd
添加帐号
pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
                -D/-d <home directory> [-c <gecos>]
                [-t <download bandwidth>] [-T <upload bandwidth>]
                [-n <max number of files>] [-N <max Mbytes>]
                [-q <upload ratio>] [-Q <download ratio>]
                [-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
                [-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
                [-y <max number of concurrent sessions>]
                [-z <hhmm>-<hhmm>] [-m]

例子:pure-pw useradd user1 -u ftpuser -d /data/ftp/
添加帐号user1,属于ftpuser组,主目录为/data/ftp/
其他参数看英文就ok了
删除帐号自然是pure-pw userdel user1

修改账号信息
pure-pw usermod <login> -f <passwd file> -u <uid> [-g <gid>]
                -D/-d <home directory> -[c <gecos>]
                [-t <download bandwidth>] [-T <upload bandwidth>]
                [-n <max number of files>] [-N <max Mbytes>]
                [-q <upload ratio>] [-Q <download ratio>]
                [-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
                [-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
                [-y <max number of concurrent sessions>]
                [-z <hhmm>-<hhmm>] [-m]
列子:pure-pw usermod user1 -n 1000 -N 10 -r 172.31.0.0/16
指定user1只能上传1000个文件,磁盘配额10M,只能从172.31.0.0/16登陆(注意书写格式不能是172.31.0.0/255.255.0.0)。

修改帐号密码
pure-pw passwd <login> [-f <passwd file>] [-m]
pure-pw passwd <login> [-f <passwd file>] [-m]
举例:pure-pw passwd user1
输入两遍密码,记得执行pure-pw mkdb,否则修改不生效。


下面是我看的安装pureftpd+mysql的文章之一,节选了一部分
#############################安装ftp服务器pure-ftpd############################# 
cd /usr/ports/ftp/pure-ftpd 
ee /usr/ports/ftp/pure-ftpd/Makefile 
添加

--with-everything \ 
--with-paranoidmsg \ 
--with-virtualchroot \ 
--with-tls \ 
--with-largefile \ 
--with-welcomemsg \ 
--with-uploadscrīpt \ 
--with-cookie \ 
--with-virtualhosts \ 
--with-virtualroot \ 
--with-diraliases \ 
--with-quotas \ 
--with-sysquotas \ 
--with-ratios \ 
--with-ftpwho \ 
--with-throttling \ 
--sysconfdir=${PREFIX}/etc

make WITH_MYSQL=1 \ 
WITH_LANG=simplified-chinese 
make install 
make clean 
make rmconfig

cd /usr/local/etc 
cp pureftpd-mysql.conf.sample pureftpd-mysql.conf 
cp pure-ftpd.conf.sample pure-ftpd.conf 
ee /usr/local/etc/pure-ftpd.conf

安装参数详解

--with-everything: 编译一个几乎所有特性都开启的“大”服务器。


--with-paranoidmsg: 当该参数被开启,不论何种原因登录失败都将显示同样的信息给用户。不开启该参数是,密码问题将显示“验证失败”,被禁止用户将显示“对不起,我不信任你”。


--with-virtualchroot:通常一个用户使用chrooted(使用-A 和 -a 参数)命令不会转出他的home目录。开启该功能之后将使其成为可能:符号连接总是一起作用,甚至他们指向的目录不在用户的home目录内。这对于共享路径是一个非常拥有的功能(例如,每一个home目录下都有一个符号连接到/var/incoming)。该功能默认不开启。


--with-tls \


--with-largefile: 支持在32位架构下下载大于2 gigabytes 的文件。通过FTP传输一个如此之大的文件是一个较为奇怪的主意。并且你的文件系统,你的系统内核、你的FTP客户端也需要支持才行。并且当该功能被开启后,下载将会比不开启变慢(或需要耗费更多的CPU)。简单的说,不要应为好玩而开启该功能,除非你真的计划下载大于gigabytes的文件。


--with-welcomemsg: (为兼容)其它FTP服务器pure-ftp可以阅读 'welcome.msg' 。这是一个安全的缺陷(匿名用户可以上载'welcome.msg'文件到随机显示)。Pure-ftpd 默认使用 '.banner'文件。


--with-uploadscrīpt: 自从0.98版开始, Pure-FTPd 开始关注上传。当一个上传成功完成之后,任何额外的程序或脚本可以被自动启动。该功能需要一个称为“pure-uploadscrīpt”的程序安装在Pure-FTPd包内。


--with-cookie: 在用户登录的时候显示随机或定制的信息。


--with-virtualhosts: 支持虚拟主机。这意味着每个IP地址可以有不同的匿名FPT区域。如果服务器只有一个IP地址,就不需要该功能。但是如果有多个IP地址,并且需要一个客户端连接到IP xxx 去获得/etc/pure-ftpd/xxx/而不是~ftp/,就可以开启该功能。


--with-virtualroot \ //虚拟root支持


--with-diraliases: 支持路径的别名。


--with-quotas: 开启虚拟限额,可以限制一个用户可以在他的帐号下存储的最大数字,也可以限制总的大小。

--with-sysquotas: 支持系统限额(非Pure-ftpd的虚拟限额)。只有在计划使用系统限额的时候启用。


--with-ratios: 支持上传/下载比。


--with-ftpwho: 支持'pure-ftpwho' 命令。开启这个功能需要额外的内存。当pure-ftp运行在standalone模式时比较好,在inetd模式下启用较慢。

--with-throttling: 支持带宽限制。


其它参数


--with-altlog: 除了系统输出,还支持一些特殊的文件格式,目前已实现了:CLF, Stats, W3C 和 xferlog 格式 
CLF (通用日志格式)是Apache, WebFS, Roxen以及其它最常用 web 服务器的基本格式;该日志文件仅仅记录文件传输,可以被web流量统计软件(Analog, Webalizer, etc.) 所分析。Stats格式是一种专门为日志文件分析软件设计的特殊输出格式。W3C格式是一种商业日志分析软件(所有支持IIS日志的分析器)的标准格式。Xferlog 是一种源于wu-ftpd的格式。


--with-brokenrealpath: 一些 Solaris 版本中realpath()运行不可靠。如果altlog和(或)pure-uploadscrīpt没有很好的运行,请用这个参数重新编译。


--with-certfile=<file>: 该file用来做SSL认证,默认为 /etc/ssl/private/pure-ftpd.pem .


--with-extauth: 支持额外的校验模块。大多数用户不需要此参数。.


所支持语言 
--with-language=english 
--with-language=german 
--with-language=romanian 
--with-language=french 
--with-language=polish 
--with-language=spanish 
--with-language=danish 
--with-language=italian 
--with-language=brazilian-portuguese 
--with-language=slovak 
--with-language=dutch 
--with-language=korean 
--with-language=swedish 
--with-language=norwegian 
--with-language=russian 
--with-language=traditional-chinese 
--with-language=simplified-chinese 
--with-language=hungarian 
--with-language=catalan 
--with-language=czech: change the language of server messages. 
默认为英语。


--with-ldap: 支持原始的LDAP路径。当该功能被开启,系统帐号将被忽略。你同时需要使用OpenLDAP。如果OpenLDAP被安装在一个特定的位置,你可以使用--with-ldap=<directory> 的参数。

--with-minimal: 为了有效运用现代FTP客户端的功能,Pure-FTPd采用基本的FTP协议加扩展(SITE IDLE,SITE CHMOD, MLSD, ...)的方式 。使用 --with-minimal 参数,这些扩展间不会被编译。同样的,也就不会有standalone server, 不会有lookup for user/group names, 不会有 humor也不会有 ASCII 的支持。但是执行文件将会比默认安装更小。该参数你至少需要GCC 3.3 以上来编译。如果你还想减少(执行)文件大小,可以采用--without-globbing 关联--with-minimal参数。如果你建立一个嵌入系统,可以这样使用;在其它场合,为了避免客户的抱怨(特别是使用windows客户端的客户),请忘记它吧


--with-mysql: 使用MySQL来提供用户数据库。当开启该参数,系统帐号被忽略。使用该功能MySQL 客户端的库文件将被安装。如果MySQL安装在特殊位置,可以使用--with-mysql=<directory> 语法。


--with-nonroot: 设置服务以非root特权用户启动。任何普通用户都可以运行服务。这对于在服务器上只有一个受限帐号的情况非常有用。但是一些特性将不能使用,而且密码只能通过LDAP,SQL或PureDB进行校验。当虚拟 chroot 被开启,用户将被限制在服务启动的目录。这是一种不安全的模式,一般用于普通(非root)用户建立临时性的服务器。在standalone模式下,2121端口将被侦听。如果想采用nonroot模式,需要编译并安装该软件(./configure --prefix=... && make install-strip) . /sbin, /bin and /man 目录需要被写入 prefix,同时还需要增加运行pure-ftpd用户在 /etc 目录的读写权限。


--with-pam: 使用紧密校验模式。Don't use this option if your login/passwd pairs are always refused (but the real fix would be to 
fix your PAM configuration). 需要创建一个 /etc/pam.d/pure-ftpd 文件来运用PAM校验。'pam' 路径中包含该文件的一个样本。


--with-peruserlimits: 开启每用户同时在线限制,在繁忙的服务器上避免该参数。


--with-pgsql: 使用 Postgres 提供用户数据库。当开启该参数,系统帐号将被忽略,Postgres客户端库将被安装。如果Postgres安装与特殊位置,可以使用--with-pgsql=<directory> 语法。


--with-probe-random-dev: Pure-FTPd 使用 /dev/arandom, /dev/urandom 或者/dev/random 设备来提供严格的随机数字。这些设备通常在编译时被探测。如果想编译一个二进制包在其它主机上运行,该参数将在运行时被探测。该参数在Linux和BSD系统上无效,但可以使用在Solaris 和 QNX上。


--with-puredb: 支持虚拟用户,一个本地的用户数据库,不用于系统帐号。

--with-boring: 显示 "professionnal-looking" 信息。


--with-privsep: 开启权限分离。


--withrendez-vous: 允许在MacOS X上支持Rendezvous。


--without-ascii: 不支持 7-bits 传输 (ASCII)。如果有客户使用windows客户端程序发送脚本和HTML文件,不要使用 该参数或让他们对你大叫。


--without-banner: 不使用初始标语,这是一种通过隐瞒获得的愚蠢的安全。


--without-capabilities: 如果性能库 (libcap) 被找到,Pure-FTPd 将使用其提供安全性。该参数不测试这个库是否存在。如果性能库没有正常工作,可以到ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/ 下载。


--without-globbing: 不包括全局代码。能够减少内存消耗但经常不能工作。大多数用户不需要使用--without-globbing。Globbing是一个不错的功能。


--without-humor: 如果你没有查看过源代码而使用这个参数,就只好祝你幸运了。


--without-inetd: 如果Pure-FTPd总是运行在standalone模式下,这个参数可以节约一些代码字节。不要同时使用 --without-inetd和


--without-standalone参数,可能会导致服务不能运行。这些参数在Pure-FTPd的二进制分发包上都没有使用,所以inetd和standalone都被支持。


--without-iplogging: 为了保守机密而不记录任何IP地址,除非是政治敏感的服务器。


--without-nonalnum: 非法文件名检查。只支持基本的字符。不要盲目的使用这个参数,或者接受用户的抱怨。


--without-unicode: 不接受非拉丁字符。如果服务器文件名不含特殊字符则推荐使用。 
--without-sendfile: 在Linux, Solaris, HPUX 和 FreeBSD 内核, Pure-FTPd采用特殊系统调用(sendfile)尝试减少CPU和内存的使用。在大多数文件系统中该方式运行良好,但该优化并不能在所有文件系统中正常工作。用户曾经报告过SMBFS(Samba)在FreeBSD以及TmpFS和NTFS在Linux(服务器报告错误为“broken pipe”或“Error during write to data connection”)上通过Pure-FTPd下载文件失败。如果计划在上述文件系统中运行服务,就不得不使用--without-sendfile 参数来定义一个工作区。同样来自PA-Risc Linux 的系统也需要这个参数。


--without-shadow: 忽略shadow密码,即使他们被自动探测到。这通常是一个坏主意,除非使用的是PAM, LDAP 或 SQL。Pure-FTPd 支持shadow密码有效期 (包括帐号和密码)。.


--without-standalone: FTP 服务器能够正常地以 standalone 模式运行(没有任何超级服务)。如果不需要该功能并且想要节省一些代码字节的话,就可以开启该参数。一个类似于g2s, xinetd或tcpserver 的超级服务将强制运行该服务,但是推荐使用standalone模式。


--without-usernames: 从不在在路径列表里输出用户和组名,而代之以UIDs和GIDs。这将提高安全和性能,但会有用户觉得不够友好。


--without-capabilities: 如果性能库 (libcap) 被找到,Pure-FTPd 将使用其提供安全性。该参数不测试这个库是否存在。如果性能库没有正常工作,可以到ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/ 下载。

--without-usernames: 从不在在路径列表里输出用户和组名,而代之以UIDs和GIDs。这将提高安全和性能,但会有用户觉得不够友好。


"--prefix=" 改变安装路径,默认为 "/usr/local/".

配置文件详解

pure-ftpd.conf


ChrootEveryone yes 
chroot每一个用户,等同于Proftpd 中的DefaultRoot~ , 可以限制用户在某个地方活动,增强服务器的安全性。使用户不能通过cd命令进入上一级目录。 
TrustedGID 50 
#以上两者要一起用


BrokenClientsCompatibility no


MaxClientsNumber 50 
#最大链接数


Daemonize yes 
#Fork in background 以守护进程方式在后台运行


MaxClientsPerIP 5 
#每个ip最多链接数,最好设小点。


VerboseLog no 
#是否要把所有client端的指令都log下来


DisplayDotFiles no 
#显示开头的文件


AnonymousOnly no 
#是否只让匿名登录

NoAnonymous no 
#不开放匿名登入


SyslogFacility ftp 
#应该是对日志做一下过滤 (auth, authpriv, daemon, ftp, security, user, local*)可以让日志只记录想要的信息


DontResolve yes 
#不反向解释客户端的ip


MaxIdleTime 5 
#最大闲置時間


#LDAPConfigFile /usr/local/pureftpd/etc/pureftpd-ldap.conf 
#使用LDAP认证,


MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf 
#使用MySQL认证


#PGSQLConfigFile /usr/local/pureftpd/etc/pureftpd-pgsql.conf 
#使用PGSQL认证


#PureDB /ftp/etc/pureftpd.pdb 
#使用者资料的DB存放地点 [由于我是用PureFTPD的內建DB.固有此选项]


#ExtAuth /var/run/ftpd.sock 
#pure-authd socket 路径 (详细请看 README.Authentication-Modules)


#PAMAuthentication yes 
#开启PAM认证


#UnixAuthentication yes 
#如果你想要有简单的Unix(/etc/passwd)的认证的話

FortunesFile /usr/local/pureftpd/etc/.welcome 
#显示的欢迎信息文件,你可以创建该文件,输入一些文字,然后你重启你的FTP服务,就会有意外的发现。


LimitRecursion 2000 8 
#ls最多列出3000个文件.最深8层


AnonymousCanCreateDirs no 
#匿名用户可以创建目录


MaxLoad 4 
#当system load超过4時.使用者将不能再下载


PassivePortRange 30000 50000 
#被动连接应答范围


ForcePassiveIP 192.168.0.1 
#


AnonymousRatio 1 10 
#Anonymous连接上传/下载比率


UserRatio 1 10 
#用户上传/下载比率(注:如果使用ldap,mysql,pgsql,pam不要启用该功能,否则你在ldap等中设置的Ratio无校)


AntiWarez no 
#上传的文件不能被下载(owner is ftp).等到local admin确认


Bind 127.0.0.1,8021 
#要绑定和ip/port,在你的系统中有两个FTP Server这样你其中一个FTP就要使用其它端口。 
#格式-> 127.0.0.1,21 如果只写port表All ip,port

AnonymousBandwidth 8 
#Anonymous 带宽,单位KB/s


UserBandwidth 8 
#用户带宽,单位KB/s


Umask 133:022 
#上传文件的Umask.(<umask for files>:<umask for dirs> )


MinUID 1000 
# UID至少多少才能登录


AllowUserFXP yes 
#支不支持FXP


AllowAnonymousFXP no 
#Anonymous支不支持FXP


ProhibitDotFilesWrite no 
ProhibitDotFilesRead no 
#(”.”)开头的文件能不能被读/写,UNIX Like下以点开头的文件是隐藏文件ls –a才能列出 
#Pureftpd Quota模式下做产生” .ftpquota”文件。


AutoRename no 
#上传文件若有相同文件名自动改名(file.1,file.2...)


AnonymousCantUpload no 
#匿名用户上传文件


TrustedIP 10.1.1.1 
#锁IP.


LogPID 
#Log文件添加PID 
AltLog stats:/ftp/etc/log/pureftpd.log 
#log存放地点,注日志有几种常用的格式 
#clf 类似apache格式,stats UNIX log格式,w3c 标准W3C格式,可能是HTML格式


NoChmod yes 
#不给Chmod指令的权限


KeepAllFiles no 
#使用者可续传.但不可刪除文件


CreateHomeDir yes 
#如果user的home不存在自动建立(我把这个设为YES)


Quota 1000:10 
#Quota <文件数>:<容量Megabytes >,FTP限制10M空间,可以上传1000个文件(注:如果使用ldap,mysql,pgsql,pam不要启用该功能,否则你在ldap等中设置的Quota无校)


PIDFile /ftp/etc/log/pure-ftpd.pid 
#记录pure-ftpd的PID文件


CallUploadscrīpt yes 
#呼叫Uploadscrīpt


MaxDiskUsage 99 
#当硬盘使用率到多少時将停止上传


NoRename yes 
#用户不能重命名文件名

CustomerProof yes 
PerUserLimits 3:20 
#<每个账号最多可登入几次:Anonymous最多可同時登入几次>


pureftpd-mysql.conf

MYSQLServer 127.0.0.1 
#MYSQL服务器的IP


MYSQLPort 3306 
#MYSQL 端口号


MYSQLSocket /var/lib/mysql/mysql.sock 
#使用UNIX.sock本地连接 
注:MYSQLServer 与 MYSQLSocket 选择一种即可


MYSQLUser ftp 
#MYSQLUser 数据用户名


MYSQLPassword 123456 
#MYSQL数据库用户的密码


MYSQLDatabase ftpusers 
#FTP数据数据库


MYSQLCrypt md5 
#密码加密方式"cleartext", "crypt", "md5" and "password"


# cleartext 明文,crypt,md5,password是Backend password(‘your-passwd’)函数(MYSQL数据库所使用的password()函数)


MYSQLGetPW SELECT Password FROM users WHERE User="\L" 
# 密码字段,我使用users表中的Password做为密码字段


MYSQLGetUID SELECT Uid FROM users WHERE User="\L" 
#UID用户ID字段


MYSQLDefaultUID 1000 
#默认的UID (注:如何开启该选项,MYSQLGetUID将失去作用)


MYSQLGetGID SELECT Gid FROM users WHERE User="\L" 
#GID组ID字段


MYSQLDefaultGID 1000 
#默认的GID (注:如何开启该选项,MYSQLGetGID将失去作用)


MYSQLGetDir SELECT Dir FROM users WHERE User="\L" 
#FTP用户目录如/home/web/www-9812-net


MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L" 
#磁盘限额,文件数限制。如1000,允许用户上传1千个文件


MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" 
#磁盘限额,FTP用户空间限制(单位为M),如:100M

MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" 
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" 
#上传/下载比率。MySQLGetRatioUL为上传比,MySQLGetRatioDL下载比。如:1:5


MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" 
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" 
#下传/下载带宽(单位KB/s)。MySQLGetBandwidthUL上传带宽,MySQLGetBandwidthDL下载带宽。如上传500KB/s,下载50KB/s


MySQLForceTildeExpansion 1 
MySQLTransactions On

 类似资料: