Transcript Chapter 16

第
三
篇
如果想要共用檔案,在 Linux 對 Linux 的環境下,最簡單的方法就是透過
NIS 這玩意兒了!至於 Windows 對 Windows 的環境下,最簡單的方法則
是『網路上的芳鄰』啊。那如果你的區網中有 Windows 也有 Linux 而且想
要共用檔案系統的話,那該怎辦?那就使用 Samba 伺服器吧!Samba 可
以讓 Linux 加入 Windows 的網芳支援,讓異質平台可以共用檔案系統!非
常好用的呦!
區
域
網
路
內
常
見
的
伺
服
器
架
設
什麼是 SAMBA
SAMBA 的發展歷史與名稱的由來
 讓檔案在兩部主機之間直接修改:NFS 與 CIFS
而除了可以讓 Unix Like 的機器互相分享檔案的 NFS 伺服器之外,
在微軟 (Microsoft) 作業系統上面也有類似的檔案系統,那就是
Common Internet File System, CIFS 這個咚咚啦!CIFS 最簡單的
想法就是目前常見的『網路上的芳鄰』咯!
P.16-2
請參閱書籍
 利用封包偵測逆向工程發展的 SMB Server
在 1991 年一個名叫 Andrew Tridgell 博士班研究生就有這樣的困擾,他
手上有三部機器,分別是跑 DOS 的個人電腦、DEC 公司的 Digital Unix
系統以及 Sun 的 Unix 系統。在當時,DEC 公司有發展出一套稱為
PATHWORKS 的軟體,這套軟體可以用來分享 DEC 的 Unix 與個人電腦
的 DOS 這兩個作業系統的檔案資料,可惜讓 Tridgell 覺得較困擾的是,
Sun 的 Unix 無法藉由這個軟體來達到資料分享的目的 (註 1)。
這個時候 Tridgell 就想說:『咦!既然這兩部系統可以相互溝通,沒道
理 Sun 就必需這麼苦命吧?可不可以將這兩部系統的運作原理找出來,
然後讓 Sun 這部機器也能夠分享檔案資料呢?』,為了解決這樣的的問
題,他老兄就自行寫了個 program 去偵測當 DOS 與 DEC 的 Unix 系統
在進行資料分享傳送時所使用到的通訊協定資訊,然後將這些重要的資
訊擷取下來,並且基於上述所找到的通訊協定而開發出 Server
Message Block (SMB) 這個檔案系統,而就是這套 SMB 軟體就能夠讓
Unix 與 DOS 互相的分享資料囉!
P.16-2~3
請參閱書籍
 取名 SAMBA 的主因 ^_^
既然寫成了軟體,想一想,總是需要註冊一下商標吧!因此
Tridgell 就去申請了 SMBServer (Server Message Block 的簡寫)
這個名字來做為他撰寫的這個軟體的商標,可惜的是,因為 SMB
是沒有意義的文字,因此沒有辦法達成註冊。既然如此的話,那
麼能不能在字典裡面找到相關的字詞可以做為商標來註冊呢?翻
了老半天,呵呵!這個 SAMBA 剛好含有 SMB ,又是熱情有勁的
拉丁舞蹈的名稱,不然就用這個名字來做為商標好了!這成為我
們今天所使用的 SAMBA 的名稱由來啦!^_^
P.16-3
請參閱書籍
SAMBA 常見的應用
 分享檔案與印表機服務;
 „
可以提供使用者登入 SAMBA 主機時的身份認證,以提供不
同身份者的個別資料;
 „
可以進行 Windows 網路上的主機名稱解析 (NetBIOS name)
 „
可以進行裝置的分享 (例如 Zip, CDROM...)
P.16-3
請參閱書籍
SAMBA 使用的 daemons
1. 取得對方主機的 NetBIOS name 定位該主機所在
2. 利用對方給予權限存取可用資源
 nmbd:這個 daemon 是用來管理工作群組啦、NetBIOS
