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
|
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 允許使用 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
|
|
encrypt passwords = yes
|
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 |
本設定可使用 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 |
|
domain master = 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 每一個 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 |
|
|
|
|
1. |
Windows 的使用者如果要使用
Samba 的資源,需同時在 Windows 和 samba
擁有相同的帳號與密碼。 |
|
2. |
smbd 對欲登入 Samba
的 Windows 使用者進行帳號密碼的驗證。 |
|
3. |
smbd 試圖到 Unix like
的系統密碼檔中找出是否有這樣的使用者。 |
|
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
|
Samba 的內定值是不分大小寫,所以這一段參數可以不要動。
|
client codepage = 950
|
非常重要的參數
# 將 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 指令是把 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
|
如果每一列最前面有 # 號,請去掉。
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 無法登入的問題 (當 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 建議您先備份原來的設定檔 |
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 |
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) |
教學組
(office,part1,part11) /home/office/admin/教務處/教學組 |
|
訓導處主任
(office,part2) |
生活教育組
(office,part1,part21) /home/office/admin/訓導處/生活教育組 |
|
|
總務處主任
(office,part3) |
事務組
(office,part1,part31) /home/office/admin/總務處/事務組 |
|
|
輔導室主任
(office,part4) |
輔導組
(office,part1,part41) /home/office/admin/輔導室/輔導組 |
|
各處室各組的目錄權限都是
750 (擁有人可讀寫執行、同群組的人可讀執行、其他人不可讀寫執行)
比如說設備組長是新人,username
是 becky,他必須加入 office、part1、part13 三個群組,
並成為設備組的擁有人:
|
vi /etc/group 將
becky 加入 office、part1、part13 三個群組 |
現在新任設備組長可完全掌控自己的設備組,並可看到同處室行政人員的計畫。
10.2
將密碼驗證改為 Samba 的 smbpasswd
驗證,以編碼傳送密碼,以提高安全性。
Ans:修改以下兩列:
encrypt
passwords = yes
smb passwd file = /etc/samba/smbpasswd 指定
smbpasswd 的位置
將系統的帳號密碼複製給 smbpasswd