Samba 2.2.x 的安裝與設定

一、功能簡介

  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(那是「每一工作站」的算法,別傻了,88年擴大內需時廠商送的不是這種 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 身上,它可是無辜的!

  系統安裝環境:RedHat 7.1 英文版、Apache 1.3.19、

三、安裝前的準備工作
3.1、Download相關的說明檔與工具程式
3.1.1 取得檔案,並將所有檔案解壓縮到 /tmp。
 

cd /tmp
fetch://student.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-2.1.tar.gz 讓學生可以從瀏覽器自己改密碼的程式
 html       上述程式的中文訊息
 samba.htm    本檔
 mkaccount.htm  批次建立學生帳號,並使用 Samba 取代 NT 網路芳鄰,操作說明檔

3.3 以 root 身分簽入系統

四、安裝 Samba Server

  如果您是架設 RedHat,應該在作業系統架設好時,Samba 也跟著架設好了,您可以跳過本小節,直接進行 smb.conf 設定檔的設定工作。以下是寫給重新安裝 Samba 或想手動安裝 Samba 的人參閱的。

4.1 以 root 身分簽入系統

4.2 安裝 samba  

rpm -ivh samba-2.2.1a.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/smbpasswd

encrypt passwords -- 是 (yes)否 (no) 對密碼檔編碼;即以明碼/編碼傳送密碼。
smb passwd file -- 指定 samba 自己的密碼檔的路徑。
本列若 mark 起來,則使用 Server 的密碼檔,通常是 /etc/passwd (不編碼)、/etc/shadow (編碼)  
註:Samba 的密碼驗證方式有兩種:

1. 

內定是由作業系統進行密碼驗證,但必須使用明碼,其優點是只需維護一組密碼;缺點是安全性較低,密碼有可能被竊聽。另外,必須修改 Windows 登錄檔裡的設定,將 Windows 的密碼傳送方式改為明碼。 

2. 

由 Samba 自己進行密碼驗證,其優點是安全性較高,不必修改 Windows 登錄檔;缺點是必須另外建立 Samba 專用的密碼檔。

 

unix password sync = yes

當 OS 增加使用者時,會自動將該使用者的密碼加到 /etc/smbpasswd 內。

; 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 = yes

domain master = yes 將 Samba 設為網域(NT網域)的主控者PDC。
local master = no   將 Samba 設為設定區域主控者
os level = 33    os level 從 0 到 255。
         DOS ’Windows for Workgroup 和 Windows 95 的 os level =1
         Windows NT 3.51 Workstation 的 os level =16
         Windows NT 3.51 Server 的 os level =32
         Windows NT 4 Workstation 的 os level =17
         Windows NT 4 Server 的 os level =33

         Win2K server 的 os level =64
         若要 Samba當 PDC, os level 至少要 33,才可打敗 NT,成為區域網路的 PDC。
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.bat

logon script = %U.bat  每一個 User 用自己的登入指令稿, %U為登入的使用者帳號。
logon script = %m.bat  每一部工作站使用一個登入指令搞。
若此列 mark,會使用 UNIX 的系統驗證 id & passwd
# 其路徑設定於下面的[logon]分享資料夾中  

logon path = \\%L\%U\profiles

設定Win95/98/NT的個人環境參數檔路徑(個別化環境參數)。  

logon drive = h:

設定登入帳號家目錄與NT對應的網路磁碟機代號。    

logon home = "\\%L\profiles\%U"   這個例子是每一位 user 的 profiles 放在自己的家目錄中

設定登入帳號家目錄(home directory)的路徑。
寫法與windows網路磁碟機路徑一樣, %L表示主機名稱, %U表示帳號名稱  

 另一例子:logon home = "\\%L\home\samba\profiles\%U"   
  每一位 user 的 profiles 放在系統 /home/samba/profiles 的目錄中,在 [profiles] 分享夾中也要設定路徑。

add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u


解釋 add user script 參數前,先概述 smbd 運作的機制

1.

Windows 的使用者如果要使用 Samba 的資源,需同時在 Windows 和 samba 擁有相同的帳號與密碼。
  (這是指一般的網路連線,不是登入 Samba網域)
  (真的要登入Samba網域,反而不必開帳號,讓 server 驗證密碼即可)
 Windows 9x/ME 使用者只要以所需要的帳號與密碼登入 Windows 即可。
 Windows NT/2000 就必須先開帳號。

2.

 smbd 對欲登入 Samba 的 Windows 使用者進行帳號密碼的驗證。
 (驗證的密碼檔可能是 Windows server密碼檔、Unix like系統密碼檔、或 Samba 的 smbpasswd 密碼檔)。

3.

smbd 試圖到 Unix like 的系統密碼檔中找出是否有這樣的使用者。
 如果採用 Samba 的驗證密碼與系統帳號同步,那步驟2與步驟3就是同一件事。

4.

當 smbd 進行系統密碼檔驗證時找不到相對應的使用者,就會以 root 權限執行其後面的指令,而 %u 就是以該使用者的名稱進行。

add user script 參數的使用時機:
add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
上面這列參數在 Linux 裡可解讀為: smbd 對登入 samba 的使用者進行驗證,若系統帳號裡無使用者帳號時,就執行 useradd 指令,新增一位使用者。

; 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 = no

Samba 的內定值是不分大小寫,所以這一段參數可以不要動。
 

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 =...),Samba 2.2.1a 可以拿掉此參數
# 如此使用中文檔名才不會有問題。

從這裡開始,每一段代表一個分享目錄。

