[Power by FreeBSD]
顏國雄 2001/02 初
Samba && 網路芳鄰
2005/01/29 修改 
開放原始碼而且免費的 samba 可以讓 FreeBSD 和網路中的 MS Windows 電腦透過網路芳鄰結合在一起,貼心的系統管理者如果再將對映網路磁碟機的動作寫入 login script 中,對不會或是不習慣使用 FTP 的使用者來說,存取 FreeBSD 中的檔案和電腦中的其它檔案一樣方便。

如果想要有 Windows Server 登入的功能,samba 也可以扮演 PDC 的角色,一台硬體等級不高的機器馬上就可以變成效能不錯的 file server / print server。

1 安裝

目前 samba 主要分為 2.x 和 3.x 兩個版本,在 FreeBSD 的 ports tree 中分別為 /usr/ports/net/samba 和 /usr/ports/net/samba3,一般現在比較建議使用 samba3。

和安裝其它軟體一樣,在 FreeBSD 如果懶得自己重新編譯當然就用 packages 來安裝,至於以 ports 來編譯並安裝 samba3 ,如果已經有所需的 ports tree 就執行:

# cd /usr/ports/net/samba3
# make

接著會出現編譯選項的選擇對話方塊,可以依自己的需求選取,選好後就按 Tab 鍵將游標移到 [OK],然後按 Enter 鍵,接著就自動開始進行其它編譯的步驟,以後如果要重新選取編譯選項就執行 make config 重新設定。

如果一切進行順利,完成編譯的動作,我們可以執行下列指令來安裝:

# make install

 

2 設定

安裝完 samba 我們可以在 /usr/local/etc/ 中看到一個叫 smb.conf.default 的設定範例檔,參考這個範例檔的複本來修改即可,如果想知道更多的設定選項可以執行 man smb.conf 查看。

由於 FreeBSD ports 編譯的 samba 預設會讀取 /usr/local/etc/smb.conf 中的設定,所以我們先將設定範例拷貝成指定的檔名:

# cd /usr/local/etc
# cp smb.conf.default smb.conf
# chmod u+w smb.conf

然後我們就可以利用文字編輯器打開來修改囉!

# ee /usr/local/etc/smb.conf

