關於本報

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

近期電子報


訂閱便利貼


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

自由軟體鑄造場電子報
發報時間: 2011-10-19 16:00:00 / 報主:OSSF
[公益聯播]捐款贈好禮,再抽HTC!一起來幫助受暴婦幼
本期目錄
[法律專欄] GPL 條款對於衍生程式的判定標準與其授權拘束性的擴散範圍(下)
[源碼快訊] 中央研究院 10 月 22 日盛大舉辦「100 年院區開放參觀活動」
[源碼快訊] 十一月份台灣自由軟體社群活動列表
[源碼快訊] 「PHPConf Taiwan 2011」11/12 中研院盛大舉辦!
[技術專欄] 基於 Samba 的網路儲存系統
[技術專欄] Mail Server 多功能記錄檔分析工具─SendmailAnalyzer
[技術專欄] 麥克阿忠的 Ruby on Rails 真功夫─手刻 CRUD
[技術專欄] 利用 FreeNAS 打造儲存設備 (6) 網路設定篇─基礎設定
[自由專欄] 專利勒索是否將取代軟體開發成為生財之道?
[源碼快報] Richard Stallman 針對 Jobs 過世發言惹爭議
[按案/工作] 自由軟體鑄造場 誠徵工讀生
[源碼快訊] 「維基化話維基」系列即將登場
報主的話
[法律專欄] GPL 條款對於衍生程式的判定標準與其授權拘束性的擴散範圍(下)

林誠夏/文

本文上篇的文章連接頁面如右:http://www.openfoundry.org/tw/legal-column-list/8446-the-license-inheritance-bounds-of-gnu-gpl-01

實務上對 GPL 衍生程式可資操作的基本判別流程

綜上所述、關於 GPL 衍生程式的判定標準,以及其授權拘束性的擴散範圍,可以歸納出三個可資操作的基本判別流程:

  1. 該軟體專案中是否內含 GPL 授權元件的程式碼?若是如此,該專案是否已明確適用該 GPL 元件授權人認同的獨立與可區分機制,來利用這個元件?
  2. 軟體專案裡的其他元件是透過靜態連結,抑或是動態連結的方式與該 GPL 授權元件進行互動?
  3. 若是採用動態連結的互動方式,則此 GPL 授權元件所提供的功能是否居於整個軟體專案的核心地位?是否失去此一 GPL 授權元件的連結,則整個軟體專案的多數功能便不復完整?

以上三個基本判別流程可以用「原則 VS. 例外」的比較邏輯來理解,第一階段、軟體專案中若是內含 GPL 授權元件的程式碼,則原則上 GPL 元件的授權拘束性已經啟動,該軟體專案裡的其他元件會受到 GPL 授權條款所拘束,然而、例外的狀況是,雖然該軟體專案內含 GPL 授權元件的程式碼,但是其他元件得以主張是以「獨立與可區分」的方式來利用這個 GPL 授權元件,便可例外地不受到 GPL 授權拘束性所及;接著、進入了第二階段的判別流程,軟體專案裡的其他元件究竟是透過靜態連結的方式,抑或是動態連結的方式來與 GPL 授權元件互動?原則上若是靜態連結的互動方式,則因為元件與元件之間傾向是高度相依的融合 (merge) 關係,此時整個軟體專案會被認定是 GPL 授權元件的衍生作品,而在後續散布時會被要求全部得依照 GPL 授權條款的方式,提供整體專案的程式源碼;而若是其他元件是以動態連結的機動方式呼叫 GPL 元件的功能表現,那麼這時候才會進入第三階段的判別流程,個案的去判別該 GPL 授權元件所提供的功能,在質的一方面,於整個軟體專案裡是否居於重要的核心地位?或是就量的方面,是否 GPL 元件一經抽離之後,就會造成軟體專案多數的功能不復完整?如果此二個子問題的答案皆為「是」,則此 GPL 元件的授權拘束性仍然有可能及於整個軟體專案,而若此二個子題的答案皆為「否」,則此元件的授權拘束性原則上不及於其他元件,但使用者在散布它時,仍應提供其他元件與此 GPL 授權元件間,連結呼叫與互動對應程序方面的必要資訊。透過以上三個流程的自我檢驗,GPL 授權元件的使用者便可知悉該元件,所可能為整個專案帶來授權拘束的基本可能性與風險性,其實際的操作步驟請參照下圖所示:


▲ 圖2:GPL 授權拘束性基本判別流程示意圖

Android 因中介隔層例外地主張獨立性與可區分性

