Chinaunix首页 | 论坛 | 博客
  • 博客访问: 556389
  • 博文数量: 114
  • 博客积分: 5611
  • 博客等级: 大校
  • 技术积分: 1027
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-19 08:55
文章分类

全部博文(114)

文章存档

2011年(29)

2010年(20)

2009年(1)

2008年(11)

2007年(53)

分类: LINUX

2007-12-07 09:49:57

一、下载相关程序

wget

wget

 

二、编译安装pureftp

 

tar zxvf pure-ftpd-1.0.21.tar.gz -C /usr/local/src/

cd /usr/local/src/pure-ftpd-1.0.21/

 

1、编译前的改进

1)、IE弹出登录界面

 

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对话过程,发现原来简单更改就可以实现。

 

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工具可以正常看到显示磁盘配额信息。

 

 

2、编译安装

./configure \
--prefix=/usr/local/pureftpd --with-mysql=/usr/local/mysql \
--with-mysql-lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/include \
--with-pam --with-puredb --with-quotas --with-throttling --with-ratios \
--with-uploadscript --with-virtualhosts --with-virtualchroot --with-cookie \
--with-welcomemsg  --with-paranoidmsg --with-ftpwho --with-diraliases \
--without-inetd --sysconfdir=/usr/local/etc --with-peruserlimits \
 
make install-strip

 

注意:

如果没有用--with-peruserlimits 对于每个用户就不能限制连接数了

如果没有用--with-throttling 就不能限速了

如果没有用--with-quotas 就不能磁盘限额了

--with-language=simplified-chinese没必要,不然服务器端的日志信息是乱码

--with-altlog没必要,可是使用syslogd来处理日志

 

三、生成pureftp系统专用用户、数据库专用用户和密码

 

1、生成pureftp系统专用用户

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

 

cp configuration-file/pure-config.pl /usr/local/sbin/

chmod +x /usr/local/sbin/pure-config.pl

 

 

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数据库名字

 

四、通过ftp_v2.1.tar.gz程序从浏览器安装数据库和web界面管理程序

 

cd /usr/local/src/

tar  zxvf  ftp_v2.1.tar.gz 

cp  -rf  ftp  /usr/local/apache2/htdocs/ftpadmin

 

由于安装的要求先把ftpadmin/赋为777权限

chmod –R 777 /usr/local/apache2/htdocs/ftpadmin

 

 

在浏览器中安装所需的数据库

 

1、察看是不是都符合安装的要求,如果不符合按要求修改,并刷新察看是不是符合要求

2、输入  数据库  root的权限 和 密码  新建立数据库

3、输入  pureftpd  ftppasswd  ftpusers  分别对应 用户 密码 数据库(不要使用root的数据库用户和密码来管理)

4、更改   FTP Address  Default user ID   2001  Default group ID  2001Quota support 打勾、Ratio support打勾

5、更改通过浏览器管理pureftpd的超级用户密码administrator的密码 同时可以建立一个新的超级用户

6、按提示建立并建立pure-ftpd.conf和pureftpd-mysql.conf

 

 

五、建立pure-ftpd.conf和pureftpd-mysql.conf配置文件

 

cd /usr/local/src/pure-ftpd-1.0.21/

cp ./configuration-file/pure-ftpd.conf /usr/local/etc/pure-ftpd.conf

cp ./pureftpd-mysql.conf /usr/local/etc/pureftpd-mysql.conf

chmod 644 /usr/local/etc/pureftpd-mysql.conf

chmod 644 /usr/local/etc/pure-ftpd.conf

 

由于没有统一apache的运行的用户,要读取上面2文件,所以修改属性,许可读取属性

 

1、   pure-ftpd.conf配置

 

vi /usr/local/etc/pure-ftpd.conf

 

MySQLConfigFile             /usr/local/etc/pureftpd-mysql.conf

PIDFile                     /var/tmp/pure-ftpd.pid

CreateHomeDir               yes
NoAnonymous                 yes
DisplayDotFiles             no
MaxClientsNumber            200
 
(以下为支持认证用户的FXP功能开通,不建议开通)
AllowUserFXP                no
 
(以下2项为配置服务器支持PASV模式,建议配置,不然nat后面的客户端通过PORT模式不能连接pureftp)
PassivePortRange          30000 50000
ForcePassiveIP            *.*.*.*(外网地址)
 
