如果想要共用檔案,在 Linux 對 Linux 的環境下,最簡單的方法就是透過 NIS (網路資訊服務——NIS) (Network
Information Service) 是集中控制幾個系統管理資料庫的網路用品。)這玩意兒了!至於Windows 對 Windows 的環境下,最簡單的方法則是網路位置。那如果你的區網中有 Windows也有 Linux 而且想要共用檔案系統的話,那該怎辦? 那就使用 Samba 伺服器吧!Samba 可以讓 Linux,加入 Windows 的網路位置支援,讓異質平台可以共用檔案系統!
非常好用!不僅如此, Samba 也可以讓 Linux 上面的印表機成為印表機伺服器 (Printer Server)。
SAMBA 伺服器的作用:
分享檔案與印表機服務;
可以提供使用者登入 SAMBA 主機時的身份認證,以提供不同身份者的個別資料;
可以進行 Windows 網路上的主機名稱解析 (NetBIOS name)
可以進行裝置的分享 (例如 Zip, CDROM...)
SAMBA 伺服器的應用執行個體:
1)利用軟體直接編修 WWW 主機上面的網頁資料:
用samba替代ftp;實現線上編輯。
2)做成可直接聯機的檔案伺服器:
使用 SAMBA 將硬碟空間分享出來,由於使用者要登入 SAMBA 這個伺服器主機時需要輸入使用者資料 (帳號與密碼),而不同的登入者會取得不一樣的目錄資源,所以可以避免自己的資料在公用電腦上面被窺視, 此外,在不同的公用電腦上面都可以登入 SAMBA 主機,資料的使用上面相當的棒!
3)印表機伺服器:
SAMBA 除了分享檔案系統外,也可以分享印表機,可以直接以 Linux 分享的印表機來印製。
SAMBA 使用的 daemons
1)取得對方主機的 NetBIOS name 定位該主機所在:
當我們想要登入某部 Windows 主機使用他所提供的檔案資料時,必需要加入該Windows 主機的群組 (Workgroup),並且我們的機器也必需要設定一個主機名稱,注意喔,這個主機名稱跟 Hostname 是不一樣的,因為這個主機名稱是架構在NetBIOS 協議上的,我們可以簡單的稱呼他為 NetBIOS Name。在同一個群組當中,NetBIOS Name 必需要是獨一無二的!
2)利用對方給予許可權存取可用資源:
在我們找到該主機名稱後,是否能登入該對方主機或者是取用對方主機所提供的資源, 還要看對方 Windows 主機有沒有提供我們使用的許可權!所以,並不是登入該 Windows 主機之後我們就可以無限制的取用該主機的檔案資源了。也就是說,如果對方主機允許你登入, 但是卻沒有開放任何資源讓你取用,登入主機也無法查看對方的硬碟裡面的資料的!
SAMBA 則是透過兩支服務來控制這兩個步驟,分別是:
nmbd :這個 daemon 是用來管理工作群組啦、NetBIOS name 啦等等的解析。主要利用 UDP 協議開啟 port 137, 138 來負責名稱解析的任務;
smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享的目錄、檔案與印表機等等。 主要利用可靠的 TCP 協議來傳輸資料,開放的連接埠口為 139 及 445(不一定存在)。
所以, SAMBA 每次啟動至少都需要有這兩個 daemons。
SAMBA 伺服器的聯機方式:
SAMBA 伺服器的應用相當的廣泛,而且可以依照不同的網域聯機方式,與不同的使用者帳號密碼的控管方式來進行分類。如:peer/peer (對等模式) 及 domain model (主控模式)。
Samba 所需軟體及其軟體結構:
samba: 這個軟體主要提供了 SMB 伺服器所需的各項服務程式 (smbd 及 nmbd)、 的檔案檔、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等;
samba-client: 這個軟體則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA 檔案格式的 mount.cifs、 取得類似網芳相關樹形圖的 smbtree 等等;
samba-common: 這個軟體提供的則是伺服器與用戶端都會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、文法檢驗指令 (testparm) 等等;
/etc/samba/smb.conf: 這是 Samba 的主要設定檔,基本上,咱們的Samba 就僅有這個設定檔而已,且這個設定檔本身就是很詳細的說明檔案了,請用 vim 去查閱它吧!主要的設定項目分為伺服器的相關設定 (global),如工作群組、NetBIOS 名稱與密碼等級等, 以及分享的目錄等相關設定,如實際目錄、分享資源名稱與許可權等等兩大部分。
/etc/samba/lmhosts: 早期的 NetBIOS name 需額外設定,因此需要這個lmhosts 的 NetBIOS name 對應的 IP 檔。 事實上它有點像是 /etc/hosts 的功能!只不過這個 lmhosts 對應的主機名稱是 NetBIOS name 喔!不要跟/etc/hosts 搞混了!目前 Samba
預設會去使用你的本機名稱 (hostname) 作為你的 NetBIOS name,因此這個檔案不設定也無所謂。
/etc/sysconfig/samba: 提供啟動 smbd, nmbd 時,你還想要加入的相關服務參數。
/etc/samba/smbusers: 由於 Windows 與 Linux 在管理員與訪客的帳號名稱不一致,例如: administrator (windows) 及 root(linux), 為了對應這兩者之間的帳號關係,可使用這個檔案來設定。
/var/lib/samba/private/{passdb.tdb,secrets.tdb}: 管理 Samba 的使用者帳號/密碼時,會用到的資料庫檔案;
/usr/share/doc/samba-<版本>: 這個目錄包含了 SAMBA 的所有相關的技術手冊喔!也就是說,當你安裝好了 SAMBA 之後,你的系統裡面就已經含有相當豐富而完整的 SAMBA 使用手冊了!
Samba 的設定:
1. 伺服器整體設定方面:在 smb.conf 當中設定好工作群組、NetBIOS 主機名稱、密碼使用狀態 (無密碼分享或本機密碼) 等等;
2. 規劃準備分享的目錄參數:在 smb.conf 內設定好預計要分享的目錄或裝置以及可供使用的帳號資料;
3. 建立所需要的檔案系統:根據步驟 2 的設定,在 Linux 檔案系統當中建立好分享出去的檔案或裝置,以及相關的許可權參數;
4. 建立可用 Samba 的帳號:根據步驟 2 的設定,建立所需的 Linux 實體帳號,再以 pdbedit 建立使用 Samba 的密碼;
5. 啟動服務:啟動 Samba 的 smbd, nmbd 服務,開始運轉!
根據上面的流程,其實我們最需要知道的就是 smb.conf 這個設定檔的資訊就是了。
這個檔案其實可以分為兩部份來看, 一個是主機資訊部分,在 smb.conf 當中以 [global] (全領域) 作為設定的依據;另一個則是分享的資訊, 以個別的目錄名稱為依據。另外,由於 Samba 主要是想加入網鄰功能,因此在 smb.conf 內的很多設定都與 Windows 類似。
# 會有很多加上 # 或 ; 的批註說明,你也可以自行加上來提醒自己相關設定 [global] 參數項目 = 設定內容 .... [分享資源名稱] 參數項目 = 設定內容 ....
在 [global] 當中的就是一些伺服器的整體參數了,包括工作群組、主機的 NetBIOS 名稱、字元編碼的顯示、登入檔案的設定、 是否使用密碼以及使用密碼驗證的機制等等,都是在這個 [global] 項目中設定的。至於 [分享資源名稱] 則是針對你開放的目錄來進許可權方面的設定,包括誰可以瀏覽該目錄、是否可以讀寫等等參數。
在 [global] 部分關於主機名稱資訊方面的參數主要有:
workgroup = 工作群組的名稱:注意,主機群要相同;
netbios name = 主機的 NetBIOS 名稱啊,每部主機均不同;
server string = 主機的簡易說明,這個隨便寫即可。
display charset = 自己伺服器上面的顯示編碼, 例如你在終端機時所查閱的編碼資訊。一般來說,與底下的 unix charset 會相同。
unix charset = 在 Linux 伺服器上面所使用的編碼,一般來說就是 i18n 的編碼囉!所以你必須要參考 /etc/sysconfig/i18n 內的『預設』編碼。
dos charset = 就是 Windows 用戶端的編碼了! 一般來說我們的繁體中文 Windows 使用的是 big5 編碼,這個編碼在 Samba 內的格式被稱為『 cp950 』喔!
除此之外,還有登入檔案方面的資訊,包括這些參數:
log file = 登入檔放置的檔案,檔案名稱可能會使用變數處理;
max log size = 登入檔最大僅能到多少 Kbytes ,若大於該數字,則會被 rotate 掉。
還有網芳開放分享時,安全性程度有關的密碼參數,包括這幾個:
security = share, user, domain:三選一,這三個設定值分別代表:
share:分享的資料不要求輸入密碼,大家均可使用 (沒有安全性);
user :使用 SAMBA 伺服器本身的密碼資料庫,密碼資料庫與底下的passdb backend 有關;
domain:使用外部伺服器的密碼,亦即 SAMBA 是用戶端之意,如果設定這個項目, 你還得要提供『password server = IP』的設定值才行;
encrypt passwords = Yes 代表密碼要加密。
passdb backend = 資料庫格式,如前所述,為了加快速度, 目前密碼檔案已經轉為使用資料庫了!預設的資料庫格式微 tdbsam ,而預設的檔案則放置到/var/lib/samba/private/passwd.tdb。
分享資源的相關參數設定 [分享的名稱] :
comment :只是這個目錄的說明而已!
path :這個分享名稱實際會進入的 Linux 檔案系統 (目錄)。 也就是說,在網芳當中看到的是 [分享] 的名稱,而實際操作的檔案系統則是在 path 裡頭所設定的。
browseable :是否讓所有的使用者看到這個項目?
writable :是否可以寫入?這裡需要注意一下喔!那個 read only 與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這裡設定為 yes ,亦即可以寫入,如果 read only 同時設定為 yes , 那不就互相抵觸了!那個才
是正確的設定?答案是:最後出現的那個設定值為主要的設定!
create mode 與 directory mode 都與許可權有關的咯!
writelist = 使用者, @群組,這個項目可以指定能夠進入到此資源的特定使用者。 如果是 @group 的格式,則加入該群組的使用者均可取得使用的許可權,設定上會比較簡單!