關於本報

自由軟體鑄造場電子報
報主:中央研究院資創中心
創刊日期:2004-06-03
發報頻率:雙週刊
訂閱人數:3,349
官網:

近期電子報


訂閱便利貼


將貼紙語法置入您的網站或部落格當中, 訪客可以輸入mail取得認證信,並按下確認連結後, 快速訂閱您的報紙。
預覽圖
訂閱自由軟體鑄造場電子報報
自由軟體鑄造場電子報
-----------------------------------------------------------------------------------------------------
Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

自由軟體鑄造場電子報
發報時間: 2011-05-24 16:00:00 / 報主:OSSF
[公益聯播]化妝品真相大公開社群
本期目錄
使用 Open Web 技術實作 HTML5 中文文字雲
COSCUP 2011 call for proposal - 即日起開放投稿!
RubyConf Taiwan 2011 Call for Sponsorship & Presentation
Firefox 4 Party 在歡樂慶祝中也能增進使用者新體驗
用開源軟體玩開放百科-台灣維基社群用維基百科打造您的 Firefox
FreeBSD 基礎設定(下)
用自由軟體 Plone 來架設網站 (5)—元件架構
自由軟體與相關名詞解析
報主的話
使用 Open Web 技術實作 HTML5 中文文字雲
timdream/文

「文字雲」是針對使用者輸入的文章或是部落格,分析其文字詞出現的頻度值,以「詞彙地圖」的方式展示。製作文字雲是結合自然語言處理 ( Natural Language Processing, NLP) 與資料視覺化 (data visualization) 二個領域的應用,需要存取文字的介面,夠快的運算能力,以及可以自由描繪螢幕的程式介面。直到最近,Web 前端技術的發展剛好滿足了這些需求。
這個「玩具」是來自於一個很直覺的想法。我參與 Mozilla Taiwan 的 Firefox 在地化工作多年,因為機緣而對 NLP 有粗淺的認識,於是就覺得:「既然介面上使用的詞彙就是那些,把程式碼內所有詞彙送進  N-gram 分析會得到什麼有用的結果?能幫忙提升介面翻譯品質嗎?」這些問題目前還懸而未決,但卻因而促成 N-gram 演算法成為製作文字雲時萃取資料的核心技術。

使用 Open Web 技術實作 HTML5 中文文字雲
▲ 圖1 使用文章詞彙分析機計算,專屬於 OSSF 電子報的文字雲。

【HTML5 文字雲-文章詞彙分析機】
體驗網址:http://timc.idv.tw/wordcloud/
原始碼:https://github.com/timdream/wordcloud
授權方式:MIT 授權
使用技術:自製的 N-gram 演算法(使用於製作中文文字雲)、Porter Stemming Algorithm(使用於製作英文文字雲)、HTML5 canvas、HTML5 FileReader API、HTML5 Web Workers API、Javascript 1.6 新 Array 函式


讀取檔案


以前網頁對檔案唯一能做的事情是在表單內直接將檔案傳送至伺服器,所有的修改都要在遠端處理。新的瀏覽器提供了 FileReader 介面,可以直接存取使用者選擇的檔案。「文字雲」使用此介面讓使用者直接在本機端分析文字檔;而為了趣味,我也接上了 Google Feed API,利用它的功能讀取使用者選擇的 RSS Feed,產生各個部落格或是微網誌的詞彙地圖。


分析文字


中文是相對模糊的自然語言,它沒有特定的 dump word(唯一勉強算是的只有「的」),或是非常明確的動/名詞用字區分。不過也就是利用了這樣的特性,我採用的演算法是完全不做任何考慮的 N-gram 切詞:以 N 個詞為單位收集字的組合,再直接計算其數量。例如「資訊創新研究中心自由軟體鑄造場」可以被拆成「資訊」、「訊創」、「創新」、「新研」、「研究」、「資訊創」、「訊創新」、「創新研」、「資訊創新」、「訊創新研」、「創新研究」......等。

接著,在計算各個詞組的出現頻率,正確的詞例如「自由」、「軟體」的頻率會相較於比不正確的詞彙(例如「訊創」)來的多,排列之後即可萃取文章的常用詞彙。

要增加精確度可以另外考慮使用字典比對,但在評估之後因為成本效益所以就不採用了。一個堪稱完整的字典檔,像是新酷音的詞彙表,轉檔之後也是約 2MB,二十萬詞彙的 JSON Object。另外,若使用字典檔做過濾,就會錯過顯著但是不在字典裡的詞彙,反而會失去資訊。

英文的話,除了要過濾 dump word 以外,還要針對名詞、動詞的型態進行資料正規化 (normalization)。也剛好,Porter Stemmer 演算法網站上直接提供了 Javascript 的程式碼,可以直接採用。


背景執行緒


Web Workers 是瀏覽器提供的新 API,可以將計算工作放到背景的執行緒 (thread)。前景的執行緒在計算時瀏覽器會停止對使用者反應,用於大量計算時有礙使用者體驗。文字雲分析文字所需的時間取決於文字的量,因此適合放到 Web Workers 來做計算。至於沒有提供 Web Workers 介面的瀏覽器(例如 IE9 或是 Mobile Webkit),我另外寫了一個應用 iframe 提供 scope 的 Wrapper ;程式在這些瀏覽器還是會在前景執行,但可以不經修改直接在 Wrapper 裡運作。


Canvas 繪圖


