第 169 期 AWStats — 多功能記錄檔分析工具─自由軟體鑄造場電子報─智邦公益電子報
enews.url.com.tw · February 07,2012[源碼快報] 英國政府新採購指引要求部署開放標準
謝良奇/編譯 2011-03-08
英國政府內閣辦公室 (Cabinet Office) 日前公佈了新的採購指引。文中表示,所有政府部門單位採購軟體、技術架構、網路安全產品,或其他產品與服務時,應該儘可能使用開放標準。英國開放源碼整合商 Sirius IT 執行長 Mark Taylor 表示,內閣辦公室的新政策聲明,在當今全歐洲政府中首屈一指,也是為開放源碼軟體創造公平競爭機會所邁進的一大步。Mark Taylor 過去也曾發起呼籲政府採用更多開放源碼與自由軟體。
而該文件對於開放標準 (open standard) 這個新興詞彙所下的定義是,開放標準的智慧財產權授權是以免授權金、且不可撤回為其授權標準。文件之中更進一步解釋開放標準,認為其為它是經由開放且獨立程序所建立,同時這些程序乃受到 W3C、ISO 等公認標準化組織的核可。開放標準本身必須有詳細的文書陳述,並且以零或低成本的方式公開,使用該開放標準的智慧財產權則在永免授權金、永不撤回的基礎上提供使用。此外,該指引文件中也要求,在開放標準之下,智慧財產可以依不同的開發目的,且透過跨越平台的方式來分享與實踐。
該政策文件發表後,英國內閣辦公室政府副資訊長 Bill McCluggage 隨即與供應商舉行會議,討論公部門在資訊科技業務上,擴大開放源碼應用的期望。儘管此舉顯示該國政府似乎開始嚴肅看待使用開放源碼產品,但這是否意味開放源碼在公部門的廣泛應用上已經不遠?
與高階供應商會後,McCluggage 指出,英國政府正在尋求一個以開放源碼進行實作的小組。最後參與策略必須能解決系統整合問題,畢竟我們無法採購不存在的東西。顯示該政府對開放源碼抱持認真的態度。
TechMarketView 分析師 Georgina O'Toole 則認為,政府不太可能將最關鍵的系統替換成開放源碼產品。對於部份應用軟體,例如確保如補助金準時發放應用軟體,政府還是會持續採取規避風險的態度並固守傳統模式。另外,來自 Microsoft 的產品也有其他令人信服的理由,例如,Microsoft 產品較容易與許多 CRM 產品整合,市場上也有較多擁有相關實作技術的人。
Quocirca 主任分析師 Clive Longbottom 同意此觀點。他說,由於公部門多數仍使用 Microsoft 產品,能夠改變的範圍並不大。然而,當越來越少人購買預載 Windows 的個人電腦,最終將會出現其他可行選項。Longbottom 表示政府無法持續負擔需付費升級的 Mircosoft 產品,因此他們必須採取開明的態度,並維持高度彈性。但是目前我們面對的狀態,依舊是非常倚賴以 Microsoft 為中心的產品。
對於內部專案,開放源碼將是更實際的選擇。Longbottom 指出,只要其設計使得其他 SAP 或 Oracle 系統能讀取其資料,開放源碼可以應用於 ERP 系統上。事實上,開放源碼已經被運用在政府的部份領域,例如英國工作和退休金部 (Department for Work and Pensions) 使用了 Linux 系統;衛生部 (Department of Health) 也在部份主要專案上使用開放源碼軟體。
有趣的是,商業軟體聯盟 (Business Software Alliance,BSA) 為了保護其主要支持者,例如 Microsoft 和 Adobe 等私有專利軟體公司,一向不吝於散佈心理恐怖戰術資訊 (FUD information) ,這次也很快地警告英國政府,支持開放標準與免權利金軟體將是一個嚴重錯誤。BSA 宣稱英國政府若支持開放標準,意即將最大技術支援團隊 BSA 排除在外,因而限制了市場,將增加政府電子化所需的成本。
然而,按照此一邏輯,若選擇私有專利軟體,亦即將潛在供應商侷限到支持私有標準的更少數者,該解決方案會增加更多成本。鑑於政府肩負推廣開放性的角色任務,意味著政府應該完全支持開放標準,以及免權利金的授權方式。
日前,英國內閣辦公室針對政府使用的開放標準,發佈了一份問卷。內閣辦公室部長 Francis Maude 則針對該問卷表示,他們的首要目標之一,即為建立一種標準,讓資訊與通訊技術更為開放、成本更低、也促使不同應用軟體能互相編寫彼此專用格式檔案,並藉由這個標準來統一政府資料與系統。為此,他們需要知道哪些標準最為重要。Maude 呼籲企業或社群組織協助政府選擇正確的標準,簡化與政府的溝通。
相關網址:
1. 英國政府定義開放標準為免權利金
http://www.h-online.com/open/news/item/UK-Government-defines-open-standards-as-royalty-free-1197607.html
2. BSA 宣稱開放標準將增加成本
http://www.techdirt.com/articles/20110302/02374413324/bsa-claims-open-standards-will-increase-costs.shtml
3. 政府真能移往開放源碼 IT?
http://www.computerweekly.com/Articles/2011/02/25/245599/Can-the-government-really-move-to-open-source-IT.htm
4. 內閣辦公室的開放標準調查
http://blogs.computerworlduk.com/the-tony-collins-blog/2011/03/cabinet-office-survey-on-open-standards---just-120-questions/
[法律專欄] 開放源碼公眾授權模式在生命科學領域的應用
林珈宏/文 2011-03-17
為何生命科學研究者會有這樣的想法呢?因為做實驗需要許多材料 (materials)。傳統上該領域的研究者必須簽署「材料移轉契約 (material transfer agreements, MTA)」才能取得一些特殊的研究資源及工具(註四)。但是,跟傳統程式開發的問題一樣,若要取用他人的程式碼或研發成果,一方面不知道誰已經開發出自己希望取得的程式碼,想付費取得授權都不知要找誰;二方面取得授權的條款各異,增加交易成本而遲滯開發進程;在傳統的材料取得方式,也會遭遇類似的問題。
例如,許多學術期刊文章中不僅經常欠缺材料取得的出處資訊,同時也沒有標準化的出處標註方式;並且,材料擁有者不見得會向公眾揭露其 MTA 內容及取用條件,因此研究者也很難判斷必須花費多少努力及成本去取得它們。即使順利取得,因為各 MTA 的內容並非統一,甚至個別差異甚大,在進行研發時即可能遭遇權利義務不相容的問題。簡單來說,利用各種 MTAs 的做法,如同在資訊領域傳統上簽署各種智財授權契約一樣,繁雜的規定使研發人員無所適從,不論是研發過程可如何利用材料、或是研發成果可以如何利用,都還需要專業人員的協助規劃,始能釐清。
由上述可知,研發人員透過傳統 MTA 制度取得材料可能會產生許多研發以外的工作,如此將導致只有大型的學術單位或藥廠、生技公司可以負擔;個人研究者、小型或第三世界機構的研發則會遭到諸多限制,造成強者恆強、弱者益弱的研發環境。因此,有人提出應該要將自由/開源軟體及創用 CC 這類公眾授權模式應用在實驗材料上,才能解開研究的限制、更能裨益於學術自由。創用 CC 的子計畫 "Science Commons" 油然生焉。(註五)
一言以蔽之,自由/開源軟體及創用 CC 這類公眾授權模式的成功之處在於:1. 開放而清楚的遊戲規則;2. 不限制任何人參與。它們運用了條款內容建構出共同開發的權利歸屬及其嗣後的利用準則;如果共工創作、取用素材的過程還要擔心侵權違法,將會壓抑人類無窮的創造力。並且,公眾授權契約的特點在於不必耗費時間與原權利人逐案磋商,只要取得素材的利用行為未違反該條款內容,就視為持續取得合法授權的地位。甚至,條款本身也可設計為具有 copyleft 特性(註六),讓利用該素材的改作成果,亦須以相同方式進行分享,達到互惠互利。這也是為何生科領域研究者認為,他們或許也可以利用類似模式進行研發的原因。
然而,經過幾年的努力之後,目前生科領域的公眾授權模式尚無顯著的突破。可能的原因是,生科研發的領域與程式碼的開發有成本上、性質上以及權利上的相異之處。
成本上,生命科學的研發需費甚鉅,並不像程式碼只需要個人電腦即可開發,而需要透過實驗室購買昂貴的機器來完成;此外,通常也必須聘用實驗團隊才能進行開發,花費確實不容小覷。在移轉、交換材料這方面,也不可能像開放源碼專案可透過網路供人下載的那般輕易;即使透過公眾授權模式,有形的材料仍需收取一定的複製及維護成本費用,遑論是一些無法或難以複製的材料,更是物以稀為貴。
性質上,由於程式碼是數位化後的資訊,容易透過網路傳遞,並可永久保存,有利於分時分地式的共工開發;但是生命科學研發的對象常是實體的細胞株、幹細胞等生物組織,取得目標細胞組織 (target cell / tissue) 不易,更難想像如何透過虛擬的介面才能針對實體材料進行共工開發。並且,研究者的個人意志很難影響到機構的政策,即使嚮往程式開發者利用開放源碼模式的貢獻行為,其將研發結果釋出於公眾之前,仍須說服其所屬機構及出資者,始得為之。這也是與資訊領域截然不同之處。
權利上,程式碼不需註冊,完成時即取得著作權保護;科學研發則必須向政府機關申請,才能獲得專利權。一旦花費金錢取得專利權,機構通常不願再無償對公眾釋出這個權利;反之,若只是發表研究成果,未涉及專利問題,則研究成果本身也不見得有權利可授與。所以,不論在成本、自由度、開發環境以及權利層面,都有所限制。(註七)
雖然目前公眾授權模式應用於生科領域尚未成功,但若先將材料範圍從所有生物材料限縮至「人類生物檢體」來討論,筆者認為,具有 copyleft 性質的材料移轉模式,或許將更有助於醫院取得患者生物檢體的可能性,同時亦可尊重患者的感受。
在醫病關係中,告知後同意 (informed consent) 是最重要的法律原則;醫院若欲將病人特殊病症之患部或特殊基因之檢體用於研究開發,必須先取得其同意,始得為之。但是,傳統上的實作卻是病人被告知要簽同意書才能動手術,不論其了解同意書內容與否,為了醫療仍會簽字。其後,研究機構將研發成果申請專利並賺取高額利潤,對於患者而言頗有權利侵害感,但卻無可奈何。在這個面向上,或許設計一套具有 copyleft 性質的同意書及 MTA 可以減少醫病關係的緊張感。(註八)例如,醫院可以告知患者,其術後檢體將用作研究用途,但該檢體材料及研究成果,院方將依 copyleft 方式向後再授權給公眾,亦即任何從事相關研究的人皆能在不必支付高額費用之情況利用之,患者等於將其檢體貢獻給生物醫學界,並促成科學更進一步的發展,同時亦拘束收受者必須再以相同模式分享其研發及改造的成果,以落實研發互惠的精神,進而得以裨益全人類的科技發展,縮小巨型研發機構與小型或第三世界機構的研發落差。如此一來,因為患者在感受上形同捐血救人,具有道德正當性、又無權利剝奪感,故可使患者更有意願捐出其檢體。
本文提出上述可能性,但實作上應如何設計,仍未有具體建議;例如若能建構出相類的公眾授權契約,應如何合致於人體生物資料庫管理條例或其他國家的相關法令?面對患者的基因隱私權,應如何合乎個人資料保護法的規定?又醫學倫理上可否如此自由地運用這些生物材料?這些都是程式碼在公眾授權不會遭遇的問題。筆者的目的出於拋磚引玉,也希望有興趣的朋友們可以一同交流、討論這個議題。
註一:例如,維基媒體基金會旗下的維基百科 (Wikipedia) 在成立時是利用 GNU Free Documentation License (GFDL) 進行授權,於 2009 後改採並用創用 CC 及 GFDL 的雙重授權。參見維基百科使用條款:http://wikimediafoundation.org/wiki/Terms_of_Use。
註二:Top 10 Web Properties Worldwide (September 2009)。參見 http://wikimediafoundation.org/wiki/Press_releases/Wikimedia_and_comScore_partnership_November_2009。
註三:參見 Yochai Benkler, Coase's Penguin, or, Linux and the Nature of the Firm (2001),http://www.yale.edu/yalelj/112/BenklerWEB.pdf。
註四:材料範圍可包含細胞株、生長因子、DNA 資料庫或複製體等生物性材料,或是若干非生物性或化合材料,諸如奈米材料、化學試劑以及化學基質等等。
註五:參見 Science Commons Project,https://creativecommons.org/science。事實上,美國國衛院 (National Institutes of Health, NIH) 已提出標準生物材料移轉契約 (Uniform Biological Material Transfer Agreement, UBMTA) 以及簡易信函契約 (Simple Letter Agreement, SLA) 以降低同時存在各種 MTAs 的複雜度,但當事人可以依個案選擇使用該契約與否或調整其內容,使得此契約又回到非標準化的情況,並且 UBMTA 及 SLA 無法相容於營利事業,因為都僅限於學術研究的目的。這將可能造成產學合作的障礙。
註六:參見自由軟體鑄造場法律小辭典,Copyleft〈公共版權〉,http://www.openfoundry.org/tw/glossary/736-copyleft。
註七:參見孫世昌,開放生物技術淺析,科技法律透析,2008 年 11 月。
註八:此想法是受到馬偕醫院病理科陳冀寬醫師的啟發,筆者才開始接觸相關文獻,並在工作餘暇思索將 copyleft 及開放源碼公眾授權模式應用於生物材料移轉契約的可能性。思考過程中多次與陳醫師交換意見、腦力激盪;在此筆者亦須再次感謝陳醫師的熱誠及貢獻。
[源碼快報] OpenLogic 研究報告:71% 開放源碼行動軟體未遵守授權
謝良奇/編譯 2011-03-17
OpenLogic 發佈一份針對 iOS 和 Android 應用軟體遵循授權的調查報告,調查發現使用開放源碼或自由軟體的應用軟體,超過 71% 的比例並未遵守程式碼的授權條款。
開放源碼產品與服務供應商 OpenLogic 運用其 OSS Deep Discovery 工具,檢視來自 Apple App Store 和 Android Market Place 的 635 個行動應用軟體。為了在取樣上造成誤差,該公司從應用軟體商店類別的前 10 大熱門應用程式、美國 Fortune 500 前 20 大公司、有廣告功能的應用程式中,挑選報告中的候選應用軟體。因此,OpenLogic 檢視的應用軟體,不僅僅包含獨立開發者或小型公司開發的軟體,還包括來自知名品牌和媒體組織的銀行、運動應用軟體以及遊戲。
在 OpenLogic 檢視的 635 個應用軟體中,有 52 個包含 Apache 授權的程式碼,而有 16 個包含了 GPL/LGPL 授權的程式碼。其中,僅有 29% 的應用軟體遵守各自的授權。GPL/LGPL 和 Apache 開放源碼授權兩者都要求開發者提供授權副本,GPL/LGPL 授權更要求開發者提供管道供使用者取得原始程式碼。
依據應用軟體商店細分,有 27% 的 Android 應用軟體遵守授權,遵守授權的 iPhone/iOS 軟體則有 32%。令人驚訝的是,使用 GPL/LGPL 的 Android 應用軟體中,授權遵守率竟然是 0%。顯然地,儘管被標榜為另一個開放源碼成功案例,Android 應用軟體作者事實上卻漠視了構築其軟體背後的規則。
OpenLogic 產品與行銷資深副總裁 Kim Weins 表示,缺乏授權遵循對他們來說並不令人驚訝,因為開發者和企業對於他們的開放源碼使用情況或如何遵守授權,通常認識不清。Wiens 補充說,在行動應用軟體上,許多非技術企業湧入成為軟體散佈者,這些公司在開放源碼授權遵守的法律議題上,可能缺乏經驗。
更進一步,OpenLogic 的調查發現,若干應用軟體撰寫其最終用戶許可協議 (EULAs) 時,顯然沒有意識到應用軟體包含了開放源碼。Weins 指出,有可能開發者知道,但起草協議的律師卻不清楚。她說發生原因通常是公司缺乏正確程序與工具,或是他們並未意識到此一議題。
此外,Weins 認為,開放源碼軟體經常包含了採用完全不同授權的其他開放源碼軟體,這一點意味著即使是開發者,也可能漏掉納入其程式碼中其他開放源碼軟體的授權。
Weins 指出,許多行動與平板開發者對於所使用的開放源碼和開放源碼授權的要求,缺乏完整的理解。其結果就是違反授權的軟體遭下架處理。例如,自由軟體基金會 (Free Software Foundation) 曾宣稱 GPL 與 iTunes 授權不相容,Apple 也已經從 AppStore 撤下若干被認為是 GPL 授權的應用軟體。Google 也收到撤除違反 GPL 的 Android 商店應用軟體的要求。應用軟體開發者必須注意開放源碼授權遵守,以確保應用軟體不受法律行動影響。
Weins 也表示,該公司在此一研究中對於調查的應用程式,採取了相當保守的認定方式,以避免過度報告違反授權的情況。例如,jQuery 的 GPL 比對由於 jQuery 採用 GPL 或 MIT 的雙重授權而被排除在研究範圍之外。
OpenLogic 則銷售名為 OLEX App Store Edition 的產品,提供開發者在提交開發的軟體至應用軟體商店前,事先自行掃描上傳的應用軟體,避免違反授權的情形發生。
OpenLogic 的發現多少也解釋了如 Apple 和 Microsoft 等廠商,在各自應用軟體商店禁止開放源碼應用軟體的部份原因。與其抱怨這些廠商排除特定開放源碼應用軟體的商業決定,開放源碼支持者或許更應該將重點放在教育那些持續忽視開放源碼授權精神的開發者。
相關網址:
1.OpenLogic 調查:71% 有自由與開放源碼程式碼的行動軟體未遵守授權
http://www.h-online.com/open/news/item/OpenLogic-survey-71-mobile-apps-with-FOSS-code-do-not-comply-1204074.html
2.調查報告:70% 的 iPhone 和 Android 開放源碼應用軟體違反授權
http://news.yahoo.com/s/infoworld/20110308/tc_infoworld/153892
3.Android App 作者忽視開放源碼授權
http://www.techeye.net/software/android-app-writers-ignore-open-sauce-licensing
4.行動應用軟體違反了開放源碼授權?
http://www.linuxplanet.com/linuxplanet/newss/7315/1/
5.多數開放源碼 Android 與 Iphone 應用軟體違反授權
http://www.theinquirer.net/inquirer/news/2032476/source-android-iphone-apps-violate-licences
6.OpenLogic:行動應用軟體未能遵守開放源碼要求
http://www.mobilebusinessbriefing.com/apps/article/openlogic-mobile-apps-failing-to-meet-open-source-requirements
7.Android、iPhone、iPad 應用軟體不合格的程式碼授權報告
http://www.computerweekly.com/blogs/open-source-insider/2011/03/android-iphone-and-ipad-apps-get-naughty-code-license-report.html
8.多數 Android、iPhone 應用軟體違反開放源碼規則
http://www.networkworld.com/news/2011/030911-android-iphone-apps-open-source.html?t51hb&hpg1=mp
[源碼快報] Novell 公佈 LibreOffice 商業支援版本
謝良奇/編譯 2011-03-10
Novell 日前宣佈推出 LibreOffice 的完整企業級商業版本。LibreOffice 是 OpenOffice.org 的分支,也是其主要貢獻者與支持者之一。在 Novell 的 LibreOffice 網頁上則載明,LibreOffice 是 OpenOffice.org Novell 版本的繼任者。
Novell 表示,LibreOffice 版本提供的 Novell 服務,共納入六個應用軟體,包括文書處理器、試算表、簡報軟體、資料庫、數學和繪圖。它提供與 Microsoft Office 彼此無接縫的相互操作性,亦即可以 LibreOffice 開啟 Microsoft Office 格式的檔案,反之亦然。與其他生產力套件相比,每使用 LibreOffice 滿三年,可以為使用者節省 50 到 60% 成本。
LibreOffice 的企業級商業版本定價從每機每年 120 美元起跳。Novell表示,使用 LibreOffice,比使用 Microsoft Office 2010,可以減少三到四倍預算成本、又可以得到完整的世界級支援、同時不需要額外購買軟體保證 (software assurance)。使用 LibreOffice 可以減少用戶的桌面總持有成本 (Total Cost of Ownership, TCO),節省的花費還可轉供資訊科技其它用途使用。
雖然在 LibreOffice 的產品說明頁中,其列出的系統需求顯示該產品要求的作業系統僅包含 Windows。不過,從另一則外電得知,免費的 LibreOffice 3.3.1 版本已經可從文件基金會 (Document Foundation) 的網站上下載 (http://www.libreoffice.org/download),也將以自由套件的型式隨著 Linux 系統被散佈。
相關網址:
1. Novell: LibreOffice 如今有了商業支援
http://www.h-online.com/open/news/item/Novell-LibreOffice-now-with-commercial-support-1202127.html
3. Novell 放棄 OpenOffice,公佈 LibreOffice 商業版本
http://www.muktware.com/n/04/2011/808/novell-drops-openoffice-announces-libreoffice-commercial-edition
http://www.muktware.com/n/04/2011/808/novell-drops-openoffice-announces-libreoffice-commercial-edition
4.Novell 公佈商業支援的 LibreOffice 版本
http://lxnews.org/2011/03/07/novell-commercially-supported-libreoffice/
http://lxnews.org/2011/03/07/novell-commercially-supported-libreoffice/
[源碼快報] VMware 購併圖形化開發工具 WaveMaker
謝良奇/編譯 2011-03-15
虛擬化軟體廠商 VMware 宣佈購併 WaveMaker。WaveMaker 是一家開放源碼軟體公司,協助非軟體開發人員透過圖形化介面,建構出基於開放源碼框架 Spring 的 Java 網路應用軟體。這是 VMware 買下 SpringSource 後,鎖定軟體開發的一連串購併案中的最新交易。
VMware 是在 18 個月前購併 SpringSource,SpringSource 正是開放源碼 Java 開發框架 Spring 背後的公司。由於 WaveMaker 建構於 Spring 程式模型之上,對於該虛擬化技術公司而言,將該軟體收編至旗下的雲端業務中,並不令人感到意外。
這些購併,包括雲端傳訊服務 RabbitMQ 和資料管理軟體供應商 Gemstone 在內,給了 VMware 適合高度虛擬化雲端環境的一系列應用軟體開發工具。VMware Spring 業務部門營運副總裁 Mark Brewer 表示,WaveMaker 將 Spring 程式開發模型與相關底層,抽象化為一套工具,用戶不需要知道背後的運作細節。
根據 SpringSource 創辦人,目前是 VMware 應用軟體開發策略決策者的 Rod Johnson,買下 WaveMaker 允許非專業程式開發者甚至是企業使用者,都能取用雲端時代的開發工具堆疊。
WaveMaker 所提供的是一套圖形化工具,可讓用戶以拖放方式建立網路應用程式。該軟體的用戶可以將應用程式直接部署到內部雲端或各式的平台,如 Amazon、Rackspace、OpSource、Eucalyptus。該軟體可在 Windows、Mac OS、Red Hat、Ubuntu 以及其他作業系統上使用,且支援 MySQL 與微軟的 SQL Server 資料庫。
WaveMaker 執行長 Christopher Keene 指出,雖然 WaveMaker 基於 Spring 框架,但鎖定的卻是完全不同的用戶,也就是找尋開發網路應用軟體最簡單方法的非專業開發者。他引用 Gartner 的研究表示,僅有 20% 的 IT 人員擁有專家級的應用軟體開發技能,WaveMaker 正是為了那 80% 而設計。
Brewer 指出,WaveMaker 的用戶通常都是企業中想建立網路應用程式的非開發者,這些應用程式通常以表單為主。WaveMaker 的客戶包括美國零售巨人 Macy's 和技術顧問公司 SAIC。Macy's 運用 WaveMaker 建構出整合財務、人力資源等企業功能報表的內部應用軟體。
VMware 希望此一購併能有助該公司吸引更多雲端服務的用戶。Brewer 表示,假如他們要協助客戶建構出在雲端上執行的應用程式,就必須吸引不是程式開發背景、但卻對寫簡單應用程式有興趣的使用者。VMware 將持續以開放源碼授權方式提供 WaveMaker 所需要的服務,諸如:銷售訓練與諮詢等支援服務。
Johnson 指出,這項購併透過使更多開發者建構與執行,使它成為能與底層架構分享資訊,並促使效能、服務品質及架構利用率均有最大化提升的現代應用軟體。藉此可推展 VMware 的雲端應用軟體平台策略。事實上,Brewer 表示,VMware 計畫將 WaveMaker 加入其 Code2Cloud 服務,讓用戶能在線上使用 WaveMaker,而無須下載該軟體。
Code2Cloud 是一套代管應用軟體生命週期的管理服務,可在建置、測試、錯誤追蹤、整合測試階段支援開發者。VMware 預計在接下來的幾個月內將 WaveMaker 加入 Code2Cloud。
兩家公司並未透露詳細的交易細節,WaveMaker 的員工則將加入 VMware。
相關網址:
1. VMware 購併 WaveMaker,旨在簡化應用軟體開發
http://news.yahoo.com/s/pcworld/20110308/tc_pcworld/vmwarebuyswavemakeraimstoeaseappdevelopment
2. VMware 購併圖形化開發工具 WaveMaker
http://www.information-age.com/channels/development-and-integration/news/1608793/vmware-buys-graphical-development-tool-wavemaker.thtml
3. VMWare 購併點擊應用軟體建構公司 WaveMaker
http://www.readwriteweb.com/cloud/2011/03/vmware-acquires-point-and-clic.php
4. VMware 購併 WaveMaker 以支援非正式開發者
http://www.theregister.co.uk/2011/03/09/vmware_buys_wavemaker/
5. VMware 的 SpringSource 購併 WaveMaker
http://www.h-online.com/open/news/item/VMware-s-SpringSource-has-acquired-WaveMaker-1204708.html
[源碼秘技] ERP 與 CRM 合而為一 -- Dolibarr ERP & CRM
翁卓立/文 2011-03-21
簡介
在進入資訊化時代之後,過去採用人工處理或以紙本進行控管的事務,都慢慢轉向電子化流程。因應這些需求也產生各類不同用途的軟體系統,甚至專門設計開發這些軟體系統的公司也因應而生。受限於人力與物力最佳化的原則,大多數的公司或組織可能無力自行開發相關的系統,因此常見的運作模式,是採用市面上現成的產品,或是委請軟體開發商代為設計合適的系統。
事實上,有許多此類免費軟體可以線上下載使用,而且大多數都是採用開放原始碼的方式進行散佈。這些軟體系統即使內建功能一開始不敷需求,亦可自行修改程式以加入新功能。甚至有部份系統設計採用外掛模組的方式,學有專精的程式設計師或熱心人士得以自行開發模組,使用者可以決定是否安裝這些外掛模組以便擴充功能。如此一來,不僅不需擔心功能太少無法滿足使用需求,也不必擔心為了新增功能到系統之中,必須自行培育相關的技術人員。以本文所介紹的 Dolibarr ERP & CRM 為例,便是一套採用開放式原始碼、提供外掛模組支援功能的線上輔助系統。
官方網站:http://www.dolibarr.org/
下載網址:
Ubuntu/Debian 版本:http://ncu.dl.sourceforge.net/project/dolibarr/DoliBuntu (Dolibarr ERP-CRM Ubuntu installer)/2.9.0/dolibarr-2.9.0.deb (8.8MB)
其他發行版本:http://ncu.dl.sourceforge.net/project/dolibarr/Dolibarr ERP-CRM/2.9.0/dolibarr-2.9.0.tgz (7.9MB)
▲ 圖1 Dolibarr ERP & CRM 的執行畫面
彈性化的運用模式
Dolibarr ERP & CRM 是一套小型、簡易化的 ERP 與 CRM 管理系統,以網頁模式作為使用者介面,操作容易,使用門檻低。ERP 是企業資源計劃 (Enterprise Resource Planning, ERP),又譯為企業資源規劃。ERP 是一種管理各類流程的應用系統,可以用於生產管理、供應鏈管理、財務及會計管理、人力資源管理、客戶關聯管理、資料倉儲管理。CRM 是顧客關係管理 (Customer Relationship Managemnet, CRM)。CRM 以資料庫的方式,儲存顧客基本資料及互動歷史,以供授權人員根據資料庫內容,加強客戶服務並藉以發展正確的企業經營策略。Dolibarr ERP & CRM 同時提供 ERP 與 CRM 功能,使用者可以依照自己的需求決定單獨使用 ERP 或 CRM 的功能,也可以同時啟用 ERP 及 CRM 雙功能,使用上極具彈性。
▲ 圖2 主要提供 ERP 與 CRM 相關功能,可依照需求自行決定使用功能。
簡易化的使用流程與模組化的設計
Dolibarr ERP & CRM 在設計上的最大理念,便是提供一套架構簡單、操作容易的軟體系統。這樣的設計理念從安裝軟體時便能輕易看出。安裝 Dolibarr ERP & CRM 時,僅需要在網頁模式下執行安裝程式,再依照畫面指示、加上伺服器端的相關設定,即可完成安裝。簡易的流程大幅減少安裝過程中可能面臨的問題。如此一來,即使使用者不熟悉如何設定與管理網頁伺服器、資料庫,也完全不需要研讀技術文件、或不具備資訊工程相關的技術背景,仍然可以輕易完成安裝。
Dolibarr ERP & CRM 可以在多種作業系統上執行。只要作業系統能支援 AMP 架構,也就是可以執行 Apache 網頁伺服器、MySQL 資料庫,並可支援 PHP 語言的系統,都能作為 Dolibarr ERP & CRM 的安裝平台,包括 Windows 系統、Linux 系統,或是 Mac OS X。甚至不熟悉如何安裝 AMP 架構的使用者,也可以透過 Dolibarr ERP & CRM 所提供的安裝套件,直接將 AMP 架構安裝完成。以 Linux 系統為例,只要是 Debian 或 Ubuntu 版本,都可以使用 DoliBuntu 直接安裝 AMP 架構。如果使用的是 Windows 系統,可以透過 DoliWamp 進行安裝;Mac OS X 則可以使用 DoliMamp 安裝 AMP 架構。這三個套件都能在官方網站的下載區中找到,是提供使用者快速安裝 AMP 架構與 Dolibarr ERP & CRM 的管道。
▲ 圖3 Dolibarr ERP & CRM 無論在安裝、設定或使用上都相當容易。
Dolibarr ERP & CRM 本身是以外掛模組的方式進行設計。也就是說,使用者可以依個人需求,決定要啟用哪些功能模組、並關閉不必要的功能。如此一來可以確保系統資源用於必要的功能中,不至於浪費在沒有使用需求的功能上。
在 Dolibarr ERP & CRM 安裝完成後,系統預設提供多種外掛模組供使用者選用。它提供許多常見的 ERP 或 CRM 相關的管理功能,例如:各種活動的管理、產品管理、提案計畫的管理等等。如果涉及例如客戶下單等商業行為,可以開啟使用出貨管理功能、訂單管理功能等進行管理,並可隨時追蹤目前的執行進度。用不著訂貨/出貨/訂單管理功能的組織單位,也可以使用會員管理功能,掌握目前所有會員的現況,或是利用 Mailing List 的功能發送電子郵件,以便將組織內的最新資訊傳送給所有會員。它可供選擇的多樣模組還包括:股票管理、銀行帳號管理、客戶/廠商/潛在客戶管理、聯絡人管理、出貨管理、付款管理等等。關於產品訂單管理或企業內的計畫提案,也有對應模組可以選用。同時,它還提供 PDF 輸出功能,使用者可以將相關報表以 PDF 格式輸出。Dolibarr ERP & CRM 支援多元功能的特性,創造了它與其它同類型產品之間的差異特點。
▲ 圖4 以外掛模組方式進行設計,使用者可自行決定啟用的功能。
多國語系支援
目前 Dolibarr ERP & CRM 已經支援許多不同語言,但中文的部份只支援簡體中文。由於 Dolibarr ERP & CRM 的多國語系架構設計得相當良好,要支援新的語言其實相當容易。如果希望以正體中文的方式顯示所有訊息,可以直接將放置英文語系的目錄複製一份,予以重新命名,成為儲存正體中文相關檔案的新目錄。接下來按照原有語系檔案內容的架構,將相對應的訊息翻譯為正體中文,即可在 Dolibarr ERP & CRM 的設定畫面中選擇語系為正體中文。如果建立新語系的過程中有任何問題,亦可直接參考 Dolibarr ERP & CRM 所提供的相關文件。在這些文件當中,Dolibarr ERP & CRM 的開發團隊已經針對語系翻譯時應注意的事項,提供良好的說明。只要按圖索驥,依文件指示進行,便可以解決在翻譯時會遭遇到的困擾。
如果翻譯完成的語系檔案想提供給 Dolibarr ERP & CRM 的開發團隊使用,亦可透過電子郵件與開發團隊聯絡。如此一來,下一個 Dolibarr ERP & CRM 釋出的版本就會支援您提供的新語系。
▲ 圖5 支援多國語系的 Dolibarr ERP & CRM 目前尚未提供正體中文支援,但要進行翻譯並不困難。
結語
對於中小企業或是機關團體而言,選擇軟體系統時,經常無法兼顧預算精簡與需求滿足。如果企業或組織策略並非只能使用商業軟體,像 Dolibarr ERP & CRM 這種開放原始碼的軟體系統,也是相當合適的選擇之一。雖然一般建議 Dolibarr ERP & CRM 適合在中小企業的環境下使用,這並不表示 Dolibarr ERP & CRM 在大型企業沒有立足之地。同時,企業內即使單一部門的營運事務達到一定規模,多半也需要類似軟體作為管理的輔助工具。此時便可以考慮導入 Dolibarr ERP & CRM,相信也能為工作上帶來許多幫助。
附註
Dolibarr ERP & CRM 官方網站有提供試用站台,其網址為「http://demo.dolibarr.org/public/demo/」,使用「demo」作為登入名稱與密碼,登入後即可進行操作。作者簡介
翁卓立逢甲大學資訊工程學系、台灣科技大學電子所畢業,目前擔任韌體研發工作,主要使用 Embedded Linux 進行產品開發。著有「Linux 進化特區:Ubuntu 10.04 從入門到精通」等書。[技術專欄] 用自由軟體 Plone 來架設網站 (1) — 基礎安裝
marr/文 2011-03-21
架站軟體的選項很多,為什麼要選擇 Plone 呢?最大的幾項優點包括:首先,它以 Python 語言開發而成,容易入門,具備企業級的功能彈性,能夠佈署在 VPS 或 Amazon EC2 雲端系統上。其次,它由廣大積極的社群朋友所支持,擁有絕佳的升級相容及系統安全記錄,並且支援多國語言。根據評比資料,Plone 在同類軟體裡,多個評分項目都拿到中上的成績,算是開放源碼裡的通才工具。
安裝 Plone 很簡單,下載安裝檔案後,很快就在 Windows 或 Linux 等環境完成架站,它的內建工具已能滿足常見的應用場合,像是 wiki 編輯環境,TinyMCE 編輯器等,加上會員管理及工作流程的支援後,搖身變為企業級的內容管理系統,這些都是它的應用彈性,協助內容管理人員輕鬆經營網站。
另一方面,Plone 也照顧程式開發人員的需求。它搭配一套開發框架,及一系列的擴充工具和測試工具,可以新增或開發各式模組,為系統增加其他功能特色,包括支援多媒體的表單,提昇視覺體驗的 AJAX 特效,結合 Google Map 或 Subversion 等常見的外部系統。本文將以 Plone 網站開發框架為主角,進行名詞解釋,並介紹 Python 專案開發工具的操作方式。
Plone 的開發框架
早期 Plone 只是一個內容管理系統 (Content Management System,CMS) 模組,後來才衍生出開發框架。它以 Python 和 Zope 為基礎,2011 年的此刻,不少 Plone 實作品還處於轉型的階段,網路上不容易找到完整而穩定的文件。本文的目的之一,就是試著說明 Plone 開發框架的最新狀況,包括版本、模組註冊方式、設定檔格式等。
開發框架通常扮演網站系統的中間層角色,它的底層是程式語言和作業系統環境,它的上層是應用程式,為了快速滿足應用程式的設計需求,開發框架必須提供一致的介面和邏輯思惟,讓開發人員藉以解決問題。
Zope 最早是一個 Application Server 系統,同時也是一個開發框架,目前版本分成 Zope2 和 Zope3 兩種體系,前者版本號碼以 Zope2-2.12.x 方式來命名,後者則以 zope.x 方式來命名。簡單地說,既有的 Plone 3.3.x 和 Plone 4.0.x 版本,混用了 Zope2 和 Zope3 的功能和技術,混用的目的,是為了維護應用軟體的相容性,不過,這也帶來版本相依性的議題。首先,我們要知道如何選用 Python 的版本。
Python 版本的選用方式
Plone 4.0 是個分界點,在此之前使用 Python 2.4 版本,之後使用 Python 2.6 版本,原因在於 Zope 的支援程度不同。例如 Plone 3.3.x 使用 Zope 2-2.10.x,必須搭配 Python 2.4;而從 Plone 4.0.x 開始,使用 Zope 2-2.12.x 以上的版本,底層也昇級為 Python 2.6。這個改變造成 Plone 4.x 執行效能大幅提昇,配合使用 plone.reload 工具的話,修改程式碼的過程就不需要重新啟動伺服器,可以再減少開發時間。額外的效益還包括記憶體的使用量減少了,以往 512MB RAM 的電腦跑不動 Plone 3.3.x,現在可以順利執行 Plone 4.0.x。
真是複雜,那該怎麼選呢?剛接觸的朋友,建議使用 Plone 4.0.x 和 Python 2.6.x 環境,並且直接下載安裝檔來起步。下列將以 Ubuntu Linux 示範指令,動手操作會更容易探索系統。
安裝檔快速起步
Plone 的安裝檔稱為 Unified Installer,以 4.0.2 的安裝檔為例:
▲ 圖1 下載及編譯安裝
最後,畫面顯示 admin 帳號的密碼,它是首次安裝時的管理者帳號密碼,這組帳號密碼也會記錄在 adminPassword.txt 檔案裡。完成編譯後,會產生 Plone 目錄,內含四個目錄:
* Python-2.6
* zinstance
* buildout-cache
* Plone-docs
顧名思義 Python-2.6 就是 Python 系統目錄,即使你的 Linux 已經裝好 Python,安裝檔還是再送給你一份。這樣的好處之一,是擁有獨立的底層函式庫,特別適合測試開發的場合,搞亂系統的話,砍掉重練,重新安裝即可。
zinstance 是 zope instance 的縮寫,系統運作過程所產生的動態資料,都會記錄在這裡,它也是管理工作的起始目錄,存放著記錄系統配置的設定檔,在 bin 目錄裡,也存放許多系統工具程式。
▲ 圖2 系統工具程式目錄
buildout-cache 目錄裡存放許多 egg 程式碼,egg 是 Python 建構各式應用軟體的元件單位,它的功能類似 Java 的 jar (Java ARchive),或是 Ruby 的 gem。 以 Plone 為例,它是由上百個元件單位組成,並利用 Buildout 工具程式來管理元件的安裝與昇級,因此,認識 buildout 的運作機制,成為開發過程的重要工作。
系統配置設定檔
Buildout 程式執行時,預設需要搭配 buildout.cfg 設定檔,檔案裡記錄系統配置的資訊,首次啟動 Plone 前,可以查看想要修改哪些設定值,下列是部份設定範例:
http-address = 8080
... ...
user=admin:mypasswd
Plone 預設在 port 8080 啟動,想要更換 port 號碼的話,可以修改 http-address 的設定值。另外,想要更換 admin 管理者起始密碼的話,可以修改 user 的設定值。
每次修改 buildout.cfg 檔案後,都要執行 bin/buildout 讓設定值生效。成功生效之後,再執行 bin/plonectl 來啟動系統。啟動的參數分成 fg 和 start 兩種,分別代表前景執行和背景執行。
首次啟動系統的話,可以使用 bin/plonectl fg 指令,它會把系統執行訊息顯示在螢幕上,讓管理者即時觀察,這時候可以按 Ctrl + C 來停止系統執行。使用 bin/plonectl start 指令啟動的話,就可以用 bin/plonectl stop 指令來停止。
建立 Plone 網站
成功啟動後,在瀏覽器輸入 http://localhost:8080/ 之類的網址,會出現 Plone 的起始網頁。
▲ 圖3 起始網頁
首次啟動的話,必須先新增 Plone 網站。填寫的資料當中,以網站識別碼最重要,它會成為網址的一部份。以 mysite 為例,它的網址格式會是 http://localhost:8080/mysite 這樣。
▲ 圖4 網站新增表單
使用管理者 admin 帳號密碼登入 Plone 網站後,先示範如何從管理前台新增會員帳號。
▲ 圖5 由 Site Setup 進入管理前台
首先,要設定帳號的安全政策,點選 Security 項目。
▲ 圖6 管理前台的清單項目
勾選 Let users select their own password,這樣在註冊帳號時,就可以自行選擇密碼。
▲ 圖7 設定安全政策
再到 Users and Groups 新增一組帳號密碼。
▲ 圖8 新增帳號
預設的會員帳號,屬於 Member 角色,當然,管理者可以在這裡指定其他角色,或是刪除這個帳號。
▲ 圖9 帳號管理
接著,我們開啟「另一種」瀏覽器,就可以同時觀察管理員、一般會員,登入系統時,畫面有哪些不同。因為帳號資訊是以 cookie 方式儲存,要用不同瀏覽器,才能讓帳號同時操作系統。
內容管理
Plone 預設提供的內容項目,包括:Page、News Item、Event、Image、File、Link、Folder、Collection 等,我們介紹 News Item 的新增方式。
先由管理員到 News 目錄,從 Sharing 指定一般會員帳號 Can add 的權限,這代表指定的帳號,可以在 News 目錄裡新增內容項目。
▲ 圖10 指定帳號權限
一般會員進入 News 目錄後,從 Add new... 可以點選 News Item 來新增。
▲ 圖11 新增內容項目
填寫 News Item 的各項欄位後,就可以將內容儲存。
▲ 圖12 編輯內容項目
儲存的內容項目,預設是 Private 狀態,可以選擇 Submit for publication 提交給管理員,進行審核及發佈。
▲ 圖13 顯示內容項目
物件資料庫
一般的 LAMP 系統,常見使用 MySQL 來儲存內容,Plone 則是使用 ZODB 來儲存內容。網頁內容屬於半結構式資料,理論上並不適合完全套入資料庫的規範,使用物件資料庫顯得更直覺。當然,這不代表使用 SQL 儲存內容,不能提供優異的網站服務。重點在於,開發過程的思惟,它們有著根本的差異,經由 NoSQL 議題的廣受討論,相信更多人將逐步認識它們的差異。
那麼,哪裡找得到 Plone 存放的內容呢?在 Plone/zinstance/var/filestorage 目錄裡,找得到一個 Data.fs 檔案,它就是 ZODB 存取內容的實體檔案,系統運行過程,就會發現 Data.fs 增加大小。新版的 Plone 已經增加 BLOB 支援,在 Plone/zinstance/var/blobstorage 目錄裡,存放的是 Plone 系統裡的圖片、影音檔案,大幅改善以往 ZODB 容易過度膨脹的問題。
想要看到 Data.fs 裡的內容嗎?plonectl 工具程式提供一個 debug 參數,讓我們進入除錯模式來觀察 ZODB 內容。所有的物件以 app 為根目錄,使用 app.mysite 就能存取 Plone 網站,使用 app.mysite['news'] 代表存取 news 目錄。除錯模式的操作方法,對於 Python 朋友而言,並不陌生,更多的樂趣,先留給各位自行探索。
▲ 圖14 除錯模式
另外,透過 ZEO 可以支援多個客戶端存取,讓 ZODB 的延展度提昇,企業級的部署規劃,肯定需要這樣的功能。不過,初學者可能只關心,該怎樣備份 Plone 的 系統資料呢?最簡單的方式,只需要把 Data.fs 和 blobstorage 裡的檔案複製起來,就完成備份。
結論
網頁程式發展十餘年了,今日已有許多工作和生活應用,彈指之間就由網站服務完成,透過這樣的普及與內化過程,我們反而更不容易窺見它們的運作原理。內容管理系統是網頁應用程式的具體產品,它能完整示範一個通用式的網站,該具備哪些功能與特色。我把 Plone 當成樂高積木,藉由拆解和組合的過程,認識網站應用程式的奧秘。邀請想要探索奧秘的朋友,一起發掘 DIY 的樂趣。
[技術專欄] AWStats — 多功能記錄檔分析工具
Weithenn/文 2011-03-07
前言
拜網際網路蓬勃發展所賜,大家都能隨時上網尋找各類資訊。對於企業而言,建立公司網站更是與網路上網友們交流的首要之選。建立一個美侖美奐、功能完善的企業網站,不謹有助提昇企業的品牌形象,也能藉此擬定行銷策略開拓網路市場。當企業涉及網路行銷,就必須了解什麼是「搜尋引擎最佳化 (Search Engine Optimization, SEO)」。搜尋引擎最佳化就是透過認知、分析使用者以關鍵字搜尋的行為,讓使用者在網路搜尋時更容易找到該企業網站,以增加網站曝光率的一種方式。因此企業網站若想在網際網路上得到高曝光率,進行網站搜尋引擎最佳化便是企業內行銷與電腦技術部門刻不容緩的任務。
為了達成這樣的任務,通常中大型企業的網站管理者會選擇二種方式:一為透過內部電腦技術部門自行撰寫分析報表軟體,針對網站伺服器的記錄檔進行分析,以便得到需要的資訊。而另一種方式則是購買現成的記錄檔分析軟體,例如 Websense。但是上述的二種方式並不適用於沒有電腦技術部門或預算的單位,例如小型企業或個人工作室。本次特別撰文介紹在開放原始碼世界中,一套非常適合小型企業或個人工作室使用,而且功能強大的流量統計軟體-AWStats。
記錄檔分析統計工具 AWStats (http://awstats.sourceforge.net) 是一套遵循 GNU 通用公共授權條款 (GNU General Public License, GPL) 的開放原始碼軟體。這個分析軟體需要的安裝容量雖然精簡,功能卻一點也不馬虎。以下舉例如下:
- 支援跨平台作業系統:您可以在 Windows 或 Unix-Like 作業系統上輕鬆建立分析記錄檔的運作環境。
- 報表支援多國語言:AWStats 所產生的分析統計報表支援多國語言,使得閱讀分析報表的管理者不會因為語言而產生困擾。
- 支援分析多種服務記錄檔:AWStats 支援相當多的網路服務記錄檔。
- 網頁記錄檔:支援 Apache (combined/ common log format XLF/ ELF/ CLF)、Microsoft IIS (W3C log format)…等。
- 快取記錄檔:支援 Squid (common log format, CLF) …等。
- 串流記錄檔:支援 Darwin Streaming Server、Windows Media Server…等。
- 郵件記錄檔:支援 Postfix、Sendmail、Qmail、Mdaemon、www4mail…等。
- FTP記錄檔:支援 ProFTPD、VSftpd…等。
- 詳盡的統計報表:AWStats 產生的分析報表具備非常詳盡內容。例如,週期性網路流量、來源國家、來源 IP 位址、參觀網站時間、參觀網頁、訪客作業系統、使用的瀏覽器、連結網站的來源、連結網站的關鍵字…等。
使用者透過 AWStats 可以分析網站記錄檔,或企業相關網路服務記錄檔。AWStats 提供詳細的分析統計報表,企業的網管或行銷人員得以輕鬆分析網路使用者瀏覽企業網站的流量、以及在網站的存取行為,接著以 SEO 為目標,改善網站內容及方向,進而提升企業的品牌形象,並為企業帶入龐大網路商機。以下介紹 AWStats 的主要功能與安裝技巧。
定期產生網站記錄檔
為何需要定期產生網站記錄檔?那是有原因的。目前使用最多的網路伺服器軟體 Apache,其所提供網頁服務套件會自動產生存取記錄檔,但它的預設記錄方式是持續將來訪記錄及瀏覽存取行為,寫入單一個檔案中。然而隨著網站經營時間增加或網路流量增大,這樣的記錄檔產生方式會使 Apache 記錄檔愈來愈大。單一記錄檔過大時,會增加系統讀取資料需要的時間,且因為 Apache 記錄檔預設存放路徑為 /var 掛載點,預設情況下分割空間小,掛載點分配不當的話,還可能導致系統運作出現問題。
因為以上問題,比較好的方式是設定 Apache 網頁服務定期每天產生一個記錄檔。這樣規劃使 Apache 不必長期持續寫入單一記錄檔而造成記錄檔日漸肥大,也提昇在記錄檔進行細部查詢的效率,例如某天的訪客行為,或抓取網站被駭客攻擊當日的訪客及其行為記錄。對這個問題,我們可以安裝一個小而美的 cronolog 套件,來與 Apache 網頁服務搭配,依序產生單日記錄檔。
實作環境
- FreeBSD 8.1 Release
- Apache-2.2.17_1
- AWStats-7.0_1,1
- cronolog-1.6.2_4
- libiconv-1.13.1_1
安裝 AWStats 及 Cronolog 套件
在進行設定前,請先安裝相關套件,並且強烈建議您在安裝套件以前先更新 ports tree,以確保安裝套件是最新且穩定的版本。更新完成後請查看 UPDATING 文件,確認所安裝套件的注意事項,並進行必要的設定調整。再請依下列指令,切換至相關路徑以安裝套件。
# cd /usr/ports/www/awstats
# make install clean
# cd /usr/ports/sysutils/cronolog
# make install clean
# cd /usr/port/converters/libiconv
# make install clean
修改 AWStats 設定檔
AWStats 套件安裝完成後,建議複製 AWStats 範例檔案 (awstats.model.conf),以副本進行修改,以下僅列出需要將預設值修改為自身網站資訊的部份。下列設定中,值得注意的地方是,指定 AWStats 分析軟體屆時讀取 Apache 記錄檔進行分析時,會讀取當天的記錄檔參數 (%YYYY=year, % MM=month, % DD=day)。
#vi /usr/local/www/awstat/cgi-bin/awstats.web.conf
LogFile="/log/%YYYY-0_%MM-0_
[技術專欄] 以 ModSecurity 實作 Webapp Firewall
老薯條(http://vulscan.wynetech.com.tw)/文 2011-03-18
前言
在網路時代,相信每個企業都有屬於自己的網站,但由於人力與經費不足,常成為駭客覬覦的對象。相關的網路安全威脅事件也有日漸增多的趨勢,例如常見的 SQL Injection,造成個資外洩。而網路的安全威脅型態與其它威脅間的最大差異,在於網路的安全威脅,通常是程式設計師的疏失或經驗不足所造成的安全漏洞(如XSS)。這與一般系統只要安裝修正程式 (patch) 即可修補系統漏洞有很大的差別。當然要解決程式的漏洞,最有效的方式即是利用 Code review 會議,重新檢視每一行程式碼,從中找出有問題的程式。但此種方式所花費的人力與物力浩大,不切實際。當然目前市面上有所謂的原始碼檢視軟體,但此種軟體不但昂貴,而且最後還是需要仰賴人工進行比對。因此, 網路應用程式防火牆 WAF (Web Application Firewall) 因應而生。WAF 就如同一般防火牆,功能雷同,但它的定位是保護網站伺服器。
在本文中,筆者將使用開放源碼社群中最知名的網站伺服器 Apache,再加上 ModSecurity 模組,來實作一個具有 WAF 防護的網站伺服器。
所需套件如下表所示:
軟體名稱
官方網址
說明
libapr
http://apr.apache.org/
安裝 ModSecurity 所需的套件
libpcre
http://www.pcre.org/
安裝 ModSecurity 所需的套件
libxml2
http://xmlsoft.org/downloads.html
安裝 ModSecurity 所需的套件
Apache 2.2.16
http://www.apache.org/
網站伺服器
ModSecurity 2.5.12
http://www.modsecurity.org
WAF(網路應用程式防火牆)
PHP
http://www.php.net
著名的網頁程式
OWASP 2010 TOP 10
Open Web Application Security Project (OWASP) 是一個專門研究網路軟體安全的社群。他們每年均會提出最具威脅性的網路安全漏洞,來提醒使用者。以下簡單的說明 OWASP 於 2010 年所提出的網路安全漏洞:
1. Injection (注入攻擊)
由於程式設計師疏失或經驗不足,未對使用者輸入的參數值進行檢驗,以致於惡意使用者可利用惡意的輸入值(如惡意 SQL 指令串或惡意的 script 碼),讓系統自動執行惡意的指令,而對系統造成危害。此類攻擊以 SQL injection、command injection 為代表,其中 SQL injection 最具代表也最具危害性。以下就來說明 SQL injection 的攻擊方式。
假設有一個程式,用於驗證是否為會員登入,如圖1 所示(假設會員表格 (table) 名稱為 account 並以 login 表示帳號參數,passwd 表示密碼參數):
▲ 圖1
假如程式設計師並未對輸入欄位進行驗證,他的程式碼可能如下:
Select * from account where login=’+LOGIN +”’ and
passwd=’”+PASSWD+”’”
其中 LOGIN 為使用者輸入的帳號參數,而 PASSWD 為使用者輸入的密碼參數。在正常的情況下,使用者輸入正常的帳號及密碼,即組成正常的 SQL 查詢字串,如下所示:
Select * FROM account where login=’使用者帳號’ AND passwd=’使用者密碼’
如果有查詢到資訊,即表示為合法使用者(因為該筆記錄在 account 中有存在),否則即不允許登入。但是如果有惡意的使用者輸入如圖1 的字串作為帳號,所組成的 sql 查詢字串即如下所示:
Select * FROM account where login=’john’ - - passwd=’’
在 SQL 語法中, - - 表示註解,即後續的指令均不需執行。聰明的讀者應該發現上述的指令有什麼蹊蹺了。沒錯,上述的 SQL 指令代表只要帳號符合,無需輸入密碼,即可通過驗證而成功登入。
另一個甚至不需輸入帳號的例子,是輸入如 " ' ' or 1=1 - - " 的字串作為帳號參數,則其所組成的SQL查詢指令為:
sqlSelect * FROM account where login=’’ OR 1=1 - - passwd=’’
由於 “OR 1=1” 的條件式一定成立,所以即使不需帳號密碼,也可成功的登入。上述的例子僅為 SQL Injection 的基本型,其危害程度取決於攻擊者對於 SQL 的了解程度。有些資料庫伺服器,甚至有提供系統指令,就可能危害到系統安全。
2. Cross Site Scripting(XSS,跨網站腳本攻擊)
跨網站腳本攻擊的原因跟 SQL injection 一樣,同樣是因為程式沒有檢驗使用者輸入的參數內容所造成。不過,與 SQL injection 最大不同在於, SQL injection 會對資料庫所在的主機造成重大危害,而 XSS 攻擊以造成瀏覽者安全上的危害為主,往往不會對於主機造成危害。這也導致管理者易於乎略此類網站攻擊的可能性,而使得此種攻擊有越來越普遍的趨勢。 XSS 攻擊流程如下:
攻擊者將含有 XSS 漏洞的網頁,置於受害的網站伺服器上。常見的是在討論區上留下含有 XSS 惡意碼的留言。當不知情的使用者瀏覽此網頁時(如瀏覽某則留言),即啟動 XXS 攻擊碼,而將無辜的第三者相關資訊回傳到駭客的電腦上,最常見的是回傳使用者電腦上的授權 (cookies)。
所以,對網路使用者而言,當瀏覽某個討論區留言時,發現出現彈跳視窗,就要特別注意是否有 XSS 的可能。如果發現彈跳視窗自動幫你轉址到其它的網址,那麼別懷疑,趕快離開那個網站、避開 XSS 攻擊就對了。對於網站管理者而言,在 http://xssed.com/ 網站中有提供含有 XSS 漏洞的網站,有興趣的讀者可到此網站上,查詢自己所管理的網站是否有被提報含有 XSS 漏洞。
3. Broken Authentication and Session Management(鑑別與連線管理漏洞)
此漏洞是指網站自行開發的身份證驗證與連線 (session) 管理,具有安全性的缺失。以下用網站身份驗證流程說明:
- 當使用者登入成功後,會將一個含有帳號及密碼(甚至權限等相關資訊的 cookies),丟至使用者的電腦端上
- 網站再存取該使用者的授權 cookies 來判別使用者的身份
在上述流程中,如果 cookies 並未加密,惡意的使用者只要取得此 cookies,即可得知其它使用者相關的機密敏感資訊。或者加密的演算法不夠嚴謹,一但被破解,也會造成使用者的機敏資料外流,甚至惡意使用者可藉以冒充成其它的使用者(或提升權限至管理者)。
4. Insecure Direct Object References(不安全的物件參考)
如果一個經驗不足的程式設計師想要實做一支能動態顯示檔案內容的程式,他會直覺想到把希望顯示的檔案設為參數,再傳進去就好了,如下連結所示:
http://xxx.xxx.xxx.xxx/show.php?file=xxx.txt
而後在接到參數值後,再直接開檔顯示即可。但是如果一個有心人傳進去的參數為:
http://xxx.xxx.xxx.xxx/show.php?file=../../etc/passwd
其中 ".." 為回到上一層,此種參數即可能將系統中的 /etc/目錄下的 passwd 檔案顯示出來。
5. Cross Site Request Forgery(CSRF,跨網站冒名請求)
從某種角度來看,CSRF 可視為廣義的跨網站攻擊 (XSS)。但 CSRF 通常是在使用者已登入系統服務下發動攻擊。例如:
在討論區中的某段留言塞進一段可直接登出 (logout) 的惡意程式碼。當使用者登入後、瀏覽相關留言時,只要瀏覽到這段留言,即會觸發該段惡意程式碼,而直接將該使用者登出。此即為 CSRF 攻擊。
6. Security Misconfiguration(不安全的組態設定)
此漏洞較偏向管理面的問題,如未更改預設的帳號及密碼,或未定時的更新系統的安全修正程式等等。
7. Failure to Restrict URL Access(未適當限制的 URL 取)
一般網站通常會分成前端程式及後端管理程式。基於安全的考量,Internet 上的使用者不應該獲准直接查詢後端管理程式,而應該只限制某些管理者可查詢及存取後端管理程式。如果網站未限制,而使 Internet 上的其它的使用者也可正常的查詢,即可能造成潛在的安全漏洞。
8. Unvalidated Redirects and Forwards(未驗證的網頁重新導向)
有些網站提供網頁重新導向至其它的網址,惡意的攻擊者可利此種特性,將惡意網址插入到重新導向的參數中,讓使用者連接到惡意的網站上。
9. Insecure Cryptographic Storage(不安全的加密儲存)
網站並未對機敏的資料進行加密處理,或使用不嚴謹的加密演算法,而導致攻擊者在取得相關的機敏資料後,可以很輕易的取得相關資訊。
10. Insufficient Transport Layer Protection(不安全的傳輸防護)
由於 HTTP 連線均是採用明碼的方式連線,攻擊者可在任何一個節點均可能利用 sniffer(竊聽)方式來取得來往資料。如果網站採用 HTTP 連線方式,來往的封包均以明碼方式傳輸,攻擊者即可輕易的取得相關的機敏資訊。
如何安裝 ModSecurity
在說明完相關的網路安全威脅後,接下來我們繼續來說明如何安裝 ModSecurity 來防止相關的網路安全威脅。
ModSecurity 是 Apache 的一個模組,可以提供入侵偵測及防禦功能,它就如同是網路應用程式的防火牆,可以用來抵擋如 SQL injection attacks、cross-site scripting、path traversal attacks 等相關的網路攻擊,由於 ModSecurity 需要 Apache 的 mod_unique_id 模組,所以在這邊我們需自行編譯支援 mod_unique_id 模組的 Apache 軟體,這裏筆者目的在於編譯一個 Apache + MySQL + PHP 的環境,其中筆者不多談如何編譯 MySQL,請有興趣的讀者自行參閲其它文件。在筆者的環境中,MySQL 是安裝在 /usr/local/mysql5 目錄下。
編譯 Apache
重新編譯支援 mod_unique_id 模組的 Apache 伺服器,如下步驟:
1. 請讀者至 http://httpd.apache.org/ 取得 Apache 原始碼(筆者使用版本為 2.2.16)
2. 解開後,./configure --enable-so --enable-unique-id --prefix=/usr/local/apache2
#重新組態 Apache,在此將 Apache 安裝在 /usr/local/apache2 目錄下並支援 DSO 及 unique-id 模組
3. make #編譯 Apache 執行檔
4. make install #安裝 Apache
在編譯完成後,請讀者執行 /usr/local/apache2/bin/httpd –l ,列出 Apache 內建模組,並檢查是否有 mod_unique_id.c 等字樣,如有,即表示已經內建 mod_unique_id 模組
編譯 PHP 模組
1. 請讀者至 http://www.php.net 取得 PHP 原始碼(筆者使用版本為 5.2.10)
2. 解壓縮後,執行 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql5 #編譯一個支援 MySQL 的 PHP 模組
3. make
4. make install
在安裝完後,重新調整 Apache 的組態檔(在此為 /usr/local/apache2/conf/httpd.conf)
新增下列資訊:
LoadModule php5_module modules/libphp5.so # 新增 PHP 模組,讓 Apache 能支援 PHP 語言
AddType application/x-httpd-php .php .phtml .php3 #新增 PHP 檔案類型
調整組態檔 (httpd.conf) 後,
讀者可利用 /usr/local/apache2/bin/apachectl start 啟動 Apache 或 /usr/local/apache2/bin/apachectl stop 停止 Apache 運作
編譯 ModSecurity
1. 至 http://www.modsecurity.org/ 取得最新版本(至目前為止,筆者取得版本為 2.5.12)
2. 解壓縮後至 apache2 目錄下,執行下列指令
./configure --with-apxs=/usr/local/apache2/bin/apxs #編譯 ModSecurity 為 Apache 的模組
3. make
在編譯的過程中,筆者曾遇過 “This PCRE version does not support match limits! Upgrade to at least PCRE v6.5” 的錯誤,這是因為 ModSecurity 還是使用 Apache 內建的 PCRE 版本,解決方式為:
cp /usr/include/pcre.h /usr/local/apache2/include ,覆蓋掉 Apache 所使用的pcre.h,再重新編譯即可。
4. make install
編譯完成後,會在 /usr/local/apache2/modules/ 產生 mod_security.so 模組檔,接下來需在 /usr/local/apache2/conf/httpd.conf 新增下列設定檔
LoadModule security2_module modules/mod_security2.so
<IfModule mod_security> #設定mod_security
SecFilterEngine On #開啟過濾引擎開關。
SecServerSignature "Microsoft-IIS/6.0" #偽裝服務器標識
</ IfModule>
至此,讀者可以寫一個簡單的 PHP 程式 (test.php) 來測試安裝是否正確,如下所示:
<?php
phpinfo(); //顯示 apache 的系統資訊
?>
假如一切設定正確,讀者應可看到如圖2 的畫面。
▲ 圖2
接下來我們可以簡單設定 /usr/local/apache2/conf/httpd.conf 檔案來測試 ModSecurity 模組是否正常運作,如下述設定:
<IfModule mod_security2.c>
SecServerSignature "Microsoft-IIS/5.0" #將網站伺服器偽裝成
Microsoft-IIS
</ IfModule>
設定完成後,讀者需重新啟動 Apache 伺服器。而後以 Telnet(或用 nmap 可以)來測試 Apache 伺服器回覆的資訊是否已改為 Microsoft-IIS,請執行如下指令:
telnet 127.0.0.1 80
get http:1.1 /
而後伺服器回覆的訊息如圖3:讀者可看出 Apache 此時回覆的資訊為 Microsoft-IIS,己達到隱藏真實網站伺服器資訊的目的。
▲ 圖3
ModSecurity 組態說明
ModSecurity 是以設定規則的方式來定義應用程式防火牆規則 (WAF),在 ModSecurity 2.X 的版本中,允許規則可在 HTTP 個別的狀態 (Phase) 執行,ModSecurity 2 將 HTTP 處理狀態 (Phase) 分為下列階段:
1. Request headers (REQUEST_HEADERS,phase 1)
當網站伺服器接收到客戶端的 http 要求,正在解析 HTTP 表頭 (header) 的階段
2. Request body (REQUEST_BODY,phase 2)
當網站伺服器接收到客戶端的 http 要求,正在解析 HTTP 內容 (body) 的階段
3. Response headers (RESPONSE_HEADERS,phase 3)
當網站伺服器回覆到客戶端的 http 要求,在回覆 HTTP 標頭 (header) 的階段
4. Response body (RESPONSE_BODY,phase 4)
當網站伺服器回覆到客戶端的 http 要求,在回覆 HTTP 內容 (body) 的階段
5. Logging (LOGGING,phase 5)
在網站伺服器要寫入 log(如access.log error.log)的階段
ModSecurity 常用參數說明
1. SecRuleEngine On | Off #是否開啟或關閉 secrule 的解析,這一定要開啟,不然 ModSecurity 就失去意義了。
2. SecRule VARIABLES OPERATOR [ACTION] #設定規則,是 ModSecurity 主要設定的選項。
(1) VARIABLES: ModSecurity 定義相當多的變數,在這邊僅說明幾個常用的變數,其它的就請讀者自行參閱相關的說明:
- ARGS_GET: 此變數內存以 get 方式傳遞的資訊
- ARGS_POST: 此變數內存以 post 方式傳遞的資訊
- REMOTE_ADDR: 此變數內存遠端客戶主機的 IP 資訊
- REQUEST_URI: 此變數內存整個 URL 的資訊
- REQUEST_METHOD: 儲存遠端客戶主機所使用的 HTTP 傳遞方式,如 post get trace
(2) OPERATOR:利用正規表示法的比對條件,可分為下列兩種型式:
使用內建的運算子 (operator),在內建運算子之前加上 :
- contains: 如果有包含即為真,如下例:
SecRule REQUEST_LINE "@contains .php"
(假如 REQUEST_LINE 變數包含 .php ,條件即成立)
- within: 如果有包含內設的字串,即為真,如下例:
SecRule REQUEST_METHOD "!@within get,post"
(假如 REQUEST_METHOD 變數內包含 get 或 post,條件即成立)
- gt: 當大於時,條件即成立
- eq: 當等於時,條件即成立
- ge: 當大於等於時,條件即成立
- lt: 當小於時,條件即成立
使用正規表示式:
可使用正規表示法的特殊符號來設定比對條件,如下例:
SecRule REQUEST_ADDR "^192\.168\.2\.1$"
(當 REQUEST_ADDR 變數內容為 192.168.2.1,條件即成立)
(3) ACTION
常用的 action 如下所述:
- append: 當條件成立時,在網站伺服器回覆的 HTML 的訊息中插入相關的資訊。
- deny: 當條件成立時,不允許使用者瀏覽,如最後兩段舉的例子。
- drop: 這個 ACTION 特別提出用在預防暴力攻擊及拒絕服務的預防上,如下:
常用的 actionSecAction phase: 1,initcol:ip=%{REMOTE_ADDR},nolog\
SecRule ARGS: login "!^$"\ nolog,phase:1,setvar:ip.auth_attempt=+1,deprecatevar: ip.auth_attempt=20/120
SecRule IP:AUTH_ATTEMPT "@gt 25" \
"log,drop,phase:1,msg: 'Possible Brute Force Attack'"\
(在 2 分鐘內若有超過 20 次認證存取錯誤,即認定為暴力攻擊,並記錄相關的資訊)
- exec: 當條件成立時,可設定執行某個程式:
SecRule REQUEST_URI "^/cgi-bin/script\.pl" \
"exec:/usr/local/apache/bin/test.sh"
(當使用者存取 script.pl 即執行 /usr/local/apache/bin/test.sh 程式)
- log: 記錄 ModSecurity 的相關 LOG。
- nolog: 不記錄 ModSecurity 的相關 LOG。
- phase: 設定規則適用於那個 phase 階段,ModSecurity 定義了 5 個 phase,規則可設定適用於那個 phase
- redirect: 當條件成立時,轉址到另一個網址
SecRule REMOTE_ADDR "^xxx.xxx.xxx.xxx$"
"redirect:http://www.modsecurity.org"
(如果來源為xxx.xxx.xxx.xxx連線,即轉址到 http://www.modsecurity.org)
3. SecGuardianLog <FILE>: ModSecurity 特別用來阻檔拒絕服務攻擊,可與 iptables 搭配來過濾惡意來源的 HTTP 存取,並將相關的資訊寫入所設定的檔案中
4. SecPdfProtect On|Off #設定是否要開啟 PDF XSS 的保護
5. SecUploadDir <DIR> #設定檔案上傳的目錄
6. SecUploadFileLimit <NUMBER> #設定上傳檔案的最大個數
7. SecServerSignature <STRING> #偽裝網站伺服器的資訊,可利用此參數來隱藏網站伺服器真正的版本資訊
如下例,以 ModSecurity 來保護網站伺服器的安全
1. 設定不允許某些來源 IP 的連線
(1) 在 httpd.conf 加上如下的設定
<IfModule mod_security2.c>
SecRuleEngine On
SecRule REMOTE_ADDR "^xxx\.xxx\.xxx\.xxx$" deny
</ IfModule>
(2) 利用瀏覽器瀏覽,如果符合所設定的來源 IP,即會得到 403 拒絕服務的訊息
2. 設定當有人以 Web 弱點掃描器掃描(在此以 Nikto 為例)時,即拒絕 (deny) 連線
在 httpd.conf 加上如下的設定:
<IfModule mod_security2.c>
SecRuleEngine On
SecRule REQUEST_HEADERS:User-Agent "nikto" deny
</ IfModule>
讀者或許會覺得 ModSecurity 的規則集設定相當的複雜,使用者也可以參考在 ModSecurity 的官方網址上釋出的相關規則集。規則集分為免費版及付費版,其中免費版本的規則集,僅較付費版本晚更新,使用者會較晚點取得最新版本而已。讀者可至下列網址取得規則集:wget http://downloads.prometheus-group.com/delayed/rules/modsec-2.5-free-latest.tar.gz。解開後,將相關檔案置於 http 的 conf 目錄下後,根據需要在 httpd.conf 加上 Include conf/rule/*.conf,即可套用相關的 ModSecurity 規則集,來保護您的網站伺服器。