此外、關於 GPL 對於衍生程式的判定標準還有一個時興的子議題,那就是近年業界不乏利用中介隔層 (middle layer) 的方式,來區隔 GPL 元件所可能帶來的授權拘束性,最顯著的例子、就是 Google Android 所規劃出來的中隔平台。Google Android 平台的授權架構,底層為 GPL-2.0 授權的 Linux Kernel,而中介隔層採用的是 BSD 類別或是 LGPL-2.1 類別授權的函式庫 (library),以及 Apache-2.0 授權的 runtime system,而此中介隔層之上還有中介應用程式及函式庫的溝通框架 (application framework),最上層才是讓個別廠商自行開發的應用程式 (application program)。透過這樣中介隔層的機制,Google Android 平台上層的應用程式僅與中層的函式庫溝通與互動,而底層 Linux Kernel 也僅與中層的函式庫溝通與互動,從而上層的應用程式並不會直接與底層的 Linux Kernel 直接溝通,故而以此點來主張這些應用程式在執行上與功能表現上,具有不一定受到 Linux Kernel 影響的「獨立性與可區分性」;除此之外、更重要的一點是:Google Android 中介隔層的函式庫與 runtime system,完全以無授權拘束性或是弱授權拘束性的自由軟體元件來營建。也就是說、中介隔層部份依其授權方式,對外是可以提供程式源碼並允許後續散布的,理論上這樣的中介隔層便具有實作上「可移植的可能性」,若是有程式開發者願意花費時間將此中介隔層移植至其他非 Linux Kernel 的作業系統上去運作,並非完全沒有可能,而既然中介隔層與採用 GPL-2.0 授權的 Linux Kernel 之間具有「可移植、可拆解」的「獨立性與可區分性」,那也就有機會被認定為除外於 GPL 授權元件的衍生程式範圍,而不用受到 GPL-2.0 授權條款的擴散拘束(註七)。


▲ 圖3:Google Android 平台中介隔離的授權架構圖

Google Android 平台這種中介隔離 GPL 授權拘束性的作法,在業界也不乏見其他的類似作法(註八),然而這些中隔手法、也並非完全不會引發授權爭議,舉 Google Android 平台為例,其之所以可以成功運行,第一點是由於 Google Android 平台中介隔層的架構完整、佈局嚴密,所以不易被自由開源軟體社群的參與者,直接視之為以簡陋的中隔介面惡意規避 GPL 授權條款的義務性規定;第二點、也是最重要的一層因素,是因為 Linux Kernel 核心開發群與其精神領袖 Linus Torvalds,對於 GPL-2.0 授權條款在衍生程式範圍上的解釋態度較為寬鬆,其認為 Linux Kernel 之上存有不必然受到 Kernel 授權狀態拘束的獨立使用者空間 (user space),所以取用 Linux Kernel 的 Google Android 平台便可依此觀點對 Linux Kernel 進行中隔處理。而雖然 Linux Kernel 多數核心開發群同意這樣的觀點,但並不能類推其他以 GPL 授權其軟體元件的自由開源軟體社群,都會同意以此種中介隔層的方式,能將 GPL 元件的授權拘束性完全隔離掉,所以、若是要將日後可能產生的法律爭訟與侵權風險降到最低,在很多不同狀況的案例上,還是得依所使用 GPL 授權元件的細部資訊,來進行個案式的判斷。

是否開啟 GPL 授權拘束性仍需考究實務的個別情況

單純在專案裡利用 GPL 授權元件並不必然會開啟其授權拘束性,有時候授權拘束性的疑慮和恐懼,其實是被使用者誤解並且過度擴大解讀了(註九)。本文初始之所以採用「牽一髮而動全身」這樣的說法來比擬 GPL 元件的授權拘束性,便是利用簡明的比喻提醒讀者,個別的 GPL 元件若是採用動態連結的方式來與其他元件互動,或是專案開發者也能夠找到其他授權方式的元件將其所負責的功能代換掉,這些跡象都可以證明該元件實際上與整個軟體專案在開發上的關聯不深,就像一拔而起的單一毛髮,並不會將其 GPL 的授權拘束特性傳導到專案的其他部份;然而、若是該 GPL 授權元件是採用靜態連結的方式來與其他元件互動,或是在功能表現上居於專案的核心定位,那麼此一 GPL 授權元件在運作上便與整個軟體專案密不可分,從而並不是那麼輕易地可以被更換、代替,此時就像是一串與頭皮緊密連結 (link) 的毛髮,無法輕易拔除並且關聯撼動全身,那麼該軟體專案的其他元件便會被視為是 GPL 授權元件的衍生作品,從而整體專案便進入了 GPL 授權拘束特性的擴散範圍。

但無論如何,目前關於 GPL 授權拘束性的擴散範圍,全球仍然沒有確定的司法判決是就此議題進行細節釐清與範圍界定的。所以此議題相關的評論與看法,並沒有一個完全權威並可據以簡單判斷的遵循法則,有時複雜的狀況、也仍然處於「一個 GPL 授權拘束性、個自解讀」的灰色地帶。本文僅先就此議題原則性的重要指南進行論述,提供一至三個基本步驟來讓讀者自我完成簡易驗證之用,而若是特定 GPL 授權元件的採用關係,是涉及大型商用專案或是元件互動性複雜的狀況,則建議還是應該個案式的依元件實際互動的方式,以專案分析的方式來做細節上的評判。