最後的繪圖動作則應用 HTML5 瀏覽器提供的「canvas」元素。Canvas 是 2D 的繪圖介面,可以使用 Javascript 呼叫函式在其上貼圖、畫幾何形狀、著色、印文字等等。要在畫面上畫文字雲,用的當然就是印文字的功能了。但,文字雲另外要做的事情是在每次畫完文字時去取得畫完的像素,記錄筆劃的位置,以備之後有更小的字可以卡在大字的空隙裡面。


效能


有了 Web Workers 之後,唯一的效能問題卡在不能移動到背景執行的 canvas 繪圖。Canvas 最花時間的部份在於「取得像素」,因為在使用硬體加速的瀏覽器上,繪圖直接存取 GPU 指令,很快,但取得結果就要一路從 GPU 要回來,反而是相對慢的動作。

在這邊要特別提起 Mozilla 方面的協助。Firefox 4 Party 時來訪的講者 Chris Jones 提醒我取得像素的函式無論指定多小的範圍,背後所需的時間是一樣的(因為跟 GPU 要資料會一次要整張 canvas);基於這個特性,我調整了文字雲背後的邏輯讓程式一次就把需要範圍的資料要到。


結語:HTML5 瀏覽器技術與 Open Web 平台


大家對於開發 Web 應用程式,以前總有不少的謬誤。但隨著近期的發展,許多印象已經被打破了,例如:
*雖然跨平台,但是需要處理的瀏覽器歧異太多:瀏覽器的差異主要是 IE8 以下,只要進行很簡單的物件偵測就可以確定瀏覽器是否可執行需要的功能。
*雖然很方便,但是能用的本機端功能很少:瀏覽器已經提供越來越多的介面,可以繪圖、背景執行、存取檔案......。
*程式效能不好:瀏覽器已經越來越快了,過去幾年各家 Javascript interpreter 應用了許多進階的最佳化技巧讓效率接近原生編譯程式。

作為應用程式開發平台,我認為 Web 提供了各家 OS 或是手機平台以外的額外選擇。更重要的,它不是被某家單一廠商挾持的平台,是唯一開放的應用程式平台。只要詳細調整 UI,就可以在各個不同的裝置執行,提供不同的使用經驗。文字雲還有其他的範例網站,例如 Mozilla Demos 都是很好的範例。


作者簡介


timdream,Web Developer。目前在出版業服務,擔任數位內容的規劃工作。在 MozTW 參與 Firefox 與相關軟體的在地化開發與宣傳活動,是 Open Web 的信徒。這兩年參與了開源人年會的籌備志工工作。相關資訊請洽 http://timc.idv.tw
COSCUP 2011 call for proposal - 即日起開放投稿!
OSSF/編述

2011 開源人年會 (Conference for Open Source Coders, Users and Promoters, COSCUP) 誠徵演講,即日起開放各界投稿,歡迎大家將您最拿手或者是有興趣的主題,帶到 COSCUP 2011 來與大家一同分享。COSCUP 是目前台灣規模最大的自由軟體與開源軟體的社群研討會,是您認識開源軟體技術開發者,管理者,以及使用者的最佳場合,今年亦已將邁入第六年的成長。透過 COSCUP 2011 的協助曝光,您將可以提昇自己在Open Source 領域的知名度,找到未來共同創業的夥伴、商業上的同好,或者是公司的潛在客戶。歡迎各位熱心於 Open Source 各項領域研究、應用,與推展的朋友,能一同加入 COSCUP 2011 的講者行列。

【演講徵求】
◎ 截止日期:2011 年 6 月 17 日
◎ 公佈議程:2011 年 7 月 11 日
◎ 議程徵求頁面:http://coscup.org/2011/zh-tw/program/

【研討會資訊】
◎ 時間:2011 年 8 月 20 日 ~ 21 日
◎ 地點:中央研究院人文科學館國際會議廳
◎ COSCUP 2011 官方網站:http://coscup.org/2011/
RubyConf Taiwan 2011 Call for Sponsorship & Presentation
OSSF/編述 Logo of Ruby Taiwan

RubyConf Taiwan 將於 2011/8/26~27(週五~週六)在中央研究院人文社會科學館會議廳舉辦,這是目前台灣唯一及最具規模的 Ruby 程式語言大會,預估將會有超過一百位的 IT 技術人員、系統管理工程師、程式開發者一同參加此次會議,大會並將邀請台灣本地、美國及日本專精 Ruby 開發與應用的講者來分享他們在專案建置與營運推展方面的經驗。除了邀請特定講題的講者之外,RubyConf Taiwan 即日起亦開始接受投稿,任何與 Ruby 語言相關的主題都歡迎您的投稿與分享。此外、如果您認同 Rubyconf Taiwan 在技術交流與經驗分享上的理念,亦歡迎各界透過經費贊助的方式協助本次活動的舉辦!

【演講徵求】
◎ 截止日期:2011 年 7 月 1 日
◎ 演講方式:Tutorial、60 或 120 分鐘,安排於會議第一天;Talk、30 或 60 分鐘,安排在會議第二天。
◎ 請將您的演講題目、摘要、個人簡介及演講時間長度投遞至 2011 AT rubyconf.tw
◎ 議程徵求頁面:http://ruby.tw/post/5417039996/rubyconf-taiwan-2011-call-for-presentations

【贊助徵求】
◎ 詳細的贊助方式請下載此贊助說明: http://rubyconf.tw/2011/cfs/rubyconf-cfs-2011.pdf
◎ 或參照贊助說明頁面:http://ruby.tw/post/5417382686/rubyconf-taiwan-2011-call-for-sponsors

----------

