在安裝
PureFTPd以前,要做好以下準備工作:
1. 安裝FreeBSD4.9系統。
2. 定製核心,在核心中加入“options QUOTA”以實現使用者配額的支援(註:其他*nix系統如何?,請各位自己搜尋實現。)
3. 安裝好APACHE+PHP平台,因為我們後面要用PHP_Manager實現使用者線上管理。(註:關於這個安裝的內容網上有很多教程,在FreeBSD下可以直接用PORTS方式安裝就可以了。)
做好以上準備工作之後,我們就可以開始進入真正的安裝過程了。
(註:以下安裝全部採用PORTS方式安裝)
一、 安裝
Mysql
我安裝的
Mysql是4.0版本的,所以如果有最新大家也可以嘗試啊。
# cd /usr/ports/databases/mysql40-server
# make install clean
安裝完後產生啟動指令碼在 /usr/local/etc/rc.d/mysql-server.sh
你可以運行以下命令,看Mysql服務是否已經啟動。
# ls | grep mysql
如果有返回資訊,就表示Mysql已經啟動了,如果沒有啟動,運行以下命令。
# cd /usr/local/etc/rc.d
# ./mysql-server.sh start
如果你要停止Mysql服務。
# /usr/local/etc/rc.d/mysql-server.sh stop
確認服務啟動後,我們來測試資料庫運行是否正常:
(註:預設情況下Mysql的使用者是root,密碼為空白,所以請立即登入Mysql修改root使用者的密碼)
# mysql
出現下面內容表示運行正常。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16 to server version: 4.0.18
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
輸入exit退出Mysql。
為Mysql的root使用者佈建一個口令123456
# mysqladmin -u root password ‘123456'
設定完後我們再來測試一下密碼是否生效了。
# mysql -u root -p
Enter password:
出現提示密碼,輸入正確密碼並斷行符號。
如果出現以下內容,表示設定成功。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16 to server version: 4.0.18
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
如果出現以下內容,表示設定失敗。(如果這樣,你就慘了,哈哈)
ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)
二、 安裝PureFTPd
1.下面我們開始安裝PureFTPd,同樣以FreeBSD的Ports方式安裝。
# cd /usr/ports/ftp/pure-ftpd
# make WITH_MYSQL=1 \ MYSQL資料庫支援
WITH_LANG=simplified-chinese \ 提示文字為簡體中文
CONFIGURE_ARGS= \
' --prefix=/usr/local/pureftpd \ 安裝目錄
--with-paranoidmsg \ //唔....不知該怎麼說.算是可以給特定人的資訊吧.
--with-welcomemsg \ //支援登入後的資訊顯示,我反正搞不定,哈哈
--with-uploadscript \ //當一個檔案被完整上傳完後自動呼叫某一script去對這個檔案
處理.當然.這個script得你自己寫.
--with-largefile \ //支援下載超過2G的檔案.
--with-cookie \ //使用者進站看到的東東.類似進站畫面.
--with-virtualchroot \ //安全的chroot.
--with-virtualhosts \ //跟http的virtualhost有異曲同工之妙.
--with-virtualroot \ //虛擬root支援
--with-diraliases \ //跟Serv-U上面的link功能一樣.
--with-quotas \ // 使用quota.(非系統下的quota)
--with-sysquotas \ //允許使用作業系統的Quota(磁碟限額)
--with-ratios \ //上下傳比率支援.
--with-ftpwho \ //使用pure-ftpwho命令查看線上使用者.
--with-everything \ // 所有功能全上.(自己看著辦吧)
--with-throttling' \ //頻寬可設限.
install clean
安裝完後,就會在/usr/local目錄下產生一個pureftpd目錄,我們要使用的檔案都在這個目錄中。
2.下面我們開始配置pure-ftpd.conf檔案
在這裡我全使用預設值,只修改下面內容以支援MYSQL。(註:Pureftpd可以同時支援ldap,mysql,pgsql,puredb認證)
# MySQL configuration file (see README.MySQL)
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
3.設定檔詳解(摘自網上陳景峰所著《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》)
ChrootEveryone yes
chroot每一個使用者,等同於Proftpd 中的DefaultRoot~ , 可以限制使用者在某個地方活動,增強伺服器的安全性。使用過wu-ftpd的使用都應該知道cd /會發生什麼!
TrustedGID 50
#以上兩者要一起用
BrokenClientsCompatibility no
MaxClientsNumber 50
#最大連結數
Daemonize yes
#Fork in background 以守護進程方式在後台運行
MaxClientsPerIP 5
#每個ip最多連結數,最好設小點。
VerboseLog no
#是否要把所有client端的指令都log下來
DisplayDotFiles no
#顯示開頭的檔案
AnonymousOnly no
#是否只讓匿名登入
NoAnonymous no
#不開放匿名登入
SyslogFacility ftp
#應該是對日誌做一下過濾 (auth, authpriv, daemon, ftp, security, user, local*)可以讓日誌只記錄想要的資訊
DontResolve yes
#不反向解釋用戶端的ip
MaxIdleTime 5
#最大閑置時間
#LDAPConfigFile /usr/local/pureftpd/etc/pureftpd-ldap.conf
#使用LDAP認證,
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
#使用MySQL認證
#PGSQLConfigFile /usr/local/pureftpd/etc/pureftpd-pgsql.conf
#使用PGSQL認證
#PureDB /ftp/etc/pureftpd.pdb
#使用者資料的DB存放地點 [由於我是用PureFTPD的內建DB.固有此選項]
#ExtAuth /var/run/ftpd.sock
#pure-authd socket 路徑 (詳細請看 README.Authentication-Modules)
#PAMAuthentication yes
#開啟PAM認證
#UnixAuthentication yes
#如果你想要有簡單的Unix(/etc/passwd)的認證的話
FortunesFile /usr/local/pureftpd/etc/.welcome
#顯示的歡迎資訊檔,你可以建立該檔案,輸入一些文字,然後你重啟你的FTP服務,就會有意外的發現。
LimitRecursion 2000 8
#ls最多列出3000個檔案.最深8層
AnonymousCanCreateDirs no
#匿名使用者可以建立目錄
MaxLoad 4
#當system load超過4時.使用者將不能再下載
PassivePortRange 30000 50000
#被動串連應答範圍
ForcePassiveIP 192.168.0.1
#不會譯:(
AnonymousRatio 1 10
#Anonymous串連上傳/下載比率
UserRatio 1 10
#使用者上傳/下載比率(註:如果使用ldap,mysql,pgsql,pam不要啟用該功能,否則你在ldap等中設定的Ratio無校)
AntiWarez no
#上傳的檔案不能被下載(owner is ftp).等到local admin確認
Bind 127.0.0.1,8021
#要綁定和ip/port,在你的系統中有兩個FTP Server這樣你其中一個FTP就要使用其它連接埠。
#格式-> 127.0.0.1,21 如果唯寫port表All ip,port
AnonymousBandwidth 8
#Anonymous 頻寬,單位KB/s
UserBandwidth 8
#使用者頻寬,單位KB/s
Umask 133:022
#上傳檔案的Umask.(<umask for files>:<umask for dirs> )
MinUID 1000
# UID至少多少才能登入
AllowUserFXP yes
#支不支援FXP
AllowAnonymousFXP no
#Anonymous支不支援FXP
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
#(”.”)開頭的檔案能不能被讀/寫,UNIX Like下以點開頭的檔案是隱藏檔案ls –a才能列出
#Pureftpd Quota模式下做產生” .ftpquota”檔案。
AutoRename no
#上傳檔案若有相同檔案名稱自動改名(file.1,file.2...)
AnonymousCantUpload no
#匿名使用者上傳檔案
TrustedIP 10.1.1.1
#鎖IP.
LogPID
#Log檔案添加PID
AltLog stats:/ftp/etc/log/pureftpd.log
#log存放地點,注日誌有幾種常用的格式
#clf 類似apache格式,stats UNIX log格式,w3c 標準W3C格式,可能是HTML格式
NoChmod yes
#不給Chmod指令的許可權
KeepAllFiles no
#使用者可續傳.但不可刪除檔案
CreateHomeDir yes
#如果user的home不存在自動建立(我把這個設為YES)
Quota 1000:10
#Quota <檔案數>:<容量Megabytes >,FTP限制10M空間,可以上傳1000個檔案(註:如果使用ldap,mysql,pgsql,pam不要啟用該功能,否則你在ldap等中設定的Quota無校)
PIDFile /ftp/etc/log/pure-ftpd.pid
#記錄pure-ftpd的PID檔案
CallUploadScript yes
#呼叫UploadScript
MaxDiskUsage 99
#當硬碟使用率到多少時將停止上傳
NoRename yes
#使用者不能重新命名檔案名稱
CustomerProof yes
PerUserLimits 3:20
#<每個帳號最多可登入幾次:Anonymous最多可同時登入幾次>
4. 建立Mysql資料庫中的FTP虛擬使用者管理資料庫ftpusers
將以下內容存為script.mysql檔案
INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update
_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Proces
s_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES
('127.0.0.1','ftp',PASSWORD('123456'),'Y','Y','Y','Y','N','N','N','N','N','N
','N','N','N','N');
FLUSH PRIVILEGES;
CREATE DATABASE ftpusers;
USE ftpusers;
CREATE TABLE admin (
Username varchar(35) NOT NULL default '',
Password char(32) binary NOT NULL default '',
PRIMARY KEY (Username)
) TYPE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('123456'));
CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(128) NOT NULL default '',
QuotaFiles int(10) NOT NULL default '500',
QuotaSize int(10) NOT NULL default '30',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
INSERT INTO `users` VALUES ('kevin',MD5('123456'),1001,2000,'/home/kevin',500,30,
80,5);
先在Mysql資料庫建立一個對資料庫有操作許可權的使用者ftp,密碼為123456。
再建立新資料庫ftpusers,並建立兩個表admin和users,往admin表中加入系統管理使用者帳號,往users表中加入新的FTP使用者kevin,密碼為123456。
然後我們運行以下命令來產生資料庫ftpusers。
# mysql -u root -ppassword < script.mysql
注意,-p是輸入密碼,它和後面你輸入的password中沒有空格。
5.修改/usr/local/pureftpd/etc/pureftpd-mysql.conf設定檔
內容如下所示:
MYSQLServer 127.0.0.1
#MYSQL伺服器的IP
MYSQLPort 3306
#MYSQL 連接埠號碼
MYSQLSocket /var/lib/mysql/mysql.sock
#使用UNIX.sock本地串連
註:MYSQLServer 與 MYSQLSocket 選擇一種即可
MYSQLUser ftp
#MYSQLUser 資料使用者名稱
MYSQLPassword 123456
#MYSQL資料庫使用者的密碼
MYSQLDatabase ftpusers
#FTP資料資料庫
MYSQLCrypt md5
#密碼加密方式"cleartext", "crypt", "md5" and "password"
# cleartext 明文,crypt,md5,password是Backend password(‘your-passwd')函數(MYSQL資料庫所使用的password()函數)
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
# 密碼欄位,我使用users表中的Password做為密碼欄位
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
#UID使用者ID欄位
MYSQLDefaultUID 1000
#預設的UID (註:如何開啟該選項,MYSQLGetUID將失去作用)
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
#GID組ID欄位
MYSQLDefaultGID 1000
#預設的GID (註:如何開啟該選項,MYSQLGetGID將失去作用)
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
#FTP使用者目錄如/home/web/www-9812-net
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
#磁碟限額,檔案數限制。如1000,允許使用者上傳1千個檔案
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
#磁碟限額,FTP使用者空間限制(單位為M),如:100M
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"
#上傳/下載比率。MySQLGetRatioUL為上傳比,MySQLGetRatioDL下載比。如:1:5
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
#下傳/下載頻寬(單位KB/s)。MySQLGetBandwidthUL上傳頻寬,MySQLGetBandwidthDL下載頻寬。如上傳500KB/s,下載50KB/s
MySQLForceTildeExpansion 1
MySQLTransactions On
#不會翻譯
修改好該設定檔後,我們繼續。
6.運行PureFTPd
為了實現匿名登入,需要在系統中加一個ftp使用者。
有了ftp.理所當然得也要有帳號才行.
#vipw
ftp:*:2000:2000::0:0:ftp:/home/ftp:
/sbin/nologin
#vi /etc/group
ftpusers:*:2000:
操作完後我們就添加一個ftp帳號屬於ftpusers組,使用者id和組id都是2000
啟動PureFTPd
# /usr/local/pureftpd/bin/pure-config.pl ../etc/pure-ftpd.conf
為了以後方便的進行Ftp服務的管理,我自己在/usr/local/etc/rc.d中建立了一個pureftpd.sh檔案。
# vi pureftpd.sh
#!/bin/sh
case "$1" in
start)
[ -x /usr/local/pureftpd/etc/pure-ftpd.conf ] && \
/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.c
onf > /dev/null && \
echo -n ' pure-ftp'
stop)
killall pure-ftpd > /dev/null && \
echo -n ' pure-ftp'
*)
echo "Usage: `basename $0` {start | stop}" >&2
esac
exit 0
設定該檔案的可執行許可權
# chmod u+x pureftpd.sh
以後可以用下列命令啟動PureFTPd服務
# /usr/local/etc/rc.d/pureftpd.sh start
用下列命令停止PureFTPd服務
# /usr/local/etc/rc.d/pureftpd.sh stop
測試FTP是否正常了。
# ftp 你的IP
Connected to 127.0.0.1.
220---------- 歡迎來到 Pure-FTPd ----------
220-您是第1個使用者,最多可達50個串連
220-現在是本地時間 09:02。伺服器連接埠: 21。
220 在15分鐘內沒有活動,您將被斷線。
Name (127.0.0.1:kevin):kevin
Password:
230-使用者kevin 有以下組的許可權: ftpusers
230-這個伺服器支援FXP傳輸
230-OK. 目前限制的目錄是 /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
恭喜你,你的FTP服務已經正常工作了。
三、 使用PHP_Manager進行使用者管理
下載最新的PHP_Manager軟體
# tar zxvf ftp_v1.3.1.tar.gz
# mv ftp_v1.3.1 /www/path/data/ftp
# cd /www/path/data/ftp
# vi config.php
修改config.php設定檔
$LANG = $ZH_CN; //你的PHP_Manager所用的語言
$DBHost = “localhost”; //你的Mysql伺服器的Host
$DBLogin = “ftp”; //登入資料庫的使用者
$DBPassword = “123456”; //登入資料庫的使用者密碼
$DBDatabase = “ftpusers”; //實現虛擬使用者管理的資料庫的名字
$FTPAddress = “61.132.35.21:21”; //你的FTP服務的IP地址和連接埠號碼
然後使用網頁方式登入管理。
http://你的伺服器網域名稱/ftp
管理員是administrator,密碼是123456,這在前面建資料庫的時候可以修改的。
進入之後全是中文,不要我多寫了吧。
祝大家快樂!
我已經把PHP_Manager修改為支援中文的了,現傳上來給大家用。
http://www.linuxsir.org/bbs/attachment.php?s=&postid=578136
有關其他系統下的安裝方法,可以參照陳景峰所著《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》