Samba 設定

目錄 

  網路芳鄰 linux 版 -- LinNeighborhood

  網路芳鄰 KDE 版 --lisa

  用 Browser 管理 Samba


Windows 最令人感到方便的特色莫過於『網路上的芳鄰』的檔案分享功能,有了這項功能後,使得區域網路裡資料的傳遞與分享得以落實。以往在 Linux 的世界裡其實也有 NFS 可以在 Unix Like 的作業系統下做檔案分享,但是與 Windows 作業環境的整合還是缺乏溝通的橋樑。

Samba Server 建立了 Linux 與 Windows 環境的溝通管道,也可以做為Print Server提供Windows 遠端連線列印;若是使用 Samba Server 搭配 Apache Web Server,可在 Windows 環境下藉由『網路上的芳鄰』登入 Linux 主機裡使用者的個人帳號放置網頁目錄(當然是在區域網路內才行),有了這項功能,編輯個人網頁就如同在本機操作一般方便。除此之外,Samba Server 也可以完全取代 NT/2000 PDC(Primary Domain Controler)成為 NT/2000 網域主控者管理 NT/2000 網域機群,當然,Samba 也可以將目錄、檔案分享給其他 Unix Like、Mac、OS/2 的機器使用,應用層面可以說是相當廣闊,更令人驚訝的是 Samba Server 也可做為WINS Server,若配合 DHCP Server 更可以管理大型 NT/2000 網域,想想!這個集合眾多優點的伺服器,是不是會對不同機種的作業系統工作環境在整合上有著極大的助益呢?

Samba 可以定位為一套功能極為強大的檔案伺服器軟體,所謂檔案伺服器就是將檔案伺服主機上的目錄分享出來,讓您可以透過網路對分享出來的目錄裡的檔案,做執行、讀取、寫入等動作。基本上 NT/2000 的網域是使用 NetBEUI 做電腦命名服務,使用廣播封包來偵測網路上有哪些電腦、哪些目錄提供資源分享,而 Samba 與UNIX主機間的溝通(如目錄、檔案分享)是透過 TCP/IP 協定達成任務,Samba 若要與NT網域做溝通,透過TCP/IP當然是行不通的,只好使用 NetBIOS 對NT網域做廣播,讓 Windows 機器能夠認識它,進而成為NT網域成員;因此 Samba 是使用 smbd Daemon 透過 TCP/IP 聯繫 Unix Like 主機,而使用 nmbd Daemon 透過 NetBIOS 對 NT/2000 網域做聯繫,也就是說 Samba 使用兩種機制達成資源分享的目的。

註:smbd Daemon主要用來處理檔案分享和列印分享服務;nmbd Daemon則用來處理WINS 名稱解析服務及NT Browser Service(即網路上的芳鄰)。

要使用 Samba Server 相當容易,在安裝好 Redhat 後,只要設定好工作群組,啟動Samba Server 後就可以正常運作,您可以立即在 Windows 下的『網路上的芳鄰』裡看到執行Samba服務的Linux 主機名稱。

samba-*1ssl
samba-common-*ssl
samba-client-*ssl(samba 所需要的套件,請隨時更新!!)

想讓開機自動啟動 samba 嗎?

#chkconfig smb on

或是手動啟動

#/etc/rc.d/init.d/smb start

以上是 samba 的簡單設定,接著介紹 samba 的設定及其他應用

當安裝完 samba 套件後,也立即擁有以下的 samba 工具:

  1. smbclient:利用這個工具可連接其他 Unix like 的 Samba Server,或是連接 Windows 機器,以取得檔案分享服務。
  2. testparm :這個工具可讓您測試 smb.conf 組態檔定義是否正確。
  3. testprns :這個工具可讓您測試定義在 printcap 檔裡的列表機。
  4. smbstatus:這個工具可用來顯示目前 client 端連接到 Samba Server 的連線狀況。
  5. nmblookup:這個工具可使用 NT/2000 網域內的主機名稱查詢出對應的 IP 位址。
  6. smbpasswd:這個工具可用來建立、變更登入到 Samba server 的加密密碼。
  7. swat:這個工具讓您可使用 web介面(如:IE、Netscape)對Samba Server做組態設定。

 

先確定在 /etc/services 檔案裡面這些句子沒有被註解掉﹕

netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp

