歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux下Samba服務器詳解

一、samba概念和功能

Samba是一個能讓Linux系統應用Microsoft網絡通訊協議的軟件,而SMB是Server Message Block的縮寫,即為服務器消息塊 ,SMB主要是作為Microsoft的網絡通訊協議,後來Samba將SMB通信協議應用到了Linux系統上,就形成了現在的Samba軟件。後來微軟又把 SMB 改名為 CIFS(Common Internet File System),即公共 Internet 文件系統,並且加入了許多新的功能,這樣以來,使得Samba具有了更強大的功能。

Samba最大的功能就是可以用於Linux與windows系統直接的文件共享和打印共享,Samba既可以用於windows與Linux之間的文件共享,也可以用於Linux與Linux之間的資源共享,由於NFS(網絡文件系統)可以很好的完成Linux與Linux之間的數據共享,因而Samba較多的用在了Linux與windows之間的數據共享上面。

SMB是基於客戶機/服務器型的協議,因而,一台Samba服務器既可以充當文件共享服務器,也可以充當一個Samba的客戶端,例如,一台在Linux下已經架設好的Samba服務器,windows客戶端就可以通過SMB協議共享Samba服務器上的資源文件,同時,Samba服務器也可以訪問網絡中其它windows系統或者Linux系統共享出來的文件。

Samba在windows下使用的是NetBIOS協議,如果你要使用Linux下共享出來的文件,請確認你的windows系統下是否安裝了NetBIOS協議。

二、 Samba的安裝與配置

我們的系統環境是:

操作系統:Red Hat Enterprise Linux Server release 5.1

Samba服務器IP地址:192.168.60.231

Samba版本:samba-3.0.23c-2

1.安裝samba

幾乎所有的Linux發行版本中都默認自帶了samba軟件包,登陸系統,檢查是否安裝了Samba軟件,執行如下操作:

[root@localhost ~]# rpm -q samba

samba-3.0.23c-2

如果有顯示,表示系統已經安裝了Samba,如果沒有任何顯示,請到系統光盤找到對應的Samba軟件包,然後進行安裝。

Samba的安裝很簡單,安裝過程如下:

[root@webserver ~]# rpm -ivh samba-3.0.23c-2.i386.rpm

warning: samba-3.0.23c-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...                ########################################### [100%]

  1:samba                  ########################################### [100%]

Samba服務器安裝完畢,會生成配置文件目錄/etc/samba和其它一些samba可執行命令工具,/etc/samba/smb.conf是samba的核心配置文件,/etc/init.d/smb是samba的啟動/關閉文件。

2.Samba服務的組成與使用

組成Samba運行的有兩個服務,一個是SMB,另一個是NMB;SMB是Samba 的核心啟動服務,只有SMB服務啟動,才能實現文件的共享,而NMB服務是負責解析用的,類似與DNS實現的功能,NMB可以把Linux系統共享的工作組名稱與其IP對應起來,如果NMB服務沒有啟動,就只能通過IP來訪問共享文件。

例如,某台Samba服務器的IP地址為192.168.60.231,對應的工作組名稱為ixdba,那麼在Windows的IE浏覽器輸入下面兩條指令都可以訪問共享文件。其實這就是Windows下查看Linux Samba服務器共享文件的方法。

\\192.168.60.231\共享目錄名稱

\\ixdba\共享目錄名稱

可以通過/etc/init.d/smb start/stop/restart來啟動、關閉、重啟Samba服務,啟動SMB服務如下所示:

[root@localhost Linuxdata]# /etc/init.d/smb start

Starting SMB services:                            [  OK  ]

Starting NMB services:                            [  OK  ]

從啟動的輸出中,可以看出,SMB的啟動包含了SMB和NMB兩個服務。

那麼在Linux作為客戶端時,查看其它Linux Samba服務器共享的文件時,應該如何操作呢,這就要用到smbclient這個工具。系統默認自帶了這個命令。Smbclient常見用法介紹如下。

(1)查看Samba服務器的共享資料

Smbclient  –L  //Samba服務器的ip地址  -U  Samba用戶名

“-L”即為list的含義,“-U”是user的意思,如果Samba服務器是無密碼訪問的話,可以省略“-U  Samba用戶名”。

例如:samba需要密碼登陸時,查看共享方法如下:

[root@web ~]# smbclient  -L //192.168.60.231/Linuxdata –U admin

Password:  在這裡輸入admin的密碼。

Samba無密碼訪問時,執行如下命令:

[root@web ~]# smbclient  -L //192.168.60.231/Linuxdata

