出处:http://freeport9.blog.163.com/blog/static/260505692009810225280/
昨天花了一天时间把实验室的FTP服务器搭起来了,算是为实验室做的第一项工作吧。这里简单记录一下过程,以便日后参考。服务器系统为Ubuntu Server 9.04,使用软件RAID1,FTP服务用pure-ftpd提供,同时提供管理员账号、虚拟账号,并开放匿名访问。转载请注明出处,不过这一条对一部分中国人来说没什么意义,姑且写上吧。
服务器的硬件条件是按高档PC而非服务器的配置来的,Core 2 2.8GHz, 4G内存,1TB 7200rpm SATA2硬盘*2. 服务器的主要用途是FTP,并留出足够空间为将来的扩展做准备(如HTTP服务)。
由于服务器储存的是重要的学术资料,因此使用了软RAID1. 在Linux中设置软件RAID还是很方便的。大一在热能系做FTP管理员时用的是Ubuntu Desktop 6.04,印象还不错,速度很快,很稳定,而且校内有足够多的高速更新源,于是这次就决定使用Ubuntu Server 9.04。
安装过程不多说了,主要是设置软件RAID这里与安装Desktop有所不同,主要参考了这篇文章:http://www.lupaworld.com/263077/viewspace-132231.html. 由于实验室暂时没有网站,服务器不用安装太多服务,只装了OpenSSH用于远程控制(FTP服务要后装)。另外由于服务器不在紫荆区,不需要802.1x认证(现在紫荆区也不需要了),而且只是校内访问,连tunet都不用,直接交给DHCP配置网络即可,整个安装过程还是很简单的。总共分了四个区,4GB交换分区(实际用不了这么多),128MB的ext4系统分给/boot,64GB的XFS分给根目录,余下900多G空间XFS都挂在/var下,存储FTP内容。
需要注意的是安装语言要选择英文,这样安装后的系统默认语言也是英文(安装程序的语言就是安装后系统的默认语言!)。因为纯控制台对中文的支持不好,如果使用中文,提示的错误信息在屏幕上显示的都是菱形,还不如英文呢。我安装时就选择了中文,结果命令的输出结果根本无法阅读,用apt-get时又大量显示Perl warning,无奈之下又查四处资料把Locale改回en_US. 需要改的有/etc/default/locale(把“zh_CN”改成“en_US”)和/var/lib/locales/supported.d/local(插入“en_US.UTF-8 UTF-8”),最后不要忘了重新编译Locale定义:
sudo locale-gen --purge
由于开了OpenSSH,安装完成后就可以在其它机器上远程控制了,我用的是PuTTY.
教育网内的Ubuntu源还是很多的,五道口理工的官方FTP就提供一个速度超快的mirror. 安装完成后修改/etc/apt/sources.list,使用校内的高速源:
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu jaunty main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu jaunty-backports main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu jaunty-proposed main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu jaunty-security main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu jaunty-updates main restricted universe multiverse
deb-src ftp://166.111.72.5/mirror/ubuntu jaunty main restricted universe multiverse
deb-src ftp://166.111.72.5/mirror/ubuntu jaunty-backports main restricted universe multiverse
deb-src ftp://166.111.72.5/mirror/ubuntu jaunty-proposed main restricted universe multiverse
deb-src ftp://166.111.72.5/mirror/ubuntu jaunty-security main restricted universe multiverse
deb-src ftp://166.111.72.5/mirror/ubuntu jaunty-updates main restricted universe multiverse
注意ftp3.tsinghua.edu.cn虽然速度很快,但是没有source只有binary,因此不能用deb-src. 一开始没注意到这一点导致update总出错。自动化系的mirror有source和binary,速度也不错,建议使用。不过由于不用tunet连外网,自动化系FTP的域名ftp.thuda.org无法解析,因此只能用IP. 修改后:wq,然后更新package list:
sudo apt-get update
Linux下的ftpd很多,Ubuntu下常用vsftpd, proftpd和pure-ftpd,热能系当初使用的就是proftpd. 不过前两者有个致命的问题就是内码转换,它们默认使用UTF-8编码,而Windows系统使用GBK,这就导致Windows访问时中文出现乱码。pure-ftpd则可以设置客户端默认编码,直接设为GBK就解决问题了。pure-ftpd的虚拟用户支持也很好,允许限制带宽、空间配额,可以用自带的pure-pw管理虚拟用户,也可以用MySQL和LDAP. pure-ftpd也提供FXP协议和SSL/TLS支持,是一个很全面的ftpd. 首先安装pure-ftpd:
sudo apt-get install pure-ftpd
pure-ftpd不是用配置文件而是用命令行参数,这种方式比较怪异。不过pure-ftpd的作者还是为偏好配置文件的用户提供了wrapper,可以man一下pure-ftpd-wrapper. 在Debian/Ubuntu下的wrapper比较怪,是在/etc/pure-ftpd/conf下以设置项作为文件名,该项的设置值作为文件的内容,如需要设置ClientCharset=gbk,就建立一个名为“ClientCharset”的文件,内容为“GBK”.
实验室的FTP需要给每个人配一个私有账号,相当于一个网络硬盘;同时允许匿名登录用于上传公共资料与数据交换。由于是内部服务器,需要改一下端口号,最后还需要一个管理员帐号。我使用的设置如下(用传统赋值写法),一些不常用的就不写了:
ClientCharset=gbk #必设,防止Windows登录出现中文乱码
DontResolve=yes #不解析域名,可以节省登录时间
BrokenClientsCompatibility=yes #兼容IE等非标准FTP client
ChrootEveryone=yes #把所有用户限制在其homedir下
KeepAllFiles=yes #禁止用户删除文件,TrustedGID组中的除外
TrustedGID=1001 #管理员组ftpadmins的GID,允许管理员删除文件
CreateHomeDir=yes #当虚拟用户第一次登录时,自动创建homedir
MaxClientsPerIP=2 #每个IP限制2个连接
MaxClientsNumber=20 #最大并发连接数,默认值是50
MaxDiskUsage=90 #分区已使用空间超过90%时不再接受上传
NoAnonymous=no #允许匿名登录
Bind=,8821 #改变端口号
每次修改服务器设置后都需要重新启动服务:
sudo /etc/init.d/pure-ftpd restart
一共建立了两个用户组:ftpadmins(管理员和普通用户,可以删除文件)和ftpusers(匿名账号,不能删除文件),以及三个用户:ftpadmin(管理员),ftpuser(普通用户)和ftp(匿名用户). 服务器的根目录为/var/ftp,所有者为ftpadmin:ftpadmins. 根目录下有public和users两个目录,public作为匿名访问的根目录,users存放普通用户的文件。匿名访问空间(public目录)中只有incoming允许上传(777),其它位置只能下载。users目录也被设为组内的完全访问权限(775),这样同组的普通用户(ftpuser)可以有读写和删除的权限。普通用户将被限制(chroot)在/var/ftp/users下自己的homedir中,因此虽然有完全访问权限,也不会影响其它位置。为了保险起见,其它位置的权限设为755,只有ftpadmin有完全权限。
sudo groupadd ftpadmins
sudo groupadd ftpusers
sudo useradd -g ftpadmins -d /dev/null -s /bin/false ftpadmin
sudo useradd -g ftpadmins -d /dev/null -s /bin/false ftpuser
sudo useradd -g ftpusers -d /var/ftp/public -s /bin/false ftp
sudo mkdir /var/ftp
sudo mkdir /var/ftp/public
sudo mkdir /var/ftp/public/incoming
sudo mkdir /var/ftp/users
sudo chown -R ftpadmin:ftpadmins /var/ftp
sudo chmod -R 755 /var/ftp
sudo chmod 777 /var/ftp/public/incoming
sudo chmod 775 /var/ftp/users
由于这些用户仅用于pure-ftpd,不需要给登录权限,因此shell被指定为/bin/false.
下面配置虚拟用户。虚拟用户是ftp登录时所用的用户账号,但可以共用一个系统账号。当用户使用虚拟账号登录ftp时,将实际使用虚拟用户对应的系统用户身份进行操作。实验室的所有普通用户均使用虚拟账号,对应的系统账号是ftpuser. 匿名用户只能对应系统中的ftp用户(名称不能改),pure-ftpd的官方文档中建议把匿名用户单独设在一个用户组中。
虚拟用户用pure-pw配置,官方文档在http://download.pureftpd.org/pub/pure-ftpd/doc/README.Virtual-Users. pure-pw的使用很方便,形式和管理系统用户差不多,只是在useradd, usermod等前面加上pure-pw(用户名要紧随操作后面而不是放在最后,这一点与useradd等不同). 匿名用户不需要单独配置,因此homedir一定要在创建系统用户ftp时指定好,其它系统用户的homedir可以简单地指定为/dev/null,创建虚拟用户时再指定homedir. 下面创建虚拟管理员账号admin与两个普通账号test1和test2:
sudo pure-pw useradd admin -u ftpadmin -d /var/ftp
sudo pure-pw useradd test1 -u ftpuser -d /var/ftp/user/test1
sudo pure-pw useradd test2 -u ftpuser -d /var/ftp/user/test2
执行每条命令之后pure-pw会要求输入账号的密码。在参数的-d选项中指定的homedir的并不需要事先创建好。如果在配置中设置CreateHomeDir=yes,则在虚拟用户第一次登录时pure-ftpd会自动创建其homedir.
添加虚拟用户时还可以设置用户的带宽、空间配额、IP段等。修改虚拟用户设置用pure-pw usermod, 修改密码用pure-pw passwd, 删除虚拟用户用pure-pw userdel,用法详见官方文档。
每次修改用户设置后都要更新一下虚拟用户数据库,不需要重新启动服务:
sudo pure-pw mkdb
也可以在每次使用pure-pw的时候加上-m参数立即更新虚拟用户数据库。
到这里设置就算完成了,这时ftp localhost可以匿名登录,但虚拟用户登录会出现530错误。这是因为默认的认证方式中没有puredb数据库,解决方法是在/etc/pure-ftpd/auth下加入puredb数据库的软链接:
cd /etc/pure-ftpd/auth
sudo ln -s ../conf/PureDB 60puredb
现在就可以使用虚拟账号登录FTP了。
考虑到文件交换的应用,在匿名用户空间/var/ftp/public下新建了一个exchange目录,下设1day, 3days和7days(权限均为777)用于临时储存交换数据,当目录中的数据存放超过一定时间后删除。我写了一个bash脚本用于自动完成清理工作,并在清理时记录当前时间与被删除的文件,脚本如下:
#!/bin/bash
LOGFILE=/var/log/pure-ftpd/ftpac.log
date >> $LOGFILE
find /var/ftp/public/exchange/1day -mtime +1 -type f -exec rm {} -v >> $LOGFILE \;
find /var/ftp/public/exchange/3days -mtime +3 -type f -exec rm {} -v >> $LOGFILE \;
find /var/ftp/public/exchange/7days -mtime +7 -type f -exec rm {} -v >> $LOGFILE \;
用crontab将脚本设为每天凌晨4:30执行即可。
分享到:
相关推荐
在FreeBSD上使用Pure-FTPd和MySQL构建FTP服务器.pdf
pure-ftpd-1.0.22.tar.gz
freebsd下搭建pure-ftpd服务器
pure-ftpd-1.0.20-24.13.i586.rpm
pure-ftpd-1.0.21.tar.gz适用于Linux的初学者
pure-ftpd-1.0.42
pure-ftpd安装步骤,优化配置,用户管理,支持TLS/SSL。
pure-ftpd最新版源码,国外网站访问太慢,这个小的文件下载都困难,特此分享
pure-ftpd-1.0.36.tar.gz
Before all : Pure-FTPd was designed on Unix and for Unix. The Windows porthas been done because some people are forced to work on Win32 by theirpointy hairy boss. For these people, Apache is a nice ...
著名的pure-ftpd服务器源程序 .rar
基于海思hi3531D的嵌入式ftp服务器的搭建,使用stupid-ftpd的工具,具有配置项简单,比vsftpd控制简单、直观,windows是使用FileZilla进行文件的上传和下载。
这是一个在linux下的ftp安装脚本(含安装包)。当你在纠结vsftpd无法安装时,或者不会配置,你可以考虑使用这个脚本
docker-pure-ftpd:Docker Pure-ftpd服务器
pureftpd pure-ftpd.conf配置文件,我已经设置好了,你们可以参考着配置。
详细pure-ftpd安装配置,及其需要注意的地方,还有配置文件的讲解。
Ubuntu系统下Pure-ftpd的安装及配置教程.docx
busybox-1.14.2+wu-ftpd-2.6.2实现FTP和Telnet移植详解 平台:Ubuntu8.10 交叉编译器:arm-linux-gcc 3.41 文件系统工具:busybox-1.14.2 ftp移植软件:wu-ftpd-2.6.2 相关软件: bison-1.35. netkit-base-0.17 移植...
著名的pure-ftpd服务器源程序,可以共大家学习探讨.本程序用vc编写.