然後是建立 /etc/lmhosts 檔案(如果它不存在的話)﹐建立起各主機的對應。我們只需將 MS Winndows 主機對應建立起來則可﹐但一定要包括作為 SAMBA 伺服器的 Linux 主機本身﹕

vi /etc/lmhosts

192.168.0.117 redhat52
192.168.0.115 PII266
192.168.0.112 nt4ser2
192.168.0.122 redhat62
192.168.0.116 w2000ad 

然後是修改 /etc/samba/smb.conf 這個檔案

設定Samba的組態檔最基本可分為三個階段:Server基本設定、使用者home目錄的設定、目錄分享設定。至於「共用列表機設定」則是當您有需要時再做設定。若是在Samba 的組態設定檔/etc/samba/smb.conf檔裡做設定,則是針對[global]、[homes]、[分享目錄]三大項目做設定。

vi /etc/samba/smb.conf

[global]項目裡設定如下:

[global]
  workgroup = MYGROUP ;不分大小寫
  unix password sync = Yes?
  ; 設定 Linux 與 samba 使用相同的密碼
  domain master = yes
  ; 設定 samba 成為 PDC (網域主控者),注意:若是將Samba設定為獨立伺服器,則無須設定此項。
  client code page = 950
  ;如果想使用者能看到中文檔案名稱﹐可以將這行加進 [global] 設定中
  ;security = user ; Standalone Server
  ;security = domain ; 加入 domain
  ;case sensitive = no ; 不分大小寫


share 區段

[homes]
  valid users = john,mary,@student ; 允許 john,mary跟 student 這個 group
  ; invalid user = ... ; 不允許
  browseable = yes
  writable = yes
  public = yes
  write list = @staff
  ; create mode = 0755 ; 新增檔案的屬性
  ; directory mode = 0755 ; 新增目錄的屬性
  ; samba 內定帳號擁有者可對帳號目錄做讀寫動作,若想讓某些使用者也有權利對此目錄做寫入動作時,請在「Users」標籤的「write list」欄位裡輸入其他使用者名稱,如:abc、test、working。

[cdrom]
  comment
  path = /mnt/cdrom
  guest ok = yes
  root preexec = /bin/sh -c 'mount -t iso9660 /dev/cdrom mnt/cdrom'
  root postexec = /bin/sh 'umount /mnt/cdrom'

所謂的使用者home目錄是指,以使用者帳號登入 Samba Server 後個人所擁有的帳號目錄,如:以帳號 root 登入後,內定的個人目錄是 /root。一般而言,對「使用者home目錄的設定」著重於是否將此個人目錄分享出來及設定存取的權限,其餘項目大抵上是無需設定。

注意:若您選擇了「Public access」、「Writable」兩個選項,並不代表所有的使用者皆有權利對您所分享的home目錄下的檔案具有寫入權,還得視檔案原來在Linux下的權限設定,例如,檔案權限為rwxr-xr-x(chmod 755),表示只有擁有者具可寫入權,此點務必留意。

[works]
comment = share works
browseable = yes
path = /works
public = yes
writable = yes

目錄分享設定

使用 Samba 最大的用途當然是將特定的目錄分享出去,分享目錄的原則不外乎是讀寫權限及分享對象,把握此原則就可很迅速的設定好分享目錄

testparm 來測試一下smb.conf的語法是否正確,或是使用 smbclient -L (computer_name)

重新啟動 SAMBA 

/etc/rc.d/init.d/smb restart 


將 Samba 做為WINS Server

Samba 最大的功用除了做 file Server 外,還可以做 WINS Server。Wins Server最大的好處是可在 NT/2000 網域內做名稱解析,傳統上在 Internet 上做 FQDN(Full Quality Domain Name)與 IP address 之間的轉換是藉由 DNS 做解析,但在區域網路裡尤其是 NT/2000 網域,當您使用 NT/2000 的 WINS Server 與 NT/2000 的 DNS 做配搭時,假設有一台主機名稱叫做 abc,所屬領域是 test.com.tw,IP位址是192.168.0.229,目前此部主機尚未在 DNS 上註冊,但是在DNS 上啟動正反查都可藉由 WINS 解析,當您使用 nslookup 查詢 abc 主機時,您會發現可解析出 192.168.0.229,並且觀察 DNS 上正查區域內,DNS自動將 abc 以A資源紀錄指定 IP 192.168.0.229,而反查區域內,DNS 自動將229.0.168.192.in-addr.arpa 指到 abc.test.com.tw,這就是 WINS 的好處。

