站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Samba-提升 Samba 為 PDC

前言

在 Microsoft Windows 系統內,我們可以使用 網路上的芳鄰 來查詢進而存取其他電腦分享出來的資源,而在 Unix-Like 系統中則利用 NFS 來分享彼此的資源,那 Windows 與 Unix-Like 系統間要如何分享彼此的資源呢? 答案就是利用 [Samba] 來達成這個目的了,而 [Samba] 甚至可成為 PDC 的角色哦 (例如此次實作的 Samba2.2.8a),讓我們來玩一玩 [Samba] 吧!!

實作環境

安裝及設定

步驟1.安裝 Samba 套件

切換至 Ports Tree 路徑安裝 Samba 套件

 #cd /usr/ports/net/samba                    //切換到安裝路徑 
 #make install clean                         //安裝套件並清除安裝中不必要的檔案 

安裝過程到一半時出現 Configuration Options 畫面時,此次實作選擇了 syslog、acl、quota、recyle 這四項功能如下:

步驟2.修改 Samba 設定檔 (smb.conf)

修改 Samba 設定檔 smb.conf,請複製預設的設定檔案更名後進行修改

 #cd /usr/local/etc                         //切換到預設檔案路徑  
 #cp smb.conf.default smb.conf              //將預設檔案複製一份為 smb.conf
 #vi smb.conf                               //修改 Samba 設定檔內容如下

Samba 設定檔 smb.conf 內容大約分為二大部份: 伺服器環境設定 (Global Settings)、使用者環境設定 (Share Definitions)

步驟2-1.伺服器環境設定 (Global Settings)

(1) 設定 Samba 的 NT 網域或工作群組

 #workgroup = NT-Domain-Name or Workgroup-Name, eg: REDHAT4       //註解
 #workgroup = MYGROUP                                             //預設值
 workgroup = WEITHENN                                             //修改後 (網域名稱為 weithenn)

(2) 設定 Samba 在網路芳鄰上所看到的伺服器說明文字

 #server string is the equivalent of the NT Description field     //註解
 #server string = Samba Server                                    //預設值
 server string = PDC                                              //修改後 (網域主控台叫 PDC)

(3) 設定試用帳號的名字

 #Uncomment this if you want a guest account, you must add this to /etc/passwd  
 #otherwise the user "nobody" is used                            //註解
 #guest account = pcguest                                        //預設值
 guest account = nobody                                          //修改後 (設定為 nobody 安全性較高)

(4) Samba 會將每個使用者存取到 Samba 的記錄存成 log.machine 的記錄檔

 #this tells Samba to use a separate log file for each machine that connects   //註解  
 log file = /var/log/log.%m                                      //預設值 (%m 指的就是 machine)

(5)設定 Log 檔最大為多少 Kb

 #Put a capping on the size of the log files (in Kb).           //註解 
 #max log size = 50                                             //預設值
 max log size = 500                                             //修改後 (指定 Log 為 500Kb)

(6)設定 Samba 成為 PDC 相關設定

 time server = yes                                              //Samba 伺服器也負責時間伺服器的服務 (自行視需求增加)
 username map = /home/samba/username.map                        //內容為將 root = administrator (自行視需求增加)
 unix password sync = yes                                       //當使用者的密碼改變時會自動更新到 Samba 的 smbpasswd (配合下列二行)
 passwd program = /usr/bin/passwd %u 
 passwd chat = *New*password* %n\n *Retype*new**password* %n\n *password*has*been*changed* 
 os level = 48                                                  //作業系統優先權,可設定值由 0 ~ 255 (Windows NT 為 32)
 security = user                                                //設定系統安全的等級,即當使用者要存取 Samba 所分享的資源時使用下列哪種方式來驗證密碼。
                           security = share                   //完全分享、只要有密碼來驗證
                           security = user                    //利用 Samba 來控管驗證密碼
                           security = server 或 domain         //利用 NT 來控管驗證密碼
 domain master = yes                                            //將 Samba 設為網域 (NT網域) 的主控者PDC
 domain logons = yes                                            //將 Samba 設為登入伺服器 (logon server)
 preferred master = yes                                         //設定 Samba 是否為 Primary Domain Controller (PDC) 的角色
 local master = yes                                             //設定 Samba 是否為 Local Master Browser (LMB) 的角色
 domain admin group = root @wheel                               //Domain Admin 的群組
 logon script = logon.bat                                       //Logon Script的名稱
 encrypt passwords = yes                                        //是否將密碼編碼
 add user script = /usr/local/sbin/addmachusr.sh %u             //用意再讓 Client Join Domain時 Samba 能自行產生 Machine Account
 client code page=950                                           //在網路芳鄰中能使用中文

步驟2-2.使用者環境設定 (Share Definitions)

(1)設定給登入的網域使用者logon script所在的目錄與屬性

 [netlogon]  
 comment = Network Logon Service                                //資料夾的說明文字 
 path = /home/samba/netlogon                                    //存放 Logon Script 的路徑 (自行指定)
 guest ok = no                                                  //若為 yes 則測試帳號可進入,no 為否則須進行身份驗證 
 writeable = no                                                 //是否可寫入 (no 為 read-only)
 share modes = no                                               //不是任何人都可使用,需經過任證
 write list = @wheel                                            //可執行寫入動作清單 (只有 wheel 群組)
 create mode = 664                                              //建立檔案時所給的權限 
 directory mode = 775                                           //建立目錄時所給的權限

