samba 2.0.3.8 的安裝與設定
一、功能簡介
samba 是一支可以替代 Windows 網路芳鄰功能的程式,拿它來當 NT 的 PDC(Primary Domain Controller),用來當 File Server 的效能實在是沒話說,絕對不比 NT 差。更重要的是,它是免費的。有了 Samba,您不必擔心 多架了一部 NT Server 後,Client 端到底需要幾個工作站的 License 才夠。筆者曾按 NT 架設時的內定值 -- 每一伺服器,去算學校內該有的 License 數量。兩間電腦教室共 80 部 PC,一部 NT Server 時,需要 80 個 Licenses;兩部 NT Server 時,不是 80 個 Licenses(那是每一工作站,別傻了,廠商才不會送這種 License,貴得很),應該是 160 個 Licenses;各位網管人員,算算看您有多少部 NT Server 。啊......,趕快砍 NT吧!
目前筆者的學校,讓 User 以一組帳號密碼從 Windows 95/98 登入 Samba,利用它的網路芳鄰功能,在上面建立不同的網路磁碟機,可以同時處理學生成績、行政文件、撰寫個人網頁、收發 E-mail,一點也感覺不出它與 NT 有何差異,在家裡還可以上 FTP 抓成績資料回家處理,工作做完,再 FTP 回個人目錄,完全不必使用磁片錄來錄去的,夠方便吧!。
二、限制
以 RedHat 系統為例,它在作業系統架設好時,也跟著架設好了。但是,如果要合乎您的需求,就必須要修改它的設定檔。Samba 的設定檔蠻複雜的(筆者也不是很懂,還請大家多多指教),沒有花一些時間去 K 它,是不太容易駕馭的。相信辛苦是會有代價的,至少您不必擔心,哪天您所管理的電腦版權數不足,吃上官司。這也是筆者寫這一篇文件的目的 -- 推廣 Samba。 如果您沒有太多時間 K 設定檔也沒關係,把範例檔抓回去改一改吧!
在 Samba 實際運作的過程當中,我們常碰到一些登入正常,執行某些公用程式,卻無法正常運作的問題。在 NT 上,通常我們只要用滑鼠改一改使用者的權限就可以了。在 RedHat 上,可要稍微花一些時間去了解檔案權限的運作與管理方式,不要怪罪在 Samba 身上,它可是無辜的!
三、安裝前的準備工作
3.1、Download相關的說明檔與工具程式
3.1.1 取得檔案,並將所有檔案解壓縮到 /tmp。
cd /tmp fetch://vdn1.hmes.kh.edu.tw/sambatool.tar.gz 或 ftp vdn1.hmes.kh.edu.tw 放在 pub 下,檔名 sambatool.tar.gz tar xzvf sambatool.tar.gz |
3.2 檔案說明:
mkstuaccount.sh 可產生批次建立學生帳號的檔案
delstuaccount.sh 可產生批次刪除學生帳號的檔案
mkstulogon.sh 可產生批次拷貝學生個人登錄檔
sample.bat 學生的個人登入指令稿(Dos
的檔案)
student.txt 學生帳號
chpasswd-1.2.tar.gz
讓學生可以從瀏覽器自己改密碼的程式
html-enlish.h 上述程式的中文訊息
jang-smb.conf samba
的範例設定檔,由張宏明老師提供
samba.htm 本檔
mkaccount.htm 批次建立學生帳號,並使用 Samba
取代 NT 網路芳鄰,操作說明檔
3.3 以 root 身分簽入系統
四、安裝 Samba Server
如果您是架設 RedHat,應該在作業系統架設好時,Samba 也跟著架設好了,您可以跳過本小節,直接進行 smb.conf 設定檔的設定工作。以下是寫給重新安裝 Samba 或想手動安裝 Samba 的人參閱的。
4.0 以 root 身分簽入系統
4.1 取得檔案
上中山大學的 FTP 站 -- ftp.nsysu.edu.tw
放在 Linux/redhat-6.0/RedHat/RPMS/samba-2.0.3.8-i386.rpm
或 RedHat 6.0 光碟片上也有:
-r--r--r-- 1 mirror mirror 2372845 May 27 13:15 samba-2.0.3-8.i386.rpm |
4.2 安裝 samba
rpm -ivh samba-2.0.3.8.i386.rpm |
五、更改設定檔 smb.conf
5.0.1 請盡量用 vi 來編輯 smb.conf,因為有的地方一列超過 256
個字元,用 qe 編輯會有問題。
[vi
的使用說明]
5.0.2 smb.conf
有很多設定筆者還不太清楚,所以空在那裡,請各位先進不吝指教,謝謝!
5.1 一般而言, smb.conf 是放在 /etc
下。這是架設 Samba 最重要的工作。
smb.conf 設定檔分成兩大段:
1. 伺服器環境的建立 --> 以 [global] 開始。
2. 目錄的分享 --> 以 [homes] 或其他名稱開始。
要設定每一個分享的目錄,要給誰用,使用者的權限有多大,都在這裡設定。
[global]
workgroup = mysamba mysamba 是 Samba 的網域名稱,相當於 NT 的網域名稱。此網域名稱不可與機器名稱相同。
Server string = Samba Server %v 以後您在網路芳鄰上,看到的伺服器的說明文字為 Samba Server, %v表示Samba的版本。
;hosts allow = 163.18.225. 127. .hmes.kh.edu.tw 允許登入 Samba Server 的網域: 可以使用IP、網路號碼,及網域名稱;並以空格分開。 ^^^^
; printcap name = /etc/printcap
; load printers = yes設定是否啟用網路列表機。
load printers = yes 允許使用 Samba Server 上分享出來的 printer。
; printing = bsd
; guest account = guest 設定試用帳號的名字, 系統預設是nobody,安全性較高。
map to guest = Bad User 設定 登入帳號,如果不在Linux或Samba中, 則當作guest來看待!
log file = /var/log/samba/log.%m 設定 記錄檔 的所在路徑, %m代表來源的機器名稱。
max log size = 50 設定 記錄檔 的大小。
security = user 設定系統安全的等級 -- 使用哪一種密碼,來作為登入網域時的驗證密碼。
security = share 完全分享。
security = user 利用作業系統或Samba來驗證密碼(控管)。
security = server 或 domain 利用NT來驗證密碼(控管)。
; password server = <NT-Server-Name> 指定使用哪一部 NT Server 上的密碼,作為登入時驗證的密碼。
當 security = server 時,使用 NT 上的密碼作登入時的驗證工作時,才可設定本參數,
; password level = 8
; username level = 8
; encrypt passwords = yes
; smb passwd file = /etc/smbpasswdencrypt passwords -- 是 (yes)否 (no) 對密碼檔編碼。
smb passwd file -- 指定 samba 自己的密碼檔的路徑。
本列若 remark 起來,則使用 Server 的密碼檔,通常是 /etc/passwd (不編碼)、/etc/shadow (編碼)
; unix password sync = Yes
; passwd program = /usr/bin/passwd %u
; passwd chat = *Old*UNIX*password* %o\n *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*本設定可使用 win98 控制台中的密碼, 來改變密碼, 但須與上一項參數相配合!
username map = /etc/smbusers 將samba的帳號與作業系統帳號相對應
; include = /etc/smb.conf.%m 指定 smb.conf 的路徑, %m 是新的網路芳鄰上所看到的機器名稱
socket options = TCP_NODELAY 會加快速度,一定要打開此選項
; interfaces = 192.168.12.2/24 192.168.13.2/24 Samba 使用兩片以上的介面卡
; remote browse sync = 192.168.3.25 192.168.5.255
; remote announce = 192.168.1.255 192.168.2.44
domain master = yes
local master = no
os level = 33
domain logons = yesdomain master = yes 將 Samba 設為網域(NT網域)的主控者PDC。
local master = no 將 Samba 設為設定區域主控者
os level = 33 os level 從 0 到 255。
NT 的 os level 是 32、Windows 95/98 的 os level 是 1 還是 2 ?
若要 Samba當 PDC, os level 至少要 33,才可打敗 NT。
domain logons = yes 將 Samba設為登入伺服器(logon server)。
; preferred master = yes 同一網域內不可有兩個 OS 這樣設定,它們每 5 分鐘會搶主控權一次。
; domain controller = <NT-Domain-Controller-SMBName> 當網域中的 PDC 是 NT 時,需要設定 PDC 的機器名稱。
; logon script = %m.bat
logon script = %U.batlogon script = %U.bat 每一個 User 用自己的登入指令稿, %U為登入的使用者帳號。
logon script = %m.bat 每一部工作站使用一個登入指令搞。
若此列 remark,會使用 UNIX 的系統驗證 id & passwd
# 其路徑設定於下面的[logon]分享資料夾中
logon path = \\%L\%U\profiles 設定Win95/98/NT的個人環境參數檔路徑(個別化環境參數)。
logon drive = h: 設定登入帳號家目錄與NT對應的網路磁碟機代號。
logon home = "\\%L\%U" 設定登入帳號家目錄(home directory)的路徑。
寫法與windows網路磁碟機路徑一樣, %L表示主機名稱, %U表示帳號名稱
; name resolve order = wins lmhosts bcast
; wins support = yes
; wins server = w.x.y.z
; wins proxy = yes
dns proxy = no
; preserve case = no
; short preserve case = no
; default case = lower
; case sensitive = noSamba 的內定值是不分大小寫,所以這一段參數可以不要動。
client codepage = 950
valid chars = 33 35 36 37 38 39 40 41 45 48 49 50 51 52 53 54 55 56 57 64 97:65 98:66 99:67 100:68 101:69 102:70 103:71 104:72 105:73 106:74 107:75 108:76 109:77 110:78 111:79 112:80 113:81 114:82 115:83 116:84 117:85 118:86 119:87 120:88 121:89 122:90 94 95 96 123 125 126 127 255
coding system=cap非常重要的參數
# 將 samba 的字元編號(codepage)設成與win95中文版一樣(950)
# 並將中文與西文的字完編碼做差異對應(valid chars =...)
# 如此使用中文檔名才不會有問題。
從這裡開始,每一段代表一個分享目錄。
以下這段是設定每一位 user 登入 Samba
網域時,家目錄的環境設定。
[homes] 在網路芳鄰上看到的目錄名稱為 homes
comment = Home Directories 每一個分享出來目錄的簡短說明
path = /home/samba/* 該分享目錄在 RedHat 系統中的實際路徑
public = yes 是否提供給 guest 用
browseable = yes 在網路芳鄰上是否看得到
writable = yes 是否允許寫入
write list = @staff 允許使用的 user 帳號名冊,
create mask = 0644 建立(寫入)檔的的權限模式為0644(自己可讀寫,群組可讀,其他user可讀)
以下這段是設定登入指令稿(logon script)所在的目錄
[netlogon] 在網路芳鄰上看到的目錄名稱為 netlogon
comment = Network Logon Service 資料夾的說明文字
path = /home/samba/netlogon user 的個人登錄檔,存放在 RedHat系統中的實際路徑
guest ok = yes 試用帳號可以使用
writable = no 不可寫入
share modes = no 不是任何人均可使用
; write list = @admin 寫入的群組為admin(管理群組)
六、後續動作
6.1 建立個人帳號
6.1.1 最原始的方法是,用 adduser 指令一個一個增加。
6.1.2 全自動批次增加帳號 --
適合建立像學生帳號這種以號碼為代號,具有連續性的帳號。
因為狼主的網路實驗室有提供,筆者就不再贅述。
6.1.3 半自動批次增加帳號 --
適合建立像教師帳號,這種以英文名字為代號,不具連續性的帳號。
筆者也用這個方法來建教師和學生的帳號。請看說明。
6.2 重新啟動 samba
6.2.1
最簡單的方法就是,重新啟動系統嘛!但是會同時中斷其他服務,不好。
sync; sync; sync; reboot 或 sync; sync; sync; shutdown -r now |
sync 指令是把 cache 中的資料寫回硬碟(至少三次才保險),然後再下
reboot 指令重新啟動 server。
6.2.2 不重新啟動系統(RedHat),只重新啟動 samba server,建議使用。
samba restart |
6.2.3 每次重新開機均重新啟動 Samba -- 以 inetd
方式啟動,佔系統資源較小。
(這部 server 除 Samba 以外,還有很多其他服務)。
用 qe 編輯 services ,檢查以下幾列
qe /etc/services
netbios-ns 137/tcp |
如果每一列最前面有 # 號,請去掉。
6.2.4 每次重新開機均重新啟動 Samba -- 以 standalone
方式啟動,較佔系統資源,但速度較快。
(這部 server 的主要服務就是 Samba )。
用 qe 編輯 services ,將以下幾列加上 # 號。
qe /etc/services
netbios-ns 137/tcp |
用 qe 編輯 inetd.conf 和 rc.local ,加上以下幾列
qe /etc/inetd.conf
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd qe /etc/rc.d/rc.local echo "Starting Samba Server ......" |
6.3 解決 Windows 95 & 98 無法登入的問題 (很重要!!)
6.3.1手動修改登錄檔
Windows 98 若沒有修改登入檔,無法順利使用 samba
網路芳鄰的功能,Windows 95 則可以。
1. 執行 c:\windows\regedit.exe 去修改 Windows 95/98 的登錄檔
2. 在左視窗找到這個機碼 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
3. 新增 --> DWORD 值 --> EnablePlainTextPassword (左邊)
0x00000001 (右邊)
6.3.2自動修改登錄檔
將 /usr/doc/samba-2.0.?/docs 目錄下 Win95_PlainPassword.reg 和
Win9X-CacheHandling.reg
copy 到 win95 上,再執行這兩個檔案去修正登錄檔。
(Windows 98 要 copy 並執行
Win98_PlainPassword.reg 和 Win9X-CacheHandling.reg )
6.3.3重新開機。
七、範例檔執行環境概述
0. 檔名:jang-smb.conf,jang 設定的。
1. 作業系統: RedHat 6.0 + CLE 0.8 。
2. Samba 借用作業系統的帳號密碼來驗證登入者。
3. 作業系統的密碼編碼方式是自然編碼。
A. 不編碼的話,密碼就在 /etc/passwd 中,安全性最差。
B. 自然編碼的話,密碼不在 /etc/passwd,在 /etc/shadow
中。
C. 採 MD5
編碼安全性最佳,筆者在使用過程中有一些問題,所以沒採用。
D. samba
也可以採用自己的密碼檔,通常也都由系統的密碼檔轉過來,留給進階的網管人員用吧!
4. samba 當 PDC。
5. smb.conf 放在 /etc 下。
7.1 您可能需要改的地方
7.1.1 將範例檔拷貝到 /etc (假設您的 samba server 的設定檔在
/etc)
cp /etc/smb.conf /etc/smb.bak 建議您先備份原來的設定檔 cp jang-smb.conf /etc/smb.conf |
7.1.2 編輯 smb.conf
[global] 段
workgroup = 自己為 samba 取一個網域名稱吧!
這個網域名稱不可與 server
的機器名稱相同,否則會出現「參數無效的訊息」。
security = user 檢查一下您的編碼方式,如果要和我們家的
server 一樣,就改成自然編碼。
把 MD5 的編碼改為自然編碼。
/usr/sbin/setup
--> Authentication Configuration --> Run Tool
--> [ ] Enable MD5 Password
去掉 * 號
[netlogon] 段 在 /home/samba 要真的有 netlogon 這個目錄,如果需要
cd /home/samba mkdir netlogon chmod 644 netlogon chown root.root netlogon |
chmod 644 netlogon 這個目錄的權限是:擁有者可讀、寫;群組內的人及其他人則可讀
chown root.root netlogon 這個目錄的擁有者是 root,屬於 root
這個群組。
每一個登入者,都要有一個登入指令稿(.bat檔),且該檔的所有人必須為本人。
如果您要分享其他目錄,請參照 [score] 等分享夾。
八、注意事項
8.1 /etc 下有一個 smbusers
檔,裡面有兩段:
root = 這些帳號一律被視為 root,禁止登入 samba,您也可以把不歡迎的帳號放在此。
基於安全的理由,通常系統只准許 user以 telnet
登入後,再 su 成 root 身分。
guest = 這些帳號登入後,一律被視為 guest。