其他與此議題相關的重要參考文章羅列如下,以供對此議題有興趣的讀者,可以據此查證原典:

  1. Linus Torvalds 於網路討論串裡,發表其對 GPL 授權拘束性的意見與立場:http://linuxmafia.com/faq/Kernel/proprietary-kernel-modules.html
  2. Lawrence Rosen 所著專文「General Public License, Explained」,說明 GPL 授權元件的授權拘束性範圍,以及推廣「License Inheritance」此一嶄新名詞:http://www.sitepoint.com/public-license-explained/
  3. Carsten Emde 於 2008 年 11 月的演講簡報,綱舉目張的解釋了運作在 user space 下的驅動程式與 Linux Kernel 之間的授權拘束性關係:http://www.osadl.org/fileadmin/dam/presentations/FAPI-UIO-SPS-2008.pdf
  4. Greg Kroah-Hartman 於其 2006 年提供的演講中,批論不提供程式源碼的專屬驅動程式,違反了 GPL 條款的授權拘束性:http://www.kroah.com/log/linux/ols_2006_keynote.html
  5. Greg Kroah-Hartman 於 2006 年 8 月發表 UIO 作法的說明頁面:http://lkml.indiana.edu/hypermail/linux/kernel/0608.3/1908.html
  6. Jonathan Corbet 2004 年 1 月 於 LWN.net 的報導,討論 user space 驅動程式的技術內容:http://lwn.net/Articles/66829/


註七:此種中介隔離的互動架構在 GPL-2.0 授權條款裡並沒有明文述及,但在 GPL-3.0 裡開始有簡要的描述,一般對此機制的通俗用語為「well defined interface」,其於 GPL-3.0 授權條款的主要描述位於第 1 條第 3 項 (b) 款:serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.

註八:另一種硬體裝置驅動程式 (driver) 方面的 UIO 中介隔離模式 (the user space I/O system),其實也與 Google Android 平台的作法十分類同,其也是在應用程式及 Linux Kernel 之間隔一層以 LGPL、BSD、MIT 等,可以為 GPL-2.0 授權方式「吸納同化 (merge)」的函式庫程式做為中介,然後再將驅動程式內含的重要演算法撰寫在應用程式的層級,以運作在 user space 的方式,間接透過中介的函式庫來與 Linux Kernel 進行互動與存取,透過這樣的區隔方式,也有許多自由軟體專案的程式開發者認為,寫在應用程式層級的驅動程式,有機會不被列入 Linux Kernel 授權拘束性的擴散範圍。

註九:相關的評論與說明,可參照 Lawrence Rosen 所著專文「General Public License, Explained」:http://www.sitepoint.com/public-license-explained/
[源碼快訊] 中央研究院 10 月 22 日盛大舉辦「100 年院區開放參觀活動」
OSSF/編述

中央研究院自民國 87 年以來,每年秋天皆舉辦院區開放參觀活動 (Academia Sinica Open House),活動內容涵蓋了數理科學、生命科學、人文及社會科學等不同研究領域的活動,並設計了「電腦學習單」與「紀念章戳」集章活動,讓參與的民眾,有機會獲贈限量的紀念獎品。本年度的院區開放參觀活動,承接傳統精心規劃了 200 餘場精采活動,包括邀請曾志朗院士主講「透視文明:眼動,腦活,心靈通」,並且安排高雄市六龜山地育幼院合唱團演出「2011 歌中之雅歌」音樂會。這些兼具知性與感性、動態與靜態的活動,不僅拉近了民眾和學院式研究的距離,也激發了年輕學生更進一步探索人文社會與自然科學的研究興趣。

自由軟體鑄造場 (Open Source Software Foundry, OSSF)」設立於中央研究院資訊科技創新研究中心轄下,亦協同與中央研究院其他單位,於 100 年院區開放參觀活動當天,假中央研究院資創中心大樓,就 OpenFoundry 平台操作以及自由軟體常用程式集進行實機展示,活動內容豐富有趣,歡迎自由軟體鑄造場電子報的讀者們,在當天參與中央研究院院區開放參觀活動之餘,亦可撥冗至鑄造場所設置的攤位前,與本計畫各個輪班的同仁們談天敘舊,或是您對於自由軟體研究應用方面有任何合作推展的想法,亦可透過 Academia Sinica Open House 這個場合與我們當場磋商研議!

◎ 活動時間:2011 年 10 月 22 日 上午 9:00-下午 4:00
◎ 活動網頁:http://www.sinica.edu.tw/openhouse/2011/
◎ 活動地點:中央研究院院址 – 台北市南港區 11529 研究院路 2 段 128 號
◎ 院區地圖:http://www.sinica.edu.tw/openhouse/2011/pages/a2.html
◎ 導覽手冊 PDF 檔下載:http://www.sinica.edu.tw/openhouse/2011/2011openhouse.pdf