RubyConf Taiwan 2011 will be held on August 26-27, 2011 in Academia Sinica, Taipei. It could be the only and biggest Ruby language conference ever held in Taiwan recently. There will be guest speakers coming from the U.S., Japan and local Taiwan to share their development skills and outreach experiences. We're expecting to see more than 100 Ruby developers, system administrators and programmers joining us in this event. If you want to give a presentation at RubyConf Taiwan 2011 as well, feel free to submit your proposal to us right now. Any topics related to Ruby language will be welcome. Moreover, if you prefer to help promote the study and application of Ruby in Taiwan, we are also looking for sponsorship now!

【Call for Presentation】
◎ Submiting deadline: July 1, 2011.
◎ Session classification: Tutorial 60 or 120 minutes at Day 1, Talk 30 or 60 minutes at Day 2.
◎ Please submit the subject, extract, author intro and talk length you prefer, by sending email to: 2011 AT rubyconf.tw
◎ More details could be found at: http://ruby.tw/post/5417039996/rubyconf-taiwan-2011-call-for-presentations

【Call for Sponsorship】
◎ For sponsor program details, please check this prospectus:  http://rubyconf.tw/2011/cfs/rubyconf-cfs-2011-en.pdf
◎ More details could be found at: http://ruby.tw/post/5417382686/rubyconf-taiwan-2011-call-for-sponsors
Firefox 4 Party 在歡樂慶祝中也能增進使用者新體驗
李婉婷/採訪 Firefox 4 Party 在歡樂慶祝中也能增進使用者新體驗

為了慶祝新版本 Firefox 4 的釋出,Mozilla Taiwan 社群(以下簡稱為 MozTW)於 4 月 24 日,在耕莘文教院舉辦一場盛大慶祝派對,活動命名為「Firefox 4 Party-火狐四之曠 4 奇派」。此次活動大約吸引一百五十人參加,MozTW 除了向大家介紹新版 Firefox 4 的新功能之外,也在活動場地的週邊設計了互動攤位,透過此種方式一併向參與者分享與 Firefox 有關的趣味主題。

Firefox 4 Party 安排了很多社群朋友分享自己的開發技術及自己使用 Firefox 的相關經驗,MozTW 並特別邀請了「電腦玩物」部落格格主「異塵行者」來分享他認為好用的 Firefox 套件,也安排 TonyQ 介紹了 Userscript 技術。而 Mozilla Corporation的 Andreas Gal 和 Chris Jones 做為官方的代表,也到場解說 Firefox 4 在技術方面的改進,並與台灣社群一起慶祝 Firefox 4 的誕生。

在這次 Release Party 中,主辦者特別在活動場地周圍擺設了若干展示攤位,讓 Firefox 的資深使用者能一同分享各種有趣的主題,包括技術面向及非技術面向,例如向活動的參與者介紹好玩有趣的 Firefox 套件或新穎的開發技術;另外,本次活動也同時邀請維基社群擺攤介紹自己,讓參與者能在這次活動裡與不同自由文化的社群成員進行交流。此種小科展攤位的想 法,源自於主辦者參與國外社群活動的經驗,透過這種擺攤位分享的形式,希望能成功地將自由分享的理念和氛圍感染給每個參與 Firefox 4 Party 的來賓,並進一步促進社群朋友們之間的交流,才能在未來激發出更多的群體創意。此外,攤位活動的主題也並不設限於技術面向或是非技術面向的主題。這樣的設計, 讓不論是技術強者或是單純的使用者,都可以參與活動並加入討論,而不會產生彼此無法融入的隔閡。


Firefox 4 Party 在歡樂慶祝中也能增進使用者新體驗
▲ Firefox 4 Party 中的小科展攤位。

除了聆聽台上講者的分享、參與攤位主題的分享交流外,Firefox 4 Party 既然標榜為半派對的活動,當然也少不了一些互動性娛樂橋段的安排。此次 MozTW 不但特地準備四個訂製的 Firefox 主題蛋糕,還邀請由花水木擔任主唱的 Ndorphin 恩多氛樂團到場表演,最後令參與者引領期盼的,當然就是人人有機會得獎的抽獎活動!依照往年的慣例,最後一位被抽中的幸運兒可以獲得 Release Party 活動的背景布幕,此次的 Firefox 4 Party 也不例外,主持人趙柏強 (Bob) 與這名「苦主」的機智問答並將現場氣氛炒到最高點,活動也在一片歡笑聲中畫下句點。

網頁瀏覽器是當代電腦使用者最容易接近、也最常使用的軟體工具,MozTW 一直希望能帶給大家多元的、不同於以往的瀏覽器體驗。Firefox 4 Party 的主持人 Bob 說:使用 Firefox 時大家一定都有自己喜歡的套件,但不見得一套瀏覽器能符合所有人的需求,因此希望各位都可以加入 MozTW 社群,才能適時地將自已最深切的使用需求回報給專案的開發團隊。且在加入社群之後,也可以進一步透過 Firefox 4 Party 這樣的活動,發掘更多適合自己的套件,並在快樂歡慶之餘,同時從活動中獲得新的瀏覽器使用體驗。

註:本文中使用的圖片由 yrchen 拍攝。採用 CC 姓名標示-非商業性-相同方式分享 2.0 通用版授權。

用開源軟體玩開放百科-台灣維基社群用維基百科打造您的 Firefox
Reke/文

就在今年,開源瀏覽器 Mozilla Firefox 推出 4.0 版本,同時宣布往後版本更新的週期將會加速,讓所有 Mozilla 社群的成員們歡欣雀躍。而另外也有一個以「開放」精神為職志的社群,也在今年感到鼓舞-維基百科社群,為了慶祝維基百科成立十週年,全球各地都有慶祝的活動,包括台灣社群也在元月冬季聚會中展現出強大的活動力,重新啟動了社群的開展。