smb.conf 中的每一行文字除了註解 (井字號 # 和分號 ; 開頭) 以外,有中括號的那行 (例如:[global]、[homes]、[printers] ...... ) 為 section 的起始點,以下的都是該 section 的參數設定值,例如:workgroup = xxxx 、 os = 33 、 path = /home/share ......。

簡單的說,在 samba 附的設定的範例中 [global] 到 [homes] 之間放的應該有關 samba 的 global 參數,而其它的通通是有關資源分享時的設定參數,包括:資源的實體路徑、權限......。

下面是一些常用的設定:

  • 基本設定
    • 網域/群組名稱:

      workgroup = CC

    • 主機說明(註解):

      server string = 教師網頁主機

    • 記錄檔路徑:

      log file = /var/log/samba/log.%m

    • 檔名編碼方式: 這部份和中文有關,要特別注意 samba 2.x 和 samba 3.x 的設定大不同
      • 2.x 版:

        client code page=950

      • 3.x 版:

        mangling method = hash
        dos charset = CP950
        unix charset = CP950
        display charset = CP950

  • 主機型態
    • 認證方式:
      • 以samba來認證(當PDC):

      security = user

      • 以別台PDC/AD來認證:

      security = server

      • 當網域中的獨立伺服器:
    • security = domain

    • 以 PDC/AD 主機上的帳號資訊來認證:

      password server = NTSERVER1
      (當 security= server 或 domain 時用,可配合 add user script 來自動新增本機帳號)

    • 編碼的密碼:

      encrypt passwords = yes (這樣可以不用改 clients 端)

    • 是否為主瀏覽器相關的設定:
      • os level (一般設 33 ,如果想當 PDC 就設為 65)
      • local master
      • domain master
      • preferred master
    • 要當 PDC 的相關設定
      • domain logons
      • logon script
    • 當時間伺服器提供網路對時:

      time server = True

  • 資源分享的設定
    • 資源
      • 資源說明/註解:

      comment = Network Logon Service

      • 分享目錄的真實路徑:
    • path = /home/samba/netlogon

    • 資源的權限設定
      • 可讀取的清單:

      valid users = @lsps1

      • 可否寫入:

      writeable = no

      • 可寫入的名單:

      write list = @teacher

      • 檔案建立時的權限遮罩:

      create mask = 0775

資源分享設定範例

[www]
   comment = 個人網頁資料夾
   path = %H/www
   browsealbe = yes
   writeable = yes

上面的例子定義了一個分享的資源叫 www,對映到的實體路徑到個人目錄中的 www 目錄 (%H/www),那個 %H 是在 smb.conf 可使用的替換變數之一,代表使用者的個人目錄 (HOME),這部份讓我們在設定時可以省去很多麻煩,值得好好的研究一下,常用的還有 %m、%u 、%g、%U、 %L,詳細的說明還是 man smb.conf 吧!

前面定義好了 www 這個資源分享,我們只要在指定為 login script 的批定檔中加入一行:

net use w: \\SambaServer\www

這樣,使用者在登入時即可連好網路磁碟機 W: ,以後網頁直接存取 W: 磁碟就好。

下面是幾個以前用在 samba 2.x 的設定檔,可以參考看看

 

3 samba 的啟動與停止

以 FreeBSD 的 ports/packages 安裝的 samba 在 /usr/local/etc/rc.d 目錄中應該會有個叫 samba.sh.sample 或是 samba.sh 的 script ,如果叫 samba.sh.sample 要先將它重新命名,改為 samba.sh,可以執行:

cd /usr/local/etc/rc.d
mv samba.sh.sample samba.sh

這樣在開機時才有可能自動啟動 samba。

有了 /usr/local/etc/rc.d/samba.sh 我們只要在後面再加上 start 或 stop 就可以啟動或停止 samba 的服務:

  • 啟動服務:
  • /usr/local/etc/rc.d/samba.sh start

  • 停止服務:

    /usr/local/etc/rc.d/samba.sh stop


咦∼為什麼執行上述指令好像沒有反應?!如果碰到這種情形可以觀察一下 samba.sh ,別忘了要在 /etc/rc.conf 中加入下面這行再執行 /usr/local/etc/rc.d/samba.sh:

samba_enable="YES"

這是自從 FreeBSD 引進了 NetBSD 的 rc.subr 後就必須要在 /etc/rc.conf 中多做的設定。

 

4 FAQ

Q:怎麼將 win2k/XP 加入 samba 的網域?

A:首先要先為要加入網域的 windows 機器在 server 上新增機器帳號,然後再依一般 windows 加入網域的程序加入 samba 網域。

  • 為 root 新增 samba 帳號

    當我們要加入 samba 網域時,在 windows 會詢問網域管理者的帳號、密碼,管理者即是 root ,密碼則是 root 在 samba 中的密碼,這部份在我們安裝完 samba 是沒有的,所以第一次使用時先為 root 新增 samba 的帳號,執行:

    # smbpasswd -a root

  • 新增機器帳號:

    假設 XP 的電腦名稱叫 pc3 ,要新增一個叫 pc3$ 的帳號 (多了個錢字號哦!),在 FreeBSD 中執行:

  • # pw useradd pc3$ -g machines -s /sbin/nologin -d /var/empty

上面的例子讓 pc3$ 這個帳號加入 machines 這個群組,shell 指定為 /sbin/nologin ,而 HOME 則指定在不存在的 /var/empty ,如果 machines 這個群組尚不存在,記得要先新增,執行:

    # pw groupadd machines

如果安裝的是 samba 3.x 以上,新增機器帳號的部份可以由 samba 自動完成,只要在 smb.conf 中指定新增機器帳號的指令即可,在 /usr/local/etc/smb.conf 中 global 加入下面這行:

    add machine script = /usr/sbin/pw useradd %u -g machines -s /sbin/nologin -d /nonexistent

有了 add machine script 以後要加入網域時 samba 會自動幫我們新增 xxx$ 的機器帳號。

Q:設定了 logon script 的檔名,為什登入時卻沒有執行批次檔中的內容?

A:在 MS Windows 的批次檔中一行只能放一個指令,而在 FreeBSD 中按 Enter 鍵和 MS Windows 按 Enter 鍵同樣都是換到下一樣,但是儲存的資料不一樣,FreeBSD 中按 Enter 鍵只產生 line feed,而在 MS Windows 中按 Enter 鍵則是產生 carriage return 和 line feed,會發生不執行批次檔內容的情形大都是在 FreeBSD 上編寫或修改批次檔或是由 MS Windows 透過 FTP 上傳時忘了將傳輸模式換成 binary 造成的,為了避免這種現象,我們可以將放 logon script 的資源 [netlogon] 設給屬於管理群組的使用者可以寫入(設定 wirte list),直接在 Windows 上透過網芳來編修。

[netlogon]
   comment = Network Logon Service
   path = /home/samba/netlogon
   guest ok = yes
   writeable = no
   share modes = no
   write list = @admin

別忘了,man smb.conf 很好用啦!!


 


 基礎: 書籤 - 簡介 - 安裝 - Slices - Unix基礎 - 基本指令 - 首次登入 - 目錄架構
 系統: 核心編譯 - 系統升級 - Packages - Ports - PicoBSD - Quota
 網路: 服務管理 - WWW - FTP - MAIL - DNS - Samba - NFS - DHCP - webmin - IMP - OpenWebmail
 其它: Backup - UPS - 系統安全 - ipfw&natd - 撥接服務 - 計時制ADSL - 雜記 - FAQ

北市文山區力行國小顏國雄