一、下载相关程序
wget
[size=18pt]http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz[/size]
[/size]
[size=15pt]wget [size=18pt]http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz[/size]
二、编译安装pureftp
tar zxvf pure-ftpd-1.0.21.tar.gz -C /usr/local/src/
cd /usr/local/src/pure-ftpd-1.0.21/[/size]
[size=10pt]
1、编译前的改进
(1)、IE弹出登录界面[/size]
[size=14pt]vi src/ftpd.c
if (broken_client_compat != 0) {
addreply(331, MSG_USER_OK, username);
return;
} else {
// die(530, LOG_DEBUG, MSG_NO_ANONYMOUS_LOGIN); // 注释掉该行
addreply(331, MSG_USER_OK, account); // 修改为这行
}
以上能解决如下问题:
pure-ftpd 是个很不错的 ftp server,不过在用IE直接进入FTP目录的时候,如果系统没有提供匿名登录,IE不会弹出登录界面,而是弹出不提供匿名登录的警告对话框,在这种情况下,如何让IE能够直接弹出登录对话框呢?通过分析IE与pure-ftpd对话过程,发现原来简单更改就可以实现。
[size=14pt](2)、磁盘限额的正确显示
vi ./src/quotas.c
在第71行有一条语句为:
// *bufpnt=0;
这一条语句会将用户根目录下的.ftpquota文件中得到的第二个使用空间数清为0,将该语句注释掉。
在第73行有一条语句为:
old_quota.size = quota->size = strtoull(bufpnt + 1, NULL, 10);
读出并传给quota->size的值有错误,不应该是bufpnt+1,而应该是buf+1,或者是bufpnt。
以上能解决如下问题:
发现一个PureFTPd的缺点,就是使用了磁盘限额后,虽然已经起作用了,但是会有以下情况发生。在连接后只能看到限的文件数,无法正常显示用了多少磁盘空间。
当然在网页上传时还是看不到,但是用命令行或者是FTP工具可以正常看到显示磁盘配额信息。
[/size]
[size=14pt]2、编译安装(关键点,决定通过“User manager for PureFTP”能否成功管理新建的FTP用户)
./configure \[/size][size=14pt]--prefix=/usr/local/pureftpd --with-mysql=/usr/local/mysql \[/size][size=14pt]--with-mysql-lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/include \[/size][size=14pt]--with-pam --with-puredb --with-quotas --with-throttling --with-ratios \[/size][size=14pt]--with-uploadscript --with-virtualhosts --with-virtualchroot --with-cookie \[/size][size=14pt]--with-welcomemsg --with-paranoidmsg --with-ftpwho --with-diraliases \[/size][size=14pt]--without-inetd --sysconfdir=/usr/local/etc --with-peruserlimits \
make install-strip[/size][font=宋体][size=14pt]注意:[/font][font=宋体][/font]
[font=宋体] 如果没有用--with-peruserlimits 对于每个用户就不能限制连接数了[/font]
[font=宋体] 如果没有用[/font][font=宋体]--with-throttling [/font][font=宋体]就不能限速了[/font][/size]
[font=宋体][size=14pt] 如果没有用--with-quotas 就不能磁盘限额了[/font][/size]
[font=宋体][size=14pt] --with-language=simplified-chinese[/font][font=宋体]没必要,不然服务器端的日志信息是乱码[/font][/size][size=14pt] --with-altlog没必要,可是使用syslogd来处理日志
[size=14pt]三、生成pureftp系统专用用户、数据库专用用户和密码
1、生成pureftp系统专用用户
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser[/size]
[size=10pt]
cp configuration-file/pure-config.pl /usr/local/sbin/
chmod +x /usr/local/sbin/pure-config.pl[/size]
[size=14pt] 2、建立pureftp数据库专用用户和密码
/usr/local/mysql/bin/mysql -u root -pmysqlpasswd
mysql>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON ftpusers.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftppasswd';
数据库名称为ftpusers
用户为pureftpd
密码为ftppasswd
其中数据库名称ftpusers最好不要更改,因为后来通过程序自动建立的就是ftpusers数据库名字
[/size]
[size=14pt]四、通过[b][font=宋体]ftp_v2.1.tar.gz[/font][font=宋体]程序从浏览器安装数据库和web界面管理程序[/font][/b]
[font=宋体] cd[/font][font=宋体] /usr/local/src/[/font][font=宋体][/font]
[font=宋体] tar zxvf ftp_v2.1.tar.gz [/font][/size]
[size=14pt] cp -rf ftp /usr/local/apache2/htdocs/ftpadmin[/size]
[size=10pt]
由于安装的要求先把ftpadmin/赋为777权限
chmod
-R 777 /usr/local/apache2/htdocs/ftpadmin[/size]
[size=10pt]
在浏览器中安装所需的数据库
http://ip.ftpadmin/install.php
1、察看是不是都符合安装的要求,如果不符合按要求修改,并刷新察看是不是符合要求
2、输入
数据库
root的权限 和 密码
新建立数据库
3、输入
pureftpd
ftppasswd
ftpusers
分别对应 用户 密码 数据库(不要使用root的数据库用户和密码来管理)
4、更改
FTP Address
、 Default user ID
2001
、Default group ID
2001并Quota support 打勾、Ratio support打勾[/size]
[size=14pt]5、更改通过浏览器管理pureftpd的超级用户密码administrator的密码
同时可以建立一个新的超级用户[/size]
[size=14pt]6、按提示建立并建立pure-ftpd.conf和pureftpd-mysql.conf
五、建立pure-ftpd.conf和pureftpd-mysql.conf配置文件
cd /usr/local/src/pure-ftpd-1.0.21/
[/size]
cp ./configuration-file/pure-ftpd.conf /usr/local/etc/pure-ftpd.conf
[size=10pt]
cp ./pureftpd-mysql.conf /usr/local/etc/pureftpd-mysql.conf
chmod 644 /usr/local/etc/pureftpd-mysql.conf[/size]
[size=10pt]
chmod 644 /usr/local/etc/pure-ftpd.conf[/size]
[size=10pt]
由于没有统一apache的运行的用户,要读取上面2文件,所以修改属性,许可读取属性
1、 pure-ftpd.conf配置
vi /usr/local/etc/pure-ftpd.conf
[/size]
[size=14pt]MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
PIDFile
/var/tmp/pure-ftpd.pid
[/size]
[size=14pt]CreateHomeDir yes[/size]
[size=14pt]NoAnonymous yes[/size]
[size=14pt]DisplayDotFiles no[/size]
[size=14pt]MaxClientsNumber
200 [/size]
[size=10pt]
(以下为支持认证用户的FXP功能开通,不建议开通)[font=宋体]AllowUserFXP[/font] no[/size][size=10pt]
(以下2项为配置服务器支持PASV模式,建议配置,不然nat后面的客户端通过PORT模式不能连接pureftp)[font=宋体]PassivePortRange[/font] 30000 50000
[font=宋体]ForcePassiveIP[/font] *.*.*.*(外网地址)[/size][size=10pt]
屏蔽quota文件
DisplayDotFiles no
是屏蔽.ftpquota文件不显示给用户看。
空闲时间我设置为5分钟MaxIdleTime
5
[/size]
[size=14pt]屏蔽匿名用户NoAnonymous
yes
用户最大并发数设置
[font=宋体]PerUserLimits[/font] 20:20[/size][size=14pt] 设置用户最大并发连接数。只有在添加了 --with-peruserlimits 编译选项进行编译后,指令才起作用.缺省3:20 意思是同一个认证用户最大可以有3个同时活动的进程,实际应用中这个太小了,特别是用win ie登入的话,一个就要2个进程了,所以建议配置大一点。我配置了 20:20[/size]
[size=10pt] 不解析主机名
[font=宋体]DontResolve[/font] yes[/size]在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。 [size=14pt] [/size]
[size=14pt] 建立的文件的权限(Umask参数) 系统默认Umask 133:022,前面一个是文件 后面是文件夹。真正的文件属性要取反。就是如果使用默认的Umask属性,用户自己建立的文件属性是644 文件夹属性是755。所以我们不要更改系统的默认。[/b] [/size][b]2、 pureftpd-mysql.conf配置
vi /usr/local/etc/pureftpd-mysql.conf[/size][size=10pt]
MYSQLSocket /tmp/mysql.sock [/size]
[size=10pt] MYSQLUser pureftpd[/size]
[size=14pt] MYSQLPassword ftppasswd[/size][size=14pt] MYSQLDatabase ftpusers[/size][size=14pt] MYSQLCrypt md5[/size][font=黑体][size=14pt] MYSQLGetPW[/font][font=黑体]
SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size][size=10pt] [font=黑体]MYSQLGetUID[/font][font=黑体]
SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MYSQLGetGID[/font][font=黑体]
SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MYSQLGetDir[/font][font=黑体]
SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetQTAFS[/font][font=黑体]
SELECT QuotaFiles FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetQTASZ[/font][font=黑体]
SELECT QuotaSize FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetRatioUL[/font][font=黑体] SELECT ULRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetRatioDL[/font][font=黑体] SELECT DLRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetBandwidthUL[/font][font=黑体] SELECT ULBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt] [font=黑体]MySQLGetBandwidthDL[/font][font=黑体] SELECT DLBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")[/font][/size]
[size=10pt]
六、建立pureftpd的服务端执行文件
vi /etc/rc.d/init.d/pure-ftpd
#!/bin/sh
case "$1" in
start)
echo -n "Starting Pure-FTPd..."
/usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf > /dev/null
;;
stop)
echo -n "Shutting down Pure-FTPd..."
kill `cat /var/tmp/pure-ftpd.pid | head -1`
;;
restart)
echo -n "Restarting Pure-FTPd..."
kill `cat /var/tmp/pure-ftpd.pid | head -1`
sleep 1
/usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf > /dev/null
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac[/size][size=14pt]chmod +x /etc/rc.d/init.d/pure-ftpd
启动pureftpd服务
/etc/rc.d/init.d/pure-ftpd start[/size]
[size=10pt]
关闭服务用
killall pure-ftpd[/size]
[size=10pt]
ps -aux|grep pureftp
[font=宋体]七、设置pureftp日志[/font]
[b][font=宋体]vi /etc/syslog.conf[/font][/b]
[font=宋体]ftp.* /var/log/pureftpd/pureftpd[/font][font=宋体][/font]
[font=宋体]mkdir[/font][font=宋体] /var/log/pureftpd[/font]
[font=宋体]touch /var/log/pureftpd/pureftpd[/font]
[font=宋体]chown[/font][font=宋体] ftpuser.ftpgroup /var/log/pureftpd/pureftpd[/font][/size]
[font=宋体][size=14pt]killall[/font][font=宋体] -HUP syslogd[/font][/size]
[font=宋体][size=14pt]vi /usr/local/etc/pure-ftpd.conf[/font][font=宋体][/font]
[font=宋体]SyslogFacility[/font][font=宋体] ftp[/font]
[font=宋体]VerboseLog[/font][font=宋体] yes[/font][/size]
[font=宋体][size=14pt]/etc/init.d/pure-ftpd restart[/font][font=宋体][/font]
[font=宋体]注意:如果设置成 VerboseLog yes 所有用户操作都有记录(包括文件的上传下载)(个人认为这个不要设置,太烦琐了,日志太多)[/font]
[font=宋体][b][font=黑体][size=14pt]八、设置浏览器管理界面的优化[/font][/size]
[size=14pt]1、安全性的考虑[/size][size=10pt] 由于安全性的问题建议把ftpadmin目录拥有者改为ftpuser.ftpgroup的默认用户,同时赋予一般用户的权限为5
chown -R ftpuser.ftpgroup ../ftpadmin/[/size]
[size=14pt]chmod
-R 755 /usr/local/apache2/htdocs/ftpadmin[/size]
[size=10pt]
这样安全性比较好,同时注意2点:
1、
在浏览器中使用ftp://IP
权限为ftpuser.ftpgroup
2、在http://ip/ftpadmin也有个浏览整个系统目录,这个的权限为apache的默认用户的权限[/size]
[font=黑体][size=14pt]2[/font][font=黑体]、设置浏览器管理界面的优化[/font][/size][size=10pt] [font=黑体]vi /usr/local/apache2/htdocs/ftpadmin/index.php
[/font][/size]
[size=10pt]
[font=黑体]
[/font][font=黑体]第569行[/font][/size]
[size=10pt] [font=黑体]
[/font][font=黑体]$dir
= "/home/ftp";[/font]
[font=黑体]
$status
= "1";[/font][/size][size=10pt] [font=黑体]
$quotafiles
= "0";
[/font][font=黑体](文件限制,0为不限制)[/font][/size]
[size=10pt]
[font=黑体]
$quotasize
= "1000";
[/font][font=黑体](容量限制1G) [/font][/size][size=10pt] [font=黑体]
$ulbandwidth
= "100";
[/font][font=黑体]( 上传带宽100K)[/font][/size]
[size=10pt]
[font=黑体]
$dlbandwidth
= "100";
[/font][font=黑体](下载带宽100K)[/font][/size][size=10pt] [font=黑体]第742行把屏蔽去掉[/font]
echo ("\n");[/size]
[size=10pt]
第745行屏蔽掉
//
echo ("value=\"$dir\">\n");[/size]
[size=10pt]
这样在管理的时候才能自己手工直接输入设定每个ftp用户根目录,不然都要从浏览界面中选择,很郁闷的!
注意1:
个人用户目录下的.ftpquota主要是写用户已经用了多少。不是用来设定的。
根据以上配置:自动建立目录、状态栏设定、限制速度(上、下传)和限制磁盘容量都已经ok!!
3、把繁体语言环境修改成简体语言环境
/usr/local/apache2/htdocs/ftpadmin/language/chinese.php
// Traiditional Chinese translated by chinsan <chinsan.tw@gmail.com>
$CharSet = "UTF-8";
// 全域?定 (Global)
$Translate[0]
= "江苏中外运常州分公司 PureFTPd 帐号管理";
(这里可以加上自己的公司)
$Translate[1]
= "Version 2.1";
// ??的?? (Default username)
$Translate[10] = "myftp";
// 系??息 (System messages)
$Translate[20] = "所选择的密码不存在。";
$Translate[21] = "密码并为一致,目前的设定不会被保存。";
$Translate[22] = "除了目前的密码之外,设定值都会被保存。";
$Translate[23] = "设定值将会被保存。";
$Translate[24] = "该 ftp 帐号";
$Translate[25] = "将会被移除。";
$Translate[26] = "错误: 无法存取任何目录";
// ???明 (Labels)
$Translate[30] = "登入页";
$Translate[31] = "按此以新增帐号";
$Translate[32] = "帐号";
$Translate[33] = "UID";
$Translate[34] = "GID";
$Translate[35] = "家目录";
$Translate[36] = "上传速度(KB/s)";
$Translate[37] = "下载速度(KB/s)";
$Translate[38] = "IP 地址";
$Translate[39] = "设定";
$Translate[40] = "启用";
$Translate[41] = "密码";
$Translate[42] = "再次确认密码";
$Translate[43] = "配额档案数量";
$Translate[44] = "配额空间大小(MB)";
$Translate[45] = "上下传比 [上:下]";
$Translate[46] = "备注";
// 按??息 (Button info)
$Translate[60] = "修改";
$Translate[61] = "移除";
$Translate[62] = "锁定";
$Translate[63] = "解锁";
$Translate[64] = "开启";
$Translate[65] = "选择目录";
$Translate[66] = "关闭浏览目录";
$Translate[67] = "存储";
// 在??目??的各??性?明 (Attributes from the directory browser)
$Translate[80] = "名称";
$Translate[81] = "大小";
$Translate[82] = "类型";
$Translate[83] = "修改日期";
$Translate[84] = "拥有者";
$Translate[85] = "群组";
$Translate[86] = "属性";
// ?助?明 (Help balloons)
$Translate[90] = "帐号只有 启用 被选取时,才会生效。";
$Translate[91] = "该 ftp 帐号所要使用的 UID (帐号权限)";
$Translate[92] = "该 ftp 帐号所要使用的 GID (群?权限)";
$Translate[93] = "上传档案时的速度限制(单位: KB/s)";
$Translate[94] = "下载档案时的速度限制(单位: KB/s)";
$Translate[95] = "限制此帐号所能存放的(最多的)档案数量。";
$Translate[96] = "限制此帐号所能存放的(最多的)空间大小。(单位: Mb)";
$Translate[97] = "比如 <1:2> 代表的是: 至少先上传 4Mb 才能下 8Mb,而 <0:0> ?是关闭上下传比限制";
$Translate[98] = "限制此帐号只能由特定 IP 来源,或是任何地方均可使用 (*)";
[/size][/font][/b]
[/size]
jhasheng 于 2011-06-30 21:07:05发表:
Thanks for your share!