Password: 直接回車即可。

(2)登陸Samba服務器

如果需要在Linux客戶端登陸Samba服務器,用法如下:

Smbclient  //Samba服務器的ip地址  -U  Samba用戶名

請看下面執行的操作:

[root@web samba]# smbclient  //192.168.60.231/Linuxdata

Password:

Domain=[IXDBA.NET] OS=[Unix] Server=[Samba 3.0.23c-2]

Server not using user level security and no password supplied.

smb: \> ls

 .                                   D        0  Thu Feb 19 23:49:33 2009

 ..                                  D        0  Thu Feb 19 19:05:24 2009

 install.log                              36563  Thu Feb 19 23:49:22 2009

 install.log.syslog                        4295  Thu Feb 19 23:49:22 2009

       58113 blocks of size 262144. 44294 blocks available

smb: \> ?      #在這裡輸入?即可查看在smb命令行可用的所有命令。

     altname        archive        blocksize      cancel        

case_sensitive cd             chmod          chown          close        

del            dir            du             exit           get          

getfacl        hardlink       help           history        lcd          

link           lock           lowercase      ls             mask          

md             mget           mkdir          more           mput          

newer          open           posix          posix_open     posix_mkdir  

posix_rmdir    posix_unlink   print          prompt         put          

pwd            q              queue          quit           rd            

recurse        reget          rename         reput          rm            

rmdir          showacls       setmode        stat           symlink      

tar            tarmode        translate      unlock         volume        

vuid           wdel           logon          listconnect    showconnect  

!            

smb: \>

看到了嗎,是不是與登陸FTP服務器很類似,登陸Samba服務器後,就可以進行文件的上傳與下載,如果有足夠的權限,還可以進行修改文件操作。

此外,Samba服務器共享出來的文件還可以在Linux客戶端進行掛載,這就要用到mount命令,如下所示:

[root@web /]# mount -t cifs  -l //192.168.60.231/Linuxdata /samba

Password:

[root@web /]# df -Th|grep /samba

     cifs     15G  2.7G   11G  20% /samba

[root@web /]# uname -a

Linux web 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux

這裡我們的操作系統環境為redhat as5版本,在redhat as5以前的版本中,還存在一個smbmount命令,是專門用於掛載Samba共享數據用的,此命令從redhat as5開始被取消。

例如:

[root@localhost ~]# uname -a

Linux localhost 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:32:14 EDT 2005 i686 i686 i386 GNU/Linux

[root@localhost ~]# smbmount  //192.168.60.231/Linuxdata /samba

Password:

[root@localhost ~]# df -Th|grep /samba

    smbfs     15G  3.4G   11G  24% /samba

由此可見,Samba共享文件系統格式在redhat as5以前版本稱為smbfs,而從redhat as5開始變為CIFS。

接下來詳細講述下smb.conf文件的屬性配置。

3.核心配置文件smb.conf

默認的smb.conf有很多個選項和內容,比較繁瑣,這裡我們從簡單講起,先備份一下自己的smb.conf文件,然後重新建立一個smb.conf,添加如下內容:

[global]

workgroup = IXDBA.NET

netbios name = ixdba

server string = My Linux Samba Server

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

security = share

[Linuxdata]

       path = /ixdba/Linuxdata

       writeable = yes

       browseable = yes

       guest ok = yes

對上面每行解釋如下:

“[global]”表示以下的內容為全局配置,必須要有。

“workgroup“用來定義工作組,也就是windows中的工作組概念,這裡設置為IXDBA.NET。

“netbios name”用來定義windows中顯示出來的計算機名稱。

“server string”用來定義Samba服務器的說明信息,可以隨便指定!

“log file”用來定義Samba用戶的日志文件,%m代表客戶端主機名,Samba服務器會在指定的目錄中為每個登陸主機建立不同的日志文件。

“security”用來定義數據共享的方式,此選項有多個可選值,常用的有user和share,user表示需要密碼驗證後才能共享數據,share表示可以直接共享數據,無需輸入密碼。這裡選擇share。

“[Linuxdata]” 用來設定在windows中顯示出來的共享目錄的名稱。

“path” 用來指定共享的目錄,必選項。

“writeable”用來設置是否可寫,yes為可寫,no為不可寫。

“browseable”用來定義是否可以在windows工作組下看到共享文件夾,如果需要隱藏共享文件夾,選擇no即可。

“guest ok”用來定義匿名用戶是否可以登陸,如果security設置為user,此選項默認值為no。

4.建立共享目錄