[源碼快訊] 十一月份台灣自由軟體社群活動列表
OSSF電子報團隊/整理

十一月份的活動列表出爐囉!各位有興趣的朋友記得先把時間預留下來唷,找尋同伴一起討論、一起吸收新知。另外,由於活動列表出來的時間比較早,若後續有活動希望也能一起做宣傳的朋友們,記得來信:ossfepaper@openfoundry.org

 

2011 年 11 月活動

Hacking Thursday(11/3)
地點:台北市中山區南京西路 86 號(101 迎風城咖啡主題美食館)
時間:19:30~22:30
活動資訊:http://www.hackingthursday.org/


台灣維基人臺北定期聚會(11/4)

地點:台北市松山區民生東路三段 140 巷 11 號(果子咖啡)
時間:18:00~20:00
活動資訊:http://zh.wikipedia.org/wiki/Wikipedia:WPTP-Social


MozTW Lab @ TP(11/7)

地點:台北市八德路一段 33 號 (HTC 八德專賣店二樓)
時間:19:30~22:00
活動資訊:https://groups.google.com/group/moztw-general
Moz.TW:http://moztw.org/


Rails Tuesday(11/8)

地點:
台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://ruby.tw/post/5658520519/rails-tuesday


TOSSUG 社群聚會(11/8)

地點:台北市南昌路二段 200 號(Mix Coffee & Tea)
時間:18:30~22:00
活動資訊:http://www.tossug.org/

RGBA 網路設計師聚會(11/9)
地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://rgba.tw/about


Taipei GTUG(11/9)

地點:台北市中山區民生東路三段 140 巷 11 號(果子咖啡)
時間:19:30-22:30
活動資訊:http://www.taipei-gtug.org/


Hacking Thursday(11/10)

地點:台北市中山區南京西路 86 號(101 迎風城咖啡主題美食館)
時間:19:30~22:30
活動資訊:http://www.hackingthursday.org/


PHP Conf Taiwan 2011(11/12)

地點:台北市南港區研究院路 2 段 128 號 人文社會科學館 第二會議室
時間:9:00~16:30
活動資訊:http://phpconf.tw/2011
報名日期:10/21(五) 13:30


Taipei Wikipedian Moonthly Meetup: Writing Day 維基台北定期聚—假日寫作月聚(11/12)

地點:台北市大安區泰順街 60 巷 11 號(小哲食堂)
時間:14:00~16:00
活動資訊:http://zh.wikipedia.org/zh-tw/WP:WPTP-W


MozTW Lab @ TP(11/14)

地點:台北市八德路一段 33 號 (HTC 八德專賣店二樓)
時間:19:30~22:00
活動資訊:https://groups.google.com/group/moztw-general
Moz.TW:http://moztw.org/


Rails Tuesday(11/15)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://ruby.tw/post/5658520519/rails-tuesday


TOSSUG 社群聚會(11/15)

地點:台北市南昌路二段 200 號(Mix Coffee & Tea)
時間:18:30~22:00
活動資訊:http://www.tossug.org/


RGBA 網路設計師聚會(11/16)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://rgba.tw/about


WoFOSS 好自由小組聚會(11/16)

地點:伯朗咖啡-北科大店(台北市忠孝東路三段 52 號 1 樓)
時間:19:00~22:00
活動資訊:http://wofoss.blogspot.com/2011/08/wofoss-921.html


Hacking Thursday(11/17)

地點:台北市中山區南京西路 86 號(101 迎風城咖啡主題美食館)
時間:19:30~22:30
活動資訊:http://www.hackingthursday.org/


台灣維基人臺北定期聚會(11/18)

地點:台北市松山區民生東路三段 140 巷 11 號(果子咖啡)
時間:18:00~20:00
活動資訊:http://zh.wikipedia.org/wiki/Wikipedia:WPTP-Social


MozTW Lab @ TP(11/21)

地點:台北市八德路一段 33 號 (HTC 八德專賣店二樓)
時間:19:30~22:00
活動資訊:https://groups.google.com/group/moztw-general
Moz.TW:http://moztw.org/


Rails Tuesday(11/22)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://ruby.tw/post/5658520519/rails-tuesday


TOSSUG 社群聚會(11/22)

地點:台北市南昌路二段 200 號(Mix Coffee & Tea)
時間:18:30~22:00
活動資訊:http://www.tossug.org/


RGBA 網路設計師聚會(11/23)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://rgba.tw/about


Taipei GTUG(11/23)

地點:台北市中山區民生東路三段 140 巷 11 號(果子咖啡)
時間:19:30-22:30
活動資訊:http://www.taipei-gtug.org/


