一個具備跨平台特性的多功能電子郵件帳號管理系統
楊國棟 趙志宏 盧昆宏
國立高雄大學圖書資訊館
E-mail:{kdyang, wilson, log}@nuk.edu.tw
摘要
在電子郵件使用普及的校園中,要避免電子 郵件帳號的濫用,找到一個有效管理電子郵件帳 號,並符合系統管理者所訂定的帳號管理政策, 以減少伺服主機資源的浪費。常是系統管理者需 要面對與思索的課題。 本文提出一個 Web-based 的電子郵件帳號管 理系統。本系統以 PHP、Perl 為系統開發工具, MySql 為資料庫,利用 FreeBSD 中的 PW 功能及 perl 中 telnet 模組為管理媒介,建置一套符合上述 需求的電子郵件帳號的管理系統,落實電子郵件 資源能合理與有效的利用。本文中以圖文描述系 統之原理、架構、特色與功能,作為系統管理者 開發及建置相關系統之參考。 關鍵詞:PHP,Perl,MySql,FreeBSD、PW、Telnet1
前言
隨著二十一世紀網路科技技術的突飛猛進及 網際網路各項服務被普遍的使用,使用電子郵件 傳遞資訊,已成為現代人最常使用的方式之一。 尤其以科技產業及學術界為最普及的兩大族群。 在這兩大族群中,每個人擁有一個電子郵件帳號 是基本的要求,而同時擁有兩個以上電子郵件帳 號的使用者,看起來也似乎是希鬆平常的事。而 對機構單位而言,提供單位內成員電子郵件帳 號,也成了單位必要的資訊服務。 雖然不管是哪一種平台的電子郵件系統,都 提供系統管理者能夠方便開設帳號的工具,不過 當帳號的數量增多,如何有效的管理與維護不同 帳號的使用期限及不同的容量限制,其客製化的 功能時,傳統的帳號開設工具便無法滿足系統管 理的需求。舉例而言,在校園的電子郵件帳號的 使用上,就會面臨到多種不同的身分,有新進的 教職員生,有教師的研究助理、國科會助理等非 校內正式編制人員,還有類似辦研討會所需的短 期電子有件帳號。而這些相關的帳號,在申請時 或許都有紙本或是相關的資料提供給系統管理 者,然而在人員離職時或是不需使用時,系統管 理者根本沒有相關的資料可以比對,該帳號是否 該留存或是刪除,日經月累後,人員來來去去, 若沒有對電子郵件帳號做有效的管理時,這些帳 號就容易產生『呆帳』及磁碟空間浪費的情形, 形成系統管理者管理電子郵件帳號的頭痛問題。 針 對 上 述 的 問 題 , 本 篇 論 文 提 出 一 套 以 Web-based 及具跨平台特性的電子郵件帳號管理 系統,不僅可以增加電子郵件帳號的使用效率, 並可方便管理者維護電子郵件帳號及提供查詢介 面給一般的使用者,第二節為系統的簡單介紹, 第三節描述系統的組織與架構,第四節針對系統 的各項功能作一介紹,第五節羅列本系統的一些 特點,第六節詳細地的說明了本系統開發時所利 用的技術,第七節列出一些本系統開發完成上線 後所獲得的效益,第八節說明了開發系統的應用 與結論。期望藉由開發本系統的一些結果與心得 與大家共同分享。2
系統簡介
本系統是建置在一台低階的伺服器上,伺服 器所採用的作業系統是 FreeBSD,並配合 Apache 作為 Web Server,我們利用 FreeBSD 中提供的 pw 指令為新增、刪除及鎖定電子郵件帳號的管理工 具,輔以 perl 中的 telnet 模組做為下達指令的橋 樑,達到程式化管理帳號的目標。同時,搭配 cron job 的排程機制,每日檢查逾期的電子郵件帳號, 針對長期沒有使用的電子郵件帳號給予停權鎖 定,以及鎖定一個期限後的帳號給予刪除的動 作。這樣的作法不僅提供友善的 Web-based 管理介 面,也具備跨平台及容易擴充的特性,可以支援 其它的作業系統,諸如 Solaris 及 Linux 等平台, 也可以只從這一台伺服器就可以連線管理多台伺 服器的電子郵件帳號,對於提升電子郵件帳號的 使用效率具有相當良好的效果。3
系統架構
此電子郵件帳號管理系統,其系統架構,如 圖 1 所示:硬體設備方面;
1. 使用了一台 HP 低階伺服器架設 Mail,
2. 使用一台低階伺服器架設 DataBase 及
Web Server,作為管理 Email 帳號用。 軟體方面: 1. 在 郵 件 伺 服 器 上 架 設 免 費 且 好 用 的 OpenWebMail 線上郵件管理系統,作為 一般使用者線上收發電子郵件使用的 介面。 2. 資料庫所採用的則是免付費的 MySql Database,它是一套快速解功能強大的 關連式資料庫管理系統。而管理資料庫 的介面上,可以利用 phpMyAdmin 來進 行,其 Web 化的管理介面,使管理者 進行資料庫的管理時會十分的便利。 3. 網頁開發所採用的則是目前很熱門,專 門為網路所設計的伺服器端程式語言 -PHP。選用 PHP 是因為其具有高效 能、低成本、易學易用、內建許多常用 函式庫、可與不同資料庫系統相連結等 的優點。 圖1 系統架構圖 這樣的架構有下列兩項個優點: 架構單純化:提供電子郵件收發是一項 基本的服務,所以各機關單位應該都有 架設 Mail Server 提供該項服務。在不變 動原本郵件伺服器的狀態下,僅增加一 台資料庫及網頁伺服器來進行控制。兩 台獨立伺服器的架構,單純又簡單。
任務分工化:電子郵件伺服器負責電子 郵件之相關服務。資料庫、網頁伺服器 則負責電子郵件帳號之管理。任務分工 明確,各自獨立。4
系統功能
茲將電子郵件帳號管理系統依使用者、管理 者及系統的分類對各項功能做一簡單之介紹。4.1 使用者-提供校內使用者查詢其他人的電
子郵件帳號
為解決使用者因業務聯繫的需要,必須方便 地、立即地獲知校內成員之電子郵件帳號。本系 統提供了一個可以查詢電子郵件帳號的介面,如 圖 2 所示。 此介面提供了校內使用者可以查詢包含校內 成員、單位系所及其他於電子郵件伺服器中開設 的電子郵件帳號之管道。其查詢之方式可利用姓 名、員工編號、帳號、部門等不同的條件來進行 查詢、這種多條件式的查詢方式,滿足了一般使 用者操作上的需求。而採用 Web-Base 的方式亦方 便地提供使用者可以隨時可以上網查詢的捷徑。 圖2 查詢電子郵件帳號畫面4.2 管理者-建立電子郵件帳號
電子郵件帳號管理者在建立一個電子郵件帳 號時的步驟大致上可以分為下列幾項:開設新帳 號、設定電子郵件信箱容量、設定群組等。雖然 操作設定之步驟並不是十分複雜,但重複操作就 會覺得枯燥、繁瑣。為將建立電子郵件的操作步 驟自動化,簡化管理人員的操作程序並達到有效 管理電子郵件帳號的目的。本系統在管理者介面 中提供一自動化建立帳號之介面,如圖 3 所示。 管理者將使用者之帳號、密碼等相關之資料 輸入後。系統就會自動地依據所輸入之資料,執 行新增帳號、設定容量、設定群組等操作指令。 免除了管理者人工化操作的困擾。 圖3 新增電子郵件帳號畫面4.3 系統-使用期限屆滿,自動鎖定帳號
長時間沒有使用的電子郵件帳號,除了會佔 用郵件伺服器上的磁碟空間外,對於管理上亦是 一個相當棘手的問題。本系統設計了一個自動化 的功能。每日的特定時間,系統會主動清查使用 期限到期的帳號,並將該帳號給予鎖定。其鎖定 之帳號系統管理者可以手動將其解除鎖定恢復使 用,如圖 4 所示。若電子郵件帳號鎖定一個月後 尚無人向管理單位反應,系統即自動地將該帳號 完全刪除。在此鎖定期間,使用者發現該帳號無 法使用時,就會向管理單位反應。管理者可以在 此管理介面,直接將該鎖定之帳號解除鎖定,恢 復該電子郵件帳號之使用權限。恢復電子郵件帳 號權限之步驟只需要按一個鈕,對管理者而言, 其操作程序十分之簡便。 圖4 鎖定電子郵件帳號畫面4.4 管理者-手動鎖定及刪除帳號
在管理者端的介面當中,設計了可供管理者 利用手動的方式,來進行電子郵件帳號的鎖定及 刪除的操作介面,如圖 5 所示。管理者可利用此 操作介面,方便地對帳號進行管理。 圖5 管理者端管理畫面4.5 使用者-發送群組信件
大部分學校對於需要發送電子郵件通知全校 教職員生之重要訊息,為求慎重及資通安全上的 考量。目前較多的作法是,要求使用者將欲寄發 通知訊息之相關內容先行寄給計算機中心。再由 計算機中心整理過後再行寄發。 本校目前的作法是利用 OpenWebMail 所提供 之特定檔案格式,將本校之電子郵件帳號,依據 使用者之身份類別匯入該檔案。如此一來,每位 使用者在其通訊錄中就會出現學校所提供的電子 郵件帳號群組,如圖 6 所示。一般使用者即可以 利用這些電子郵件群組發送郵件通知。 圖6 OpenWebMail 發送群組信件畫面5
系統特色
5.1 建置成本低廉
硬體的建置除原本的電子郵件伺服器外,只 需一台低階伺服器來進行管理,對於硬體的 建置來說是相對低廉的。甚至可使用一般個 人電腦等級的硬體來架設,這樣就可節省更 多的建置成本了。 在軟體方面,系統的建置所使用的軟體,包 含了 FreeBSD 作業系統、Apache 網頁伺服 器軟體、MySql 資料庫、OpenWebMail 郵件 管理系統及 PHP、Perl 等開發時所需的開發 軟體。皆採用免付費的軟體。因此,在軟體 的成本上,是不需要花費任何的費用。5.2 整合不同系統,節省開發系統之時程
在個人郵件管理方面,由於 OpenWebMail 系 統已具備相當完整的功能,且其開發團隊針對該 系統不論是在功能上或是效能上,都還在不斷地 開發及更新中。我們不需要投入大量的人力及時 間,去從頭開始設計、開發這樣的一套合用的電 子郵件介面。此外,使用該系統並不需要給付任 何的費用。基於以上種種的優點,對於需要一套 功能完整、能夠立即上線的郵件管理系統且開發 系統人力不足的機關單位而言,是一項十分完善 的解決方案。5.3 管理帳號自動化
此系統利用 FreeBSD 所提供之 PW 指令及 Perl 語言中所提供的 Telnet 模組作為管理帳號的工 具,再搭配資料庫時間欄位的設定及狀態欄位的 改變作為觸發管理工具的信號。如此,就可以使 系統對於使用者帳號之新增、信箱容量之設定以 及帳號之鎖定及刪除等,屬於管理者操作的程序 皆自動化。詳細的技巧運用容後說明。這樣管理 者在進行管理帳號的工作時,就只需要針對電子 郵件帳號的使用期限進行設定。其他的工作都交 由系統的自動化程式去執行即可。5.4 依身份別設定群組
針對學校有許多不同身份的成員,為方便管 理及發送電子郵件。本系統在設計時,利用資料 庫的欄位設定,將本校成員做了大致上了群組分 類;一為職員工類、一為教師類、一為研究助理 類、一為單位系所、另外將志工及其他身份者各 歸為一類。我們可以依據身份類別,來設定該身 份類別所屬成員電子郵件帳號的容量、使用期限 等細部的資料。在發送群組郵件方面,亦可利用 資 料 庫 篩 選 的 功 能 , 針 對 不 同 的 群 組 , 匯 出 OpenWebMail 系統可接受的 address.book 群組檔 案。使用者即可利用該檔案寄發群組郵件。這樣 將電子郵件帳號依使用者身份設定群組的作法, 對於管理者在管理帳號上是十分方便的機制。5.5 根據使用期限,自動鎖定電子郵件帳號
在管理電子郵件帳號的經驗中,我們曾遇到 這樣的一個問題。離職的人員在離開學校時,並 不會主動通知管理單位刪除其所擁有的郵件帳 號。就算有通知,也常常是要求延長該帳號的使 用期限一段時間。對於這種我們稱為『呆帳』(註 一)的電子郵件帳號。我們提出的解決方案就是; 針對特定的帳號給予使用期限的設定,使用期限 一到立即將該帳號鎖定,使其無法使用。當鎖定 的帳號鎖定達一個月時,系統即判定其為『呆帳』 而將其帳號刪除。 這樣的作法除可將屬於長期不用的電子郵件 帳號篩選出來外,還可以適時地清除郵件伺服主 機硬碟空間,增加磁碟空間的使用率。此外,還 可以篩選出還在使用該電子郵件的人員,給予一 個新的使用期限設定。 註一:呆帳:長期靜止不用的電子郵件帳號5.6 發送大量郵件權責之轉移
OpenWebMail 的 系 統 中 提 供 了 一 個 address.book 的 檔 案 , 該 檔 案 放 在 /usr/local/apache/cgi-bin/openwebmail/etc 下 。 Address.book 可 以 用 來 作 為 群 組 郵 件 位 址 資 料 用。在該檔案的資料,每一位使用者都能夠看到 並使用。其檔案格式如下: 群組名稱 1@@@帳號 1,帳號 2…@@@ 群組名稱 2@@@帳號 1,帳號 2…@@@ 有了上述的檔案,每一位使用者就可以在其 通訊錄中看到該檔案所設定之群組,且可以點選 該群組來發送群組郵件。這樣就不需要再將群組 郵件先寄給管理單位,再由管理單位來寄發。 透過上述的作法,管理者所要做的工作可以 精簡到只剩下列兩項: [1] 想辦法將所有的電子郵件帳號,依據不 同的群組匯入該檔案中。 [2] 給予使用者適時的教育訓練,使其明瞭 使用群組郵件的操作方式及所應注意 事項。 這樣的作法就將發送群組郵件的工作,由原 本屬於電子郵件管理者常態性的工作,進而轉移 到群組郵件發送的需求者上。6
應用技術說明
6.1 PW 的使用
傳統在 Unix 系統上對於帳號的管理上,要新 增 一 個 新 的 使 用 者 , 最 常 使 用 的 指 令 就 是 adduser。使用 adduser 指令操作的步驟是跟隨系統 一步一步地要求管理者輸入新使用者的 name、 UID、Group、Shell、Home Directory、Password 等等的資料,一共是 14 個步驟。對於想要將其程 式化的系統開發者而言,並不是一個很好的方 式。我們希望能有一個指令就可以將開帳號的步 驟都包括在裡面。因此,PW 指令就比較符合系統 程式開發的目的。 茲將本系統所使用到 pw 相關的指令明列如 下:pw -- create, remove, modify & display system
users and groups [1] 帳號新增:
pw [-V etcdir] useradd [name|uid] [-C config]
[-q] [-n name] [-u uid] [-c comment] [-d dir] [-e date] [-p date] [-g group] [-G grouplist][-m] [-k dir] [-w method] [-s shell] [-o] [-L class] [-h fd]
[-N] [-P] [-Y] 我們可以利用 pw useradd 的各項參數,將使用 者帳號、目錄、shell、密碼等資料以一次的指 令傳達給系統。系統就會將使用者的帳號及相 關目錄建置完成。 [2] 帳號刪除:
pw [-V etcdir] userdel [name|uid] [-n name] [-u
uid] [-r] [-Y]
利用 pw userdel 的指令,只要提供電子郵件帳 號,系統即會自動將該帳號及其相關的目錄刪 除。
[3] 帳號鎖定:
pw [-V etcdir] lock [name|uid] [-C config] [-q]
使用 pw lock 的指令搭配使用者之帳號,可令 具有時效性的電子郵件帳號暫時失效。使用者 將無法再使用該系統。
[4] 帳號解除:
pw [-V etcdir] unlock [name|uid] [-C config]
[-q] 此指令與 pw lock 正好相反。針對特定的帳號 恢復其使用的權限。
6.2 Perl 中 Telnet 模組的使用
會使用 pw 來管理帳號之後,要如何將適當的 指令下達到郵件伺服主機上,這就必須仰賴 perl 中 telnet 模組了。這裡就將系統會用到 telnet 的方 法說明如下: [1] 呼叫、引用 telnet 模組 use Net::Telnet(); 要使用 telnet 功能前都需要宣告使用這個模 組。 [2] 產生 telnet 物件 $obj=new Net::Telnet; 詳細的指令如下: $obj=Net::Telnet->new([Binmode=>$mode,] [Cmd_remove_mode=>$mode,] [Dump_log=>$filename,] [Errmode=>$errmode] [Fhopen=>$filehandle,] [Host=>$host,] [Input_log=>$file,] [Input_record_separator=>char,] [Option_log=>$file,] [Output_log=>$file,] [Output_record_separator=>$char,] [Port=>$port,] [Prompt=>$matchop,] [Telnetmode=>$mode,] [Timeout=>$secs,]); 利用 new 的方式來產生一個新的物件。如 此,就可以利用該物件來進行 telnet 工作了。 [3] 關閉 telnet 物件 $ok=$obj->close; 這是將暫存區連線的資料全部刪除。 [4] 開啟連結 $ok=$obj->open($host); 詳細的指令如下: $ok=$obj->open([Host=>$host,] [Port=>$port,] [Timeout=>$secs,]); 這是將暫存區連線的資料全部刪除。 [5] 輸出 $ok=$obj->print(@list); 我們利用這個指令,來對遠端所連結的郵件 伺服主機,下達操作指令。 [6] 等待 $ok=$obj->waitfor($matchop); 詳細的指令如下: $ok=$obj->waitfor([Match=>$matchop,] [String=$string,] [Timeout=>$secs,]); 我們運用這個指令,來對遠端所連結的郵件 伺服主機,下達操作指令。 除了上述的幾種方式之外,還有 login()及 cmd()等蠻多的方法可供使用。運用 Telnet 的方 式,連到郵件伺服器上,下達管理的指令,管理 者只需要利用操作介面的操作步驟,即可完成所 有管理帳號的操作設定程序。7
使用效益
這套電子郵件帳號管理系統使用至今已接近 兩年的時間。其簡易的管理端操作介面,除了讓管理者在進行帳號管理時十分方便。就連同樣是 管理單位的非專司電子郵件帳號之管理者同仁, 也可以藉由簡單易懂的管理介面,達到立刻上手 的地步。 另外,系統提供使用者查詢電子郵件帳號介 面的作法,免除了使用者不斷向管理單位查詢其 他使用者電子郵件帳號的困擾。將所有的查詢業 務由需求者自行上網查詢。 此外,這樣的系統開發方式,將管理者日常 的管理工作逐步的系統化及程式化後。管理單位 在面對管理人力不足的情況時,就可以藉由簡化 日常工作程序,達到平衡日益增加的工作負擔。 8 結論 利用資料庫搭配 perl 的 telnet 模組其實可以應 用的範圍其實還是蠻廣的,只要是平常的管理作 業中,有利用到 telnet 的方式來進行管理行為的, 都可以將其程式化、系統化。舉例而言:網路設 備的管理與操作、伺服器的管理與操作等。以我 們而言,目前應用資料庫搭配 telnet 模組所開發的 系統中,除了本文所介紹的電子郵件帳號管理系 統外,還有學生宿舍網路管理系統、校園網路設 備監控系統等。
參考文獻
[1] 王 俊 斌 ,“FreeBSD 5.X 架 設 管 理 與 應 用”,2004[2] Tim Converse,Joyce Park, “PHP Bible 2nd Edition”,2003
[3] http://search.cpan.org/ [4] http://www.php.net/ [5] http://www.perl.com/