以往在 NT/2000 網域內使用 DNS+WINS Server 可免去在 DNS 上登錄主機記錄,若再搭配 DHCP Server 那麼連 Client 端主機的 IP 也免輸入,一切由 DHCP Server分配動態 IP ,再由 DNS+WINS Server 自動登錄主機 FQDN 與 IP 解析關係,這個簡單、易用組織網域的方法,如今也可以由 DNS+Linux下的Samba+Linux下的DHCP來取代,因為 Samba 可擔任 WINS Server 或指定 WINS Server做網域名稱解析。假設目前欲做 WINS + DHCP 的 Linux主機IP為192.168.0.229,其設定方式如下:

  1. 首先確定已啟動 DNS Server,並且在 DNS 裡啟用正、反查皆可透過 WINS 做解析。

以下設定Samba為Wins Server

wins server = 192.168.0.229

設定完成後,可使用 nmblookup 查詢名稱解析,假設目前有一主機其名稱為 abc,使用動態分配 IP 連線,所配得的IP位址是192.168.0.100,那麼當您使用nmblookup asp做名稱查詢時,則出現下列畫面:

[root@abc testing]# nmblookup abc
192.168.1.100 abc<00>

當然,使用 DNS + DHCP + WINS 除了可分配動態 IP 外,『網路上的芳鄰』、區域內主機 FQDN 與 IP 的對應關係皆可正常運作。


Samba 除了可做為 File Server、Wins Server 外,還可做為 Printer Server,設定方法其為簡單:

  1. 首先使用 Redhat 的print tool,列表機類型設定使用本機列表機。
  2. # linuxconf。
  3. 按一下「Config」、「Networking」、「Server tasks」。
  4. 按一下「Samba file server」、「Default setup for printers」。
  5. 選擇 [X] This share is enable選項,可做列印分享。
  6. 若選擇 [X] Public access選項,任何人皆可使用此部Printer Server,不限定只有擁有登入Samba帳號使用者。

接下來設定win95/98/NT Client端

  1. 在桌面上按兩下「我的電腦」、「印表機」、「新增印表機」。
  2. 選擇「網路印表機」、「下一步」。
  3. 出現「網路佇列或路徑名稱」對話窗後,請使用「瀏覽」鈕挑選Samba Server所分享出來的列印服務,如:\\abc\lp。
  1. 接著設定列表機的驅動程式後,即可大功告成。

您會發現有了 Samba 後,NT/2000 所具備的優點似乎皆被取代了!


Samba存取控制

NT/2000 對分享出的目錄可針對特定群組、使用者做權限管理,同樣的,Samba 也能做到,並且能夠更精細的權限管理。在 Samba 裡對於目錄的管理可區分為『使用者帳號目錄』與『共享目錄』,『使用者帳號目錄』是在 Samba 的「Defaults」項目裡做設定,『共享目錄』則是在Samba的「Disk shares」項目裡做設定,其設定方式是不一樣的。

首先就以「Defaults」項目為例,說明如何做Samba存取控制:

  1. 若要針對登入 Samba 的來源主機做允許登入Samba主機,請在Allow hosts欄裡輸入來源主機,如:
    192.168.0.0/255.255.255.0 ;表示允許192.168.0. class C登入Samba。
    abc,test,working ;表示允許此三部主機登入 Samba。
    @mygroup ;表示允許mygroup群組內的成員登入Samba。
  2. 若要針對登入 Samba 的來源主機做不允許登入 Samba 主機,請在 Deny hosts欄裡輸入來源主機,如:
    192.168.0.25 ;表示不允許此部主機登入 Samba。
    cracker,badboy ;表示不允許此兩部主機登入 Samba。
    @mygroup ;表示不允許這個工作群組成員登入 Samba。