Hacking Thursday(11/24)

地點:台北市中山區南京西路 86 號(101 迎風城咖啡主題美食館)
時間:19:30~22:30
活動資訊:http://www.hackingthursday.org/


MozTW Lab @ TP(11/28)

地點:台北市八德路一段 33 號 (HTC 八德專賣店二樓)
時間:19:30~22:00
活動資訊:https://groups.google.com/group/moztw-general
Moz.TW:http://moztw.org/


Rails Tuesday(11/29)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://ruby.tw/post/5658520519/rails-tuesday


TOSSUG 社群聚會(11/29)

地點:台北市南昌路二段 200 號(Mix Coffee & Tea)
時間:18:30~22:00
活動資訊:http://www.tossug.org/


RGBA 網路設計師聚會(11/30)

地點:台北市松江路 273 號(法其曼第咖啡)
時間:19:30~22:00
活動資訊:http://rgba.tw/about

[源碼快訊] 「PHPConf Taiwan 2011」11/12 中研院盛大舉辦!
OSSF/編述

在台灣,網站開發最常使用的程式語言就是 PHP 了,但台灣卻沒有專門的 PHP 相關研討會。今年 2011 年不會再有這種情形了!在各方人士奔走下,11 月 12 日,PHPConf Taiwan 將在中研院隆重登場。研討會中除了各方好手的技術講場外,由於 PHP 屬於自由軟體,自由軟體鑄造場自然也不會缺席。鑄造場法政研究林珈宏,也會就網站開發須注意的程式碼授權問題,說明相關的法律授權議題。歡迎想交流 PHP 技術的同好報名參加。

主辦:pct、高見龍 、自由軟體鑄造場

活動官網:http://phpconf.tw/2011
活動時間:11/12 (六)
活動地點:中研院「人文社會科學館」第二會議室
報名時間:10/21 (五) 下午 01:30 ,報名上限︰100 人