如果說,開源軟體 Firefox 帶來的,是網路瀏覽工具的大解放,那麼維基百科的存在,就是網路內容的大解放。這個開放式的百科全書,內容是人人可編輯,而且每個人貢獻的內容,皆採行 CC-by-sa 3.0 以及 GFDL 的雙重授權,送給廣大的閱讀者及其他的編輯者。可以說與開放源碼、人人可以修改,修改後均需以 GPL 方式回饋給大眾的 Firefox 來說,有精神上的共通點。隨著 Firefox 改變瀏覽器市場以及維基百科影響力越來越大,兩者皆不斷地為網際網路的開放做出貢獻。


多樣套件,打造維基專屬的 Firefox


事實上,Firefox 與維基百科的結合,早在右上角就已經開始。在 Firefox 提供的搜尋列裡,除了有 G 牌跟 Y 牌的搜尋引擎,也提供了維基百科的搜尋。一般使用者只要簡單地開啟下拉選單改變搜尋項目,就可以很方便地搜尋知識。

然而,這樣的結合還不夠直覺,更強大的做法是,裝上「WikiLook」這個擴充套件。而後在網頁上讀到不了解的術語、沒聽過的事件或是人物,想查詢相關的知識,只需要用滑鼠圈選後,由右鍵選單點選「WikiLook」,就可以像線上即時詞典一樣,馬上看到維基百科詞條的內容了。擁有類似功能的還包括「QuickWiki」或是「WikiSearch」這兩個套件。對於一般的維基百科的閱讀者來說,都是相當好用的小工具。

不過這對於參與編輯的維基人來說,光查閱恐怕不太夠。在參與編輯工作的時候, Firefox 透過套件也能給予使用者許多方便之處。例如 Textarea Cache,顧名思義,是將網頁中的文字區塊做快取備份的插件。對於一寫條目就欲罷不能的維基人來說,要是沒有這樣子的輔助,一不小心編輯到最後網路不穩、伺服器出錯,出現「讀取失敗」的訊息,所有辛苦工作的成果都付之一炬,那真是叫人搥心肝的痛!Textarea Cache 正好替我們保存了大多數的編輯成果,讓慘劇不再發生。

另外,中文維基百科得碰上難纏的政治問題:繁/簡體中文。雖然中文維基百科本身就提供了繁簡互轉的功能,但是在某些時候,編輯者必須手動做對轉的工作。這時候,怎麼在繁體中文的電腦裡輸入簡體中文字,可是會難倒不少電腦技術並不那麼純熟的人。這時候利用新同文堂可以將輸入區塊裡的文字做對轉,相當方便。


社群合作,打造網路新生態


除了在內容上的協作開放,維基百科與 Firefox 之間有著極為緊密關聯的,就是兩者皆著重社群的經營。因為兩者皆依賴社群的力量支援內容的開發以及成果的推廣,所以社群越發達,則工作的成果也會相對地越豐碩。

不過,相對於 Moz.tw,台灣維基百科社群的起步顯得稍微緩慢。雖然在第一代開拓者的努力之下,成立了中華民國維基媒體協會,是維基媒體基金會正式承認的分會;在 2007 年,更成功地舉辦了全球性的國際維基媒體會議 (Wikimania),精彩的盛會至今仍為基金會津津樂道。但是就在這場絢爛的煙火之後,社群的精力快速消沉。而隨著第一代維基人因人生階段轉換淡出社群,後續又未有新血補入,社群遂近於休眠的狀態。

到了 2009 年重新恢復季聚,一年固定四次的見面,雖然人數不見得十分浩大,但是也宣告著社群復甦的契機。在 Firefox 4 的派對上,社群也協力合作出簡單的小科展,向走在前頭的老大哥展現社群漸次恢復的活力。

台灣維基社群的復甦其實對於各式各樣的自由軟體來說,都是有利的消息,因為做為一個開放的技術、多樣的平台,還有自由的寫作方式,能為各類社群提供所需的資源。包括像教學文件可以在維基學院發佈、社群活動消息可以透過維基新聞傳遞出去,社群要訓練的人才,也可以透過維基相關條目的編修,取得合適而又低廉的教材。

目前台灣維基社群也急需更多朋友的加入,擴大社群基礎。除了一年四季皆會有全台的季聚之外,台北每隔週一在生態綠都有地方小型聚會。透過參與維基人的聚會,深入了解維基媒體各項計劃的內涵,雙方必能在互助互利的情況下,共同打造一個開放的網路新生態!


作者簡介


