delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

27 Dec 2005

pure-ftpd配置作弊条

pure-ftpd是一款非常好的FTP服务软件。FreeBSD本身提供了两个很好的FTP服务器,一个是传统的BSD ftpd(8),另一个是来自NetBSDlukemftpd(8),尽管性能和安全性都不错(做过全面代码审计),但配置虚拟用户会比较麻烦。

而pure-ftpd是一款第三方的FTP服务器端软件,它提供了与LDAP、MySQL,以及系统内建帐号的整合能力,另外也提供了自己的一种验证支持方式——puredb。

要安装pure-ftpd非常简单。首先是更新你本地的ports tree:

portsnap fetch && portsnap update

然后用portinstall (sysutils/portupgrade)安装:
portinstall pure-ftpd

然后在 /etc/rc.conf.local 中加入:
pureftpd_enable=“YES”

随后,编辑 /usr/local/etc/pure-ftpd.conf(从pure-ftpd.conf.sample复制过来)。并作少量修改:

MaxClientsNumber:总并发连接数。
MaxClientsPerIP:每IP并发连接数。
MaxIdleTime:最长静默时间。
PureDB:你的用户db的位置。(建议设置为/usr/local/etc/pureftpd.pdb)
AllowUserFXP:是否允许验证过的用户作FXP。信任这些用户的话就允许。
ProhibitDotFilesWrite/ProhibitDotFilesRead:这些名字为点开头的文件通常会包含敏感信息,你可能不希望允许通过FTP读写它们(特别是用户目录与其实际用户目录重合的时候)。
AnonymousCantUpload:是否不允许匿名用户上传。不做warez的话通常希望禁止。
NoChmod:不允许chmod。这通常是安全考虑。
NoTruncate:上传文件时,不立即覆盖。如果你用FTP来维护网站,打开这个选项会改善维护体验(我不通过FTP维护网站)。

其他一些常用选项:
AntiWarez:不允许匿名上传的文件被匿名下载。(除非管理员做chown)
Umask:用户掩码。我比较喜欢177:077或者137:037,不过默认的133:022对于多数需求来说也够用。
NoAnonymous:不许匿名登录。你不一定会用到,但如果需要还是打开的好。
AnonymousOnly:只允许匿名登录。同样的,需要的话就打开。
ChrootEveryone:嗯,开的好。

========================================
好了,配置完基本的选项,如何添加用户呢?

首先,如何配置匿名用户?

插句题外话:如果你还没有做的话,现在立刻到 /usr/local/etc/ 里面去 touch 一个权限为 600 的 pureftpd.passwd (owner是谁?显然是root,除非不打算开特权端口,即21)。

书归正传。

匿名用户说白了就是一个特殊的FTP用户,其密码FTP服务不关心,但其名字必须是ftp。这个用户的home目录将直接show给匿名用户。

建立匿名用户的命令行类似下面这样:

pure-pw useradd ftp -u 60021 -g 60021 -d /data/anonftp -m

其中,-u 60021表示用60021作为用户的uid,-g表示组id。

注意,最后的-m表示立即更新你的puredb,使其生效。

接下来,建立对应的系统用户,其home目录是 /data/anonoftp,shell……不用说,肯定是nologin。(如果你用adduser建立用户,要注意它会在用户的home目录下建立一系列文件,一般来说可以删除这些文件)

一般来说,你会希望在别人登录ftp时显示点什么,这个可以在ftp用户的~/.banner中设置。

下面说说非匿名用户。方法也很简单:
pure-pw useradd 用户名 -u [UID] -g [GID] -d [home目录] -m

注意,-d表示用户将被chroot到这里。

最后是启动: /usr/local/etc/rc.d/pure-ftpd.sh restart。

好了,作弊条就到这里。需要TLS以及quota限制的同学,请自己查阅文档。