SAMBA 這個套件幾乎在所有的 Linux distributions 上面都有提供,因為即使你的 Linux 僅做為個人桌上型電腦使用時,
你依舊可能會需要連線到遠端的 Windows 的網芳的,那個時候就得要 samba 提供的用戶端軟體功能囉!
因此你只要直接安裝系統上面提供的預設 samba 版本即可。底下我們會先介紹 samba 伺服器,然後再介紹用戶端功能喔!
目前常見的 samba 版本為 3.x 版,舊版的 2.x 版在設定上有點不一樣,因此在進入設定前請先確認你的 samba 版本。
咱們的 CentOS 4.x 提供的是 Samba 3.x 的版本。那麼你需要什麼套件呢?基本上有這些:
- samba:
這個套件主要包含了 SAMBA 的主要 daemon 檔案 (smbd 及 nmbd)、 SAMBA 的文件檔
(document)、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等;
- samba-common:
這個套件則主要提供了 SAMBA 的主要設定檔 (smb.conf) 、 smb.conf
語法檢驗的測試程式 (testparm)等等;
- samba-client:
這個套件則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA
檔案格式的執行檔 smbmount 等等。
這三個套件你都得要安裝才行喔!如果尚未安裝的話,看是要由原版光碟去安裝,還是使用 yum 都可以啦!
安裝完畢之後,你可以依序察看一下 Samba 的套件結構喔!與他相關的檔案基本上有這些東西:
- /etc/samba/smb.conf:
smb.conf 是 Samba 的主要設定檔名,如果你的 distribution 的 SAMBA 設定檔不在 /etc/samba/ 目錄當中,
那麼你應該使用 locate 或 find 等方式將他找出來就好啦。基本上,咱們的 Samba 就僅有這個設定檔而已,
且這個設定檔本身就是很詳細的說明文件了,請用 vi 去查閱他吧!這個檔案主要在設定工作群組、
NetBIOS 名稱以及分享的目錄等相關設定,我們後續要介紹的都是這個檔案而已啦!
- /etc/samba/lmhosts:
這個檔案的主要目的在對應 NetBIOS name 與該主機名稱的 IP ,事實上他有點像是
/etc/hosts 的功能!只不過這個 lmhosts 對應的主機名稱是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!由於目前
SAMBA 的功能越來越強大,所以通常只要您一啟動 SAMBA 時,他就能自己捉到 LAN 裡面的相關電腦的 NetBIOS name
對應 IP 的資訊,因此這個檔案通常可以不用設定了!
- /etc/samba/smbpasswd:
這個檔案預設並不存在啦!他是 SAMBA 預設的使用者密碼對應表。當我們設定的
SAMBA 伺服器是較為嚴密的,需要使用者輸入帳號與密碼後才能登入的狀態時,使用者的密碼預設就是放置在這裡咯
(當然囉,您可以自行在 smb.conf 裡面設定密碼放置的地方及密碼檔名,
不過我們這裡都以預設的狀態來說明) 。比較需要注意的是,這個檔案因為包含了使用者的密碼,
當然權限方面要較為注意啦!這個檔案的擁有者需要是 root ,且權限設定為 600 才行喔!
- /etc/samba/smbusers:
由於 Windows 與 Unix-like 在管理員與訪客的帳號名稱不一致,分別為 administrator 及 root,
為了對應這兩者之間的帳號關係,可以使用這個檔案來設定。不過這個檔案的使用必須要經由 smb.conf
內的『 username map 』設定項目來啟動才行。
- testparm:
這個指令主要在檢驗 samba 設定檔 smb.conf 的語法正確與否,當你編輯過 smb.conf 時,請務必使用這個指令來檢查一次,
避免因為打字錯誤引起的困擾啊!
- smbd, nmbd:
前幾個小節曾經提過的兩個主要 daemon 就在這裡!
- smbstatus:
列出目前的 SMB server 的狀態,也是很有用途的一個指令啦!
- smbpasswd:
如果您的 SAMBA 設定的較為嚴格,需要規定使用者的帳號與密碼,那麼那個密碼檔案的建立就需要使用 smbpasswd
來建置才可以的喔!所以這個指令與建立 SAMBA 的密碼有關咯!
- smbclient:
當你的 Linux 主機想要藉由『網路上的芳鄰』的功能來查看別台電腦所分享出來的目錄與裝置時,就可以使用 smbclient
來查看啦!這個指令也可以使用在自己的 SAMBA 主機上面,用來查看是否設定成功哩!
- smbmount:
在 Windows 上面我們可以設定『網路磁碟機』來連接到自己的主機上面,同樣的,在 Linux 上面,我們可以透過 smbmount
來將遠端主機分享的檔案與目錄掛載到自己的 Linux 主機上面哪!不過,其實我們也可以直接使用 mount
這個指令來進行同樣的功能就是了。
- nmblookup:
有點類似 nslookup 啦!重點在查出 NetBIOS name 就是了。
- smbtree:
這玩意就有點像 Windows 系統的網路上的芳鄰顯示的結果,可以顯示類似『靠近我的電腦』之類的資料,
能夠查到工作群組與電腦名稱的樹狀目錄分佈圖,有趣吧!
- /usr/share/doc/samba-<版本>:
這個目錄包含了 SAMBA 的所有相關的技術手冊喔!也就是說,當您安裝好了 SAMBA 之後,您的系統裡面就已經含有相當豐富而完整的
SAMBA 使用手冊了!值得高興吧! ^_^,所以,趕緊自行參考喔!
大致的套件結構就是這樣,底下就準備來講一個簡單的案例吧! ^_^
既然 Samba 是要加入 Windows 的網芳當中,所以他的設定方式應該是要與網芳差不多才是。所以我們先來聊一聊
Windows 的一些設定方法再說。在早期 Windows 的網芳設定真是很簡單,不過也因為太簡單,
所以產生的安全問題可是相當的麻煩的。後來在 Windows XP 的 sp2 (服務包第二版) 加入了很多的預設防火牆機制,
因此使用網芳的預設限制常常會是這樣的:
- 主機與主機之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
- 最好設定為同一工作群組;
- 主機的名稱不可相同 (NetBIOS name);
- 專業版 Windows XP 最多僅能提供同時十個用戶連線到網芳。
當你的 Windows 主機群符合上述的條件後,就很容易處理網芳分享的工作啦!分享的步驟是這樣的:
- 叫出檔案總管,然後在要分享的目錄、磁碟或裝置 (如印表機) 上面按下右鍵,選擇『共用』,然後就能夠設定好分享的資料了;
- 最好建立一組給用戶使用的帳號與密碼,讓其他主機的使用者可以透過該帳號密碼連線進入網芳;
真是有夠簡單的!那麼 Samba 怎麼設定啊?也是很簡單,依據上述的限制以及流程你可以這樣想像:
- 在 smb.conf 當中設定好工作群組、NetBIOS 主機名、密碼使用狀態等等與主機相關的資訊;
- 在 smb.conf 內設定好預計要分享的目錄或裝置以及可供使用的使用者資料;
- 根據步驟 2 的設定,在 Linux 檔案系統當中建立好分享出去的檔案或裝置的使用權限;
- 根據步驟 2 的設定,以 smbpasswd 建立起使用者的帳號及密碼
- 啟動 Samba 的 smbd, nmbd 服務,開始運轉哩!
瞧!根據上面的流程,其實我們最需要知道的就是 smb.conf 這個設定檔的資訊就是了。
所以首先我們就要來介紹一下這個檔案的設定方式囉!這個檔案其實可以分為兩部份來看,
一個是主機資訊部分,在 smb.conf 當中以 [global] 作為設定的依據;另一個則是分享的資訊,
以個別的目錄名稱為依據。你要先知道的是:
在 smb.conf 當中,
井字號與分號 (# 跟 ;) 都是註解符號!底下咱們就來談談這個咚咚吧!
主機整體參數
在 smb.conf 這個設定檔當中的設定有點像底下這樣:
# 會有很多加上 # 或 ; 的註解說明,你也可以自行加上來提醒自己相關設定
[global]
參數項目 = 設定內容
....
[分享資源名稱]
參數項目 = 設定內容
....
|
在 global 當中的就是一些主機的整體參數了,包括工作群組、主機的 NetBIOS 名稱、字元編碼的顯示、登錄檔的設定、
是否使用密碼以及使用密碼驗證的機制等等,都是在這個 [global] 項目中設定的。至於 [分享資源名稱]
則是針對你開放的目錄來進權限方面的設定,包括誰可以瀏覽該目錄、是否可以讀寫等等參數。
在 [global] 部分關於主機名稱資訊方面的參數主要有:
- workgroup = 工作群組的名稱:注意,主機群要相同;
- netbios name = 主機的 NetBIOS 名稱啊,每部主機均不同;
- server string = 主機的簡易說明,這個隨便寫即可。
另外,過去常常讓使用者心生不滿的語系顯示問題方面,您務必要清楚的知道的是,
SAMBA 主機上面的資料 (例如 mount 磁碟分割槽的參數以及原本的資料編碼),
SAMBA 伺服器顯示的語系, Windows 用戶端顯示的語系, Windows 用戶端連上 SAMBA 的軟體 都需要符合設定值才行!
在新版的 3.x 上面有數個提供這些語系轉換的設定喔,如下所示:
- display charset = 自己伺服器上面的顯示編碼,
例如你在終端機時所查閱的編碼資訊。一般來說,與底下的 unix charset 會相同。
- unix charset = 在 Linux 伺服器上面所使用的編碼,一般來說就是 i18n 的編碼囉!
所以你必須要參考 /etc/sysconfig/i18n 內的『預設』編碼。
- dos charset = 就是 Windows 用戶端的編碼了!
一般來說我們的繁體中文 Windows 使用的是 big5 編碼,這個編碼在 Samba 內的格式被稱為『 cp950 』喔!
關於語系編碼,建議您參考一下討論區的這一篇:
我們的網友 eyesblue 寫得太好了!所以建議大家直接前往查閱即可!除此之外,還有登錄檔方面的資訊,
包括這些參數:
- log file = 登錄檔放置的檔案,檔名可能會使用變數處理;
- max log size = 登錄檔最大僅能到多少 Kbytes ,若大於該數字,則會被 rotate 掉。
還有跟密碼有關的參數,包括這幾個:
- security = user, server, domain, share 四選一,這四個設定值分別代表:
- user :使用 SAMBA 本身的密碼資料庫,密碼資料庫與底下的 smb passwd file 有關;
- share:分享的資料不需要密碼即可分享;
- server, domain:使用外部主機的密碼,亦即 SAMBA 是用戶端之意,如果設定這個項目,
你還得要提供『password server = IP』的設定值才行;
- encrypt passwords = Yes 代表密碼要加密,注意那個 passwords 要有 s 才對!
- smb passwd file = 密碼放置的檔案,通常是 /etc/samba/smbpasswd 。
事實上 Samba 的密碼方面設定值很多喔,包括你還可以利用 samba 來修改 /etc/passwd 裡頭的人物的密碼呢!
不過這個時候就得需要『 unix password sync 』以及『 passwd program 』這兩個參數值的幫忙了。
我們這裡先談比較簡單的,其他進階的部分可以 man smb.conf 去進行搜尋查閱喔! ^_^
分享目錄參數
在目錄參數部分,主要有底下這幾個常見的參數喔:
- [分享名稱] :這個分享名稱很重要,他是一個『代號』而已。
舉例來說,你在 Windows 當中使用『共用』來分享網芳時,假設你將『D:\game』分享出來,
系統不是還會要你輸入一個『在網路上面的名稱』嗎?假設你輸入『My_Games』這個名稱好了,
那麼未來大家在網芳看到的這個資料夾 (D:\game) 名稱其實是『\\你的IP\My_Games』啦!
- comment :這個目錄的說明!
- path :在網芳中顯示的名稱 [分享名稱] 中,所實際進入的 Linux 檔案系統。
也就是說,在網芳當中看到的是 [分享] 的名稱,而實際操作的檔案系統則是在 path 裡頭所設定的。
- read only:是否唯讀?
- public :是否讓所有可以登入的使用者看到這個項目?
- writable :是否可以寫入?這裡需要注意一下喔!那個 read only 與 writable
不是兩個蠻相似的設定值嗎?如果 writable 在這裡設定為 no ,亦即不可寫入,那跟 read only
不就互相抵觸了!那個才是正確的設定?答案是:最後出現的那個設定值為主要的設定!
- create mode 與 directory mode 都與權限有關的咯!
- valid users = 使用者,這個項目可以指定能夠進入到此資源的特定使用者。
因為分享的資源主要與 Linux 系統的檔案權限有關,因此裡頭的設定參數多與權限有關。
變數特性
為了簡化設定值,Samba 提供很多不同的變數給我們來使用,主要有底下這幾個變數喔:
- %S:取代目前的設定項目值,所謂的『設定項目值』就是在 [分享] 裡面的內容!
舉例來說,例如底下的設定範例:
[homes]
valid users = %S
....
|
因為 valid users 是允許的登入者,設定為 %S 表示任何可登入的使用者都能夠登入的意思~今天如果 dmtsai
這個使用者登入之後,那個 [homes] 就會自動的變成了 [dmtsai] 了!這樣可以明白了嗎?
%S 的用意就是在替換掉目前 [ ] 裡面的內容啦!
- %m:代表 Client 端的 NetBIOS 主機名稱喔!
- %M:代表 Client 端的 Internet 主機名稱喔!就是 HOSTNAME。
- %L:代表 SAMBA 主機的 NetBIOS 主機名稱。
- %H:代表使用者的家目錄。
- %U:代表目前登入的使用者的使用者名稱
- %g:代表登入的使用者的群組名稱。
- %h:代表目前這部 SAMBA 主機的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
- %I:代表 Client 的 IP 咯。
- %T:代表目前的日期與時間
至於相關的變數運用,我們會在底下的設定當中略做介紹喔!
以上就是在 smb.conf 上頭常看到的幾種設定項目,相信初次接觸 Samba 的朋友,看到上頭寫的資料肯定是一頭霧水的!
我們底下用幾個小範例來實際的介紹 smb.conf 的設定後,您就會知道這些參數如何應用了!
記得,
看完底下的下範例後,要回來再將這些參數的意義瞧一瞧,
而且若有其他額外的參數須知,務必自行 man smb.conf 喔!重要的很!
瞎密?不需要密碼就能夠使用 SAMBA 主機所提供的目錄資源?真假?沒錯啦,可以達到的。
不過,因為不需要密碼就能夠登入,雖然你可以設定權限成為唯讀,讓使用者可以『瞧瞧而已』,
但是畢竟比較危險,因為如果你不小心將重要資料放置到該分享的目錄當中,豈不危險?
所以盡量不要這樣設定。不過,我們還是得介紹一下啦!先說明一下我們的設定需求:
主機預計設定的參數狀況:
- 在 LAN 內所有的網芳主機工作群組 (workgroup) 為: vbirdhouse
- 這部 Linux 主機 (Samba 服務) 的 NetBIOS 名稱為: vbirdserver
- 使用者登入層級設定為: share
- 僅分享 /tmp 這個目錄而已,且取名為: temp
- Linux 主機的編碼格式假設為萬國碼 (Unicode, 亦即 utf8)
- 用戶端為中文 Windows ,在用戶端的軟體也使用 big5 的編碼
底下就開始依序來進行 samba 的設定吧!
1. 設定 lmhosts 檔案內容 (optional):
我們前面談到 NetBIOS 名稱可以由廣播的方式自動取得,而 NetBIOS 也可以透過區域網路內經由一部主控電腦來管理,
此外,你也可以利用自己主機當中的 lmhosts 這個設定檔來進行 NetBIOS 與 IP 的對應,
讓 NetBIOS 與 TCP/IP 可以對應上關係吶!一般來說,這個檔案是可以不必設定的,因為可以經由廣播的方式取得對應的嘛!
不過,某些時刻確實可以設定一下,免除一些額外的搜尋時間說。我的區網中電腦名稱與 IP 是這樣的:
[root@linux ~]# vi /etc/samba/lmhosts
127.0.0.1 localhost
192.168.1.254 vbirdserver
192.168.1.21 vbirdcpu2
192.168.1.11 vbirdcpu1
# 這個檔案的內容很簡單,與 /etc/hosts 很類似,左邊是 IP 右邊是主機名稱。
# 只是主機名稱必須符合 NetBIOS name 的標準,包括:
# 主機名稱不要超過 15 個字元,不要含有特殊字元等等。
# 亦可使用 man lmhosts 來查閱喔!
|
鳥哥區網內常用的有三部主機,除了 Linux 這部機器外,還有兩部個人電腦,我將這幾部電腦的 NetBIOS name
寫到這個檔案當中,可以免除 Samba 自己去搜尋囉!而再次強調,這個名稱是 NetBIOS name 而非 HOSTNAME 喔!
2. 檢查語系資料
過去朋友們在進行 SAMBA 的設定時,最容易發生錯誤的地方就是在中文檔名部分,
絕大部分的朋友只要使用了中文檔名,常常會發生一些問題,就是無法順利的上傳下載,
或者是原先的中文檔名上傳後,卻變成奇怪的亂碼檔名。
為了解決這個問題,你必須要知道幾個項目:
- 原始檔案 (你要分享的檔案) 編碼的格式為何?一般來說,中文 Windows 的編碼預設為 Big5 ;
- 這個檔案放置在 Linux 上,則這部 Linux 的預設語系編碼為何?這與 /etc/sysconfig/i18n 有關;
- 在 Samba 上頭的顯示編碼為何?一般來說與上述的 Linux 預設編碼相同即可;
- 在用戶端連接到 Samba 主機的軟體之語系編碼為何?如果是中文 Windows 作業系統,預設為 Big5。
你的語系資料必須要在上面這幾個環境中進行轉換,因此如果你的用戶端連上 Samba 的軟體編碼為 Big5 ,
你的 Samba 使用的語系也是 Big5 ,但是 Linux 主機卻預設僅支援 utf8 的編碼時,而你的 smb.conf
又沒有設定好,此時資料傳輸就會發生一些錯誤,因此你就會看到很多亂碼檔名了。
所以,你至少得要知道你的 Linux 語系編碼為何?在 Red Hat 系統 (含我們的 CentOS) 可以查閱 /etc/sysconfig/i18n 這個檔案,
如下所示為鳥哥的 i18n :
[root@linux ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8" <==這才是你需要注意的地方!
SUPPORTED="zh_HK.UTF-8:zh_HK:zh:zh_CN.UTF-8:zh_CN:zh:zh_SG.UTF-8:
zh_SG:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
|
由上頭看起來,鳥哥預設的語系編碼為 en_US.UTF-8,不過尚有支援 zh_TW 這樣的中文編碼。
先假設鳥哥的編碼為萬國碼 (Unicode) 好了。知道了之後就能夠開始處理 smb.conf 囉!
3. 設定 smb.conf 設定檔
在這個例子當中我們僅分享 /tmp 這個目錄而已,而且假設這個分享出來的目錄是可讀寫的,
另外,我們並沒有分享印表機喔!而在 smb.conf 當中的註解符號可以是『 # 』也可以是『 ; 』喔!要注意!
[root@linux ~]# cd /etc/samba
[root@linux samba]# cp smb.conf smb.conf.raw <==先備份再說!
[root@linux samba]# vi smb.conf
# 先設定好主機方面的參數
[global]
# 與主機名稱有關的設定資訊
workgroup = vbirdhouse
netbios name = vbirdserver
server string = This is vbird's samba server
# 與語系方面有關的設定項目喔,為何如此設定請參考前面的說明
unix charset = utf8
display charset = utf8
dos charset = cp950
# 與登錄檔有關的設定項目,注意變數 (%m)
log file = /var/log/samba/%m.log
max log size = 50
# 這裡才是與密碼有關的設定項目哩!
security = share
# 其他預設存在的項目
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
template shell = /bin/false
winbind use default domain = no
# 底下則是針對 /tmp 的設定而來的!可瀏覽且可寫入喔!
[temp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
|
請您特別留意,在原本的 smb.conf 上面就已經有很多預設值了,這些預設值如果你不知道他的用途,
盡量保留預設值,也可以使用 man smb.conf 去查詢該預設值的意義。舉例來說, CentOS 4.x 的 smb.conf
預設有針對 server/client 的封包傳遞項目設定值的 socket options ,也有針對 Windows NT 及 Unix 系統的帳號對應之
idmap uid 之類的設定值,這些設定值在大型的區網架構會使用到,在我們僅有一兩部 Linux samba 伺服器的環境下....
應該是可以不予理會的啦!
4. 用 testparm 查閱 smb.conf 的語法設定正確性
在啟動 samba 之前,我們務必要瞭解到 smb.conf 裡面語法是否正確,檢驗的方式使用 testparm 這個指令即可。
測試方式如下:
[root@linux ~]# testparm
參數:
-v :查閱完整的參數設定,連同預設值也會顯示出來喔!
[root@linux ~]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[temp]" <==這個地方可以仔細看看,如果有問題會在這邊顯示
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions <==請按 [Enter] 按鍵
# Global parameters
[global]
dos charset = cp950
display charset = utf8
workgroup = VBIRDHOUSE
netbios name = VBIRDSERVER
server string = This is vbird's samba server
security = SHARE
log file = /var/log/samba/%m.log
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
[temp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
|
上頭是語法驗證與各個項目的列出,如果你下達 testparm 卻出現如下畫面那就是有問題:
Unknown parameter encountered: "linux charset" <==錯誤的設定
Ignoring unknown parameter "linux charset"
Processing section "[temp]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
|
如果發現上述的錯誤,這表示你的 smb.conf 有個 linux charset 的設定參數,不過 smb.conf 其實是不支援這個參數的。
可能的問題是 samba 2.x 與 samba 3.x 有一些項目的支援已經不存在了,所以你使用舊版的 2.x 設定檔來 3.x
上頭執行時,就會出現問題。此外,『打字錯誤』也是很常見的一個問題吶!趕緊測試一下語法先,
然後根據 smb.conf 有的項目去進行修改吧。
如果你想要瞭解 samba 的所有設定 (包括沒有在 smb.conf 裡頭設定的預設值),可以使用 testparm -v 來作詳細的輸出,
資料相當的豐富,透過這個您也可以知道你的主機環境設定為何呢! ^_^
5. 啟動與觀察
啟動實在太簡單了,利用預設的 CentOS 啟動方式來處理即可。
[root@linux ~]# /etc/init.d/smb start
[root@linux ~]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 10338/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 10338/smbd
udp 0 0 192.168.1.254:137 0.0.0.0:* 10343/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 10343/nmbd
udp 0 0 192.168.1.254:138 0.0.0.0:* 10343/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 10343/nmbd
|
特別注意,在 Samba (網芳) 當中預設會啟動多個埠口,這包括資料傳輸的 TCP 埠口 (139, 445),
以及進行 NetBIOS 名稱解析之類工作的 UDP 埠口 (137, 138),所以你才會看到很多資料的。
那麼能否僅支援 139 這個必要的埠口,關閉 445 呢?可以啊~透過 testparm -v 的觀察,
可以發現『 smb ports = 445 139 』這個設定值指定兩個埠口的,因此你可以在 smb.conf 增加這個設定值,
並改為 smb ports = 139 即可。不過,建議先保留預設值啦!
6. 用戶端的觀察
關於用戶端的觀察我們會在後續進行介紹。在這裡僅是說明如何確定我們的 Samba 設定與服務有順利的在運作。
我們可以在本機上透過 smbclient 這支程式來處理,他的基本語法是這樣的:
[root@linux ~]# smbclient -L [//主機或IP] [-U 使用者帳號]
參數:
-L :僅查閱後面接的主機所提供分享的目錄資源;
-U :以後面接的這個帳號來嘗試取得該主機的可使用資源
|
由於在這個範例當中我們並沒有規範使用者的安全等級,所以必須要使用 -U 這個參數。
因此你可以這樣看看:
[root@linux ~]# smbclient -L //127.0.0.1
Password: <==這裡按一下 [Enter] 吧!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Server Comment
--------- -------
VBIRDSERVER This is vbird's samba server
Workgroup Master
--------- -------
VBIRDHOUSE VBIRDSERVER
|
上表輸出的資訊當中,分享的目錄資源 (Sharename) 就是在 smb.conf 當中設定的 [temp] 名稱囉!
因此在這裡的意思是:
任何人都可以進入 //127.0.0.1/temp 這個目錄當中,
而這個目錄在 Linux 系統其實是 /tmp 目錄。至於那個 IPC$ 及 ADMIN$ 則是為了要應付 Windows
環境所必須要存在的項目就是了。
基本上,到此為止咱們就設定好一個簡單的不需要密碼即可登入的 Samba 主機了!
你可以先行到
用戶端軟體功能的部分進行掛載測試。
底下我們則預計以簡易的需要密碼才能夠登入 Samba 的方式來設計一個範例吧!
設定一部不需密碼即可登入的 Samba server 是非常簡單的,不過,
您總不希望某些有機密性質的資料放在不設防的網芳中讓大家查閱吧?
舉例來說,你總不希望你的家目錄被人家隨意瀏覽吧?家目錄內可能有你自己的情書呢!^_^
那怎麼辦?沒關係,我們可以透過 Samba 主機提供的認證方式來進行使用者權限的給予,
也就是說,你在用戶端連線到主機時,必須要輸入正確的帳號與密碼後,才能夠登入 Samba 主機查閱到你自己的資料!
那會不會很難啊?不會啦! Samba 本身就提供一個小程式來幫助我們處理密碼的建立了,
整個流程還不太難。比較重要的是
Samba 使用者帳號必須要存在於 Linux 系統當中 (/etc/passwd),
但是 Samba 的密碼與 Unix 的密碼檔案並不相同。這就比較有點小麻煩~
沒關係,就讓我們依樣畫葫蘆來處理一下這個部分的設定吧!
主機預計分享的資源狀態
- 剛剛前一個免密碼時的 smb.conf 設定繼續保留;
- 針對 NetBIOS name 的解析方式依序由 lmhosts, broadcast 及 host 來進行解析;
- 安全等級提升為 user 等級;
- 密碼檔案放置到 /etc/samba/smbpasswd 這個檔案當中;
- 密碼必須要加密;
- 每個可使用 samba 的使用者擁有自己的家目錄之外, users 這個群組的使用者可以進入 /home/public 目錄中,
且在該目錄下 users 這個群組的所有人可具有寫入的權限喔!
好了,開始一步步的處理吧!
1. 設定 lmhosts
2. 開始設定 smb.conf 檔案
在這個範例的設定檔當中,我們會新增幾個參數,新增的參數部分會用特殊字體圈起來,
引用之前參數的部分則為一般字體。請交互參考看看囉:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
workgroup = vbirdhouse
netbios name = vbirdserver
server string = This is vbird's samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/%m.log
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
template shell = /bin/false
winbind use default domain = no
# 與密碼有關的設定項目,包括密碼檔案所在與加密與否喔!
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
# 與 NetBIOS name 名稱解析有關的設定
name resolve order = lmhosts bcast host
# 新增的每個使用者家目錄及群組用戶哩!
[homes]
comment = Home directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
[public]
comment = the user groups work directory
path = /home/public
public = yes
writable = yes
valid users = @users
[temp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
|
[global] 部分
在新增的資料部分,主要是與密碼檔案有關啦!包括安全等級設定為使用本機的密碼驗證,亦即是『 security = user 』
那個項目,而且加上了密碼加密。至於 Samba 使用的密碼檔預設就是 /etc/samba/smbpasswd 這個,
為了增加自己的記憶,乾脆直接寫到 smb.conf 當中即可。
至於那個『 name resolve order 』就有趣了!他說明的是『這部 Samba 主機針對 NetBIOS name 的解析方式』,
主要的解析方式有幾種:
- lmhosts:直接以 lmhosts 這個檔案的內容來對照;
- wins:利用一部可管理 Windows 網芳的主控電腦來紀錄,本 Samba 主機向該部主機 (wins server) 要求 NetBIOS
名稱解析結果;
- host:透過 /etc/hosts 或者是 NIS, DNS 等方式來處理 NetBIOS name 的結果;
- bcast:在區網中直接透過 NetBIOS 的廣播功能處理,亦即是向所有 Samba 主機介面的同一網域主機發出名稱解析的需求,
舉例來說咱們的 Samba 主機為 192.168.1.254/24 ,則以 bcast 解析 NetBIOS name 時,我們的伺服器會主動向
192.168.1.0/24 發送出解析封包的要求啊。
我們修改了預設值,讓 Samba 僅透過 lmhosts, bcast 及 host 的方式進行主機名稱的解析啊!
[homes] 部分
至於新增的目錄方面,[homes] 是個比較特殊的分享名稱,他代表 Linux 主機上頭的使用者家目錄。
我們知道 [homes] 代表的是分享目錄的資源名稱,
但你總不希望使用 Samba 時找到的資源分享名稱為 //127.0.0.1/homes 吧?
所以才會有『 valid users = %S 』這個設定值,那個 %S 代表擁有可登入 Samba 的所有使用者,
且當他登入後,那個 [homes] 會變成 [帳號] ,
請至前一小節的
變數部分查詢相關的說明。而且使用者的家目錄是除了使用者本人外,
並不會開放給其他人瀏覽的喔 (browseable = no),
另外他的 umask 為
002,因為建立新檔 (create mode) 預設權限為
0664 ,而建立新目錄 (directory mode) 則為 0775 之故。
[public] 部分
另一個新增的分享資源比較有趣,我們命名為 [public] ,指向的目錄為 /home/public ,
有趣的地方在於使用的 valid users = @users 這個設定項目,
加上 @
之後的名稱代表著群組之意,意思是說,在 Linux 主機上面可使用 Samba 的帳號中,只要該帳號支援 users 這個群組,
那麼理論上他就能夠進入 /home/public 目錄進行存取的權限。
不過能否順利的存取檔案還與
Linux 最底層的檔案權限有關。且任何人均可查閱到我們的主機有提供 [public] 這個分享資源 (public =
yes 之故)。
例題: 在上面的這個設定檔當中有提到分享出 /home/public 這個目錄,
請問這個目錄的權限應該如何設定才是符合我們 Samba 案例的要求?
答:
在這個案例當中我們提到任何具有 users 群組的使用者都能夠完整的存取 /home/public ,
所以這個目錄的群組應該屬於 users ,且權限至少需為 770 才行。如果 /home/public 預設不存在時,
應該要如此建立:
[root@linux ~]# mkdir /home/public
[root@linux ~]# chgrp users /home/public
[root@linux ~]# chmod 770 /home/public
|
這樣當屬於 users 群組的使用者進入到此目錄後,才能夠進行讀寫的功能。
|
3. 設定可使用 Samba 的帳號與密碼
設定使用者帳號是很重要的一環,因為設定錯誤的話,當然也就任何人都沒有辦法登入的!
在這裡我們必須先要說明一下 Linux 的檔案系統與 SAMBA 設定的使用者登入權限的相關性!
- 在 Linux 這個系統下,任何程序都需要取得 UID 與 GID (User ID 與 Group ID)
的身份之後,才能夠擁有該身份的權限,也才能夠適當的進行存取檔案等動作!
- 關於 Linux 這個系統的 UID 與 GID 與帳號的相對關係,一般記錄在 /etc/passwd 當中,當然也能透過 NIS,
ldap 等方式來取對應;
- SAMBA 僅只是 Linux 底下的一套軟體,使用 SAMBA 來進行 Linux 檔案系統時,還是需要以 Linux
系統下的 UID 與 GID 為準則!
如果上面這幾點說明您沒有問題了,現在就來看一下當我們在 Windows 電腦上面以網路上的芳鄰來連接
Linux 並且進行資料的存取時,會是怎樣的一個情況呢?
我們需要透過 SAMBA 所提供的功能來進行 Linux 的存取,而 Linux
的存取是需要取得 Linux 系統上面的 UID 與 GID 的,因此,我們登入 SAMBA 主機時,所利用 SAMBA
取得的其實是 Linux 系統裡面的相關帳號!這也就是說,在 SAMBA 上面的使用者帳號,必須要是
Linux 帳號中的一個!
所以說,在不考慮 NIS 或 LDAP 等其他帳號的驗證方式,單純以 Linux 本機帳號 (/etc/passwd) 作為身份驗證時,
在 Samba 主機所提供可登入的帳號名稱,必須要存在於 /etc/passwd 當中!
這是一個很重要的概念!例如你要先有 dmtsai 在 /etc/passwd 當中後,才能將 dmtsai
加入 Samba 的使用者當中。這都是很基本的帳號權限概念,如果您覺得這裡閱讀方面有問題,
若不考慮鳥哥的解釋不良,表示你必須要回去讀讀基礎篇了~ ^_^
好了,假設我的機器裡面已經有 dmtsai, nikky, tang 等三人,不過我只想要讓 dmtsai 及 nikky 使用 SAMBA 而已的話,
那麼如何將這兩個使用者加入帳號密碼管理檔案 /etc/samba/smbpasswd 當中呢?很簡單的啦!這樣做即可:
1. 先確認密碼檔是否存在
[root@linux ~]# ls -l /etc/samba/smbpasswd
-rw------- 1 root root 104 Dec 25 23:13 /etc/samba/smbpasswd
# 注意啊!要這樣的權限才可以喔!如果你的 Linux 沒有這個檔案,請自行建立。
2. smbpasswd 指令功能
[root@linux ~]# smbpasswd [-adem] username
參數說明:
: 如果都沒有加上任何一個參數,例如『 smbpasswd dmtsai 』時,這表示:
修改 SAMBA 密碼檔 (/etc/samba/smbpasswd) 裡面的 dmtsai 這個帳號的密碼!
也就是說,密碼檔裡面已經存在一個 dmtsai 的帳號了!
-a : 在 smbpasswd 密碼檔裡面新增一個使用者
-d : 讓在 smbpasswd 密碼檔裡面的某個帳號的使用者暫時無法使用 SAMBA
當多了 -d 的參數時,在 smbpasswd 裡面某個欄位會多出一個 D 的參數,
代表該帳號目前無法使用喔!
-e : 與 -d 參數相反,讓某個帳號恢復使用!
-m : 該 username 為機器代碼 (Machine Account),這個與 domain model 有關!
2.1 開始新增使用者吧!
[root@linux ~]# smbpasswd -a dmtsai
New SMB password: <==在這裡輸入密碼!這個密碼不一定要與 /etc/shadow 相同
Retype new SMB password: <==再輸入一次
Added user dmtsai.
[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F755028491:
[U ]:LCT-4590969D:
# 上面的資料為同一行的資料喔!資料為加密過的!
2.2 如果要暫時拒絕一個使用者的登入,可以這樣做:
[root@linux ~]# smbpasswd -d dmtsai
[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F755028491:
[DU ]:LCT-4590969D:
# 就是這個 D !代表的就是暫時 disable 囉!
[root@linux ~]# smbpasswd -e dmtsai
|
接下來你可以透過相同的方式來新增 nikky 這個使用者的 Samba 密碼,那這兩個人就能夠使用 Samba 囉。
然後我們就能夠開始準備來重新啟動 Samba 並且測試看看囉!
4. 重新啟動 Samba 並測試
在經過重新啟動後,我們所進行的修訂才會生效。然後使用 smbclient 來檢查看看,是否不同身份會有不一樣的瀏覽結果呢?
趕緊看看:
[root@linux ~]# testparm
# 這個動作很重要!每次都要進行!確認你的語法無誤後再開始!
[root@linux ~]# /etc/init.d/smb restart
[root@linux ~]# smbclient -L //127.0.0.1
Password: <==直接按下 [Enter] 即可。
Anonymous login successful <==是匿名登入喔!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
public Disk the user groups work directory
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
[root@linux ~]# smbclient -L //127.0.0.1 -U dmtsai
Password: <==輸入 dmtsai 在 smbpasswd 檔案中所建立的密碼喔!
Domain=[VBIRDSERVER] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
public Disk the user groups work directory
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
dmtsai Disk Home directories
|
由上表我們可以發現,經由不同的身份登入可以取得不一樣的瀏覽資料,
所以在使用上面需要特別留意喔!
5. 關於權限的再說明
有的時候你會發現,明明在 smb.conf 當中已經設定了 writable 可寫入,使用者登入的身份也沒有問題,
為啥就是無法寫入呢?是否是伺服器設定哪裡還有問題啊?非也非也!主要的問題常常是來自於 Linux 檔案系統的權限啦!
舉上面的例子來說好了,我們在 smb.conf 當中設定 [public] 為可寫入,亦即 /home/public 是可寫入的。
假設 dmtsai 屬於 users 這個群組,因此以 dmtsai 登入 SAMBA 伺服器後,對於 /home/public
應該是具有可以讀寫的能力的!但是,如果你以 root 的身份建立 /home/public 卻又忘記修改權限的話,
此時 /home/public 是無法讓 users 這個群組寫入的,因此 dmtsai 這個使用者當然不具有寫入的能力。
這樣說,瞭解鳥哥想要說啥了嗎?注意注意喔! ^_^
上面的設定案例應該蠻足以提供一般家庭用的環境中進行設定了!如果您還要擴充分享的目錄與能夠登入的使用者,
可以這樣做:
- 利用編輯 smb.conf 來多開放其他的目錄,並且特別注意 Linux 在該目錄下的權限喔!請使用 chown 與 chmod 吧!
- 利用 smbpasswd 來新增其他使用者到 /etc/samba/smbpasswd 裡面去,如果該帳號並沒有出現在
/etc/passwd 裡面,請先以 useradd 新增該帳號;
- 不論進行完任何的設定,請先以 testparm 進行確認,之後以 /etc/init.d/smb restart 來重新啟動!
事實上,SAMBA 的一般用途就是在這個連線的模式中!多使用 SAMBA 來分享您的資源吧!鳥哥都是使用 SAMBA
來做為遠端伺服器與我的工作機互通有無的重要媒介說~
剛剛上面的說明大部分都是針對磁碟與目錄的分享來進行 SAMBA 的設定,那麼 SAMBA
有沒有可能分享出裝置呢?舉個例子來說,例如那個我們在辦公室都會用到的印表機呢?如果說,能夠讓我們辦公室的
File Server 同時提供印表機列印的功能,如此一來,藉由 Linux 這個作業系統可以 24
小時開機的穩定功能,我們就可以隨時進行列印囉!所以,底下我們就以 SAMBA
進行印表機列印功能的提供者的角度,來介紹這個 smb.conf 的設定喔!
在 Linux 底下進行列印的工具很多,不過我們這裡要介紹的僅有目前較廣為流行的 CUPS (Common Unix Printing System) 這一個。
詳細的 CUPS 安裝設定方法我們已經在
基礎篇的 CUPS 章節當中提過,
所以這裡我們不再詳細說明,僅介紹大致的處理流程就是了。如果你需要較早期的 LPRng 列印系統的話,
建議可以參考底下的資料喔:
底下就來談一談一般常見的流程說明吧:
1 安裝印表機與確定啟動
再次說明,並不是所有的印表機都被 Linux 所支援的,所以當你想要連結一部印表機到 Linux 系統上頭時,
請務必到
http://www.linuxprinting.org/printer_list.cgi 上頭去看看是否有被支援喔!
如果沒有被支援,那就換一部印表機吧!不要進行垂死的掙扎了....
如果你的印表機連接埠為使用 USB 或者是平行序列埠的話,那麼當你連接上印表機後,
可以利用底下的方式測試看看是否成功的連接上了:
[root@linux ~]# echo "Hello printer" > /dev/lp0 <==平行序列埠
[root@linux ~]# echo "Hello printer" > /dev/usb/lp0 <==USB 埠
|
如果印表機有回應,這表示 OK 的啦!你可以進行底下的工作了。如果你的印表機為網路印表機呢?
就是說印表機有 IP 的情況下,那麼該印表機就不需要加入 Samba 啦!因為該印表機本身就可以直接提供用戶端連接,
根本不必透過 Samba 來提供網路連線的嘛!當然啦,如果你有特殊需求,
將網路印表機加入 Samba server 來提供給網芳中的其他用戶,也是可以的啦!底下直接來看看如何使用 CUPS 吧。
2. 設定 CUPS 的印表機
請先確認你的 CUPS 已經安裝妥當了,原則上,你必須要有底下兩個套件存在才行:
接下來我們可以開始設定 CUPS 了!設定的原則是這樣的:
- 我需要讓 192.168.1.0/24 這個網域可以使用印表機
- 我需要讓 192.168.1.0/24 及 127.0.0.0/8 可以管理 CUPS 系統
然後開始這樣做:
[root@linux ~]# vi /etc/cups/cupsd.conf
# 底下這個項目在控制誰可以使用 CUPS 系統,約在 772 行左右,
# 找到這些資料並增加一筆記錄:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>
# 底下的項目則在設定誰可以登入 CUPS 系統的管理介面?
# 約在 830 行左右,找到這些資料並進行一些細部修改:
<Location /admin>
#AuthType Basic
#AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>
# 在最後一行的地方加上這一句
Listen 0.0.0.0:631
# 上面在設定一個不需要密碼即可登入的管理環境,是個很粗糙的介面,
# 建議您自行處理一下認證問題,請參考基礎篇的說明。
|
另外,為了要進行 Windows 相關軟體所傳來的列印資料,所以我們還需要對 CUPS 作一些額外的設定,
過程也是很簡單的:
[root@linux ~]# vi /etc/cups/mime.convs
# 大概在最後幾行的地方,找到這一行,將註解拿掉!
application/octet-stream application/vnd.cups-raw 0 -
[root@linux ~]# vi /etc/cups/mime.types
# 同樣也是在最後面幾行的地方,也是將註解拿掉即可!
application/octet-stream
|
設定完畢後就可以開始來啟動 cups 系統,可以這樣做:
[root@linux ~]# /etc/init.d/cups start
[root@linux ~]# netstat -tunlp | grep '631'
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 18271/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 18271/cupsd
|
那個 631 的埠口就是 CUPS 所啟動的啦!然後我們可以開始設定印表機了!
由於 CUPS 支援很多不同的印表機連接埠,每種連接埠都不一樣,常見的有:
- USB 連接埠: usb:/dev/usb/lp0
- 平行序列埠: parallel:/dev/lp0
- 網路印表機: ipp://ip/印表機型號
- 網路芳鄰印表機: smb://user:password@host/printer
假設我們的 Samba 上頭接了一部 usb 連線的印表機,而我要將這部印表機取名為 hplaser2300 時,
你可以使用瀏覽器連接到 Samba 主機上頭,必須注意到網址喔:
圖三、CUPS 的管理介面示意圖
如上圖三所示,先在網址列的地方務必要輸入埠口才行!然後按下箭頭『 2 』所指的地方,
亦即是『Manage Printer』之後再按下『Add printer』的按鈕,就會出現如下畫面,
記得要填寫正確的資料喔!
圖四、CUPS 的管理介面示意圖
然後如下圖所示,選擇正確的裝置所在處!我們假設使用的是 USB 的印表機連接埠:
圖五、CUPS 的管理介面示意圖
之後就是選擇正確的型號囉,假設這部印表機為 HP 所出產的:
圖六、CUPS 的管理介面示意圖
選擇標準的雷射印表機驅動程式吧!
圖七、CUPS 的管理介面示意圖
最後都成功後,就會找到如下所示的畫面了。
圖八、CUPS 的管理介面示意圖
到此為止我們可以假設你的 CUPS 已經有一部印表機存在了,即使該印表機目前無法工作,
但是就是有一部印表機嘛!^_^!接下來看看如何將他連結到咱們的 Samba 伺服器中吧!
3. 在 smb.conf 當中加入印表機的支援
然後開始告訴 Samba 將這部印表機給他分享出去吧!你需要這樣處理:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
.....其他省略.....
# 這裡列出的則是印表機相關的資料啊!
printcap name = cups
load printers = yes
printing = cups
[printers] <==這個分享的資源名稱一定是 printers
comment = All Printers
printable = yes <==可以進行列印的功能
browsable = yes <==可以讓其他人瀏覽
public = yes
valid users = @users dmtsai <==可使用的人員有這些
path = /var/spool/samba <==列印佇列的地方,暫存資料
printer admin = dmtsai <==這是印表機管理員!需要可使用 SAMBA 者
.....其他省略.....
|
基本上透過這樣的設定你的 Samba 就能夠順利的提供印表機的服務了!
不過可惜的是,
Windows 用戶端依舊得要安裝印表機的驅動程式才能夠使用 Samba 所提供的印表機,
此時真是麻煩兼討厭啊~有沒有可能讓 Samba 主動的提供驅動程式給使用者,這樣一來用戶端就不需要額外去找驅動程式囉!
是可以的,透過 Samba 3.x 即可處理!
或許你會想,印表機的型號這麼多,那麼 Linux 該如何提供這些印表機的驅動程式啊?豈不麻煩?
還好啦,
CUPS 主要是透過利用 Postscript 的列印語言與印表機溝通的,因此用戶端只要取得 postscript
的驅動程式他們就能夠使用咱們的 Samba 伺服器所提供的印表機了!如此一來,
不論印表機的型號為何,只要他們能夠支援 Postscript 的列印格式,OK 搞定!而且 CUPS
官網本身就有提供 CUPS 的 Postscript 驅動程式囉!可以到底下的連結去下載:
由於 CentOS 4.x 使用的是 1.1.x 版本,所以鳥哥下載的是 cups-samba-5.0rc3.tar.gz 這個檔案,
接下來我們要將這個檔案解壓縮,然後將相關的程式給他安裝到正確的目錄去。
不過您得要注意的是,除了這個驅動程式外,要支援 Windows 2000/xp 的用戶端,
你還得到 Windows XP 的底下目錄去下載幾個檔案:
C:\WINDOWS\system32\spool\drivers\w32x86\3
裡面的 PS 開頭的檔案通通下載下來,應該有四個檔案的,請將他複製成為小寫的檔案,並且放置到你 Samba 主機上的
/usr/share/cups/drivers/ 目錄下,然後將 cups-samba-5.0rc3.tar.gz 解壓縮後執行 ./cups-samba.install 檔案,
就能夠將驅動程式通通安裝到 /usr/share/cups/drivers/ 目錄下了!這就是基本的驅動程式說!
在鳥哥的這個目錄底下至少含有這幾個檔案就是了:
[root@linux ~]# ll /usr/share/cups/drivers
-r--r--r-- 1 root root 14234 Sep 24 2002 cups5.hlp
-r--r--r-- 1 root root 280268 Jan 4 2004 cupsdrv5.dll
-r--r--r-- 1 root root 219540 Jan 4 2004 cupsui5.dll
-rw-r--r-- 1 root root 129024 Dec 27 14:18 ps5ui.dll
-rw-r--r-- 1 root root 455168 Dec 27 14:18 pscript5.dll
-rw-r--r-- 1 root root 27568 Dec 27 14:18 pscript.hlp
-rw-r--r-- 1 root root 792644 Dec 27 14:18 pscript.ntf
|
上述的檔案鳥哥將他打包成為一個檔案了,你可以在底下的連結下載:
不過您得注意,這個檔案內的 Windows 資料是由 Windows XP 上面捉來的,所以對於 Windows 98/ME 是沒有作用的。
您得自行上網查閱相關的資料下載方式喔。
接下來我們必須要在 smb.conf 裡面增加一筆新的分享資料,這個分享資料必須是 [print$] 名稱才行!
有點類似這樣啦:
[root@linux ~]# vi /etc/samba/smb.conf
.....其他省略.....
[print$]
comment = Printer drivers
path = /etc/samba/drivers <==存放印表機驅動程式的目錄
browseable = yes
read only = yes
write list = dmtsai <==這個驅動程式的管理員
.....其他省略.....
[root@linux ~]# mkdir /etc/samba/drivers
[root@linux ~]# chown dmtsai /etc/samba/drivers
# 因為我們將印表機管理員以及驅動程式管理員的身份設定為 dmtsai 這個使用者,
# 因此存放的目錄也要改變一下權限才行吶!
[root@linux ~]# testparm <==測試語法
[root@linux ~]# /etc/init.d/smb restart <==重新啟動
[root@linux ~]# smbclient -L //127.0.0.1 -U dmtsai
Password: <==輸入密碼先
Domain=[VBIRDSERVER] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer drivers
hplaser2300 Printer HP Laser Jet 2300 printer
# 瞧!有看到一部印表機以及驅動程式所在的分享資料囉!
|
現在我們的要告知 Samba 說,我們的 CUPS 可提供 Windows 2000/XP 用戶端的驅動程式,
所以用戶不需要自行設定他們的驅動程式哩!要由 cups 告知 Samba 是由 cupsaddsmb 這個指令來搞定的,
整個指令的執行很簡單的:
[root@linux ~]# cupsaddsmb -H [SAMBA 主機名] -h [CUPS 主機名] \
> -a -v -U [使用者帳號]
參數:
-H :後續接的是 Samba 主機名,本機的話可以直接用 localhost 即可;
-h :後續接的為 CUPS 的主機名,同樣的可使用 localhost 即可;
-a :搜尋所有可用的印表機;
-v :列出更多的資訊;
-U :印表機管理員
範例:利用前面的說明將印表機驅動程式掛上 SAMBA
[root@linux ~]# cupsaddsmb -H localhost -U dmtsai -a -v
Password for dmtsai required to access localhost via SAMBA: <==輸入 dmtsai 密碼
# 這裡會閃過很多的訊息,說明已經安裝了某些資訊,底下鳥哥僅列出簡單的訊息而已。
putting file /usr/share/cups/drivers/pscript5.dll as
\W32X86/pscript5.dll (1438.5 kb/s) (average 1342.5 kb/s)
Printer Driver hplaser2300 successfully installed.
Succesfully set hplaser2300 to driver hplaser2300.
[root@linux ~]# ll /etc/samba/drivers
drwxr-xr-x 3 dmtsai dmtsai 4096 Dec 27 14:40 W32X86
|
最後在驅動程式的存放目錄會多出一個 W32X86 的目錄,你可以查詢一下該目錄的內容,
那就是預計要給用戶端使用的驅動程式啦!這樣就搞定了!不過,為了將所有的資料通通驅動,
建議您將 CUPS 及 SAMBA 通通重新啟動吧!
[root@linux ~]# /etc/init.d/cups restart
[root@linux ~]# /etc/init.d/smb restart
|
4. 一些問題的克服:
如果一切順利的話,你在 Windows 用戶端應該可以順利的連接到印表機囉!
開心吧!不過,如果你曾經印錯資料,那麼該如何進入 Linux 的 Samba 主機將該資料移除呢?
你最好知道底下的幾個指令,關於這些指令的進階用法則請自行給他 man man 看了:
[root@linux ~]# lpstat -a
hplaser2300 accepting requests since Jan 01 00:00
# 列出所有可用的印表機狀態
[root@linux ~]# lpq
hplaser2300 is ready
no entries
# 列出印表機的工作,若有列印工作存在時,會如下所示:
hplaser2300 is ready and printing
Rank Owner Job File(s) Total Size
active dmtsai 5 smbprn.00000003 測試頁 42954752 bytes
[root@linux ~]# lprm all
# 移除所有等待中的列印工作!
|
列印工作就是這樣進行的啦!趕緊試看看吧!
使用 SAMBA 其實是有一定程度的危險性的,這是因為很多網路攻擊的蠕蟲就是透過 NetBIOS 來攻擊的!
因此,在架設好了 SAMBA 之後,請記得將權限方面的工作做好!權限方面的工作除了 smb.conf 內的設定外,
Linux 檔案系統的 r, w, x 權限也是相當重要的喔!我們底下就簡單的介紹一下一些基本的安全性管理吧!
利用 iptables 來管理
最簡單的管理登入 SAMBA 的方法就是透過 iptables 啦!詳細的說明我們已經在
防火牆章節當中提過了,所以這裡不在詳加說明。
要知道的是,如果你僅要針對底下的範圍開放 Samba 時,可以這樣想:
- 僅針對 192.168.1.0/24 這個網域開放 SAMBA;
- SAMBA 的 port 有 137~139 tcp/udp;
- SAMBA 主機的網路卡為 eth0
所以 iptables.rule 規則當中應該要加入這幾項:
iptables -A INPUT -p tcp -i eth0 -s 192.168.1.0/24 --dport 139 -j ACCEPT
iptables -A INPUT -p udp -i eth0 -s 192.168.1.0/24 --dport 137:138 -j ACCEPT
|
當然啦!這是很簡單很簡單的防火牆規則,您必須要依據您的環境自行修改 (通常修改那個 192.168.1.0/24 網段即可!)
。除了 iptables 必須要開放之外,您還需要將管制 daemon 是否能夠進出的 TCP Wrappers 開放才行吶!如果萬一您看到
/etc/hosts.deny 裡面多了這一行:
[root@linux ~]# cat /etc/hosts.deny
ALL : ALL
|
不要懷疑,很可能會造成不只 SAMBA 不能動作而已~連其他的 daemon 都可能會無法動作呢!所以,請將這一行拿掉吧!
或者是將適合的 daemon 開放在 /etc/hosts.allow 檔案裡面喔!
smb.conf 的設定值
事實上 Samba 已經有許多防火牆機制啦!那就是 hosts allow 及 hosts deny 這兩個參數。
通常我們只要使用 hosts allow 即可,那麼沒有寫入這個設定項目的其他來源就會被拒絕連線的!
舉例來說,如果你只想要讓本機、192.168.1.11, 192.168.1.21 使用 SAMBA 而已,那麼可以這樣寫:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
# 跟安全有關
hosts allow = 127. 192.168.1.11 192.168.1.21
smb ports = 139
|
如此一來不但只有數部主機可以登入我們的 SAMBA 伺服器,而且 Samba 只能以標準的 port 139 來連結,
關閉 Windows 常用且有點問題的 port 445 呢!這樣會比較好一些啦!
未來如果還有人想要連結你的 Samba 時,將他加入 hosts allow 後面即可!
不難吧! ^_^
利用 Quota 限制使用者空間使用
quota 是磁碟配額限制的一個 daemon ,您可以依據不同的使用者來加以限制他們能夠使用的硬碟空間,
前提是『
該磁碟空間必須是一個獨立的 partition 』才行,不建議針對根目錄
『 / 』進行 quota !這也是為什麼我們在主機規劃時特別建議大家獨立出一個 partition
來進行硬碟規劃的原因!關於 quota 的詳細用法在『
鳥哥的 Linux 私房菜--基礎學習篇』裡面已經談得很清楚了,
這裡我們不再詳談!只給大家來做個練習就是了!
例題: 在規劃主機的時候,我將 /dev/hda2 獨立一個 partition 給 /home 這個目錄,現在想要規劃
quota 針對 dmtsai 這個使用者進行磁碟配額的限制,他的 hardlimit 為 50mb 而 softlimit 為 40mb ,請問整個動作應該如何進行?
答:
- 編輯修改 /etc/fstab ,使得 /dev/hda2 這個 partition 成為如下模樣:
/dev/hda2 /home ext3 defaults,usrquota,grpquota 1 1
修改完畢之後,請千萬記得使用 mount -a 查詢看看有沒有設定錯誤 (上面總共只有六個欄位喔!),
這個動作如果發生錯誤,那麼請記得再次的進行 /etc/fstab 的修改!請特別留意啊!因為寫錯的話,
很容易造成無法正常開機的窘境!
- 上述動作確定沒有問題之後,請重新開機啟動 quota 的支援:
sync; sync; sync; reboot
- 執行底下的指令,建立 quota 所需要的設定檔案:
quotacheck -avug
特別注意,如果上述的動作發生『找不到設定檔』的意思的訊息時,您可以這樣做:
touch /home/aquota.user; touch /home/aquota.group
然後再進行一次 quotacheck 即可!
- 啟動 quota 囉:
quotaon -av
- 設定 bird 的磁碟配額:
edquota -u dmtsai
Disk quotas for user dmtsai (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hdb2 32 40000 50000 8 0 0 因為我們只針對硬碟空間,不針對 inode
做限制,所以只要前面的數字修訂即可!請注意,數字的單位為 kbytes !
|
關於備份
跟 SAMBA 最有關的當然就是使用者的資訊囉!所以,您應該要備份的就是使用者的資料,以及
Samba 相關的設定資料了!比較相關的有幾個咚咚:
- /etc (因為含有 /etc/passwd 以及 /etc/samba 裡面的資料,所以建議可以全部給他備份下來 )
- /home (還是可以察看一下,是否有其他非必要的!不過,一般來說,都會是備份的個人資料比較多啦!)
- 其他由 smb.conf 裡面設定開放的目錄。
無論如何,備份還是挺重要的!
現在您知道 Samba 伺服器的功能是用來作為檔案伺服器的,每個使用者都可以擁有家目錄,
並透過網芳的功能來連結到 Samba 伺服器中。這就有個問題啦,那就是你的使用者如果太多,
並且將他們的重要資料都放到這部 Samba 主機上頭的話,那肯定 /home 未來會有點不足啊!
所以 /home 所在的磁碟或許可以使用大一點的硬碟,或者使用磁碟陣列,使用
LVM 也是個不錯的方案。
底下為簡單的思考方向:
- 在安裝 Linux 的時候,建議不需要安裝 X Window ;
- 在規劃 Linux 時,/home 最好獨立出一個 partition ,而且硬碟空間最好能夠大一些;
- /home 獨立出來的 partition 可以單獨進行 quota 的作業,以規範每個使用者能夠使用的最大硬碟容量;
- 由於 SAMBA 可以做為印表機伺服器,所以建議印表機可以直接連接在 Linux 主機的列印埠 (LPT1, USB...);
- 由於 SAMBA 一般來說都僅針對內部 (LAN) 主機進行開放,所以,可能的話 SAMBA 主機直接使用內部保留 IP
來設定即可,當然啦, SAMBA 是否使用 private IP 還得視您的整個網域的 IP 網段的特性來規劃。
以鳥哥研究室來說,因為實驗室所有電腦的 IP 都是 Public IP,那麼 SAMBA 如果使用
Private IP ,當然大家都無法連接上啊! ^_^
- 如果您的 SAMBA 主機使用 Public IP 時,請特別留意規範好防火牆的設定,盡量僅讓 LAN
內的電腦可以連線進來即可,不要對 Internet 開放喔!
另外,如果你的 Samba 伺服器需要掛載含有中文的 partition 時,譬如說你將原本 Windows XP 的 FAT32 檔案系統挪到
Linux 系統下,此時如果用一般模式來掛載該分割槽時,一些中文檔名可能會無法被順利的列印出來。
這個時候你就得需要這樣做了:
mount -t vfat -o iocharset=big5,codepage=950 /dev/hd[a-d][1-16] /mount/point
|
其中 iocharset 指的是本機的語系編碼方式, codepage 則與遠端軟體有關。因為我們是在本機進行掛載,
所以實際上使用 iocharset 這個參數即可啦!更多說明則請看下節的用戶端設定部分囉!