再以「Disk shares」項目為例,說明如何做 Samba 存取控制:

  1. Allow hosts欄、Deny hosts欄的設定方式與上述相同。
  2. 「User list」欄可用來設定哪些使用者可使用分享目錄,例如:
    aaa,bbb,ccc,ddd,root ;表示此五個帳號可使用分享目錄。
    @cracker ;表示屬於 cracker 群組的帳號可使用分享目錄。
    @cracker,abc ;表示 cracker 群組成員及 abc 可使用分享目錄。
  3. 「Write list」欄可用來設定哪些使用者具有寫入權,例如:
    aaa,bbb,root ;表示此三個帳號具有寫入權。
    @cracker ;表示屬於 cracker 群組的帳號具有寫入權。
    @cracker,abc ;表示 cracker 群組成員及 abc 具有寫入權。
  4. 「Valid users」欄可用來設定哪些使用者可登入 Samba,例如:
    aaa,bbb,root ;表示此三個帳號登入Samba。
    @cracker ;表示屬於 cracker 群組的帳號登入Samba。
    @cracker,abc ;表示 cracker 群組成員及 abc 登入Samba。
  5. 「Max. connections」欄可用來設定此分享目錄的最大連線數量,例如:10。內定值是0,表示沒有連線限制。

Samba Client

Samba 除了提供 Server 方面的服務外,也可以充當 Samba Client 端登入其他Samba Server 或 Windows 所分享出來的目錄,要享用這些網路上的分享資源並不難,用法如下:

mount -t smbfs -o username=test,password=test //abc/test /data/test