以下這段是設定每一位 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      不可寫入
browseable = no     在網路芳鄰上看不到
share modes = no     不是任何人均可使用
; write list = @admin    寫入的群組為admin(管理群組)
此分享夾的功用是:當所有的 user  個人登錄檔集中在一目錄管理。
[Profiles]

commet = Profiles for Win 95 & 98 & NT
path = /home/samba/profiles   指定該目錄
browseable = no
guest ok = no
writable = yes

六、後續動作

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,建議使用。

/etc/rc.d/xinit/smb restart

6.2.3 每次重新開機均重新啟動 Samba -- 以 inetd 方式啟動,佔系統資源較小。
   (這部 server 除 Samba 以外,還有很多其他服務)。
  用 qe 編輯 services ,檢查以下幾列

qe /etc/services

netbios-ns  137/tcp
netbios-ns  137/udp
netbios-dgm 138/tcp
netbios-dgm 138/udp
netbios-ssn  139/tcp
netbios-ssn  139/udp

  如果每一列最前面有 # 號,請去掉。

6.2.4 每次重新開機均重新啟動 Samba -- 以 standalone 方式啟動,較佔系統資源,但速度較快。
   (這部 server 的主要服務就是 Samba )。
  用 qe 編輯 services ,將以下幾列加上 # 號。

qe /etc/services

netbios-ns  137/tcp
netbios-ns  137/udp
netbios-dgm 138/tcp
netbios-dgm 138/udp
netbios-ssn  139/tcp
netbios-ssn  139/udp

   用 qe 編輯 inetd.conf 和 rc.local ,加上以下幾列

qe /etc/inetd.conf

netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dram udp wait root /usr/sbin/nmbd nmbd

qe /etc/rc.d/rc.local

echo "Starting Samba Server ......"
/usr/sbin/smbd -D
/usr/sbin/nmbd -D

6.3 解決 Windows 95 & 98 無法登入的問題 (當 Samba使用 Linux 系統帳號驗證,密碼不編碼時!)
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 (右邊)
  4. Windows 2000 Professional 版的改法:
   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters]
    "EnablePlainTextPassword"=dword:00000001

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 )
  (Windows 2000 Profesional 要 copy 並執行 Win2000_PlainPassword.reg 和 Win9X-CacheHandling.reg )

6.3.3重新開機。

6.4 讓 Windows 2000 professional / server(standalone) / XP professional 也可以像 95 / 98 /ME 一樣登入 Samba 網域

 

七、限制個人的使用空間  使用 quota

八、範例檔執行環境概述

  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 下。

8.1 您可能需要改的地方
8.1.1 將範例檔拷貝到 /etc (假設您的 samba server 的設定檔在 /etc)

cp /etc/smb.conf /etc/smb.bak   建議您先備份原來的設定檔
cp jang-smb.conf /etc/smb.conf

8.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] 等分享夾。

九、注意事項

9.1 /etc 下有一個 smbusers 檔,裡面有兩段:
  root = 這些帳號一律被視為 root,禁止登入 samba,您也可以把不歡迎的帳號放在此。
   基於安全的理由,通常系統只准許 user以 telnet 登入後,再 su 成 root 身分。

  guest = 這些帳號登入後,一律被視為 guest。
 

 十、FAQ

10.1 新加入一個行政人員,該如何設權限?
Ans:假設行政各單位所屬群組與目錄結構如下:

漢民國小各行政單位所屬群組與目錄結構示意圖

校長 (office)

教務處主任 (office,part1)
/home/office/admin/教務處

教學組 (office,part1,part11) /home/office/admin/教務處/教學組
註冊組 (office,part1,part12) /home/office/admin/教務處/註冊組
設備組 (office,part1,part13) /home/office/admin/教務處/設備組

訓導處主任 (office,part2)
/home/office/admin/訓導處

生活教育組 (office,part1,part21) /home/office/admin/訓導處/生活教育組
訓育組 (office,part1,part22) /home/office/admin/訓導處/訓育組
體育組 (office,part1,part23) /home/office/admin/訓導處/體育組
衛生組 (office,part1,part24) /home/office/admin/訓導處/衛生組
午餐執秘 (office,part1,part25) /home/office/admin/訓導處/午餐執秘

總務處主任 (office,part3)
/home/office/admin/總務處

事務組 (office,part1,part31) /home/office/admin/總務處/事務組
文書組 (office,part1,part32) /home/office/admin/總務處/文書組
出納組 (office,part1,part33) /home/office/admin/總務處/出納組
職員室總務 (office,part1,part34) /home/office/admin/總務處/職員室

輔導室主任 (office,part4)
/home/office/admin/輔導室

輔導組 (office,part1,part41) /home/office/admin/輔導室/輔導組
資料組 (office,part1,part42) /home/office/admin/輔導室/資料組
特教組 (office,part1,part43) /home/office/admin/輔導室/特教組

各處室各組的目錄權限都是 750 (擁有人可讀寫執行、同群組的人可讀執行、其他人不可讀寫執行)

比如說設備組長是新人,username 是 becky,他必須加入
office、part1、part13 三個群組,
並成為設備組的擁有人:

vi /etc/group    將 becky 加入 office、part1、part13 三個群組
chown -R becky.part13 /home/office/admin/教務處/設備組   becky 成為設備組的擁有人

現在新任設備組長可完全掌控自己的設備組,並可看到同處室行政人員的計畫。

10.2 將密碼驗證改為 Samba 的 smbpasswd 驗證,以編碼傳送密碼,以提高安全性。
Ans:修改以下兩列:
  encrypt passwords = yes
  smb passwd file = /etc/samba/smbpasswd  指定 smbpasswd 的位置

將系統的帳號密碼複製給 smbpasswd