歡迎您光臨本站 註冊首頁

pureftpd的mysql認證以及quota、限速等的配置

←手機掃碼閱讀     火星人 @ 2014-03-22 , reply:0

一、下載相關程序
wget
http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz

wget http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz


二、編譯安裝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、編譯安裝(關鍵點,決定通過「User manager for PureFTP」能否成功管理新建的FTP用戶)
./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

在瀏覽器中安裝所需的資料庫
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打勾
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
;;
esacchmod +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
在瀏覽器中使用ftp://IP
許可權為ftpuser.ftpgroup

2、在http://ip/ftpadmin也有個瀏覽整個系統目錄,這個的許可權為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 <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] = "
錯誤: 無法存取任何目錄";


//
??/font>??明 (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] = "
存儲";


//
在?g?目??r的各??儺哉f明 (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> ?t是關閉上下傳比限制";


$Translate[98] = "
限制此帳號只能由特定 IP 來源,或是任何地方均可使用 (*)";


[火星人 ] pureftpd的mysql認證以及quota、限速等的配置已經有1360次圍觀

http://coctec.com/docs/linux/show-post-107459.html