上面設置了共享目錄為/ixdba/Linuxdata,下面就需要建立/ixdba/Linuxdata目錄:

[root@localhost ~]# mkdir -p /ixdba/Linuxdata

[root@localhost ~]# chown -R nobody:nobody /ixdba/Linuxdata

由於要設置匿名用戶可以下載或上傳共享文件,所以要給/ixdba/Linuxdata目錄授權為nobody權限。

[root@localhost Linuxdata]# cp /root/install.log* /ixdba/Linuxdata

上面是拷貝一些測試文件到共享目錄中。

5.重啟smb服務

執行如下命令重啟samba服務:

[root@localhost samba]# /etc/init.d/smb  start

Starting SMB services:                                     [  OK  ]

Starting NMB services:                                     [  OK  ]

[root@localhost samba]# ls

lmhosts  secrets.tdb  smb.conf  smb.conf.old  smbpasswd  smbusers

[root@localhost samba]#

6.訪問Samba服務器的共享文件

(1)在Linux下訪問Samba服務器的共享文件

[root@web ~]# smbclient  //192.168.60.231/Linuxdata

Password:

Domain=[IXDBA.NET] OS=[Unix] Server=[Samba 3.0.23c-2]

Server not using user level security and no password supplied.

smb: \> ls

 .                                   D        0  Thu Feb 19 20:14:24 2009

 ..                                  D        0  Thu Feb 19 19:05:24 2009

 install.log                              36563  Thu Feb 19 20:14:24 2009

 install.log.syslog                        4295  Thu Feb 19 20:14:24 2009

       58113 blocks of size 262144. 44295 blocks available

smb: \>

(2)在windows下訪問Samba服務器的共享文件。

在浏覽器或者運行框輸入

\\192.168.60.231 或者 \\ixdba

就看到打開共享目錄了,這裡的ixdba是smb.conf中“netbios name”選項定義的名字。

如圖1所示:

圖1

7.授權登陸Samba服務器

上面介紹了Samba服務器匿名共享數據的設置方法,而在很多時候,對共享的數據是需要進行權限控制的,也就是用戶在訪問Samba服務器時需要輸入用戶名和密碼,下面就介紹如何配置有權限控制的Samba服務器。

(1)添加系統級用戶

 這裡首先添加ixdba1、ixdba2兩個系統級用戶,並分別指定工作目錄為/ixdba/ixdba1和/ixdba/ixdba2,操作如下:

[root@localhost /]# useradd -d /ixdba/ixdba1 ixdba1

[root@localhost /]# useradd -d /ixdba/ixdba2  -s  /sbin/nologin  ixdba2

[root@localhost /]# cp /root/install.log* /ixdba/ixdba1

[root@localhost /]# cd /ixdba

[root@localhost ixdba]# ll

total 32

drwx------ 4 ixdba1 ixdba1 4096 Feb 20 05:58 ixdba1

drwx------ 3 ixdba2 ixdba2 4096 Feb 20 05:50 ixdba2

其中,useradd是創建系統用戶的命令,參數“-d”是指定ixdba1用戶的工作目錄,而ixdba1就是創建用戶的名稱,“-s”是指定用戶使用的默認shell,/sbin/nologin表示ixdba2是個虛擬用戶,也就是ixdba2不能通過shell登陸系統。關於這些概念在第十章有詳細的講述,這裡不在多說。

每當創建一個用戶,Linux系統都會在/etc/passwd文件中添加一行對應的用戶名信息,在這裡我們僅僅用到的是/etc/passwd文件中的用戶名信息,因此,不必對兩個用戶設置登陸系統的密碼。

(2)創建Samba登陸用戶

這裡需要注意的是:系統用戶是Linux上面對應的用戶,而Samba用戶是客戶端連接Samba服務器時需要使用的用戶。創建Samba用戶使用的命令是smbpasswd,而smbpasswd的原理是通過讀取/etc/passwd文件中存在的用戶名,進而設置密碼的,因此,對於系統用戶,可以設置密碼,也可以不設置密碼,如果設置密碼,可以和對應的Samba用戶密碼相同,也可以不同。

下面分別為ixdba1和ixdba2設置Samba服務器的登陸密碼,操作如下:

[root@localhost samba]# smbpasswd  -a ixdba1

New SMB password:

Retype new SMB password:

Added user ixdba1.

[root@localhost samba]# smbpasswd  -a ixdba2

New SMB password:

Retype new SMB password:

Added user ixdba2.

這樣設置完畢,就可以用ixdba1和ixdba2在客戶端登陸Samba服務器了。

