分类: 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 2001并Quota 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