Ubuntu下使用Pure-ftpd 透過 MySQL管理虛擬FTP用戶帳號(2)

Ubuntu下使用Pure-ftpd 透過 MySQL管理虛擬FTP用戶帳號(2)

attachments/201101/5003072100.png

行動提示:
1.先讀完1、2篇全文。
2.依第1篇完成【實作過程一、基本設定】全部。
3.在第1篇的【實作過程二、資料庫設定與配置】部分
設定檔改用套件包提供的 mysql.conf.Adv.txt (記得變更資料庫密碼),
建表語法也改用套件包提供的pureSQL.txt。
4.配合第2篇【config.php設定檔的修改改】進行修改。
5.建立相關目錄及設定權限後從網頁上登入管理介面新增帳號進行測試。

前言
這個利用Web管理的 idea 在網路上,其實還有一套類似的工具
叫 User manager for PureFTPd,網址如下
http://machiel.generaal.net/index.php?subject=user_manager_pureftpd
個人試用後覺得,對於一般初級能力的網管可能太過於複雜。
參考上述的程式,個人另寫了一套,將一些設定直接內建在程式的設定檔內。
免除掉一些容易不理解的項目。

個人ID與群組ID
在Linux系統內,每個帳號都有獨特的編號,而每個群組也一樣有這種編號
針對使用者的帳號一般叫uid,針對群組的帳號一般叫gid,
Ubuntu 下第一個新增的實體帳號是由 1000 開始,
之前常用的 Redhat 系列,則由 500 起跳。

個人ID與群組ID與各類ftp伺服器的關係
一個帳號,不管是虛擬或真實的,登入到 ftp 站後
他能不能建立目錄?能不能上傳檔案?能不能刪除檔案?
要作這些事前,系統會先看那些檔案或目錄,是不是屬於您這個帳號的。
如果是,則您可以進行處理,如果不是,則您什麼也不能做。
談個例子:機器上有個帳號是edu,它的uid及gid都是1000
我們在資料庫內加上一個虛擬帳號,叫 abc ,我們在uid及gid的地方
也設定為都是1000,而在家目錄的位置,我們設定為/home/edu
那這個 abc 的用戶登入後,他可以任意的刪除新增上傳下載
實體使用者 edu 的任何東西,因為他們都擁有相同的uid及gid。

網頁應用程式的個人ID與群組ID
我想要利用網頁上傳檔案到家目錄內,這是做不到的。
因為實際透過網頁,所用的 uid 及 gid 在 ubuntu 下都是 33
對照/etc/passwd 檔案記錄,實體帳號為www-data。
但是當我們將某個目錄chmod設定為777的屬性
或chown為www-data的擁有者時,這樣的事情才變的可能。
(在 RedHat 系列下 apache 相同於 www-data)


程式佈局概觀

瞭解上述觀念,我們想要在網頁上去新增虛擬帳號,而新增之後
原本由系統會幫忙建立的家目錄,則換成要由我們自己動手。
而要利用網頁程式一併幫我們做這件事的時侯,只能有一個先決條件,
就是要建立目錄的上一層,一定是www-data的擁有者或是777的屬性。
因此在規畫的部分,這組 ACFS-pureFTPmgr 的應用程式,
新增的虛擬帳號,預設Uid或Gid都是33。
另外為了區別,個人也加入了一分類的功能。
因此整個虛擬帳號的實體架構大致是這個樣子。

根目錄--群組目錄--用戶目錄

參閱附圖
attachments/201101/0047291312.png
如果是在學校,個人建議不妨將設定檔的根目錄指向www網頁空間內。
這樣個人的ftp的位置是和網頁空間是一致的,當然安全上是較危險的
但面對有網頁空間的須求時,這又是不得不的作法。
因此安全的緣故,我們應在網頁伺服器的設定檔內,設定該目錄之下,無法執行php程式。
(PHP的檔案經設定後會變為下載的檔案而非在主機執行,
當然任何置於Web下的東西基本上它都是透明的,在應用上要避免將機密的資料放置在Web下)

因此,您在apache內的設定檔內(/etc/apache2/sites-enabled/000-default)
可以加入下段,而這個路徑也要和程式的設定檔相互配合。

<Directory /var/www/FTP/>
   php_flag engine off
   Options FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   allow from all
</Directory>


這樣的作法下,以Debain系列的伺服器而言,
假設我們在config.php設定檔內的路徑如下設定時:

//所有帳號均集中到那個目錄下再分類
define('__usrRoot', '/var/www/FTP/');
//該目錄所對映的http網址
define('__usrWWW', '/FTP/');

一個teach群組的帳號為abc時則他的家目錄網址則會在
http://主機IP/FTP/teach/abc


與第1篇的不同處
第一點不同處:上篇中我們對安裝後的pureftp連結資料庫的設定檔
/etc/pure-ftpd/db/mysql.conf
並未啟用流量控制、容量配額、檔案數量...等等的限制功能,而要啟用這些功能,
我們對這個設定檔仍須加以修改。
第二點不同處:在第1篇中所建立資料表是最陽春的,僅夠配合預設安裝後的最低基本須求,
為了強化它的應用,因此上篇提到的資料表顯然是不夠用的,因此我們還有有另一份更完整的
建立表格的語法。