(2)設定 Samba 分享目錄 (例如 公共區)

 [public]  
 comment = Public Stuff                                         //資料夾的說明文字 
 path = /home/samba/public                                      //存放要分享檔案的路徑 (自行指定)
 writeable = yes                                                //是否可寫入
 printable = no                                                 //是否允許列印
 create mode = 664                                              //建立檔案時所給的權限  
 directory mode = 775                                           //建立目錄時所給的權限 

步驟3.啟動 Samba 服務

在啟動 Samba 服務以前請先測試設定檔 smb.conf 中語法是否正確

 #testparm                                                      //測試看所更改的內容是否符合 Samba 的語法 
 #cd /usr/local/etc/rc.d                                        //切換路徑
 #cp samba.sh.sample samba.sh                                   //將 Samba 的預設執行檔複製一份並叫為 samba.sh
 #/usr/local/etc/rc.d/samba.sh                                  //啟動 Samba 服務
 #ps ax                                                         //查看系統的執行序,若 Samba 正確執行的話應可看到如下二行 (smbd、nmbd) 服務
 /usr/local/sbin/smbd -D                                        //smbd 服務用來處理檔案分享和列印分享服務
 /usr/local/sbin/nmbd -D                                        //nmbd 服務用來處理 wins 名稱解析服務及 NT Browser Service(即網路芳鄰功能)

步驟4.建立 Script (addmachusr.sh)

建立 Windows Client 要加入 Samba 所建立網域的 Script (建立電腦帳戶及使用者帳戶於 PDC 中),新增一個群組 MACHINE (自行決定)、及新增帳號 (client 要登入網域的帳號)、client 要如何加入 domain 的步驟及方法 (有些還需要上機碼) 參考網址[讓Win2k pro/svr/xp-pro 登入 Samba 網域]

 #cd /usr/local/sbin                                            //切換路徑
 #vi addmachusr.sh                                              //編輯 addmachusr.sh 內容如下 (執行指令並將結果寫入 addmach.log)
 #!/bin/sh
 /usr/sbin/pw useradd $1 -w no -c MACHINE -d /dev/null -g 30000 -i 32000,32767  -s /sbin/nologin >> /var/log/addmach.log 2>&1

步驟5.建立登入 Batch File (logon.bat)

Samba 建立 PDC 完成後我們可建立 Logon Batch File 讓 Windows Client 登入時會執行相關指定動作 (例如 掛載分享磁碟機)

 NET TIME \\pdc/SET /YES                                       //與 Samba 伺服器對時 (因為我的 Samba 有安裝 NTP Server)
 NET USE L: \\pdc\%USERNAME%                                   //連到自已的家目錄 (網路磁碟機)
 NET USE P: \\pdc\public                                       //連到 Public 的分享磁碟 (網路磁碟機)
 REM pause

參考

[ 讓Windows 2000登入Samba]

[ 伺服器安裝與設定 - Samba Server]

[ How to Configure Samba 2.2 as a Primary Domain Controller]

[ The Samba 2.2 PDC FAQ Translation]

[非官方 Samba HOWTO]

Me FAQ

Q.無法加入 Domain,提供的證件與現有的證件組衝突?

Error Meaage:

當加入網域時輸入 domainadmin 的帳號及密碼後出現如下圖錯誤?

無法加入網域

Ans:

原因在於此台電腦已經跟 Samba as PDC 那台有連線了,利用 net use 把跟 PDC 的連線給中斷吧,下圖的 PDC 名稱為 dc01。

net use delete

Q.無法加入 Domain,指定的使用者不存在?

Error Meaage:

當加入網域時輸入domainadmin的帳號及密碼後出現如下圖錯誤?

無法加入網域

Ans:

原因可能在於 Samba 帳號名稱重覆了,因為之前加過帳號後來機器重灌要加入網域時便出現上圖的錯誤,把 Samba 帳號砍掉應該就可順利加入網域了

 #smbpasswd -x backup                         //刪除叫 backup 的 Samba 帳號
 Deleted user backup.

Q.無法加入網域 DNS 對應問題?

Error Meaage:

當要加入 Domain 時卻出現如下圖說 DNS 對應有問題?

DNS 對應有問題

Ans:

請啟動 NetBIOS 功能,就可順利加入 Domain

啟動 NetBIOS 功能

Q.發生 read_fd_with_timeout client 0.0.0.0 read error Socket is not connected 錯誤訊息?

Error Meaage:

服務運作後在 Log 出現如下錯誤訊息?

 smbd[19813]: read_fd_with_timeout: client 0.0.0.0 read error = Socket is not connected.
 smbd[19813]: getpeername failed. Error was Socket is not connected
 smbd[19813]: [2011/07/01 10:53:07.629907, 0] lib/util_sock.c:1432(get_peer_addr_internal)
 smbd[19813]: [2011/07/01 10:53:07.629808, 0] lib/util_sock.c:474(read_fd_with_timeout)

Ans:

找到這篇 [Samba - getpeername,socket,write_data error - The FreeBSD Forums] 後在 smb.conf 中的 Global Configuration 區段加上 smb ports = 139 後重新啟動 Samba 服務,之後就沒有再出現此錯誤訊息了,至於此參數的意義可以參考 [smb.conf - The configuration file for the Samba suite]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com