# 16.2 SAMBA 服務器的基礎設定
## 16.2 SAMBA 服務器的基礎設定
SAMBA 這個軟件幾乎在所有的 Linux distributions 上面都有提供,因為即使你的 Linux 僅做為個人桌面計算機使用時, 你依舊可能會需要聯機到遠程的 Windows 網芳,那個時候就得要 samba 提供的客戶端軟件功能啰! 因此你只要直接安裝系統上面提供的默認 samba 版本即可。底下我們會先介紹 samba 服務器,然后再介紹客戶端功能喔!
- - - - - -
### 16.2.1 Samba 所需軟件及其軟件結構
目前常見的 samba 版本為 3.x 版,舊版的 2.x 版在設定上有點不一樣,因此在進入設定前請先確認你的 samba 版本。 咱們的 CentOS 6.x 主要提供的是 Samba 3.x 的版本,不過也有釋出 4.x 的版本 (samba4),我們這里主要介紹的是預設的 3.x 版本的。那么你需要什么軟件呢?基本上有這些:
- samba: 這個軟件主要提供了 SMB 服務器所需的各項服務程序 (smbd 及 nmbd)、 的文件檔、以及其他與 SAMBA 相關的 logrotate 配置文件及開機默認選項檔案等;
- samba-client: 這個軟件則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA 文件格式的 mount.cifs、 取得類似網芳相關樹形圖的 smbtree 等等;
- samba-common: 這個軟件提供的則是服務器與客戶端都會使用到的數據,包括 SAMBA 的主要配置文件 (smb.conf)、語法檢驗指令 (testparm) 等等;
這三個軟件你都得要安裝才行喔!如果尚未安裝的話,使用 yum 去裝好它吧!安裝完畢之后,你可以依序察看一下 Samba 的軟件結構喔!與它相關的配置文件基本上有這些:
- /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 使用手冊了!值得高興吧! ^\_^,所以,趕緊自行參考喔!
至于常用的腳本文件案方面,若分為服務器與客戶端功能,則主要有底下這幾個數據:
- /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 啦;
- /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 主機上面,用來查看是否設定成功哩!
- /usr/bin/nmblookup:客戶端功能,有點類似 nslookup 啦!重點在查出 NetBIOS name 就是了。
- /usr/bin/smbtree:客戶端功能,這玩意就有點像 Windows 系統的網絡上的芳鄰顯示的結果,可以顯示類似『靠近我的計算機』之類的數據, 能夠查到工作組與計算機名稱的樹狀目錄分布圖!
大致的軟件結構就是這樣,底下就準備來講一個簡單的案例吧!這樣比較好介紹配置文件項目啦!
- - - - - -
### 16.2.2 基礎的網芳分享流程與 smb.conf 的常用設定項目
既然 Samba 是要加入 Windows 的網芳服務當中,所以它的設定方式應該是要與網芳差不多才是。所以我們先來聊一聊 Windows 的一些網芳設定方法再說。在早期 Windows 的網芳設定真是很簡單,不過也因為太簡單, 所以產生的安全問題可是相當的麻煩的。后來在 Windows XP 的 SP2 (服務包第二版) 之后加入了很多的預設防火墻機制, 因此使用網芳的預設限制常常會是這樣的:
- 服務器與客戶端之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火墻);
- 最好設定為同一工作組;
- 主機的名稱不可相同 (NetBIOS name);
- 專業版 Windows XP 最多僅能提供同時 10 個用戶聯機到同一臺網芳服務器上。
工作組與主機名的設定,你可以在『我的計算機』右鍵單擊,選擇內容后去修訂相關的設定值。當你的 Windows 主機群符合上述的條件后,就很容易處理網芳分享的工作啦!分享的步驟一般是這樣的:
1. 叫出檔案總管,然后在要分享的目錄、磁盤或裝置 (如打印機) 上面按下右鍵,選擇『共享』,然后就能夠設定好分享的數據了;
2. 最好建立一組給用戶使用的賬號與密碼,讓其他主機的用戶可以透過該賬號密碼聯機進入使用網芳分享的資源;
例題:假設你打開 Windows XP 的檔案總管,在 D:\\VBird\\Data 這個目錄下,你按下右鍵選『共享與安全性』,之后,在出現的窗口中, 你選擇:『你了解這個安全風險,但仍不要執行精靈而共享檔案,請按這里』,然后勾選:『在網絡上共享這個文件夾』, 最后共享的名稱你輸入了:『VBGame』,請問,假設你的 IP 是 192.168.100.20 ,那么你的用戶會看到什么網址列?答:網芳的資源名稱通常的寫法是:『 \\IP\\分享資源名稱』,我們的分享資源名稱為 VBGame,因此最終這個分享的資源名稱應該是:『 \\192.168.100.20\\VBGame 』才對!很多朋友都會寫成:『 \\192.168.100.20\\VBird\\Game 』那錯得很離譜喔!
真是有夠簡單的!那么 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 類似喔:
- 在 smb.conf 當中,井字號與分號 (# 跟 ;) 都是批注符號;
- 在這個配置文件中,大小寫是沒關系的!因為 Windows 沒分大小寫!
- smb.conf 的服務器整體參數: \[global\] 項目
在 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 』喔!
關于語系編碼,建議你參考一下討論區的這一篇:
- <http://phorum.vbird.org/viewtopic.php?t=22001>
我們的網友 eyesblue 寫得太好了!所以建議大家直接前往查閱即可!在這里鳥哥將該文章內容作個例題來玩玩。
例題:假設你的 Samba 使用的語系 /etc/sysconfig/i18n 顯示的是『 LANG="zh\_TW.big5" 』, 而預計要分享的目標 Windows 系統是 XP,那么你的語系數據應該如何設定?答:由于 Linux, Windows XP 都使用 big5 編碼,因此設定值應該是:
```
unix charset = cp950
display charset = cp950
dos charset = 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 代表密碼要加密,注意那個 passwords 要有 s 才對!
- passdb backend = 數據庫格式,如前所述,為了加快速度, 目前密碼文件已經轉為使用數據庫了!默認的數據庫格式微 tdbsam ,而預設的檔案則放置到 /var/lib/samba/private/passwd.tdb。
事實上 Samba 的密碼方面設定值很多喔,包括你還可以利用 samba 來修改 /etc/passwd 里頭的人物的密碼呢! 不過這個時候就得需要『 unix password sync 』以及『 passwd program 』這兩個參數值的幫忙了。 我們這里先談比較簡單的,其他進階的部分可以 man smb.conf 去進行搜尋查閱喔! ^\_^
- 分享資源的相關參數設定 \[分享的名稱\]
這部分就是我們在前面的小范例當中說明的,要將 (1)哪個實際的目錄 (2)分享成什么名稱?中刮號里面放的是『分享名稱』! 那在這個分享名稱內常見的參數有:
- \[分享名稱\] :這個分享名稱很重要,它是一個『代號』而已。記得回去看看 16.2.2 里面提到的那個范例;
- comment :只是這個目錄的說明而已!
- path :這個分享名稱實際會進入的 Linux 文件系統 (目錄)。 也就是說,在網芳當中看到的是 \[分享\] 的名稱,而實際操作的文件系統則是在 path 里頭所設定的。
- browseable :是否讓所有的用戶看到這個項目?
- writable :是否可以寫入?這里需要注意一下喔!那個 read only 與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這里設定為 yes ,亦即可以寫入,如果 read only 同時設定為 yes , 那不就互相抵觸了!那個才是正確的設定?答案是:最后出現的那個設定值為主要的設定!
- create mode 與 directory mode 都與權限有關的咯!
- writelist = 使用者, @群組,這個項目可以指定能夠進入到此資源的特定使用者。 如果是 @group 的格式,則加入該群組的使用者均可取得使用的權限,設定上會比較簡單!
因為分享的資源主要與 Linux 系統的檔案權限有關,因此里頭的設定參數多與權限有關。
- smb.conf 內的可用變量功能
為了簡化設定值,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 喔!重要的很!
**Tips:** 時代變動太快,版本變動太多~要講完所有的參數實在是很難的一件事~所以在這里鳥哥只講一些常用的設定項目, 很多細項就得要靠各位看官自己努力了~文末也有列出很多 Samba 的在線資源,記得要查察看!

- - - - - -
### 16.2.3 不需密碼的分享 (security = share, 純測試)
瞎密?不需要密碼就能夠使用 SAMBA 主機所提供的目錄資源?真假?沒錯啦,可以達到的。不過,因為不需要密碼就能夠登入, 雖然你可以設定權限成為只讀,讓使用者可以『瞧瞧而已』,但是畢竟比較危險。 因為如果你不小心將重要數據放置到該分享的目錄當中,豈不危險?所以盡量不要這樣設定,所以標題才會講:『純測試』嘛!
- 0. 假設條件
在底下的案例中,服務器 (192.168.100.254) 預計設定的參數狀況為:
- 在 LAN 內所有的網芳主機工作組 (workgroup) 為: vbirdhouse
- 這部 Samba 服務器的 NetBIOS 名稱 (netbios name) 為: vbirdserver
- 使用者認證層級設定 (security) 為: share
- 取消原本有放行的 \[homes\] 目錄;
- 僅分享 /tmp 這個目錄而已,且取名為: temp
- Linux 服務器的編碼格式假設為萬國碼 (Unicode, 亦即 utf8)
- 客戶端為中文 Windows ,在客戶端的軟件也使用 big5 的編碼
老實說, netbios name 幾乎可以不用設定了,因為現在我們都用 IP 進行網芳聯機,不一定會使用主機名嘛! 所以這一版當中,鳥哥取消了 lmhosts 的設定值喔!好了,底下就開始依序來進行 samba 的設定吧!
- 1. 設定 smb.conf 配置文件
由于我們有設定語系相關的數據,因此得要先查查看,到底我們 Linux 服務器的語系是否為 utf8 呢?檢查方法如下:
```
[root@www ~]# cat /etc/sysconfig/i18n
LANG="zh_TW.UTF-8" <==確實是出現了 utf8 喔!
```
如上所示,確實是 utf8 啊!而在這個例子當中我們僅分享 /tmp 這個目錄而已,而且假設這個分享出來的目錄是可擦寫的, 另外,我們并沒有分享打印機喔!而在 smb.conf 當中的批注符號可以是『 # 』也可以是『 ; 』喔!要注意!
```
[root@www ~]# cd /etc/samba
[root@www samba]# cp smb.conf smb.conf.raw <==先備份再說!
[root@www samba]# vim smb.conf
# 1\. 先設定好服務器整體環境方面的參數
[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/log.%m
max log size = 50
# 這里才是與密碼有關的設定項目哩!
**security = share**
# 修改一下打印機的加載方式,不要加載啦!
load printers = no
# 2\. 分享的資源設定方面:主要得將舊的批注,新的加入!
# 先取消 [homes], [printers] 的項目,然后針對 /tmp 的設定,可瀏覽且可寫入喔
[temp] <==分享資源名稱
comment = Temporary file space <==簡單的解釋此資源
path = /tmp <==實際 Linux 分享的目錄
writable = yes <==是否可寫入?在此例為是的
browseable = yes <==能不能被瀏覽到資源名稱
<u>guest ok = yes</u> <==單純分享時,讓用戶隨意登入的設定值
```
請你特別留意,在原本的 smb.conf 上面就已經有很多默認值了,這些默認值如果你不知道他的用途, 盡量保留默認值,也可以使用 man smb.conf 去查詢該默認值的意義。上述的設定是完全控制使用者的認證層級的呦!
- 2. 用 testparm 查閱 smb.conf 的語法設定正確性
在啟動 samba 之前,我們務必要了解到 smb.conf 里面語法是否正確,檢驗的方式使用 testparm 這個指令即可。 測試方式如下:
```
[root@www ~]# testparm
選項與參數:
-v :查閱完整的參數設定,連同默認值也會顯示出來喔!
[root@www ~]# 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] <==底下就是剛剛在 smb.conf 里頭設定的數據!
dos charset = cp950
unix charset = utf8
display charset = utf8
workgroup = VBIRDHOUSE
netbios name = VBIRDSERVER
server string = This is vbird's samba server
security = SHARE
log file = /var/log/samba/log.%m
max log size = 50
load printers = No
[temp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
```
上頭是語法驗證與各個項目的列出,如果你下達 testparm 卻出現如下畫面那就是有問題:
```
[root@www ~]# testparm
Load smb config files from /etc/samba/smb.conf
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 來作詳細的輸出, 資料相當的豐富,透過這個你也可以知道你的主機環境設定為何呢! ^\_^
- 3. 服務器端的服務啟動與埠口觀察
啟動實在太簡單了,利用預設的 CentOS 啟動方式來處理即可。
```
[root@www ~]# /etc/init.d/smb start <==這一版開始要啟動兩個daemon
[root@www ~]# /etc/init.d/nmb start
[root@www ~]# chkconfig smb on
[root@www ~]# chkconfig nmb on
[root@www ~]# netstat -tlunp | grep mbd
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::139 :::* LISTEN 1772/smbd
tcp 0 0 :::445 :::* LISTEN 1772/smbd
udp 0 0 192.168.1.100:137 0.0.0.0:* 1780/nmbd
udp 0 0 192.168.100.254:137 0.0.0.0:* 1780/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 1780/nmbd
udp 0 0 192.168.1.100:138 0.0.0.0:* 1780/nmbd
udp 0 0 192.168.100.254:138 0.0.0.0:* 1780/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 1780/nmbd
```
特別注意,在 Samba 當中預設會啟動多個端口,這包括數據傳輸的 TCP 端口 (139, 445),以及進行 NetBIOS 名稱解析之類工作的 UDP 埠口 (137, 138),所以你才會看到很多數據的。那么能否僅支持 139 這個必要的埠口,關閉 445 呢?可以啊~透過 testparm -v 的觀察,可以發現『 smb ports = 445 139 』這個設定值指定兩個埠口的,因此你可以在 smb.conf 增加這個設定值,并改為 smb ports = 139 即可。不過,建議先保留默認值啦!
- 4. 假設自我為客戶端的檢驗 (默認用 lo 接口)
關于客戶端的觀察我們會在后續進行介紹。在這里僅是說明如何確定我們的 Samba 設定與服務有順利的在運作。 我們可以在本機上透過 smbclient 這支程序來處理,它的基本查詢語法是這樣的:
```
[root@www ~]# smbclient -L [//主機或IP] [-U 使用者賬號]
選項與參數:
-L :僅查閱后面接的主機所提供分享的目錄資源;
-U :以后面接的這個賬號來嘗試取得該主機的可使用資源
```
由于在這個范例當中我們并沒有規范用戶的安全等級 (share),所以不必使用 -U 這個選項,因此你可以這樣看看:
```
[root@www ~]# smbclient -L //127.0.0.1
Enter root's password: <==因為不需要密碼,因此這里單擊 [Enter] 吧!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
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$ 則是為了要應付 Windows 環境所必須要存在的項目就是了。那么該如何使用這個資源呢?接下來我們可以利用 mount 這個指令來測試看看啰:
```
[root@www ~]# mount -t cifs //127.0.0.1/temp /mnt
Password: <==因為沒有密碼,所以這里還是按 Enter 即可
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
....(前面省略)....
//127.0.0.1/temp/ 1007896 53688 903008 6% /mnt
[root@www ~]# cd /mnt
[root@www mnt]# ll <==以上這兩個動作要進行!才會知道有沒有權限的問題!
[root@www mnt]# touch zzz
[root@www mnt]# ll zzz /tmp/zzz
-rw-r--r--. 1 nobody nobody 0 Jul 29 13:08 /tmp/zzz
-rw-r--r--. 1 nobody nobody 0 Jul 29 13:08 zzz
# 注意喔!你進入 /mnt 身份會被壓縮成為 nobody 呢!不再是 root 啊!
[root@www mnt]# cd ; umount /mnt
```
確實可以掛載的起來,所以,測試完畢后,就將這個掛載的資料卸除吧。關于 mount 的用法,我們會在后面的小節繼續介紹。
- - - - - -
基本上,到此為止咱們就設定好一個簡單的不需要密碼即可登入的 Samba 服務器了! 你可以先行到[客戶端軟件功能](#client)的部分進行更細部的掛載測試。 接下來,讓我們以簡易的需要密碼才能夠登入 Samba 的方式來設計一個范例吧!
- - - - - -
### 16.2.4 需賬號密碼才可登入的分享 (security = user)
設定一部不需密碼即可登入的 Samba server 是非常簡單的,不過, 你總不希望某些有機密性質的資料放在不設防的網芳中讓大家查閱吧? 舉例來說,你總不希望你的家目錄被人家隨意瀏覽吧?家目錄內可能有你自己的情書呢!^\_^
那怎么辦?沒關系,我們可以透過 Samba 服務器提供的認證方式來進行用戶權力的給予, 也就是說,你在客戶端聯機到服務器時,必須要輸入正確的賬號與密碼后,才能夠登入 Samba 查閱到你自己的數據! 那會不會很難啊?不會啦! Samba 本身就提供一個小程序來幫助我們處理密碼的建立了,整個流程還不太難。
比較重要的是 Samba 使用者賬號必須要存在于 Linux 系統當中 (/etc/passwd), 但是 Samba 的密碼與 Unix 的密碼檔案并不相同 (這是因為 Linux 與網芳的密碼驗證方式及編碼格式不同所致)。 這就比較有點小麻煩~沒關系,就讓我們依樣畫葫蘆來處理一下這個部分的設定吧!
- 0. 假設條件
由于使用者層級會改變成 user 的階段,因此 \[temp\] 已經沒有必要存在!請將該設定刪除或批注。 而服務器方面的整體數據則請保留,包括工作組等等的數據,并新增底下的資料:
- 使用者認證層級設定 (security) 為: user
- 用戶密碼檔案使用 TDB 數據庫格式,默認檔案在 /var/lib/samba/private/ 內;
- 密碼必須要加密;
- 每個可使用 samba 的使用者均擁有自己的家目錄;
- 設定三個用戶,名稱為 smb1, smb2, smb3 ,且均加入 users 為次要群組。此三個用戶 Linux 密碼為 1234, Samba 密碼則為 4321;
- 分享 /home/project 這個目錄,且資源名稱取名為: project;
- 加入 users 這個群組的使用者可以使用 //IP/project 資源,且在該目錄下 users 這個群組的使用者具有寫入的權限。
好了,開始一步步的處理吧!
- 1. 設定 smb.conf 配置文件與目錄權限相關之設定
在這個范例的配置文件當中,我們會新增幾個參數,新增的參數部分會用特殊字體圈起來, 引用之前參數的部分則為一般字體。請交互參考看看啰:
```
# 1\. 開始設定重要的 smb.conf 檔案呦!
[root@www ~]# vim /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/log.%m
max log size = 50
load printers = no
# 與密碼有關的設定項目,包括密碼檔案所在格式喔!
security = user <==這行就是重點啦!改成 user 層級
passdb backend = tdbsam <==使用的是 TDB 數據庫格式!
# 2\. 分享的資源設定方面:刪除 temp 加入 homes 與 project
[homes] <==分享的資源名稱
comment = Home Directories
browseable = no <==除了使用者自己外,不可被其他人瀏覽
writable = yes <==掛載后可擦寫此分享
create mode = 0664 <==建立檔案的權限為 664
directory mode = 0775 <==建立目錄的權限為 775
[project] <==就是那三位使用者的共享資源
comment = smbuser's project
path = /home/project <==實際的 Linux 上面的目錄位置
browseable = yes <==可被其他人所瀏覽到資源名稱(非內容)
writable = yes <==可以被寫入
write list = @users <==寫入者有哪些人的意思
# 2\. 每次改完 smb.conf 你都需要重新檢查一下語法正確否!
[root@www ~]# testparm <==詳細的 debug 請自行處理啰!
```
在上表當中比較有趣的設定項目主要有:
- \[global\] 修改與新增的部分:security 設定為 user 層級,且使用『passdb backend = tdbsam』這個數據庫格式,因此密碼文件會放置于 /var/lib/samba/private/ 內。 此外,默認密碼就是加密的,因此不需要額外使用其他的設定參數來規范;
- \[homes\] 這個使用者資源共享部分: homes 是最特殊的資源共享名稱,因為 Linux 上面的每位用戶均有家目錄,例如 smb1 的家目錄位于 /home/smb1/ ,那當 smb1 用戶使用 samba 時,她就會發現多了個 //127.0.0.1/smb1/ 的資源可用,而 smb2 就在 //127.0.0.1/smb2/ 這個資源。由于不可瀏覽 (browseable),所以除了使用者可以看到自己的家目錄資源外,其他人是無法瀏覽的。此外,為了規范權限,而多了 create mode 與 directory mode 兩個設定值 (此值可設定也可不理會);
- \[project\] 這個使用者資源共享部分:當我們新增一個共享資源時, 最重要的就是規范資源名稱。在此例中我們使用 project 這個資源名稱來指向 /home/project ,也就是說, //127.0.0.1/project 代表的是 /home/project 的意思。此外,能夠使用這個資源的賬號,為加入 users 這個群組的用戶喔! 透過 write list 這個項目比較單純,如果是早期的設定,可能會使用 valid users ,但近來鳥哥比較偏好 write list 設定項目。 不過能否順利的存取檔案還與 Linux 最底層的檔案權限有關。
千萬不要忘記了,除了配置文件之外,詳細的目錄權限與賬號設定等規范也要設定好!底下我們用范例來進行此項工作!
例題:我們預計要分享 /home/project 目錄,這個目錄的權限該如何設定?答:因為是要開放給 users 群組,而共享群組的權限通常是『 2770 』這個含有 SGID 的特殊旗標功能。因此這個目錄應該如此設定才好:
```
[root@www ~]# mkdir /home/project
[root@www ~]# chgrp users /home/project
[root@www ~]# chmod 2770 /home/project
[root@www ~]# ll -d /home/project
drwxrws---. 2 root users 4096 Jul 29 13:17 /home/project
```
- 2. 設定可使用 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 的使用者當中。這都是很基本的賬號權限概念,如果你覺得這里閱讀方面有問題, 若不考慮鳥哥的解釋不良,表示你必須要回去讀讀基礎篇了~ ^\_^
現在我們知道需要新增 smb1, smb2, smb3 三個用戶,且這三個用戶需要加入 users 群組。此外,我們之前還建立過 student 這個用戶,假設這四個人都需要能用 Samba 服務,那么除了新增用戶之外,我們還需要利用 pdbedit 這個指令來處理 Samba 用戶功能喔!
```
# 1\. 先來建立所需要的各個賬號,但假設 student 已經存在了喔!
[root@www ~]# useradd -G users smb1
[root@www ~]# useradd -G users smb2
[root@www ~]# useradd -G users smb3
[root@www ~]# echo 1234 | passwd --stdin smb1
[root@www ~]# echo 1234 | passwd --stdin smb2
[root@www ~]# echo 1234 | passwd --stdin smb3
# 2\. 使用 pdbedit 指令功能
[root@www ~]# pdbedit -L [-vw] <==單純的察看帳戶信息
[root@www ~]# pdbedit -a|-r|-x -u 賬號 <==新增/修改/刪除賬號
[root@www ~]# pdbedit -a -m -u 機器賬號 <==與 PDC 有關的機器碼
選項與參數:
-L :列出目前在數據庫當中的賬號與 UID 等相關信息;
-v :需要搭配 -L 來執行,可列出更多的訊息,包括家目錄等數據;
-w :需要搭配 -L 來執行,使用舊版的 smbpasswd 格式來顯示數據;
-a :新增一個可使用 Samba 的賬號,后面的賬號需要在 /etc/passwd 內存在者;
-r :修改一個賬號的相關信息,需搭配很多特殊參數,請 man pdbedit;
-x :刪除一個可使用 Samba 的賬號,可先用 -L 找到賬號后再刪除;
-m :后面接的是機器的代碼 (machine account),與 domain model 有關!
# 2.1 開始新增使用者吧!
[root@www ~]# pdbedit -a -u smb1
new password: <==輸入 4321 這個密碼瞧瞧
retype new password: <==再輸入一次吧!
Unix username: smb1 <==底下為輸入正確后的顯示結果!
NT username:
Account Flags: [U ]
User SID: S-1-5-21-4073076488-3046109240-798551845-1000
Primary Group SID: S-1-5-21-4073076488-3046109240-798551845-513
Full Name:
Home Directory: \\vbirdserver\smb1
HomeDir Drive:
Logon Script:
Profile Path: \\vbirdserver\smb1\profile
Domain: VBIRDSERVER
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 9223372036854775807 seconds since the Epoch
Kickoff time: 9223372036854775807 seconds since the Epoch
Password last set: Fri, 29 Jul 2011 13:19:56 CST
Password can change: Fri, 29 Jul 2011 13:19:56 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# 你可以發現其實訊息非常的多!若需修改細部設定,請 man pdbedit 吧!
[root@www ~]# pdbedit -a -u smb2
[root@www ~]# pdbedit -a -u smb3
[root@www ~]# pdbedit -a -u student
# 2.2 查詢目前已經存在的 Samba 賬號
[root@www ~]# pdbedit -L
smb1:2004:
smb3:2006:
smb2:2005:
student:505:
# 僅會列出賬號與 UID 而已呦!
# 2.3 嘗試修改與刪除 smb3 這個賬號看看
[root@www ~]# smbpasswd smb3
New SMB password:
Retype new SMB password:
# 修改密碼比較特殊,管理密碼參數是使用 pdbedit,修改密碼得要用 smbpasswd 呦!
[root@www ~]# pdbedit -x -u smb3
[root@www ~]# pdbedit -Lw
# 此時你就看不到 smb3 這個用戶啰!所以測試完請立即將它加回來!
```
以后如果有需要新增額外的使用者賬號,若該賬號原本不存在,則使用 useradd 再以 pdbedit -a 去新增。 若已經存在于 Linux 的實體賬號,直接用 pdbedit -a 新增即可。同時要注意,管理 TDB 數據庫格式建議使用 pdbedit 這個新的玩意兒來處理,smbpasswd 僅剩下修改密碼的功能需記憶即可!
- 3. 重新啟動 Samba 并進行自我測試
在經過重新啟動后,我們所進行的修訂才會生效。然后使用 smbclient 來檢查看看,是否不同身份會有不一樣的瀏覽結果呢? 趕緊看看:
```
[root@www ~]# /etc/init.d/smb restart
[root@www ~]# /etc/init.d/nmb restart
# 1\. 先用匿名登錄試看看!
[root@www ~]# smbclient -L //127.0.0.1
Enter root's password: <==直接按下 [Enter] 即可。
Anonymous login successful <==有看到匿名的字樣了!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
project Disk smbuser's project
IPC$ IPC IPC Service (This is vbird's samba server)
....(底下省略)....
# 2\. 再使用 smb1 這個賬號登入試看看!
[root@www ~]# smbclient -L //127.0.0.1 -U smb1
Enter smb1's password: <==輸入 smb1 在 pdbedit 所建立的密碼!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
project Disk smbuser's project
IPC$ IPC IPC Service (This is vbird's samba server)
smb1 Disk Home Directories <==多了這玩意兒!
....(底下省略)....
```
由上表我們可以發現,經由不同的身份登入可以取得不一樣的瀏覽數據, 所以在使用上面需要特別留意喔!接下來,讓我們開始來自我掛載測試看看!
```
[root@www ~]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1
Password: <==確定是輸入正確的密碼喔!
# 此時 /home/smb1/ 與 /mnt 應該擁有相同的檔名才對!因為掛載嘛!
[root@www ~]# ll /home/smb1/.bashrc
-rw-r--r--. 1 smb1 smb1 124 May 30 23:46 /home/smb1/.bashrc <==確定有檔案
[root@www ~]# ls -a /mnt
# 卻看不到任何東西!應該是 SELinux 的問題吧!根據 /var/log/messages 的訊息,
# 進行如下的動作就能夠處理好這個程序!
[root@www ~]# setsebool -P samba_enable_home_dirs=1
[root@www ~]# ls -a /mnt
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
# 檔名出現啦!OKOK!這個使用者掛載處理完畢!
[root@www ~]# umount /mnt
```
自我測試是非常重要的!因為 Samba 是會對外提供服務的,因此 SELinux 會特別『關照』一下這個服務!包括默認用戶家目錄不會有開放的權限、預設的 SELinux type 不對就無法使用 (你可以自己嘗試掛載 //127.0.0.1/project 就知道啥原因啰!),所以,自行測試完畢就能夠理解哪個地方的 SELinux 沒有設定妥當!詳細的設定請到 [16.2.6 安全性設定](#security_selinux)去查閱。
**Tips:** 根據網友回報,因為之前我們設定的 security 是 share,而且已經使用 Windows 系統測試過,在同一部 Windows 系統上面重復測試時,會發生無法登入的情況。建議直接將 windows 系統重新啟動清除前一次登入的信息即可! ^\_^

- 4. 關于權限的再說明與累加其他分享資源的方式:
有的時候你會發現,明明在 smb.conf 當中已經設定了 writable 可寫入,使用者登入的身份也沒有問題, 為啥就是無法掛載或寫入呢?是否是服務器設定哪里還有問題啊?非也非也!主要的問題常常是來自于 Linux 文件系統的權限啦!
舉上面的例子來說,當你無法掛載卻發現 Linux 傳統權限是對的,那么肯定是 SELinux 出問題~這部份得要用 setsebool 與 chcon 或 restorecon 等指令來克服。另外就是,我們在 smb.conf 當中設定 \[project\] 為可寫入,亦即 /home/project 是可寫入的。假設 smb1 屬于 users 這個群組,因此以 smb1 登入 SAMBA 服務器后,對于 /home/project 應該是具有可以讀寫的能力的!但是,如果你以 root 的身份建立 /home/project 卻又忘記修改權限的話, 此時 /home/project 是無法讓 users 這個群組寫入的,因此 smb1 這個使用者當然不具有寫入的能力。 這樣說,了解鳥哥想要說啥了嗎?注意注意喔! ^\_^
那如果你還要擴充分享的目錄與能夠登入的使用者時,可以這樣做:
- 利用編輯 smb.conf 來開放其他的目錄資源,并且特別注意 Linux 在該目錄下的權限喔!請使用 chown 與 chmod 吧!
- 利用 pdbedit 來新增其他可用 Samba 的賬號,如果該賬號并沒有出現在 /etc/passwd 里面,請先以 useradd 新增該賬號;
- 不論進行完任何的設定,請先以 testparm 進行確認,之后以 /etc/init.d/{smb,nmb} restart 來重新啟動!
事實上,SAMBA 的一般用途就是在這個聯機的模式中!多使用 SAMBA 來分享你的資源吧!鳥哥都是使用 SAMBA 來做為遠程服務器與我的工作機互通有無的重要媒介說~
- - - - - -
### 16.2.5 設定成為打印機服務器 (CUPS 系統)
時至今日,打印機的網絡功能已經很強悍了!甚至也有支持無線網絡的打印機,因此每臺打印機都可以獨立作為各個 PC 的獨自的打印機,老實說也沒有必要進行 Samba 的網絡打印機服務器啦!但畢竟還是有些比較舊型的機種, 或者買不起有內建網絡的打印機時,那么 Samba 的打印機服務器還是有存在的價值啰。
在 Linux 底下進行打印的服務很多,不過我們這里要介紹的僅有目前較廣為流行的 CUPS (Common Unix Printing System) 這一個。 詳細的 CUPS 安裝設定方法我們已經在[基礎篇第三版第二十一章 CUPS](http://linux.vbird.org/linux_basic/0610hardware.php#cups) 當中提過,所以這里我們不再詳細說明,僅介紹大致的處理流程就是了。如果你需要較早期的 LPRng 打印系統的話, 建議可以參考底下的數據喔:
- 依瑪貓的打印文件:<http://www.imacat.idv.tw/tech/lnxprint.html>
- 鳥哥的 LPRng 簡介:[http://linux.vbird.org/linux\_server/0370samba/0370samba.php](http://linux.vbird.org/linux_server/0370samba/0370samba.php#server_printer_lprng)
**Tips:** 在這個小節中,鳥哥假設你的打印機并不是網絡打印機,而是使用 USB 接口連接的打印機格式。如果你的打印機真的有支持網絡, 那建議直接參考打印機手冊來設定即可,不需要安裝 Samba 打印機。因為某些廠牌的打印機網絡卡有特殊的功能, 例如 HP 的網卡通常還支持某些特殊的打印功能 (雙面、多頁打印等),這些功能透過伺服器重新分享時,可能會遺失!

- 0. 假設條件
既然要分享打印機,就得要有打印機啊!鳥哥使用對 Linux 支持度較高的 HP LaserJet P2015dn 這部打印機為例, 不使用網絡功能,單純使用 USB 連接到 Samba 服務器上。
- CUPS 連接到 USB 打印機,并且開放非本機的 IP 來源使用此打印機;
- 使用 CUPS 內建的打印機驅動程序;
- 前往 HP 打印機官網取得 Windows 操作系統的驅動程序;
- 1\. 安裝打印機與確定打印機的聯機正常
再次說明,并不是所有的打印機都被 Linux 所支持的,所以當你想要鏈接一部打印機到 Linux 系統上頭時, 請務必到 <http://www.openprinting.org/printers> 上頭去看看是否有被支持喔! 如果沒有被支持,那就換一部打印機吧!不要進行垂死的掙扎了...
如果你的打印機端口為使用 USB 或者是平行串行端口的話,那么當你連接上打印機后, 可以利用底下的方式測試看看是否成功的連接上了:
```
[root@www ~]# lsusb
Bus 001 Device 002: ID 03f0:3817 Hewlett-Packard LaserJet P2015 series
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[root@www ~]# ll /dev/usb/lp0
crw-rw----. 1 root lp 180, 0 Jul 29 13:55 /dev/usb/lp0
# 看得出來,已經有個 lp0 的打印機啰!測試打印一下吧!
[root@www ~]# echo "Hello printer" > /dev/usb/lp0
```
如果打印機有響應,這表示 OK 的啦!你可以進行底下的工作了。
- 2. 設定 CUPS 與打印機的聯機
預設 CUPS 都會開啟,不過,因為我們安裝的是『 basic server 』的模式,所以 CUPS 默認并沒有被安裝起來。 所以這里要安裝且重新設定與啟動才行。本章節 CUPS 的設定原則是這樣的:
- 我需要讓 192.168.100.0/24 這個網域可以使用打印機
- 我需要讓 192.168.100.0/24 及 127.0.0.0/8 可以管理 CUPS 系統
然后開始這樣做:
```
[root@www ~]# yum groupinstall "Print Server"
[root@www ~]# vim /etc/cups/cupsd.conf
# 1\. 讓監聽的接口開放在所有接口!
# Listen localhost:631 <==約在第 18 行左右,改成如下:
Listen 0.0.0.0:631
# 2\. 讓內部網域能夠進行 CUPS 的瀏覽與管控
<Location /> <==約在 32 行左右,新增能夠讓內網其他 IP 瀏覽者
Order allow,deny
Allow From 127.0.0.0/8
Allow From 192.168.100.0/24
</Location>
<Location /admin> <==約在 39 行左右,新增能夠管理 CUPS 者
Encryption Required <==因為這里的關系,所以可能會用 https://IP 喔!
Order allow,deny
Allow From 127.0.0.0/8
Allow From 192.168.100.0/24
</Location>
```
設定完畢后就可以開始來啟動 cups 系統,可以這樣做:
```
[root@www ~]# /etc/init.d/cups start
[root@www ~]# chkconfig cups on
[root@www ~]# netstat -tunlp | grep 'cups'
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 1851/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1851/cupsd
```
那個 631 的埠口就是 CUPS 所啟動的啦!要注意的是,開放界面得要給 0.0.0.0 才對呦!然后我們可以開始設定打印機了! 由于 CUPS 支持很多不同的打印機端口,每種端口都不一樣,常見的有:
- USB 端口: usb:/dev/usb/lp0
- 網絡打印機: ipp://ip/打印機型號
- 網絡芳鄰打印機: smb://user:password@host/printer
之所以要加上 192.168.100.0/24 可以控制服務器 CUPS 的原因在于...鳥哥的服務器沒有 X 窗口啦! 所以需要透過平時的工作機連上服務器才行啊!此時,將 CUPS 開放在區網內可以控制的功能就很重要啦! 此外,因為鳥哥的主機所在環境問題,這部 192.168.100.254 還有一個界面為 192.168.1.100,鳥哥在 cupsd.conf 里面也加入這個網段了 (上面的范例中并沒有特別強調),所以底下的圖示你會看到很多 192.168.1.100 的 IP ,不要害怕!那是正常的! ^\_^!好了,請打開瀏覽器,在網址列輸入: <https://192.168.100.254:631> (底下則是 192.168.1.100)

圖 16.2-1、用 CUPS 設定 USB 打印機
如上圖所示,由于我們使用的是 https 這個需要憑證的聯機模式,因此就會出現這個不受信任的網站訊息。 沒關系,你直接按下『我了解安全風險』后,再選擇『新增例外網站』即可出現如下圖示:

圖 16.2-2、用 CUPS 設定 USB 打印機
如果這部主機真的是你的,那么就選擇箭頭 2 所指的那個『永久儲存』吧!最后按下箭頭 3 所指的『確認安全例外』即可!如果一切順利,就會出現如下的 CUPS 設定圖示:

圖 16.2-3、用 CUPS 設定 USB 打印機
在上頭的歡迎圖示當中,由于我們是想要建立打印機,因此點選箭頭(1)所指的那個按鈕進入打印機功能,然后點選 (2)來建立打印機吧!

圖 16.2-4、用 CUPS 設定 USB 打印機
這一版比較有趣的地方,是會先讓你輸入賬號與密碼才進行后續的動作哩!所以這里請輸入 root 的帳密吧!

圖 16.2-5、用 CUPS 設定 USB 打印機
在上面的圖示中,你應該要選擇的是我們這部本機的 USB 打印機裝置才對。該裝置是由 HAL 服務所自動偵測到的, 如果你沒有看到任何 USB 的打印機,那可能就得要查詢一下打印機電源是否正確的開啟了! 點選他吧!

圖 16.2-6、用 CUPS 設定 USB 打印機
建立打印機時,最重要的是那個打印隊列 (上面方框中的第一個,名稱的那個玩意兒),在這里鳥哥使用 CUPS 預設幫我捉到的檔名。 這個名稱很重要,是未來分享出的打印機名字啰!至于位置與描述就隨便你填啰。由于我們是想要做成打印服務器,所以『share this printer 』當然要勾選!當你按下『繼續』后,就會出現如下圖示:

圖 16.2-7、用 CUPS 設定 USB 打印機
接下來 CUPS 會幫你選擇一個相對較佳的驅動程序,基本上,使用 CUPS 幫你捉到的預設驅動程序應該就 OK 了! 選完后請按下『加入打印機』按鈕吧!

圖 16.2-8、用 CUPS 設定 USB 打印機
看你還有沒有要修改其他的預設參數,如果沒有的話,就按下圖 16.2-8 的『Set Default Options』按鈕吧! 如果一切沒有問題,你的打印機就設定妥當了。如果想要查閱打印機的詳細信息,那可以點選 Printer 的項目!如下圖所示:

圖 16.2-9、用 CUPS 設定 USB 打印機
如果都正常沒問題,那么你的系統已經有一部打印機被 CUPS 所管理,且這部打印機在網絡的網址為:
- [http://服務器IP:631/printers/打印機隊列名稱](http://%E6%9C%8D%E5%8A%A1%E5%99%A8IP:631/printers/%E6%89%93%E5%8D%B0%E6%9C%BA%E9%98%9F%E5%88%97%E5%90%8D%E7%A7%B0)
- [http://192.168.100.254:631/printers/HP\_LaserJet\_P2015\_Series](http://192.168.100.254:631/printers/HP_LaserJet_P2015_Series)
接下來看看如何將它連結到咱們的 Samba 服務器中吧!
- 3. 在 smb.conf 當中加入打印機的支持 (Optional)
開始告訴 Samba 將這部打印機給他分享出去吧!你需要這樣處理:
```
[root@www ~]# vim /etc/samba/smb.conf
[global]
# 得要修改 load printers 的設定,然后新增幾個數據
load printers = yes
cups options = raw <==可支持來自 Windows 用戶的打印作業
printcap name = cups
printing = cups <==與上面這兩個在告知使用 CUPS 打印系統
[printers] <==打印機一定要寫 printers 喔!
comment = All Printers
path = /var/spool/samba<==預設把來自 samba 的打印作業暫時放置的隊列
browseable = no <==不被外人所瀏覽啦!有權限才可瀏覽
guest ok = no <==與底下兩個都不許訪客來源與寫入(非文件系統)
writable = no
printable = yes <==允許打印很重要的一項工作!
[root@www ~]# testparm <==若有錯誤,請自行處理一下
[root@www ~]# /etc/init.d/smb restart
[root@www ~]# /etc/init.d/nmb restart
```
基本上透過這樣的設定你的 Samba 就能夠順利的提供打印機的服務了!不過可惜的是,Windows 客戶端依舊得要安裝打印機的驅動程序才能夠使用 Samba 所提供的打印機,此時真是麻煩兼討厭啊~有沒有可能讓 Samba 主動的提供驅動程序給使用者,這樣一來客戶端就不需要額外去找驅動程序啰!是可以的,透過 Samba 3.x 即可處理!就這么巧, CentOS 的 Samba 就是 3.x 呢!所以我們可以透過底下的方式來處理。
- 4. 讓 Samba 主動提供驅動程序給 Windows 用戶使用
另外,或許你會想,打印機的型號這么多,那么 Linux 該如何提供這些打印機的驅動程序啊?豈不麻煩? 還好啦, CUPS 主要是透過利用 Postscript 的打印語言與打印機溝通的,因此客戶端只要取得 postscript 的驅動程序他們就能夠使用咱們的 Samba 服務器所提供的打印機了!如此一來, 不論打印機的型號為何,只要他們能夠支持 Postscript 的打印格式,OK 搞定!而且 CUPS 官網本身就有提供 CUPS 的 Postscript 驅動程序啰!可以到底下的連結去下載:
- 支持 CUPS 的軟件:<http://www.cups.org/software.php>
很棒的是,因為我們是 CentOS 6.x 有支持 rpm 軟件封裝的系統,因此可以直接下載 cups-windows-6.0-1.i386.rpm 這個檔案即可,直接安裝這個 rpm 檔案就能夠取得 cups 對 Windows 的打印機驅動程序了。 這個檔案安裝完畢之后,會將驅動程序放置于 /usr/share/cups/drivers/ 里頭呦! 不過你得要注意的是,除了這個驅動程序外,要支持 Windows 2000 以后出產的 Windows 版本, 你還得到 Windows XP 底下的目錄去下載幾個 32 位支持的檔案:
- Win XP 32 位:C:\\WINDOWS\\system32\\spool\\drivers\\w32x86\\3
將該目錄下里面的 PS 開頭的檔案通通下載下來,應該有四個檔案的,請將他復制成為檔名小寫的檔案,并且放置到你 Samba 服務器上的 /usr/share/cups/drivers/ 目錄下,該目錄內放置的這就是基本的驅動程序說! 在鳥哥的這個目錄底下至少含有這幾個檔案就是了:
```
[root@www ~]# ll /usr/share/cups/drivers
-rw-r--r-- 1 root root 803 4月 20 2006 cups6.inf
-rw-r--r-- 1 root root 72 4月 20 2006 cups6.ini
-rw-r--r-- 1 root root 12568 4月 20 2006 cupsps6.dll
-rw-r--r-- 1 root root 13672 4月 20 2006 cupsui6.dll <==上面為 cups 提供
-rw-r--r-- 1 root root 129024 3月 24 13:29 ps5ui.dll <==底下為 Win XP 提供
-rw-r--r-- 1 root root 455168 3月 24 13:29 pscript5.dll
-rw-r--r-- 1 root root 27568 3月 24 13:29 pscript.hlp
-rw-r--r-- 1 root root 792644 3月 24 13:29 pscript.ntf
```
上述的檔案鳥哥將他打包成為一個檔案了,你可以在底下的連結下載:
- [http://linux.vbird.org/linux\_server/0370samba/cups-samba-windowsxp.tgz](http://linux.vbird.org/linux_server/0370samba/cups-samba-windowsxp.tgz)
不過你得注意,這個檔案內的 Windows 數據是由 32 位的 Windows XP 上面捉來的,所以對于 Windows 98/ME 是沒有作用的。同時,對于 64 位的其他較晚期的 Windows 7 等系統可能就得要重新處理了! 你得自行上網查閱相關的數據下載方式喔。接下來我們必須要在 smb.conf 里面增加一筆新的分享數據,這個分享數據必須是 \[print$\] 名稱才行!有點類似這樣啦:
```
[root@www ~]# vim /etc/samba/smb.conf
[global]
....(設定保留原本數據)....
[homes]
....(設定保留原本數據)....
[printers]
....(設定保留原本數據)....
[print$]
comment = Printer drivers
path = /etc/samba/drivers <==存放打印機驅動程序的目錄
browseable = yes
guest ok = no
read only = yes
write list = root <==這個驅動程序的管理員
[project]
....(設定保留原本數據)....
[root@www ~]# mkdir /etc/samba/drivers
[root@www ~]# chcon -t samba_share_t /etc/samba/drivers
# 由于預設的 CUPS 僅有 root 能管理,因此我們以 root 作為打印機管理員;
# 同時 SELinux 的類型也要修訂如上的方式!那 root 就得要加入 samba 的支持才行:
[root@www ~]# pdbedit -a -u root
[root@www ~]# testparm <==測試語法
[root@www ~]# /etc/init.d/smb restart <==重新啟動
[root@www ~]# smbclient -L //127.0.0.1 -U root
Enter root's password: <==輸入 root 在 samba 的密碼先
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer drivers
project Disk smbuser's project
HP_LaserJet_P2015_Series Printer HP LaserJet P2015 Series
IPC$ IPC IPC Service (This is vbird's samba server)
root Disk Home Directories
# 瞧!有看到一部打印機以及驅動程序所在的分享數據啰!
```
現在我們要告知 Samba 說,我們的 CUPS 可提供 Windows 客戶端的驅動程序,所以用戶不需要自行設定他們的驅動程序哩! 要由 cups 告知 Samba 是由 cupsaddsmb 這個指令來搞定的,整個指令的執行很簡單的:
```
[root@www ~]# cupsaddsmb [-H SAMBA 服務器名] [-h CUPS 服務器名] \
> -a -v [-U 使用者賬號]
選項與參數:
-H :后續接的是 Samba 服務器名,本機的話可以直接用 localhost 即可;
-h :后續接的為 CUPS 的服務器名,同樣的可使用 localhost 即可;
-a :自動搜尋出所有可用的 CUPS 打印機;
-v :列出更多的信息;
-U :打印機管理員
# 利用前面的說明將打印機驅動程序掛上 SAMBA (注意 CUPS 管理員預設是 root)
[root@www ~]# cupsaddsmb -H localhost -U root -a -v
Password for root required to access localhost via SAMBA: <==root 在 SAMBA 密碼
# 這里會閃過很多的訊息,說明已經安裝了某些信息,底下鳥哥僅列出簡單的訊息而已。
Running command: smbclient //localhost/print$ -N -A /tmp/cupsbrdBaE -c 'mkdir
W32X86;put /tmp/cupsu13OSU W32X86/HP_LaserJet_P2015_Series.ppd;...
[root@www ~]# ll /etc/samba/drivers
drwxr-xr-x. 3 root root 4096 Jul 29 15:15 W32X86 <==這就是驅動程序目錄
```
最后在驅動程序的存放目錄會多出一個 W32X86 的目錄,你可以查詢一下該目錄的內容, 那就是預計要給客戶端使用的驅動程序啦!這樣就搞定了!不過,為了將所有的數據通通驅動, 建議你將 CUPS 及 SAMBA 通通重新啟動吧!
```
[root@www ~]# /etc/init.d/cups restart
[root@www ~]# /etc/init.d/smb restart
[root@www ~]# /etc/init.d/nmb restart
```
- 5. 一些問題的克服:
如果一切順利的話,你在 Windows 客戶端應該可以順利的連接到打印機啰! 開心吧!不過,如果你曾經印錯數據,那么該如何進入 Linux 的 Samba 主機將該數據移除呢? 你最好知道底下的幾個指令,關于這些指令的進階用法則請自行給他 man 看看了:
```
# 1\. 列出所有可用的打印機狀態
[root@www ~]# lpstat -a
HP_LaserJet_P2015_Series accepting requests since Fri 29 Jul 2011 02:55:28 PM CST
# 2\. 查詢目前默認打印機的的工作情況
[root@www ~]# lpq
hpljp2015dn 已就緒
沒有項目
# 列出打印機的工作,若有打印作業存在時 (例如關掉打印機再印測試頁),會如下所示:
hpljp2015dn 已就緒并正在打印
等級 擁有人 工作 檔案 總計 大小
active root 2 Test Page 17408 byte
# 3\. 刪除所有的工作項目喔!
[root@www ~]# lprm -
# 加上那個減號 (-) 代表移除所有等待中的打印作業!
```
打印作業就是這樣進行的啦!趕緊試看看吧!接下來探討一下相關的防火墻與安全性的討論!
- - - - - -
### 16.2.6 安全性的議題與管理
使用 SAMBA 其實是有一定程度的危險性的,這是因為很多網絡攻擊的蠕蟲、病毒、木馬就是透過網芳來攻擊的! 為了抵擋不必要的聯機,所以 CentOS 5.x 預設的 SELinux 已經關閉了很多 Samba 聯機的功能, 因此預設情況下,很多客戶端的掛載可能會有問題。此外,僅開放有權限的網域來源,以及透過 smb.conf 來管理特定的權限,也是很重要的!同時,Linux 文件系統的 r, w, x 權限也是需要注意的喔! 我們底下就簡單的介紹一下一些基本的安全性管理吧!
- SELinux 的相關議題:
其實就如同[第七章 (7.4.5)](http://linux.vbird.org/linux_server/0210network-secure.php#selinux_log) 里面提到的,我們透過登錄檔的內容就能夠知道如何解決 SELinux 對各個服務所造成的問題了。不過,既然我們知道服務是 Samba 了,能不能找出與 Samba 有關的 SELinux 規則呢?當然可以!基本的 Samba 規則主要有:
```
[root@www ~]# getsebool -a | grep samba
samba_domain_controller --> off <==PDC 時可能會用到
samba_enable_home_dirs --> off <==開放用戶使用家目錄
samba_export_all_ro --> off <==允許只讀文件系統的功能
samba_export_all_rw --> off <==允許讀寫文件系統的功能
samba_share_fusefs --> off
samba_share_nfs --> off
use_samba_home_dirs --> off <==類似用戶家目錄的開放!
virt_use_samba --> off
```
看吧!幾乎所有的規則默認都是關閉的!所以我們需要慢慢的打開啊!目前我們僅會用到用戶的家目錄以及分享成為可擦寫, 不過似乎僅要 samba\_enable\_home\_dirs 那個項目設定妥當即可喔!因此我們可以這樣做:
```
[root@www ~]# setsebool -P samba_enable_home_dirs=1
[root@www ~]# getsebool -a | grep samba_enable_home
samba_enable_home_dirs --> on
```
這樣用戶掛載他們的家目錄時 (例如 smb1 使用 //127.0.0.1/smb1/) 就不會出現無法掛載的怪問題了!此外, 由于分享成為 Samba 的目錄還需要有 samba\_share\_t 的類型。那我們還有分享 /home/project 還記得嗎?那個目錄也需要修訂喔! 這樣做看看:
```
[root@www ~]# ll -Zd /home/project
drwxrws---. root users unconfined_u:object_r:home_root_t:s0 /home/project
[root@www ~]# chcon -t samba_share_t /home/project
[root@www ~]# ll -Zd /home/project
drwxrws---. root users unconfined_u:object_r:samba_share_t:s0 /home/project
```
如果你分享的目錄不只是 Samba ,還包括 FTP 或者是其他的服務時,那可能就得要使用 public\_content\_t 這個大家都能夠讀取的類型才行!若你還有發現任何 SELinux 的問題,請依照 /var/log/messages 里面的信息去修訂吧!
- 防火墻議題:利用 iptables 來管理
最簡單的管理登入 SAMBA 的方法就是透過 iptables 啦!詳細的說明我們已經在[第九章防火墻](http://linux.vbird.org/linux_server/0250simple_firewall.php)中提過了,所以這里不再詳加說明。 要知道的是,如果你僅要針對底下的范圍開放 Samba 時,可以這樣想:
- 僅針對 192.168.100.0/24, 192.168.1.0/24 這兩個網域開放 SAMBA 使用權
- SAMBA 啟用的 port UDP: 137, 138 及 TCP: 139, 445;
所以 iptables.allow 規則當中應該要加入這幾項:
```
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
# 加入底下這幾行!
iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \
--dport 139,445 -j ACCEPT
iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \
--dport 139,445 -j ACCEPT
iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \
--dport 137,138 -j ACCEPT
iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \
--dport 137,138 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
```
這是很簡單很簡單的防火墻規則,你必須要依據你的環境自行修改 (通常修改那個 192.168.1.0/24 網段即可!)。 由于 smbd 及 nmbd 并不支持 TCP Wrappers ,所以你也只能透過 iptables 來控制了~
- 防火墻議題: 透過內建的 Samba 設定 (smb.conf)
事實上 Samba 已經有許多防火墻機制啦!那就是在 smb.conf 內的 hosts allow 及 hosts deny 這兩個參數。 通常我們只要使用 hosts allow 即可,那么沒有寫入這個設定項目的其他來源就會被拒絕聯機的!這是比較嚴格的設定。 舉例來說,如果你只想要讓本機、192.168.100.254, 192.168.100.10, 192.168.1.0/24 使用 SAMBA 而已,那么可以這樣寫:
```
[root@www ~]# vim /etc/samba/smb.conf
[global]
# 跟防火墻的議題有關的設定
hosts allow = 127\. 192.168.100.254 192.168.100.10 192.168.1.
[homes]
....保留原始設定....
[root@www ~]# testparm
[root@www ~]# /etc/init.d/smb restart
```
這個設定值的內容支持部分比對,因此 192.168.1.0/24 只要寫出前面三個 IP 段即可 (192.168.1.)。 如此一來不但只有數部主機可以登入我們的 SAMBA 服務器,而且設定值又簡單!不像 iptables 寫的落落長~ 鳥哥建議在防火墻議題方面,只要使用 iptables 或 hosts allow 其中一項即可,當中又以 hosts allow 較為建議唷! 當然啦,如果你是針對區網開放的,那么設定 iptables 防火墻反而是比較好的呦!因為不需要更動到 smb.conf 配置文件嘛!讓服務的設定變的比較單純些~
- 文件系統議題:利用 Quota 限制用戶磁盤使用
既然網芳是要分享文件系統給用戶的,那么想當然爾,各個 Samba 用戶們確實會將數據放置到你的 Samba 服務器上嘛! 那萬一單個用戶隨便上傳個數百 GB 的容量到你的 Samba 服務器,而且常常給你隨意存取一番, 會不會造成文件系統分配不公或者是帶寬方面的問題呢?想想就覺得是『會嘛!』那怎辦?就透過 Quota 磁盤配額啊! 磁盤配額我們在[基礎篇第三版第十五章](http://linux.vbird.org/linux_basic/0420quota.php)已經談過,在本書[第一章 (1.2.2-3)](http://linux.vbird.org/linux_server/0105beforeserver.php#server_os_3) 里面也已經有實作過, 在底下請你依據第一章的后續動作來處理吧!
例題:我們預計分配 smb1, smb2, smb3 在他們自己的家目錄下,各擁有 300MB/400MB (soft/hard) 的磁盤配額限量,那該如何做?答:請先依據第一章的 Quota (1.2.2-3) 相關數據處理完:
- /etc/fstab 加入 /home 掛載點的 usrquota,grpquota 等設定值;
- 重新掛載 /home ,讓 Quota 實際被支持;
- 以 quotacheck -avug 建立 Quota 的數據庫檔案;
- 啟動 Quota ;
假若你已經于第一章就處理完畢了,那么這一題就非常簡單喔!透過 edquota -u smb1 來處理即可!
```
[root@www ~]# edquota -u smb1
Disk quotas for user smb1 (uid 2004):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/server-myhome 0 300000 400000 0 0 0
[root@www ~]# edquota -p smb1 smb2
[root@www ~]# edquota -p smb1 smb3
[root@www ~]# repquota -ua
*** Report for user quotas on device /dev/mapper/server-myhome
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
smb1 -- 32 300000 400000 9 0 0
smb2 -- 32 300000 400000 8 0 0
smb3 -- 32 300000 400000 8 0 0
```
- - - - - -
### 16.2.7 主機安裝時的規劃與中文扇區掛載
現在你知道 Samba 服務器的功能是用來作為文件服務器的,每個使用者都可以擁有家目錄,并透過網芳的功能來鏈接到 Samba 服務器中。這就有個問題啦,那就是你的使用者如果太多,并且將他們的重要數據都放到這部 Samba 服務器上頭的話,那肯定 /home 未來會有點不足啊!所以 /home 所在的磁盤或許可以使用大一點的硬盤, 或者使用磁盤陣列,使用 [LVM (基礎學習篇第三版十五章)](http://linux.vbird.org/linux_basic/0420quota.php#lvm) 也是個不錯的方案。 底下為簡單的思考方向:
- 在安裝 Linux 的時候,建議不需要安裝 X Window ;
- 在規劃 Linux 時,/home 最好獨立出一個 partition ,而且硬盤空間最好能夠大一些;
- /home 獨立出來的 partition 可以單獨進行 quota 的作業,以規范用戶的最大硬盤用量;
- 無網卡的打印機 (USB) 可直接鏈接到 Linux 主機再透過 Samba 分享;
- 由于 SAMBA 一般來說都僅針對內部 (LAN) 主機進行開放,所以,可能的話 SAMBA 主機直接使用 private 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/sd[a-p][1-15] /mount/point
```
其中 iocharset 指的是本機的語系編碼方式, codepage 則與遠程軟件有關。因為我們是在本機進行掛載, 所以實際上使用 iocharset 這個參數即可啦!更多說明則請看下節的客戶端設定部分啰!
- - - - - -
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