[技術專欄] 基於 Samba 的網路儲存系統
老薯條 (http://vulscan.wynetech.com.tw)/文

前言

網路儲存設備 (Network-attached storage, NAS) 的基本功能,不外乎資料儲存,以及利用權限來控管資料的存取,高階的型號更支援惡意程式掃描及 RAID(磁碟陣列)功能。在本篇文章中,筆者將簡介開放源碼社群中著名的 Samba 伺服器,並實作具有帳號控管及資料儲存功能的 NAS 系統。

下表為本篇教學的系統環境:

軟體名稱 官方網址 說明

Fedora 11

http://fedoraproject.org Linux 作業系統。
Samba http://www.samba.org 檔案伺服器,為了預留後續新增病毒掃描的功能,因此在此使用 Samba 3.0.23 版本,而不使用最新版本。

▲ 表1: 本篇教學的系統環境

 

Samba 的簡介

Samba 是架構在 NetBIOS (Network Basic Input/Output System) 系統基礎上的開放源碼軟體。主要用來連結 Microsoft Windows 系統的 SMB/CIFS (Server Message Block/Common Internet File System) 網路協定。自 1992 年 Samba 發表第一代版本以來,成為 Microsoft Windows 系統與 Linux 系統之間常用的溝通橋樑。

在最新的版本中(目前的版本為 V3),Samba 除了可與 Microsoft Windows 系統分享資料夾及印表機資源外,也可整合於 Windows Server 的網域、扮演網域控制站 (Domain Controller),以及加入 Active Directory 成員等功能。

為了讓後續 Samba 伺服器支援即時掃毒模組,本篇文章將以原始碼編譯的方式來安裝 Samba。

首先,移除系統內建的 Samba 伺服器,

$ yum erase samba*

接著請讀者至 Samba 的官方網站取得原始碼,並依序執行下列指令編譯:

取得原始碼

$ wget http://www.samba.org/samba/ftp/stable/samba-3.0.23.tar.gz 

進行配置

將下載的檔案解壓縮後,可使用 --prefix 參數指定程式安裝的路徑(本例為 /usr/local/samba),並記得啟用 pam 認證 (--with-pam)。若在編譯過程中,出現找不到 iniparser.h 的錯誤,讀者可將 /iniparser/src/ 中的 iniparser.h 複製至 /usr/include 目錄即可解決。

$ ./configure --prefix=/usr/local/samba  --with-pam

開始編譯

$ make proto
$ make

正式安裝

$ make install

安裝的路徑為先前設定的 --prefix 參數值。

Samba 的指令說明

下表為 Samba 重要執行檔的說明,

程式名稱 說明
smb 此程式用來管理 Samba 主機分享的目錄、檔案與印表機等相關資源。主要利用 TCP 埠 139 及 445 來傳輸資料。
nmbd 此程式用來管理工作群組、 NetBIOS 名稱等等的解析工作。主要利用 UDP 協定開啟埠 137, 138 負責名稱解析的任務。一個完整的 Samba 服務需同時啟動 smbd 及 nmbd 程式。
testparm 此程式用來檢驗 Samba 設定檔 smb.conf 的語法是否正確,當編輯完成 smb.conf 後,建議使用這個指令檢查以確定設定檔的語法皆正確。
smbstatus 列出目前的 Samba 的執行狀態。
smbpasswd 如果 Samba 伺服器所分享的資源需設定帳號/密碼的控管,即可使用此指令來建立所需的帳號/密碼。
smbclient 欲查看別台電腦所分享出來的目錄與裝置時,就可以使用 smbclient 來查看啦!這個指令也可以用在自己的 Samba 主機上面,查看是否設定成功。
smbmount 在微軟的 Windows 系統上,我們可以利用「網路磁碟機」的功能來連接到自己的主機,而在 Linux 系統上,即可以透過 smbmount 將遠端主機分享的檔案與目錄掛載到自己的 Linux 系統。
smbtree 有點像 Windows 系統的「網路上的芳鄰」顯示的結果,可以查到工作群組與電腦名稱的樹狀目錄分佈圖。

▲ 表2: Samba 重要的執行檔及其說明

Samba 的設定說明

Samba 伺服器的主要設定檔為 smb.conf。下表為常見的設定及說明,

Section(區間) 屬性名稱 說明
global workgroup [工作群組名稱] 設定工作群組名稱(如 WORKGROUP),此設定要與 Windows 系統的工作群組名稱一致。
  server string [說明文字] 描述此 Samba 伺服器的說明文字。
  security
[share|user|server|domain|ads]
設定此 Samba 伺服器的管控方式,提供下列管控方式。

share:
不設定任何的認證方式來存取 Samba 伺服器所分享的資源,即完全開放任何人存取。

user:
可利用帳號/密碼的認證方式來存取 Samba 伺服器所分享的資源,這也是本文所採用的存取方式。

server:
可利用其它的認證主機來從事帳號認證,如利用 LDAP 伺服器來認證。

domain:
採用網域控制器 (Domain Controllers) 的帳號/密碼認證方式來存取 Samba 伺服器所分享的資源。

ads:
使用 AD(Active Directory) 伺服器來認證帳號 / 密碼的有效性。
  smb passwd file [檔名] 設定密碼是否要經過加密。
  hosts allow [ip資訊] 限制可存取 Samba 伺服器的主機。
如設定
hosts allow 192.168.2. #僅允許192.168.2 網段中的主機存取此 Samba 伺服器。
一般建議讀者除了使用帳號/密碼認證外,還可使用此參數來限制能存取的主機,更能確保 Samba 伺服器的安全。
  Client code page[code 編號] 設定字元編碼,如果需要儲存以中文為檔名 的檔案,建議可設為 950,以避免中文檔名變成亂碼。
[名稱]   設定分享的資源區段,名稱可自取。
  comment [字串] 說明此分享資源的說明文字。
  path [目錄名稱] 分享資源的所在目錄
如設定 path /tmp 即其它使用者可存取 /tmp目錄下的檔案。
  browseable [yes|no] 是否可被微軟 Windows 系統的網路芳鄰瀏覽,如設為 yes 即表示利用 Windows 系統的網路芳鄰功能即可瀏覽此分享目 錄。
  Writable [yes|no] 分享的目錄是否被允許寫入。
  read only [yes|no] 分享的目錄是否為唯讀。
  public  [yes|no] 是否要公開分享的目錄。
  valid users [使用者名稱] 白名單設定,設定可使用此 Samba 伺服器所分享資源的使用者。
  invalid users [使用者名稱] 黑名單設定,設定不可使用此 Samba 伺服器所分享資源的使用者。

▲ 表3: Samba 常見設定及說明

接下來將以 /share 為 Samba 伺服器的分享目錄,權限僅允許 admin 得以存取。

I. smb.conf 的範例設定

[global]
#指定工作群組的名稱,此名稱需與使用者所使用的工作群組名稱相同。
workgroup = WORKGROUP
#說明 Samba 伺服器的文字。
server string = Samba Server
#指定使用帳號/密碼的認證方式來控管。
security = user
#設定帳號/密碼資訊所存的檔案位置,在此為 /etc/smbpwd 。
smb passwd file /etc/smbpwd
#設定密碼需為加密過的型式,不得為明碼型式。
encrypt password true
#設定文字編碼為 950,支援繁體中文,以避免中文檔名發生亂碼。
Client code page 950
#描述此分享資源的說明。
comment = virus-protected /public directory
#分享目錄為 /share 。
path = /share
#可以利用網路芳鄰的功能來瀏覽此分享資源。
browseable = yes
#設定可寫入此目錄。
writable = yes
#設定可使用此分享資源的使用者,在此例中為只有 admin 使用者可使用。
valid users admin
#設定是否為唯讀 。
read only = no
#是否要公開此分享資源,在此例中設定為公開。
public = yes

設定帳號及密碼

建立名為 smbpasswd 的密碼檔案:

$ touch /etc/smbpasswd

記得將該密碼檔設定為只有 root 才有讀寫的權限:

$ chmod 600 /etc/smbpasswd

利用 smbpasswd 指令建立名為 "admin" 的使用者:

$ /usr/local/samba/bin/smbpasswd -a admin -c /usr/local/samba/etc/smb.conf

接下來,請按照指示設定相關資訊。

設定完成後可利用下列指令檢查是否已寫入相關的帳號及密碼。

$ cat /etc/smbpasswd

啟動 Samba 伺服器

在重新啟動 Samba 伺服器之前,讀者可利用下列指令檢查 Samba 伺服器設定檔是否有錯誤。

$ testparm  -C /usr/local/samba/etc/smb.conf

如果沒有錯誤,則用下列指令以常駐程式的方式啟動 Samba 伺服器。

$ nmbd -D -s /usr/local/samba/etc/smb.conf
$ smbd -D -s /usr/local/samba/etc/smb.conf

啟動完成後,讀者可利用「網路芳鄰」瀏覽分享的資源(本例的分享資源為 /share 目錄),並以先前設定的帳號及密碼(僅允許 admin 帳號登入)登入。

安裝 Samba 的圖形化管理介面 - SWAT

對於不習慣文字介面編輯設定檔的讀者,Samba 伺服器貼心提供 Web 管理程式 - SWAT。

SWAT 依賴超級常駐程式 (super-daemon),如 inetd 或 xinetd 來啟動。由於目前 Linux 系統大多使用 xinetd 程式,所以接下來將以 xinetd 為範例。

xinetd 主要利用 /etc/xinetd.d 目錄下的設定檔決定啟動的服務,因此我們在 /etc/xinetd.d 目錄下新增一個名稱為 "swat" 的檔案如下:

service swat
{
port = 901
socket_type = stream
wait = no
only_from = 192.168.2.0 # 允許使用的來源IP資訊,讀者可自行針對本身實際系統環境設定。
user = root
server = /usr/local/samba/sbin/swat # 指定 SWAT 主程式的所在位置。
log_on_failure += USERID
disable = no #啟動此服務。
}

設定完成後,僅需利用下列指令來重新啟動 xinetd 即可。

$ /etc/init.d/xinetd restart

接下來,讀者可利用瀏覽器開啟 URL 瀏覽,如 http://192.168.2.1:901(SWAT 是運作在 901 埠),正常可看到如下畫面:

圖1: SWAT 的畫面

▲ 圖1: SWAT 的畫面

結論

筆者僅簡單說明 Samba 伺服器,其實 Samba 可搭配其他相關模組,如利用 Clamav(Linux 系統下著名的防毒軟體)實作 Samba 伺服器的即時病毒掃描功能,或利用 Linux Software RAID 實作磁碟陣列。甚至組合相關開放源碼社群的資源,也可以實作出媲美商業化的 NAS 系統,或者直接採用開放源碼社群成熟且完整的 FreeNAS 解決方案。

後續文章將繼續為讀者介紹如何擴充 Samba 的功能,例如即時惡意程式掃描等。

[技術專欄] Mail Server 多功能記錄檔分析工具─SendmailAnalyzer
翁卓立/文

官方網站:http://sareport.darold.net/
下載網址:http://ncu.dl.sourceforge.net/project/sa-report/sa-report/8.0/sendmailanalyzer-8.0.tar.gz (118KB)


前言

許多電子郵件軟體都有內建管理功能,熱門的軟體更不乏網路熱心人士提供延伸套件。這些軟體中有的是全面性的管理工具,從調整設定檔到監控伺服器運作狀況一手包辦;有的則補強特定功能,例如分析記錄檔、統計流量程式等等。

本文推薦的 SendmailAnalyzer,是一套郵件伺服器記錄檔分析軟體,其功能主要著重於解析記錄與產生報表。

 

圖1: SendmailAnalyzer 的操作畫面

▲圖1:SendmailAnalyzer 的操作畫面

SendmailAnalyzer 的特色

支援雙主流的開放郵件伺服器

SendmailAnalyzer 提供的功能不僅能處理 Sendmail,也可以處理著名的 Postfix 郵件伺服器的記錄檔。執行時優先處理系統上現有的電子郵件伺服器記錄檔(可經由參數指定是否要處理過去備份檔,或目前未使用的郵件伺服器記錄檔),再以 HTML 格式搭配圖形化的結果輸出,並產生動態的分析與統計報表。

由於流程可以依照需求配合背景程式自動執行,因此系統管理員得以在指定時間,進行自動化的分析工作。另外,參數還可以指定查詢的時間範圍,因此也可依據天數或週數來產生特定期間的報表。

整合主流的郵件過濾系統

除了使用便利外,安裝過程也只需要啟動 SendmailAnalyzer 的 deamon(常駐程式),再配合修改 Apache 的設定檔,讓 SendmailAnalyzer 所在目錄加入 CGI 程式的執行權限,並以 crontab 指令定期進行分析。另外,SendmailAnalyzer 也能處理其它電子郵件過濾程式的資訊,例如 SpamAssassin、MailScanner、ClamAV、Amavis 等,整合的範圍包含病毒掃描與廣告信攔截等,使得系統管理員得以整合數種相關程式,達到集中分析處理的效果。

磁碟空間管理與快取設計

SendmailAnalyzer 處理過的資料,會以檔案的型式儲存在系統磁碟之中。若擔心過多的資料佔用磁碟空間,SendmailAnalyzer 支援自動將舊的檔案備存,或是在適當時機刪除。而為了確保報表的處理速度,SendmailAnalyzer 會將超過一天的資料進行快取處理,如此可以有效降低系統資源佔用,也能加快報表處理的時間。

多樣式呈現的統計報表

除了上述的功能外,SendmailAnalyzer 也可以針對不同的項目進行查詢。統計報表區主要為三大類,分別是全域統計資料、最高統計,以及各種過濾器的統計功能,另外還提供適用於 ISP 網路環境等級的功能。

圖2: SendmailAnalyzer 支援指定報表查詢的日期範圍

▲圖2:SendmailAnalyzer 支援指定報表查詢的日期範圍

圖3: SendmailAnalyzer 支援圖形化報表呈現

▲圖3:SendmailAnalyzer 支援圖形化報表呈現

支援多國語系

雖然目前 SendmailAnalyzer 僅支援三種語言,英文、法文與西班牙文。但由於 SendmailAnalyzer 設計時已經考慮到多國語系的問題,因此使用者可以自行擴充語系,甚至可將語系的翻譯檔案提交給 SendmailAnalyzer 團隊。

結語

有些電子郵件伺服器規模較小,需要處理的電子郵件不多,而有些電子郵件伺服器則需要負擔公司全體人員的電子郵件使用需求。但無論應用的環境為何,SendmailAnalyzer 都能有效協助分析記錄檔。

作者簡介

翁卓立,逢甲大學資訊工程學系、台灣科技大學電子所畢業,目前擔任韌體研發工作,主要使用 Embedded Linux 進行產品開發。著有「Linux 進化特區:Ubuntu 10.04 從入門到精通」等書。

[技術專欄] 麥克阿忠的 Ruby on Rails 真功夫─手刻 CRUD
麥克阿忠/文

前言

上篇我們介紹 Ruby on Rails 的快速上手方式,使用 scaffold 指令開發出完整的資料庫基礎操作的應用介面。但針對實際上的需求,仍需根據實務再作修正修正,為了使初學者能夠從中理解 Ruby on Rails 的運作過程,以打下 Ruby 的功夫底子,本篇特別示範真功夫教學。

 

什麼是 CRUD ?

CRUD 意指在資料庫的四個資料基本異動動作,分別為:

  • Create:建立資料
  • Read:讀取資料
  • Update:更新資料
  • Destory:刪除資料

一般而言,傳統資料庫的組成是各資料列結合成資料表,再由資料表集合成資料庫。如同手上的電話簿,欲加上朋友的聯絡人,就必需 Create(建立資料),若要打電話讀取電話號碼則 Read(讀取資料),若某人的電話更新了就要 Update(更新資料),而不再聯絡者就 Destory(刪除資料)。設計資料庫應用程式介面原則上不離這四個基礎操作。設計一項表單就要開發出建立、檢視、更新、移除。

所以,有經驗的程式設計師會花許多時間建立屬於自己的 MVC,或是使用現成流行的 MVC Framework 以簡化開發的流程。如上述的狀況,網頁表單的設計可以簡化為類似 Partial 的方式以重複利用。

準備

在實作手刻 CRUD 前,請先確定目前的環境。例如檢查 Ruby 的版本,

$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2011.03

以及檢查 Ruby on Rails 的版本,

$ rails -v
Rails 3.0.7

還有 Rake 的版本,

$ rake -V
rake, version 0.8.7

實作

規畫資料庫

在前兩篇系列文章中,我們提到 Ruby on Rails 中的 new 用法,現在我們需要再建立一個新的專案來實作這次的手刻 CRUD 的內容。在本例中我們將以「電話簿」的實例來建立一個 Web 應用程式,首先我們必須規劃資料庫的結構,然後一步步建立資料庫介面所需的 Ruby 程式碼。

轉寄『第 183 期 GPL 條款對於衍生程式的判定標準與其授權拘束性的擴散範圍(下)』這期電子報

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

  • 社群留言
  • 留言報主