這部分在這包程式解開的目錄下己經幫您準備好了2個檔案:
第1個 mysql.conf.Adv.txt
資料庫連結的設定檔,您只須變更密碼,之後直接複製取代掉目前的/etc/pure-ftpd/db/mysql.conf
[操作指令]
sudo cp mysql.conf.Adv.txt /etc/pure-ftpd/db/mysql.conf
第1個 pureSQL.txt
建立表格的語法檔,您可以在第1篇建立資料表的地方以這個檔案的內容去貼上建立。



config.php設定檔的修改

在這config.php設定檔內您要修改的部分提示如下
a.項目1.部分管理密碼
b.項目2.資料庫使用者的密碼
c.項目3及項目4的路徑..要能對映,
d.同樣的項目5與項目6也要相互對映。
e.而項目6部分的路徑設定表示在項目3的路徑下會再建立那些分類目錄。
f.項目7的部分如果是RedHat系列的主機兩個參數都要修改為99,Debain系列的主機則不須變更。
g.項目8可自行填入Y或N。
H.這些都改好了,最後只剩一個工作,就是將項目3的路徑目錄權限設為777,剩的部分程式會幫您處理。


//---1.後台管理認證
$Admin['User']="AAA";
$Admin['Pass']="AAA";

//---2.資料庫連接設定
$MySQL['Host']='localhost';//----1.資料庫主機位置
$MySQL['User']='root';   //----2.資料庫使用者
$MySQL['Pass']='stu123';  //----3.資料庫使用者的密碼
$MySQL['Db']='pureftpd';   //----4.使用的資料庫名稱


//---3.所有帳號均集中到那個目錄下再分類
define('__usrRoot', '/home/edu/html/FTP/');

//---4.該目錄所對映的http網址
define('__usrWWW', '/FTP/');

//---5.帳號分類
$Opt_kind=array('A'=>'教師','B'=>'學生','C'=>'共用帳號','D'=>'其他');

//---6.帳號類別所對應的目錄(在集中目錄下)
$Opt_dir=array(
'A'=>'teach/',
'B'=>'student/',
'C'=>'office/',
'D'=>'oth/'
);

/*建立帳號時所對應的系統上的實體uid及gid
這裡使用的是33網頁伺服器的權限..
目的是要讓建立使用者時可以一併建立家目錄*/

//---7.新增帳號時所對應的系統UID及GID
$Opt_ID=array('uid'=>'33','gid'=>'33');

//---8.刪除帳號時是否連同個人上傳資料一起刪除(如果是N就要自行處理)
$Opt_Del='Y';//Y或N




可寫入檔的位置
這組程式用到了Smarty,也用到了暫存檔的功能
在程式所在的目錄下,您要建立一個tmp的資料夾屬性777可寫入。
再建一個目錄叫data,也是要屬性777可寫入。
這樣Smarty及暫存檔才能寫進去。
這些都處理完後,接著打開流覽器,輸入程式網址,
先登入後台,看看有沒有錯誤訊息,接著就可以新增虛擬帳號,
並用FTP工具連線看看了。


OK!漫長的路走完了吧!
將下載的程式包放到您的主機上,開始打造貴校的NAS吧!

補充說明:
本程式須在PHP5+MySQL+pure-ftpd-mysql
的環境下才有用途。

程式下載處


標籤: Ubuntu PHP Linux WebHD CHC
評論: 3 | 引用: 0 | 閱讀: 6871
  • 1 
sam [ 2012-04-16 19:00 網址 ]
請問一下紀老師:
裝完這個程式後
我用瀏覽器登入無法登入
而用filezilla連線時出現
530 sorry,but i can't trust you
的錯誤
查了一下網路的討論
發現原因是
帳號登入的 uid 小於 /etc/pure-ftpd/conf/MinUID 中的數字
我的系統是「ubuntu 11.10」
/etc/pure-ftpd/conf/MinUID 中的數字是「1000」
請問我應該把它改成「32」嗎?
還是該修改FtpMgr程式的「config.php」
把下面這一段
$Opt_ID=array('uid'=>'33','gid'=>'33');
其中的「33」改成「1001」呢?
sam [ 2012-04-16 08:34 網址 ]
解決了!
拍謝沒看到下面這段
//實際上線後將1改為0
ini_set("display_errors", 0);

另外想問紀老師:
1.管理介面好像沒有「登出」功能?
2.「登入視窗」和「警告視窗」的中文字都變亂碼?

請問以上該如何修正呢?
若您有空麻煩不吝賜教,感恩!!
sam [ 2012-04-16 06:45 網址 ]
請問一下紀老師

我開首頁時顯示以下錯誤訊息:
Notice: Undefined index: page in /var/www/FtpMgr/index.php on line 47

進後臺時則顯示更多錯誤訊息:
Notice: Undefined index: page in /var/www/FtpMgr/pureFTPmgr.php on line 46
Notice: Undefined index: page in /var/www/FtpMgr/pureFTPmgr.php on line 46
Notice: Undefined variable: err in /var/www/FtpMgr/pureFTPmgr.php on line 80
Notice: Undefined index: form_act in /var/www/FtpMgr/pureFTPmgr.php on line 54~57(太多恕刪)

請問我該如何修正呢?
  • 1