結果就跟網路芳鄰一樣,別人(//abc/test)的目錄就如同是本機的(/data/test)!!

網路芳鄰 linux 版 -- LinNeighborhood

上述指令是利用文字模式下 mount 指令達成的,那麼在 XWindow 下是否可以像網路芳鄰一樣的操作呢??當然可以,這裡介紹 LinNeighborhood 

原始網站 : http://www.bnro.de/~schmidjo/

下載網址 : http://milkyway.thn.htu.se/~ds98rito/

下載之後就直接安裝

rpm -ivh LinNeighborhood-0.6.3-1.i386.rpm

若是 GNOME ,則按左下角的大腳 --> "程式" --> "應用程式" --> "LinNeighborhood" 或者是從 xterm (終端視窗模式下) 執行 LinNeighborhood & (有分大小寫)

第一次執行的話要先設定 "Options" --> "Preferences" ,設定要登入的 Windows 工作群組

然後在本機的圖示上按滑鼠右鍵,執行 "rescan group",重新搜尋工作群組

然後找到其他 Windows 的機器名稱,按滑鼠右鍵,執行 "mount"

設定要 mount 到 Linux 上的 path ,就大功告成了!!


 

網路芳鄰 KDE 版 --lisa ( 以 RedHat 7.3 + Windows 2000 Professional 為例 )

如果您不想另外再安裝 LinNeighborhood , 那也可以用 lisa 來搞定!!不過得用 KDE 才行!!

1.先啟動 KDE 的控制中心-->網路-->Windows資源分享,設定相關的帳號及密碼,以及是否"顯示隱藏分享"

2.然後設定"區域網路瀏覽"-->"LISa daemon",將要 scan 及 trust 的電腦輸入

3.另外設定 "ResLISa daemon",也是輸入 trust 的電腦

4.然後要先執行 lisa ,就可以用 KDE 的檔案總管--Konqueror 來瀏覽了!!

小編認為 KDE 整合圖形介面的火侯實在已經爐火純菁,建議大家可以試試,畢竟 Windows 佔據 Desktop 市場已是既定事實,那麼將 Linux 與 Windows 密切的整合,對於 Linux 的作業也有很大的幫助的!!

 


檢測 Samba 連線狀態

若想要知道目前 Samba 的連線狀態,可以使用 smbstatus 工具

[root@vm_cle samba]# smbstatus

Samba version 2.0.7
Service uid     gid     pid  machine
----------------------------------------------
abc1234 abc1234 abc1234 1240 abcedf (192.168.0.229) Sun May 6 17:01:09 2001

No locked files

Share mode memory usage (bytes):
1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total


另外要注意 /etc/hosts 裡,是否有加入以下內容:

IP    hosts_name

如果沒有加入上面那一行, /etc/rc.d/init.d/smb start 時都是 [ OK ] ,但是其實都沒啟動,可以檢查 /var/log/samba/* ,看看 log 訊息就知道了!!


Samba 的 Client 端設定

若設定使用「Linux 主機的帳號與密碼做為登入 Samba Server 的帳號與密碼」時,由於 win95OSR2 之前版本及 NT SP3 之前版本預設的密碼機制是不加密的純文字密碼,當登入 Samba Server 時可傳送不加密的純文字密碼給 Samba,因而輕易認證登入。

而 win98 及 NT SP3之後版本及 WIn2000 的密碼機制是屬於加過密的密碼,當登入Samba Server 時所傳送的是加密的密碼給 Samba,因而無法認證登入,此時,必須為需要登入 Samba Server 的使用者帳號,利用 smbpasswd 這個工具程式建立登入Samba 的密碼,當 windows Client 端登入 Samba 時,就可接受加過密的密碼做為認證,不過此時就無需使用「Linux主機的帳號與密碼做為登入Samba Server的帳號與密碼」,因為已經為使用者建立屬於登入 Samba 的密碼。必須注意的是:登入Samba 的使用者帳號必須是已存在於 /etc/passwd 檔內的Linux系統帳號,唯有如此,才能確保能使用個人帳號目錄。

不加密的連線

由於 Samba 內定的接受密碼機制屬於純文字密碼,當設定好Samba Server 端後,此時若Client 端是 Windows 95 OSR2之前的版本或是 Win NT SP3 之前的版本,在登入本機時(假設使用 abc 帳號),直接使用『網路上的芳鄰』即可看「home」、「abc」、「works」三個分享目錄,這是因為 Client 傳送純文字密碼到Server端做為認證。

若 Client 端是 Windows 95 OSR2以後的版本或是Win NT SP3以後或是 Win2000 的版本,因為 Client 傳送加密碼到 Samba Server 端做為認證,則需設定為純文字密碼才可以與 Samba Server 連線。您必須使用『登入記錄編輯器』(regedit)對連線密碼形式做設定:

Windows 95/98  ==> samba_9x.reg

REGEDIT4

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]

"EnablePlainTextPassword"=dword:00000001

 

Windows NT ==> samba_nt.reg

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters]

"EnablePlainTextPassword"=dword:00000001

 

Windows 2000  ==>samba_2000.reg

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters]

"EnablePlainTextPassword"=dword:00000001

你可以手動用 regedit 改,也可以存成 *.reg 直接執行!!

使用純文字密碼登入 Samba 的好處是:可享用現成的 Linux 帳號與密碼,但卻失去了安全性,此時可採用加密的密碼登入 Samba。為了讓 Samba 能對加密的密碼做認證,除了在基本設定裡需選擇「Encrypted password required」外,還需要使用smbpasswd 為每一帳號建立samba密碼,其步驟如下:

vi /etc/samba/smb.conf

[global]項目設定加密,如下所示:

encrypt passwords = yes

#smbpasswd -a abc

如上設定後,Client 端是 Windows 95 OSR2以後的版本或是Win NT SP3以後的版本或是windows 2000,則不需要對 registry 的密碼項目做純文字密碼設定,直接就可登入Samba Server。

注意:使用smbpasswd -a username之前,請先確定 /etc/passwd 檔裡存在username帳號。

smbpasswd -d username:停用username帳號

smbpasswd -e username:啟用username帳號

相信您對 Samba 應該有了一些概念,Samba 是個相當強悍的 Server,在組織網域內的機群時,別忘了 Samba + DHCP + DNS 可幫您有效、快速的完成任務。


用 Browser 管理 Samba

  必須安裝套件 -- samba-swat-xxx.rpm ,安裝完之後記得 restart smb 才會生效(當然也可以用 Webmin 透過 browser 管理 samba !!)

/etc/rc.d/init.d/smb restart

1.先使用 browser 連線, port 901

為何會 error 呢??這是小編要提醒您的,透過 Browser 方式管理固然方便,但是 security 可不要忘記,可以利用 /etc/samba/smb.conf 裡面的 hosts allow 來設定開放給誰使用 Browser 管理!!(千萬不要對 internet 全部開放,太危險了!!)

2.輸入 ID , password (會依據不同 user 的權限出現不同的 menu )

3.這是 Anderson 這位 user 的 menu !!

4.另外使用 root 登入

5.有些 root 才有的權限才會出現!!

一樣,用了 Browser 並不表示不需要學 samba 的 conf ,它只是個"更"方便的工具,對於 samba 的設定還是要熟悉才會操作!!

另外也可以用 /etc/xinetd.d/swat 來對 swat 作設定

# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \
# to configure your Samba server. To use SWAT, \
# connect to port 901 with your favorite web browser.
service swat
{
  port = 901
  socket_type = stream
  wait = no
  only_from = 127.0.0.1
  user = root
  server = /usr/sbin/swat
  log_on_failure += USERID
  disable = yes
}

 

Good luck!!