name 啦等等的解析。主要利用 UDP 協定開啟 port 137,
138 來負責名稱解析的任務;
 smbd:這個 daemon 的主要功能就是用來管理 SAMBA 主
機分享的目錄、檔案與印表機等等。主要利用可靠的 TCP 協
定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。
P.16-5~6
請參閱書籍
SAMBA 伺服器的基礎設定
Samba 所需軟體及其軟體結構
 samba:這個軟體主要提供了 SMB 伺服器所需的各項服務
程式 (smbd 及 nmbd)、 的文件檔、以及其他與 SAMBA 相
關的 logrotate 設定檔及開機預設選項檔案等;
 samba-client:這個軟體則提供了當 Linux 做為 SAMBA
Client 端時,所需要的工具指令,例如掛載 SAMBA 檔案格
式的 mount.cifs、 取得類似網芳相關樹狀圖的 smbtree 等
等;
 samba-common:這個軟體提供的則是伺服器與用戶端都
會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、
語法檢驗指令 (testparm) 等等;
P.16-9
請參閱書籍
 /etc/samba/smb.conf:這是 Samba 的主要設定檔,基本
上,咱們的 Samba 就僅有這個設定檔而已,且這個設定檔
本身就是很詳細的說明文件了,請用 vim 去查閱它吧!主
要的設定項目分為伺服器的相關設定 (global),如工作群組、
NetBIOS 名稱與密碼等級等,以及分享的目錄等相關設定,
如實際目錄、分享資源名稱與權限等等兩大部分。
P.16-9
請參閱書籍
 /usr/sbin/{smbd,nmbd}:伺服器功能,就是最重要的權限
管理 (smbd) 以及 NetBIOS name 查詢 (nmbd) 兩個重要的
服務程式;
 /usr/bin/{tdbdump,tdbtool}:伺服器功能,在 Samba 3.0
以後的版本中,使用者的帳號與密碼參數已經轉為使用資料
庫了!Samba 使用的資料庫名稱為 TDB (Trivial
DataBase)。既然是使用資料庫,當然要使用資料庫的控制
指令來處理囉。tdbdump 可以察看資料庫的內容,tdbtool
則可以進入資料庫操作介面直接手動修改帳密參數。不過,
你得要安裝 tdb-tools 這個軟體才行;
 /usr/bin/smbstatus:伺服器功能,可以列出目前 Samba
的連線狀況,包括每一條 Samba 連線的 PID, 分享的資源,
使用的用戶來源等等,讓你輕鬆管理 Samba 啦;
續下頁
P.16-10
請參閱書籍
 /usr/bin/{smbpasswd,pdbedit}:伺服器功能,在管理 Samba 的
使用者帳號密碼時,早期是使用 smbpasswd 這個指令,不過因為
後來使用 TDB 資料庫了,因此建議使用新的 pdbedit 指令來管理
用戶資料;
 /usr/bin/testparm:伺服器功能,這個指令主要在檢驗設定檔
smb.conf 的語法正確與否,當你編輯過 smb.conf 時,請務必使
用這個指令來檢查一次,避免因為打字錯誤引起的困擾啊!
 /sbin/mount.cifs:用戶端功能,在 Windows 上面我們可以設定
『網路磁碟機』來連接到自己的主機上面。在 Linux 上面,我們則
是透過 mount (mount.cifs) 來將遠端主機分享的檔案與目錄掛載
到自己的 Linux 主機上面哪!
 /usr/bin/smbclient:用戶端功能,當你的 Linux 主機想要藉由