Reke,台灣維基社群成員,PTT 電影板板主,主業為文字工作者。著迷於電影,耽溺於文字;在現實裡怯弱地柔從,在評論裡驕傲地反抗。電影部落格:http://rekegiga.blogspot.com/
FreeBSD 基礎設定(下)
Weithenn (http://www.weithenn.org/)/文

前言


在前二篇文章,FreeBSD 基礎設定(上)以及 FreeBSD 基礎設定(中),已經將 FreeBSD 主機相關基礎配置完成。例如:使用者帳號、管理者帳號、網路連線部份、遠端管理及 Ports Tree 的更新……等。本篇是 FreeBSD 基礎設定系列的最後一篇,我們將先討論當 FreeBSD 總部發佈官方安全性更新時,我們該如何為 FreeBSD 主機進行漏洞修補(可能需要重新編譯核心),使得 FreeBSD 主機能夠在穩定且安全性無虞的環境下保持正常運作。

接著討論當 FreeBSD 主機上線運作後,希望系統能夠定期將系統相關資訊。例如:磁碟空間使用率、郵件佇列狀況、安全性檢查資訊等,這些與主機相關的資訊,自動寄送到主機管理人員的郵件信箱內。因此管理人員每天僅需要查看閱讀收到的系統資訊郵件內容,是否有需要注意或調整的地方即可,而不需要每天手動進行遠端登入主機來查看相關訊息。

最後則是討論 FreeBSD 主機遠端連線 SSH 服務的基本安全性設定,以便防止有人使用自動嘗試登入工具來企圖登入主機。另外還有 FreeBSD 主機的運作時間自動與網際網路上 NTP 伺服器或企業內部自行架設的 NTP 時間伺服器進行主機時間校對同步的動作。並且了解 FreeBSD 主機啟動了哪些服務,開啟了哪些相對應的 Port 還有相關服務執行序的樹狀結構,以便查詢及了解主機的整體安全性。


漏洞修補及安全性更新


實作環境

* FreeBSD 8.2 Release
FreeBSD-SA-11:01.mountd (8.2-RELEASE-p1)
* openntpd-4.6_1,2
pstree-2.33

作業系統安全性相信是每個 IT 人員都要了解並隨時注意的,不管您提供的服務是採用何種作業系統或多或少都會有安全性漏洞的出現。作業系統的安全性並非某些常在資訊新聞或技術論壇上出沒的愛好者所云,該作業系統或者該軟體是如何安全、如何堅不可破。通常只在於漏洞有沒有被發現並執行攻擊而已。因此系統的管理人員都應該隨時注意所使用的作業系統,其官方網站上是否有發佈新的安全性更新,以便進行漏洞修補。例如:採用 Microsoft 作業系統的管理者,應該在每個月官方發佈安全性修正時,第一時間了解該修正檔所要修補的漏洞及相關資訊後,立刻為自身所管理的主機進行安全性更新以保持作業系統的安全性。

俗話說「沒有醜女人,只有懶女人。」這樣的精神套用在 IT 管理上也是相通的:「沒有絕對安全的作業系統,只有懶惰的 IT 管理者。」在筆者的自身經驗中,曾經碰到過某企業的 IT 管理人員在 Microsoft 發佈了安全性更新之後遲遲未對企業內部伺服器進行漏洞修補,因而造成企業用來提供商業服務的作業系統因為此一系統的漏洞,導致被入侵而發生資料遺失並且外洩的慘劇。追根究底會發生這樣的情況,即使該企業使用最優秀的防火牆設備、高智能的入侵偵測……等防護機制都將無法防治。因為入侵者是依尋著正常管道存取服務伺服器,並且透過系統漏洞進行入侵的動作,而這一切的起因就只是因為 IT 管理人員不重視官方所發佈的安全性更新所導致。因此建議所有管理者都應該重視企業營運伺服器的系統安全性。

FreeBSD 官方會不定期公告安全性更新及漏洞修補資訊於網站上,每個安全性更新項目內都有非常詳細的說明。例如:影響的系統模組名稱、此一漏洞的公佈時間、影響的作業系統版本、哪些作業系統已經修正此漏洞……等,以便您了解此漏洞修補的相關資訊以及套用這項安全性更新後對於系統可能造成的影響。


▲ 圖1 FreeBSD 官方安全性公告網頁

freebsd-update 為 [removed] <!-- var prefix = 'mailto:'; var suffix = ''; var attribs = ' target="_blank"'; var path = 'hr' + 'ef' + '='; var addy50890 = 'cperciva' + '@'; addy50890 = addy50890 + 'FreeBSD' + '.' + 'org'; var addy_text50890 = 'Colin Percival'; [removed]( '' ); [removed]( addy_text50890 ); [removed]( '<\/a>' ); //--> [removed]Colin Percival [removed] <!-- [removed]( '' ); //--> [removed]這個 E-mail 地址已經被防止灌水惡意程式保護,您需要啟用 JavaScript 才能觀看 [removed] <!-- [removed]( '' ); //--> [removed](FreeBSD committer 及 Security team 成員)所開發,此工具為透過 Binary Updates 方式來為 FreeBSD 主機進行下載及安裝 FreeBSD 總部所發行的安全性更新修補檔案,此安全性更新工具能有效改善以往安裝安全性修補檔案的煩雜流程,例如手動下載更新檔、將漏洞檔案及更新檔案進行合併……等步驟。

此更新指令於 FreeBSD 6.2-Release 之後的版本便內建於系統內 (Base System),因此您不需安裝任何套件便可以輕鬆使用 freebsd-update 指令配合相關參數來自動下載安全性更新並安裝到 FreeBSD 主機上。請注意!此安全性更新工具僅僅適用於 Release 版本,意即不適用於 Current 及 Stable 版本。

在執行下載安全性更新以前建議您先將安全性更新來源網站修改為靠近您的國內主機,以此次實作來說,我們將預設下載指向國外網站 update.freebsd.org 修改為指向國內鏡像網站 update.tw.freebsd.org。如此一來可以有效減少下載安全性更新修補檔案時,所使用的頻寬並加快下載速度,下載後的相關安全性更新檔案將存放於 /var/db/freebsd-update 目錄下。

指定下載來源為國內網站後,首先請使用 freebsd-update 指令配合參數 fetch,來下載相關安全性更新,此時更新工具會自動比對目前 FreeBSD 主機與安全性更新來源網站上的安全性更新版本,互相比對之後,下載本地主機所需要的安全性更新修補檔案。系統此時也會顯示相關的安全性在更新之後會影響到的檔案清單,了解會異動的檔案後,此時接著使用參數 install 來安裝剛才下載完成的安全性更新,完成安裝安全性更新後請將 FreeBSD 主機重新啟動以便套用生效。若您更新後感覺有對系統造成不良影響時,首先建議您再次閱讀相關更新前後所需要注意的內容,或者使用參數 rollback 來回復至更新前的狀態。


▲ 圖2 修改來源網站為國內後執行下載及安裝安全性更新

重新啟動主機後,請使用指令 uname –rs 來確定安全性更新是否完成,您可能會發現輸出的內容並沒有加上安全性更新版本號碼 (-p1),原因是 uname 指令是抓取系統核心的內容,但是有些安全性更新並不需要重新編譯核心 (Compile Kernel),有些則需要。您可能會問,那何時該重新編譯核心,何時不需要?該如何確定安全性更新已經安裝到 FreeBSD 主機上了呢?

  1. 首先請您先參考 FreeBSD Security Advisories 上相關安全性更新內容,若是該安全性更新需要重新編譯核心,則安全性更新內的解決方案說明項目內,通常會有這段文字「重新編譯您的核心並重新啟動系統 (Recompile your kernel and reboot the system)」。
  2. 若是該安全性更新不需要重新編譯核心,但是進行安裝後還是看不到更新版本號碼,此時您可再次執行 freebsd-update 指令,配合 fetch 參數,即可確認系統是否已經安裝了安全性更新,若已經是最新安全性更新版本,則會顯示「不需要更新 (No updates needed) 」等字眼。


▲ 圖3 系統已經具有最新安全性更新因此不需要再更新

若是該安全性更新需要「修補核心(即重新編譯核心)」,或者您實在很想看到使用 uname –rs 指令時會顯示出安全性更新版本號碼才安心,則請您安裝好安全性更新後重新編譯您的核心即可。在此為了減少不必要的篇幅,關於編譯核心的詳細資訊請您參考「FreeBSD 使用手冊—第 8 章設定 FreeBSD Kernel」,以下為使用預設核心 (GENERIC) 進行編譯核心的操作。


▲ 圖4 使用預設核心 GENERIC 進行編譯及安裝


定期寄送系統資訊


當 FreeBSD 主機上線運作後,我們希望系統能夠定期,例如每天、每週、每月自動將系統的相關資訊匯整後,寄送到主機管理人員的郵件信箱內,如此管理人員只要隨時注意所收到每台管理主機的系統資訊郵件內容,待需要進行相關調整時,再遠端登入主機進行管理即可。

系統在預設情況下會在每天凌晨 3 點 01 分、每週六凌晨 4 點 15 分、每月 1 號早上 5 點 30 分時會執行系統預先撰寫好的自動維護 Shell Script 執行檔,來為系統執行相關的清理及備份工作。例如:清除舊的系統訊息、清除 /var 下相關資料夾內舊資料、備份使用者帳號及群組設定檔 (/etc/master.passwd、/etc/group)、備份郵件別名設定檔 (/etc/mail/aliases)……等。

同時,系統每天也會自動進行系統安全檢查作業 (Security check)。例如檢查是否有新增 setuid 程式、檢查系統掛載磁碟狀況、檢查並列出所有 UID 為 0 的使用者帳號、檢查並列出沒有密碼的使用者帳號、列出防火牆 (ipfw、ipf、pf) 拒絕連線記錄、列出 TCP Wrapper 拒絕連線記錄……等。

若您想要了解上述系統定期執行的清理舊資料及備份重要檔案,還有安全檢查作業等詳細內容,您可以切換至 /etc/periodic 目錄下,裡面有四個資料夾分別是:每天 (daily)、每週 (weekly)、每月 (monthly)、安全性檢查 (security),裡面有相關的自動維護 Shell Script 可以查看,而 Script 前面的數字則表示執行維護動作時的先後順序。


▲ 圖5 查看系統排程資訊及自動執行 Shell Script

接下來,便是設定當系統執行完上述的安全檢查及清理作業後要將相關資訊寄給誰,預設情況下系統會寄給 root 這個系統管理者帳號,我們可以透過修改郵件別名設定檔 (/etc/aliases) 將寄給 root 管理者帳號的郵件自動轉寄給相關的管理人員。修改過郵件別名設定檔後,請記得執行指令 newaliases 才會套用更新,當郵件別名套用更新後,您可以馬上執行指令 periodic daily 來立刻執行每日例行的系統清理及安全檢查作業,並測試剛才設定的管理人員郵件是否收到系統資訊郵件 (daily / secruity run output)。


▲ 圖6 修改郵件別名設定檔並測試寄送系統資訊郵件


▲ 圖7 管理人員收到的每日維護系統資訊郵件


▲ 圖8 管理人員收到的每日安全性檢查系統資訊郵件


SSH 基礎防護設定


TCP Wrappers 可以保護 inetd 所提供的相關服務,防護規則為採用 First Match 方式,意即先讀取到的規則直接套用執行不須理會後面的規則。防護設定上非常簡單易懂,不像一般防火牆設定複雜難懂,並且具有一定程度的保護效果。但唯一缺點就是僅能針對 TCP daemon 進行保護,意即 UPD daemon 無法進行防護。

若您要進行設定,首先必須要啟動 inetd 服務,接著修改 TCP Wrappers 設定檔 (/etc/hosts.allow)。其設定檔內容可以分成三個小區段來看,分別是「服務名稱 (deamon)、來源 IP 位址或網域名稱 FQDN、連線回應為允許 (allow) 或拒絕 (deny)」,每個小區段之間使用冒號 (:) 為分隔符號,了解如何設定後,我們便可以著手進行設定及測試,此次我們以防護主機上的 SSH 服務為例,設定只有允許的 IP 網段可以使用 SSH 遠端登入此台 FreeBSD 主機(允許連線後才進行使用者帳號及密碼驗證),並且拒絕允許的 IP 網段中其中一台主機的連線要求。最後其餘的 IP 位址欲嘗試使用 SSH 遠端登入主機時,則拒絕其連線要求。由於已經拒絕連線要求,因此主機自然就不需要進行使用者帳號及密碼驗證的動作,有效增加主機安全性。

在設定以前還有三個小地方要注意,首先是來源 IP 網段的遮罩設定值,TCP Wrappers 支援的網路遮罩為 255.255.255.0 這種型式,而不是 /24,若您設定 /24 這種網路遮罩,則該行防護設定規則將無法運作,第二點要注意的是,修改 TCP Wrappers 設定檔內容後,當存檔離開的那一剎那,所設定的防護內容便立刻生效(不需要重新啟動或載入 inetd 服務),最後要注意的是,防護規則僅套用於 「新進 Session」,也就是說,設定阻擋規則時已經存在於主機上舊有的連線 Session,並不會自動斷線離開,而是新進來的 Session 才會進行阻擋的動作。


▲ 圖9 啟動 inetd 服務及修改 TCP Wrappers 設定檔

下列測試為當 TCP Wrappers 允許 SSH 連線要求時,我們可以看到 .36 這台 FreeBSD 主機回應請您輸入使用者登入密碼之訊息,若是 TCP Wrappers 拒絕 SSH 連線要求時,則直接回應遠端主機已關閉 SSH 連線要求。


▲ 圖10 主機使用 TCP Wrappers 允許或拒絕 SSH 連線要求時系統的反應


主機時間校對


不知您是否有過這樣的經驗,當主機上線運作一段時間後,每台機器上的時間顯示,便開始發生有的主機時間比較快,有的比較慢,這樣或多或少的時間差,而且使用不同的作業系統時狀況將更為明顯。事實上在企業環境中不管是任何等級的伺服器,當上線運作一段時間之後,機器的時間一定會與中原標準時間有些許誤差,即使是二台硬體一模一樣的伺服器同時上線運作,一段時間之後,二台主機之間的系統時間也有可能不相同,會造成這樣的誤差結果在於,硬體設備中,負責計算時間的晶體震盪元件 (Crystal Oscillator) 在製造過程中或多或少都會有些許誤差,也正是因為這一個些許的誤差,導致所震盪出來的頻率無法完全精準,因此導致伺服器上線運作一段時間後發生時間誤差的現象。

此設定中,我們為主機安裝 OpenNTPD 客戶端來進行時間校對的方式,它與一般的 NTP 時間校對方式有著明顯不同的特點,一般 NTP 客戶端的時間校對方式為「強迫性一次調整到位」的方式來調整系統時間,這樣比較偏向暴力性的一次到位,同步系統時間的方法在某些狀況下可能會對主機運作穩定性上產生問題。此次安裝的 OpenNTPD 客戶端的時間校對方式為:當 OpenNTPD 客戶端與時間伺服器有時間誤差時,主機將會每隔幾分鐘進行系統時間「微調」,慢慢調整,直到最後與時間伺服器上的標準時間達成一致,對於企業營運環境要求高穩定性的伺服器來說,此時間校對相對而言是比較適合的。

OpenNTPD 套件為凡事講求高品質程式碼及系統高安全性 OpenBSD 的子計劃項目之一,也因此它繼承 OpenBSD 的設計理念,OpenNTPD 其目標就是提供使用者一個既安全又穩定的 NTP 服務。在 OpenNTPD 安裝過程中系統會自動建立 _ntp 這個使用者帳號及群組至系統中,屆時也會利用此一帳號來啟動 OpenNTPD 服務,避免因為服務使用 root 帳號啟動,造成此服務若被攻陷,便可取得系統管理者權限的安全性漏洞風險,另外在開始安裝 OpenNTPD 套件以前,請先執行更新 Ports Tree 的動作,以便確保您所安裝的 OpenNTPD 套件為最新發行的穩定版本,那麼就讓我們開始來安裝 OpenNTPD 套件吧!! 請鍵入如下指令切換至 openntpd 套件路徑後,執行套件安裝的動作,並清除安裝過程中所產生的暫存檔案。

下列實作設定中所指定的 NTP 時間伺服器為中華電信研究所時間與頻率國家標準實驗室,若是您的企業網路內已經架設 NTP 時間伺服器,請將該網址改為您內部的時間伺服器即可,當設定完成並啟動 ntpd 服務後,我們可以看到系統每隔一段時間會開始微調系統時間而不是一次調整到位。


▲ 圖11 安裝 openntpd 套件及修改設定檔後啟動 opennptd 服務進行主機校時


了解主機啟動哪些服務及通訊 Port


了解系統啟動哪些服務及該服務開啟了哪些服務,Port 對於主機的防護也是基本功,我們可以使用內建的 sockstat 指令,來顯示系統目前啟動哪些服務及使用什麼協定,又有誰連到這個服務上。相關欄位解釋如下:
USER:該執行序或服務的擁有者名稱 (Process owner),通常為啟動該服務的使用者帳號名稱
* COMMAND:執行序或服務名稱,啟動服務的名稱。例如:SSH 為 sshd
* PID:執行序編號 (Process ID)
* FD:Socket 檔案描述編號,0:標準輸入 (stdin)、1:標準輸出 (stdout)、2:標準錯誤輸出 (stderr)……等。
* PROTO:該服務所使用的通訊協定
* LOCAL ADDRESS:本機 IP 位址及開啟的 Port 號
* FOREIGN ADDRESS:遠端 IP 位址及開啟的 Port 號


▲ 圖12 透過 sockstat 指令了解主機啟動哪些服務及通訊 Port 號

運用 sockstat 指令了解 FreeBSD 主機執行哪些服務 (daemon) 與開啟哪些 Port 號之後,我們可以進一步透過了解執行序,在系統或服務出現問題後利於除錯,若只是要查詢系統有哪些執行序時,我們可以使用內建的 ps 指令配合相關參數進行查詢,但若是想要了解執行序的樹狀結構(意即母程序及子程序的樹狀關系)時,內建的 ps 指令可能略顯不足,此次實作中我們安裝 pstree 套件來輔助我們即時了解執行序樹狀結構。

安裝 pstree 套件完成後,我們欲查詢 ntpd 時間校對服務的執行序樹狀結構,如下所示,整個 ntpd 服務的母程序為 PID 895,並且負責帶起二個子程序 PID 897 ntp engine 與 PID898 dns engine。


▲ 圖13 查看 ntpd 服務執行序樹狀結構


結語


在筆者的經驗中,一般 Linux 使用者或初學者剛開始接觸 FreeBSD 作業系統時總是覺得不是很好操作或駕馭它,所以常常就放棄,轉而投入其它作業系統的懷抱中,然而追究其原因,常常只是因為對於 FreeBSD 作業環境的不了解以及不熟悉,所產生的距離感所導致。因此筆者期望能夠透過這三篇 FreeBSD 基礎設定文章,讓讀者對於 FreeBSD 作業系統有初步的認識,並且配合相關基礎設定的實作之後,能夠協助讀者建立屬於自已順手好用又安全的 FreeBSD 作業系統。
用自由軟體 Plone 來架設網站 (5)—元件架構
marr/文

在前篇文章裡,我們模擬一個小型專案的需求,利用 Paste 的 paster 工具,在 src 目錄裡建立骨架程式碼,新增一個 mysite.eventfolder 的 Archetypes 模組專案,執行 paster addcontent contenttype 之類的指令後,則可以新增型別裡的欄位資訊,熟練的話,數分鐘之內就可以搞定內容型別的雛型。為了知行合一,我們將逐步探究程式碼的細節,了解它們的原理跟修改方法。

Plone 系統為了納入這個新模組,會在 src/mysite.eventfolder 檔案系統裡,依序存取數個檔案。首先,GenericSetup 會讀取 mysite/eventfolder/configure.zcml 的內容,註冊 extension profile,接著讀取 interface 和 content 目錄裡的資訊,做為建立型別的依據。究竟,什麼是 interface 呢?它又扮演怎樣的角色呢?


元件架構


如何讓系統具備擴充彈性,同時保持高的安全性,還有低的升級門檻,一直是件挑戰。為了更接近這個聖杯,當年的開發人員,將 Zope2 學到的經驗,轉化成 Zope3 的設計理念,具體的方法論稱為 Zope Component Architecture (ZCA),實作 ZCA 的模組被稱為 Zope Toolkit (ZTK),這些方法跟核心模組,也成為目前 Plone 的技術基礎。

Component Architecture 通常被譯為「元件架構」,主要概念是將軟體依其架構與功能,分為多個獨立元件,諸如:Java、.Net、Mozilla XPCOM 都是廣為人知的元件架構。就元件架構而言,ZCA 既不是首創,也不是獨創,它是 Python 軟體的開發架構,適合用來開發大型系統,加上它不限於網頁應用程式的領域,稱之是 Python Component Architecture 並不為過。

Python 的軟體世界是一堆物件,ZCA 則是一套架構方法,讓這些物件有效組建和再利用,ZCA 引入一個稱為「元件」(component) 的概念,元件本質仍是 Python 物件,它額外加了「介面」(interface) 物件,用來描述元件的特性和行為,像是抽象的 API。不過,想要知道元件如何做到這些特性及行為的話,必須另外查看實作的程式碼。


元件介面


以 Event Folder 為例,它的介面檔案是 interfaces.py 或位於 interfaces 目錄裡,以 class IeventFolder(Interface) 形式來定義。介面的定義方式跟傳統的 Python 物件定義方式很像,不過,ZCA 只是借用(有人會視為誤用)class 語法,介面的定義細節仍然有其獨特之處,留意不要跟 Python 物件的定義方式混淆,如圖1 所示。

用自由軟體 Plone 來架設網站 (5)—元件架構
▲ 圖1 Event Folder 的介面內容範例

IEventFolder 是介面的名稱,最前面的 I 代表 interface 之意,在最前面使用 I 符號是種慣例。IEventFolder() 裡接的 Interface,來自於 zope.interface 的定義,zope.interface 是 ZCA 的核心實作之一,也就是 Zope Toolkit 的模組產品。

在 IEventFolder(Interface) 之下,我們看到 startDate 和 venue 兩個欄位屬性值範例,載入 zope.schema 後,它們分別使用 schema.Date() 和 schema.TextLine() 的形式來定義,而且提供 title 和 description 之類的設定值。

不過,一般的介面內容,包括屬性值和方法兩種定義,同時也不需要載入 zope.schema。接著,我們先利
轉寄『第 173 期 使用 Open Web 技術實作 HTML5 中文文字雲』這期電子報

寄信人暱稱  寄信人email
收信人暱稱  收信人email

  • 社群留言
  • 留言報主