屏蔽quota文件
DisplayDotFiles     no   是屏蔽.ftpquota文件不显示给用户看。
 
空闲时间我设置为5分钟
MaxIdleTime                 5
 
屏蔽匿名用户
NoAnonymous         yes
 
用户最大并发数设置
PerUserLimits 20:20
设置用户最大并发连接数。只有在添加了 --with-peruserlimits 编译选项进行编译后,指令才起作用
缺省3:20 意思是同一个认证用户最大可以有3个同时活动的进程,实际应用中这个太小了,特别是用win ie登入的话,一个就要2个进程了,所以建议配置大一点。我配置了 20:20
 
不解析主机名
DontResolve                 yes
在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。 
 
建立的文件的权限(Umask参数)
系统默认Umask 133:022,前面一个是文件 后面是文件夹。真正的文件属性要取反。就是如果使用默认的Umask属性,用户自己建立的文件属性是644 文件夹属性是755。所以我们不要更改系统的默认。
 
2、   pureftpd-mysql.conf配置
 
vi /usr/local/etc/pureftpd-mysql.conf
 

MYSQLSocket     /tmp/mysql.sock      

MYSQLUser       pureftpd
MYSQLPassword   ftppasswd
MYSQLDatabase   ftpusers
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
 
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")

 

 

六、建立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

 

chmod +x /etc/rc.d/init.d/pure-ftpd

 

启动pureftpd服务

/etc/rc.d/init.d/pure-ftpd start

 

关闭服务用

killall pure-ftpd

 

ps -aux|grep pureftp

 

七、设置pureftp日志

 

 vi /etc/syslog.conf

 

ftp.*                    /var/log/pureftpd/pureftpd

 

mkdir  /var/log/pureftpd

touch  /var/log/pureftpd/pureftpd

chown ftpuser.ftpgroup /var/log/pureftpd/pureftpd

killall -HUP syslogd

 

vi  /usr/local/etc/pure-ftpd.conf

SyslogFacility              ftp

VerboseLog                  yes

 

/etc/init.d/pure-ftpd restart

 注意:如果设置成 VerboseLog        yes 所有用户操作都有记录(包括文件的上传下载)(个人认为这个不要设置,太烦琐了,日志太多)

 

 
八、设置浏览器管理界面的优化
 

1、安全性的考虑

 

由于安全性的问题建议把ftpadmin目录拥有者改为ftpuser.ftpgroup的默认用户,同时赋予一般用户的权限为5

chown -R ftpuser.ftpgroup ../ftpadmin/

chmod –R 755 /usr/local/apache2/htdocs/ftpadmin

 

这样安全性比较好,同时注意2点:

1、  在浏览器中使用  权限为ftpuser.ftpgroup

2、在也有个浏览整个系统目录,这个的权限为apache的默认用户的权限

 
2、设置浏览器管理界面的优化
 
vi /usr/local/apache2/htdocs/ftpadmin/index.php  
 
  第569行
  $dir              = "/home/ftp";
  $status           = "1";
  $quotafiles       = "0";          (文件限制,0为不限制)
  $quotasize        = "1000";       (容量限制1G) 
  $ulbandwidth      = "100";        ( 上传带宽100K)
  $dlbandwidth      = "100";        (下载带宽100K)
742行把屏蔽去掉

echo ("\n");

745行屏蔽掉

 //   echo ("  value=\"$dir\">\n");

 

这样在管理的时候才能自己手工直接输入设定每个ftp用户根目录,不然都要从浏览界面中选择,很郁闷的!

 

注意1:

个人用户目录下的.ftpquota主要是写用户已经用了多少。不是用来设定的。

根据以上配置:自动建立目录、状态栏设定、限制速度(上、下传)和限制磁盘容量都已经ok!!

 

3、把繁体语言环境修改成简体语言环境

 

 /usr/local/apache2/htdocs/ftpadmin/language/chinese.php

 

  // Traiditional Chinese translated by chinsan

 

  $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 来源,或是任何地方均可使用 (*)";

 

?>

 

完工!

 

参考配置文档:

http://bbsin.com/blogs/andnet/archive/2005/01/14/webserver-on-freebsd-fureftp-install.aspx

 

阅读(3205) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~