『網路上的芳鄰』的功能來查看別台電腦所分享出來的目錄與裝置
時,就可以使用 smbclient 來查看啦!這個指令也可以使用在自
己的 SAMBA 主機上面,用來查看是否設定成功哩!
P.16-10
請參閱書籍
基礎的網芳分享流程與 smb.conf 的常用設定項目
立刻實作
假設你打開 Windows XP 的檔案總管,在 D:\VBird\Data 這個
目錄下,你按下右鍵選『共用與安全性』,之後,在出現的視
窗中,你選擇:『你瞭解這個安全風險,但仍不要執行精靈而
共用檔案,請按這裡』,然後勾選:『在網路上共用這個資料
夾』,最後共用的名稱你輸入了:『VBGame』,請問,假設
你的 IP 是 192.168.100.20 ,那麼你的用戶會看到什麼網址
列?
答:網芳的資源名稱通常的寫法是:『 \\IP\分享資源名稱』,
我們的分享資源名稱為 VBGame,因此最終這個分享的資源
名稱應該是:『 \\192.168.100.20\VBGame 』才對!很多朋
友都會寫成:『 \\192.168.100.20\VBird\Game 』那錯得很離
P.16-11~12
譜喔!
請參閱書籍
1. 伺服器整體設定方面:在 smb.conf 當中設定好工作群組、
NetBIOS 主機名、密碼使用狀態 (無密碼分享或本機密碼) 等等;
2. 規劃準備分享的目錄參數:在 smb.conf 內設定好預計要分享
的目錄或裝置以及可供使用的帳號資料;
3. 建立所需要的檔案系統:根據步驟 2 的設定,在 Linux 檔案系
統當中建立好分享出去的檔案或裝置,以及相關的權限參數;
4. 建立可用 Samba 的帳號:根據步驟 2 的設定,建立所需的
Linux 實體帳號,再以 pdbedit 建立使用 Samba 的密碼;
5. 啟動服務:啟動 Samba 的 smbd, nmbd 服務,開始運轉哩!
 在 smb.conf 當中,井字號與分號 (# 跟 ;) 都是註解符號;
 „在這個設定檔中,大小寫是沒關係的!因為 Windows 沒分
大小寫!
P.16-12
請參閱書籍
 workgroup = 工作群組的名稱:注意,主機群要相同;
 „
netbios name = 主機的 NetBIOS 名稱啊,每部主機均不
同;
 „
server string = 主機的簡易說明,這個隨便寫即可。
P.16-12~13
請參閱書籍
 display charset = 自己伺服器上面的顯示編碼,例如你在
終端機時所查閱的編碼資訊。一般來說,與底下的 unix
charset 會相同。
 „unix charset = 在 Linux 伺服器上面所使用的編碼,一般來
說就是 i18n 的編碼囉!所以你必須要參考
/etc/sysconfig/i18n 內的『預設』編碼。
 „
dos charset = 就是 Windows 用戶端的編碼了!一般來說
我們的繁體中文 Windows 使用的是 big5 編碼,這個編碼
在 Samba 內的格式被稱為『 cp950 』喔!
P.16-13
請參閱書籍
 security = share, user, domain:三選一,這三個設定值分
別代表:
 share:分享的資料不需要密碼,大家均可使用 (沒有安全性);
 „user:使用 SAMBA 伺服器本身的密碼資料庫,密碼資料庫與
底下的 passdb backend 有關;
 „domain:使用外部伺服器的密碼,亦即 SAMBA 是用戶端之意,
如果設定這個項目,你還得要提供『password server = IP』的
設定值才行;
 encrypt passwords = Yes 代表密碼要加密,注意那個
passwords 要有 s 才對!
 passdb backend = 資料庫格式,如前所述,為了加快速度,
目前密碼檔已經轉為使用 資 料 庫 了 ! 預 設 的 資 料 庫 格
式 微 tdbsam , 而 預 設 的 檔 案 則 放 置 到
/var/lib/samba/private/passwd.tdb。
P.16-14
請參閱書籍
 分享資源的相關參數設定 [分享的名稱]
 [分享名稱]:這個分享名稱很重要,它是一個『代號』而已。記得






回去看看 16.2.2 裡面提到的那個範例;
comment:只是這個目錄的說明而已!
„path:這個分享名稱實際會進入的 Linux 檔案系統 (目錄)。也就是
說,在網芳當中看到的是 [分享] 的名稱,而實際操作的檔案系統
則是在 path 裡頭所設定的。
„browseable:是否讓所有的使用者看到這個項目?
„writable:是否可以寫入?這裡需要注意一下喔!那個 read only
與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這裡設
定為 yes ,亦即可以寫入,如果 read only 同時設定為 yes ,那
不就互相抵觸了!那個才是正確的設定?答案是:最後出現的那個
設定值為主要的設定!
create mode 與 directory mode 都與權限有關的咯!
writelist = 使用者, @群組,這個項目可以指定能夠進入到此資源
的特定使用者。如果是 @group 的格式,則加入該群組的使用者
均可取得使用的權限,設定上會比較簡單!
P.16-14~15
請參閱書籍
需帳號密碼才可登入的分享 (security = user)
比較重要的是 Samba 使用者帳號必須要存在於 Linux 系統當中
(/etc/passwd),但是 Samba 的密碼與 Unix 的密碼檔案並不相同
(這是因為 Linux 與網芳的密碼驗證方式及編碼格式不同所致)。這
就比較有點小麻煩~沒關係,就讓我們依樣畫葫蘆來處理一下這
個部分的設定吧!
P.16-21
請參閱書籍
 0. 假設條件
 „
使用者認證層級設定 (security) 為:user
 „
使用者密碼檔案使用 TDB 資料庫格式,預設檔案在
/var/lib/samba/private/ 內;
 „
密碼必須要加密;
 „
每個可使用 samba 的使用者均擁有自己的家目錄;
 設定三個用戶,名稱為 smb1, smb2, smb3 ,且均加入
users 為次要群組。此三個用戶 Linux 密碼為 1234,
Samba 密碼則為 4321;
 „
分享 /home/project 這個目錄,且資源名稱取名為:
project;
 „
加入 users 這個群組的使用者可以使用 //IP/project 資源,
且在該目錄下 users 這個群組的使用者具有寫入的權限。
P.16-21~22
請參閱書籍
 1. 設定 smb.conf 設定檔與目錄權限相關之設定
P.16-22
請參閱書籍
P.16-22~23
請參閱書籍
立刻實作
我們預計要分享 /home/project 目錄,這個目錄的權限該如何
設定?
答:因為是要開放給 users 群組,而共享群組的權限通常是
『 2770 』這個含有 SGID 的特殊旗標功能。因此這個目錄應
該如此設定才好:
P.16-23
請參閱書籍
 2. 設定可使用 Samba 的用戶帳號與密碼
 在 Linux 這個系統下,任何程序都需要取得 UID 與 GID
(User ID 與 Group ID) 的身份之後,才能夠擁有該身份的權
限,也才能夠適當的進行存取檔案等動作!
 關於 Linux 這個系統的 UID 與 GID 與帳號的相對關係,一
般記錄在 /etc/passwd 當中,當然也能透過 NIS, ldap 等方
式來取對應;
 SAMBA 僅只是 Linux 底下的一套軟體,使用 SAMBA 來進
行 Linux 檔案系統時,還是需要以 Linux 系統下的 UID 與
GID 為準則!
P.16-24
請參閱書籍
P.16-24~25
請參閱書籍
P.16-25~26
請參閱書籍
 3. 重新啟動 Samba 並進行自我測試
P.16-26~27
請參閱書籍
P.16-27
請參閱書籍
安全性的議題與管理
 SELinux 的相關議題:
P.16-40~41
請參閱書籍
 防火牆議題:利用 iptables 來管理
P.16-41~42
請參閱書籍
 防火牆議題:透過內建的 Samba 設定 (smb.conf)
P.16-42
請參閱書籍
Linux 系統的使用
 smbclient:查詢網芳分享的資源,以及使用類似 FTP 的方式
上傳/下載網芳
P.16-50
請參閱書籍
 mount.cifs:直接掛載網芳成為網路磁碟機
P.16-51
請參閱書籍