(3)配置smb.conf文件

Samba配置的核心文件是smb.conf,設置好的配置文件如下:

[global]

workgroup = IXDBA.NET

netbios name = ixdba

server string = My Linux Samba Server

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

max log size = 50

security = user

encrypt passwords = yes

smb passwd file = /etc/samba/smbpasswd

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

#interfaces = 192.168.1.254/24 192.168.2.254/24

os level = 33

[ixdba1]

       path = /ixdba/ixdba1

       comment = This is ixdba1

       valid users = ixdba1

       writeable = yes

       browseable = yes

[ixdba2]

       path = /ixdba/ixdba2

       comment = This is ixdba2

       valid users = ixdba2

    create mask =  664

       directory mask = 775

       writeable = yes

       browseable = yes

這段配置與上面那個例子基本相同,只是增加了一些權限控制的東西。新增各個選項的含義如下所示:

“max log size”用來定義日志文件的大小,設置為0代表不做限制,默認單位是KB。

 “encrypt passwords”用來設定用戶密碼是否加密,yes表示需要加密,否則不加密,由於現在的windows系統都以加密形式發送 SMB/CIFS 口令,因此這裡選擇yes。

“smb passwd file”用來指定samba的密碼文件。

 “socket options”用來設定Samba服務器和客戶端之間會話的Socket選項值,此項的設置可以優化數據傳輸速度。

“os level”用來設定samba server的OS level, OS level的值從0到255,winNT的OS level為33,win95/98的OS level是1,samba server的OS level值至少要大於33以上。

“comment”是對共享目錄的說明文件,自己可以定義說明信息。

 “valid users”用來定義可以訪問該Samba服務器的用戶。

“create mask“用來定義客戶端用戶創建文件的默認權限,664表示對用戶來可讀可寫,對用戶組可讀可寫,對其它用戶僅僅有只讀權限。

“directory mask”用來定義客戶端用戶創建目錄的默認權限,755表示對用戶可讀可寫可執行,對用戶組和其它用戶可讀可執行。

(4)測試Samba服務器

特別注意,在Samba服務器運行狀態下,最好使Selinux處於關閉狀態,不然需要進行很多權限的設定,如何關閉Selinux,請閱讀本書第七章。

所有設置完成後,重新啟動smb服務。然後在windows客戶端進行授權登陸。在IE浏覽器輸入\\192.168.60.231,然後回車,即可進入圖2所示界面:

圖2

在這裡輸入需要登陸的Samba用戶,我們這裡登陸的用戶是ixdba1,輸入密碼即可登陸到圖3所示界面:

圖3

在圖3界面下可以看到所有Samba服務器上共享的目錄,可以看到,這裡Samba共享的目錄有ixdba1和ixdba2,ixdba1目錄只有ixdba1用戶可以登陸使用共享文件,而ixdba2目錄也只有ixdba2用戶可以登陸。

這裡需要說明的是,Samba用戶在客戶端對文件或目錄擁有的權限,完全是由Linux下的系統用戶設定的,例如,如果想讓ixdba1用戶能訪問ixdba2目錄下的文件,只需將ixdba2用戶的相應權限賦予ixdba1用戶即可。由此可知,Samba只是實現了文件的共享,而對共享文件的讀寫權限卻是由Linux系統自身的用戶屬性控制的。

由於我們是通過ixdba1用戶登陸的,因此,點擊ixdba1目錄即可進入圖4所示界面:

在這個界面下,Samba用戶可以下載、上傳、修改、刪除此目錄下的所有目錄和文件,就像本地的文件系統一樣。

如果需要對ixdba1用戶下的文件或者目錄進行權限控制,只需在Linux服務器上對相應的文件或者目錄進行權限設置即可。

圖4

最後,有一個小技巧,在windows下通過“\\ip地址”的方式訪問其它文件資源時,一般第一次需要輸入密碼,以後就無需輸入密碼直接登陸了,那麼如果我們要切換到其它Samba用戶怎麼辦呢?可以在windows下執行如下指令實現:

首先通過開始---運行---cmd輸入:“net use”命令查看現有的連接,然後執行“net use \\Samba服務器IP地址或者netbios名稱\ipc$  /del”,刪除Samba服務器已經建立的連接。或者執行“net use * /del”將現在所有的連接全部刪除。最後,再次執行“\\ip地址”時,就可以切換用戶了。

到此為止,Samba服務器的搭建已經介紹完畢。你是否學會了呢!

Copyright © Linux教程網 All Rights Reserved