SAMBA

http://www.linuxsir.org/main/node/158node

http://blog.csdn.net/annicybc/article/details/1133899linux

0、架設Samba 服務器的前提;ios

Linux是一個多用戶的操做系統,對任何服務器的架設與都用戶、用戶組及權限相關,這是操做的基礎。Samba服務器也不例外,對這些知識的掌握也是極爲重要的。在Windows系統上雖然也能架共享文件服務器,但它的權限控制實在使人不敢恭維。若是咱們用Windows系統來架網絡共享文件系統,就是點鼠標也能把咱們點迷糊了。但在Linux中,咱們能夠輕鬆的改一改配置文件,不到幾分鐘就能建好本身的Samba服務器。哪一個更容易,只有你知道;shell

對於Samba服務器的架設,有的弟兄簡單的認爲,只要把改一下配置文件,建立好相應的目錄就好了。其實並非這樣的,還要深刻的工做,好比目錄的權限和歸屬,也就是說能讓哪一個用戶和用戶組有讀寫權。只有把配置文件和共享目錄的權限結合起來,才能架好Samba服務器;瀏覽器

下面是經常使用的基礎知識,咱們在本文中所涉及的內容均可以在下面的列表中找到相應的解釋;安全


0.1 查看文件內容和編輯文件的工具;
服務器

《Linux 文件內容查看工具介紹》
《文件編輯器 vi》網絡


0.2 關於文件和目錄相關;

《Linux 文件類型 及文件的擴展名》
《Linux 文件和目錄管理之列出、刪除、複製、移動及更名》
《Linux 文件和目錄的屬性》
《簡述Linux文件搜索》
架構


03 用戶和用戶組相關;
dom

《Linux 用戶(user)和用戶組(group)管理概述》
《用戶(User)和用戶組(Group)配置文件詳解》
《Linux 用戶管理工具介紹》
《Linux 用戶(User)查詢篇》


04 進程管理;

《Linux 進程管理》

1 Samba 簡介

Samba(SMB是其縮寫) 是一個網絡服務器,用於Linux和Windows共享文件之用;Samba 便可以用於Windows和Linux之間的共享文件,也同樣用於Linux和Linux之間的共享文件;不過對於Linux和Linux之間共享文件有更好的網絡文件系統NFS,NFS也是須要架設服務器的;

你們知道在Windows 網絡中的每臺機器便可以是文件共享的服務器,也能夠同是客戶機;Samba 也同樣能行,好比一臺Linux的機器,若是架了Samba Server 後,它能充當共享服務器,同時也能作爲客戶機來訪問其它網絡中的Windows共享文件系統,或其它Linux的Sabmba 服務器;

咱們在Windows網絡中,看到共享文件功能知道,咱們直接就能夠把共享文件夾當作本地硬盤來使用。在Linux的中,就是經過Samba的向網絡中的機器提供共享文件系統,也能夠把網絡中其它機器的共享掛載在本地機上使用;這在必定意義上說和FTP是不同的。

Samba 用的netbios協議,若是您用Samba 不成功,

Linux與Windows 、Linux 和 Linux

2 Samba 功能和應用範圍

Samba 應該範圍主要是Windows和Linux 系統共存的網絡中使用;若是一個網絡環境都是Linux或Unix類的系統,沒有必要用Samba,應該用NFS更好一點;

那Samba 能爲咱們提供點什麼服務呢?主要是共享文件和共享打印機;

3 Samba 兩個服務器相關啓動程序、客戶端及服務器配置文件等;

3.1 Samba 有兩個服務器,一個是smb,另外一個是nmb;

smb 是Samba 的主要啓動服務器,讓其它機器能知道此機器共享了什麼;若是不打開nmb服務器的話,只能經過IP來訪問,好比在Windows的IE瀏覽器上打入下面的一條來訪問;


\\192.168.1.5\共享目錄
\\192.168.1.5\opt




而nmb是解析用的,解析了什麼呢?就是把這臺Linux機器所共享的工做組及在此工做組下的netbios name解析出來;

 

通常的狀況下,在RPM包的系統,若是是用RPM包安裝的Samba ,通常能夠經過以下的方式來啓動Samba服務器;


[root@localhost ~]# /etc/init.d/smb start
啓動 SMB 服務:                                            [  肯定  ]
啓動 NMB 服務:                                            [  肯定  ]




若是中止呢?就在smb後面加stop ;重啓就是restart


[root@localhost ~]# /etc/init.d/smb stop
[root@localhost ~]# /etc/init.d/smb restart



 

對於全部系統來講,通用的辦法就是直接運行smb 和nmb;固然您要知道smb和nmb所在的目錄才行;若是是本身編譯的Samba ,您應該知道您把Samba放在哪裏了;


[root@localhost ~]# /usr/sbin/smbd
[root@localhost ~]# /usr/sbin/nmbd




查看服務器是否運行起來了,則用下面的命令;

 

 

[root@localhost ~]# pgrep smbd
[root@localhost ~]# pgrep nmbd



 

關掉Samba服務器,也能夠用下面的辦法,大可能是通用的;要root權限來執行;


[root@localhost ~]# pkill smbd
[root@localhost ~]# pkill nmbd



 

3.2 查看Samba 服務器的端口及防火牆;

查看這個有何用呢?有時你的防火牆可能會把smbd服務器的端口封掉,因此咱們應該smbd服務器所佔用的端口;下面查看中,咱們知道smbd所佔用的端口是139和445 ;

 

[root@localhost ~]# netstat -tlnp |grep smb
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      10639/smbd
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      10639/smbd

 

若是您有防火牆,必定要把這兩個端口打開。若是不知道怎麼打開。可能你和我同樣是新手,仍是把防火牆規則清掉也行;

 

[root@localhost ~]# iptables -F 

[root@localhost ~]# /sbin/iptables -F

 

3.三、查看Samba 服務器的配置文件;

若是咱們是用Linux發行版自帶的Samba軟件包,通常狀況下Samba服務器的配置文件都位於/etc/samba目錄中,服務器的主配置文件是smb.conf;也有有戶配置文件 smbpasswd、smbusers和lmhosts等(最好您查看一下這些文件的內容);還有一個文件是secrets.tdb,這個文件是Samba 服務器啓動手自動生成的;咱們慢慢根據教程的進度來適當地增長這些文件的說明吧;一會兒都說出來,感受內容太多;因此只能一點一點的來了;

3.四、Samba 在Linux 中的一些工具(服務器端和客戶端);

 

smbcacls    smbcontrol  smbencrypt  smbmount    smbprint    smbstatus   smbtree
smbclient   smbcquotas  smbmnt      smbpasswd   smbspool    smbtar      smbumount
smbd nmbd    mount




其中服務器端的是smbd、nmbd、smbpasswd ;其它的大可能是客戶端;這些並非都須要必定要精通的,但至少得會用幾個;好比smbmount(也就是mount 加參數的用法),還用smbclient等;

 

3.5 在Linux 中的經常使用工具mount(smbmount)和smbclient;Windows查看Linux共享的方法 ;

3.5.1 在Linux系統中查看網絡中Windows共享文件及Linux中的Samba共享文件;

通常的狀況下,咱們要用到smbclient;經常使用的用法也無非是下面的;


[root@localhost ~]# smbclient  -L  //ip地址或計算機名

 

smbclient 是Samba 的Linux 客戶端,在Linux機器上用來查看服務器上的共享資源,也能夠象FTP同樣,用戶能夠登陸Samba服務器,也能夠上傳put和下載get文件,遺憾的是對中文支持並不友好;

查看服務器上的資源;

 

smbclient -L //IP  [-U 用戶名]

 

若是您的Samba服務器配置爲user模式,就要加 「-U 用戶名「,若是是share模式,省略也可;

好比:

 

[root@localhost ~]# smbclient -L   //192.168.1.3  -U sir01
Password: 請輸入用戶sir01的密碼

 

若是您是用share模式,就能夠沒必要理會用戶和密碼,直接用;

 

[root@localhost ~]# smbclient -L  //192.168.1.3 
Password: 直接按回車

 

登陸用戶身份Samba服務器共享

以用戶身份登陸共享後,能象FTP用戶同樣,下傳和下載文件;用put表示上傳,用get表示下載;

 

smbclient  //IP地址/共享文件夾    -U 用戶

 

說明:IP地址你們都知道,你不知道本身的IP地址,能夠用/sbin/ifconfig 來查看; 共享文件夾是咱們在smb.conf中定義的[共享文件夾],好比[sir01]。-U 用戶名錶示Samba 的用戶;

好比:

 

[root@localhost ~]# smbclient //192.168.1.3/sir01 -U sir01
Password:
Domain=[LINUXSIR] OS=[Unix] Server=[Samba 3.0.21b-2]
smb: \> ls

 

說明:登陸到Samba服務器上,就能夠用smbclient的一些指令,能夠象用FTP指令同樣上傳和下載文件;

smbclient 命令說明

命令									說明

?或help [command]			提供關於幫助或某個命令的幫助
![shell command]			執行所用的SHELL命令,或讓用戶進入 SHELL提示符
cd [目錄]						切換到服務器端的指定目錄,如未指定,則 smbclient 返回當前本地目錄
lcd [目錄]					切換到客戶端指定的目錄;
dir 或ls  					列出當前目錄下的文件;
exit 或quit 					退出smbclient	
get file1  file2  		從服務器上下載file1,並以文件名file2存在本地機上;若是不想更名,能夠把file2省略
mget file1 file2 file3  filen 	從服務器上下載多個文件;
md或mkdir 目錄				在服務器上建立目錄
rd或rmdir	目錄				刪除服務器上的目錄
put file1 [file2]			向服務器上傳一個文件file1,傳到服務器上更名爲file2;
mput file1 file2 filen  向服務器上傳多個文件

3.5.2 在Windows中訪問Linux Samba服務器共享文件的辦法;

這個簡單吧,在網上領居,查看工做組就能看獲得,或者在瀏覽器上輸入以下的


\\ip地址或計算機名

 

這樣就能看到這個機器上有什麼共享的了,點鼠標操做完成;若是訪問不了,不要忘記把Linux的防火牆規劃清掉,或讓相應的端口經過;

3.5.3 在Linux中smbfs文件系統的掛載;

mount 的用法,加載網絡中的共享文件夾到本地機;mount就是用於掛載文件系統的,SMB作爲網絡文件系統的一種,也能用mount掛載;smbmount說到底也是用mount的一個變種;

mount 掛載smbfs的用法;

mount -t smbfs -o codepage=cp936,username=用戶名,password=密碼 , -l   //ip地址/共享文件夾名   掛載點

mount -t smbfs -o codepage=cp936,username=用戶名,password=密碼 , -l   //計算機名/共享文件夾名   掛載點

mount -t smbfs  -o codepage=cp936  //ip地址或計算機名/共享文件夾名   掛載點




smbmount的用法:

smbmount -o username=用戶名,password=密碼 , -l   //ip地址或計算機名/共享文件夾名   掛載點
smbmount  //ip地址或計算機名/共享文件夾名    掛載點




說明:

 

若是您的服務器是以share共享的,則無需用戶名和密碼就能掛載,若是出現要密碼的提示,直接回車就行;您也能夠用smbmount 來掛載,這樣就無需用mount -t smbfs來指定文件系統的類型了;

對於掛載點,咱們要本身創建一個文件夾,好比咱們能夠建在/opt/smbhd,這由您說的算吧;

在mount的命令中,咱們發現有這樣的一個參數codepage=cp936,這是服務器端文件系統的編碼的指定,cp936 就是簡體中文,固然您能夠用utf8等,嘗試一下吧。

若是您掛載了遠程的smbfs文件系統出現的是簡體中文亂碼,就要考慮掛載時要指定編碼了;

四、由最簡單的一個例子提及,匿名用戶可讀可寫的實現;

第一步: 更改smb.conf

咱們來實現一個最簡單的功能,讓全部用戶能夠讀寫一個Samba 服務器共享的一個文件夾;咱們要改動一下smb.conf ;首先您要備份一下smb.conf文件;

 

[root@localhost ~]# cd /etc/samba
[root@localhost samba]# mv smb.conf smb.confBAK

 

而後咱們來從新建立一個smb.conf文件;


[root@localhost samba]#touch smb.conf



 

而後咱們把下面這段寫入smb.conf中;

 

[global]
workgroup = LinuxSir
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
security = share

[linuxsir]
        path = /opt/linuxsir
        writeable = yes
        browseable = yes
        guest ok = yes




註解:

 

[global]這段是全局配置,是必段寫的。其中有以下的幾行;

workgroup 就是Windows中顯示的工做組;在這裏我設置的是LINUXSIR (用大寫);
netbios name 就是在Windows中顯示出來的計算機名;
server string 就是Samba服務器說明,能夠本身來定義;這個不是什麼重要的;
security 這是驗證和登陸方式,這裏咱們用了share ;驗證方式有好多種,這是其中一種;另一種經常使用的是user的驗證方式;若是用share呢,就是不用設置用戶和密碼了;

[linuxsir] 這個在Windows中顯示出來是共享的目錄;
path = 能夠設置要共享的目錄放在哪裏;
writeable 是否可寫,這裏我設置爲可寫;
browseable 是否能夠瀏覽,能夠;能夠瀏覽意味着,咱們在工做組下能看到共享文件夾。若是您不想顯示出來,那就設置爲 browseable=no

guest ok 匿名用戶以guest身份是登陸;

第二步:創建相應目錄並受權;

[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir




註釋:關於受權nobody,咱們先用id命令查看了nobody用戶的信息,發現他的用戶組也是nobody,咱們要以這個爲準。有些系統nobody用戶組並不是是nobody ;

 

第三步:啓動smbd和nmbd服務器;

[root@localhost ~]# smbd
[root@localhost ~]# nmbd

 

第四步:查看smbd進程,確認Samba 服務器是否運行起來了;



[root@localhost ~]# pgrep smbd
13564
13568




第五步:訪問Samba 服務器的共享;


在Linux 中您能夠用下面的命令來訪問;

[root@localhost ~]# smbclient -L //LinuxSir05
Password: 注:直接按回車




在Windows中,您能夠用下面的辦法來訪問;


\\LinuxSir05\

 


五、複雜一點的用戶共享模型(適合10人左右的小型企業);

好比一個公司有五個部門,分別是linuxsir,sir01,sir02,sir03,sir04。咱們想爲這家公司設計一個比較安全的共享文件模型。每一個用戶都有本身的網絡磁盤,sir01到sir04還有共用的網絡硬盤;全部用戶(包括匿名用戶)有一個共享資料庫,此庫爲了安全是隻讀的;全部的用戶(包括匿名用戶)要有一個臨時文件終轉的文件夾... ....


5.1 共享權限設計實現的功能;

1)linuxsir部門具備管理全部SMB空間的權限;
2)sir01到sir04擁有本身的空間,而且除了自身及linuxsir有權限之外,對其它用戶具備絕對隱私性;
3)linuxsir01到linuxsir04擁有一個共同的讀寫權限的空間;
4) 全部用戶(包括匿名用戶)有一個有讀權限的空間,用於資料庫,因此不要求寫入數據。
5)sir01到sir04還有一個共同的空間,對sir01到sir04的用戶來講是隱私的,不能讓其它用戶來訪問。
6) 還要有一個空間,讓全部用戶能夠寫入,能刪除等功能,在權限上無限制 ,用於公司全部用戶的臨時文檔終轉等;


5.2 在服務器上建立相應的目錄;

 

[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# cd /opt/linuxsir
[root@localhost linuxsir]# mkdir sir01 sir02 sir03 sir04 sirshare sir0104rw sirallrw
[root@localhost linuxsir]# ls

sir01  sir0104rw  sir02  sir03  sir04  sirallrw  sirshare

 

注:功用以下:

 

/opt/linuxsir  這是管理員目錄,負責管理其下全部目錄;
/opt/linuxsir/sir01  是sir01的家目錄,用於私用,除了用戶自己和linuxsir之外其它用戶都是不可讀不可寫;
/opt/linuxsir/sir02  是sir02的家目錄,用於私用,除了用戶自己和linuxsir之外其它用戶都是不可讀不可寫;
/opt/linuxsir/sir03  是sir03的家目錄,用於私用,除了用戶自己和linuxsir之外其它用戶都是不可讀不可寫;
/opt/linuxsir/sir04  是sir04的家目錄,用於私用,除了用戶自己和linuxsir之外其它用戶都是不可讀不可寫;
/opt/linuxsir/sirshare 所用用戶(除了linuxsir有權限寫入外)只讀目錄
/opt/linuxsir/sir0104rw 是用於sir01到sir04用戶可讀可寫共用目錄,但匿名用戶不能讀寫;
/opt/linuxsir/sirallrw 用於全部用戶(包括匿名用戶)的可讀可寫;

 


5.3 添加用戶用戶組,設置相應目錄家目錄的權限;


5.3.1 添加用戶組;

 

[root@localhost ~]# /usr/sbin/groupadd linuxsir
[root@localhost ~]# /usr/sbin/groupadd sir01
[root@localhost ~]# /usr/sbin/groupadd sir02
[root@localhost ~]# /usr/sbin/groupadd sir03
[root@localhost ~]# /usr/sbin/groupadd sir04
[root@localhost ~]# /usr/sbin/groupadd sir0104

 


5.3.2 添加用戶;

 

[root@cuc03 ~]# adduser -g sir01 -G sir0104  -d /opt/linuxsir/sir01 -s  /sbin/nologin sir01
[root@cuc03 ~]# adduser -g sir02 -G sir0104  -d /opt/linuxsir/sir02 -s  /sbin/nologin sir02
[root@cuc03 ~]# adduser -g sir03 -G sir0104  -d /opt/linuxsir/sir03 -s  /sbin/nologin sir03
[root@cuc03 ~]# adduser -g sir04 -G sir0104  -d /opt/linuxsir/sir04 -s  /sbin/nologin sir04
[root@cuc03 ~]# adduser -g linuxsir -d /opt/linuxsir -G linuxsir,sir01,sir02,sir03,sir04,sir0104 -d /opt/linuxsir -s  /sbin/nologin linuxsir

 

爲何這樣添加用戶?請參考:

《Linux 文件和目錄的屬性》
《Linux 用戶管理工具介紹》

固然咱們還得學會查看用戶信息的工具用法,好比 用finger和id來查看用戶信息,主要是看用戶是否添加正確;好比;請參考《Linux 用戶(User)查詢篇》

 

[root@localhost ~]# id linuxsir
[root@localhost ~]# finger linuxsir

 


5.3.3 添加samba用戶,並設置密碼;

咱們用的方法是先添加用戶,但添加的這些用戶都是虛擬用戶,由於這些用戶是不能經過SHELL登陸系統的;另外值得注意的是系統用戶密碼和Samba用戶的密碼是不一樣的。若是您設置了系統用戶能登入SHELL,能夠設置用戶的Samba密碼和系統用戶經過SHELL登陸的密碼不一樣。

咱們經過smbpasswd 來添加Samba用戶,並設置密碼。原理是經過讀取/etc/passwd文件中存在的用戶名。

 

[root@localhost sir01]# smbpasswd -a linuxsir    (linuxsir用戶必須是在系統中存在,不然得先useradd一下)
New SMB password: 注:在這裏添加Samba用戶linuxsir的密碼;
Retype new SMB password: 注:再輸入一次;

 

用一樣的方法來添加 sir0一、sir0二、sir0三、sir04的密碼;

用smbpasswd命令直接設置.首先要添加系統用戶而後用
  smbpasswd -a 用戶名 #添加samba用戶
  smbpasswd -e 用戶名 #激活用戶


5.3.4 配置相關目錄的權限和歸屬;

 

[root@cuc03 ~]# chmod 755 /opt/linux
[root@cuc03 ~]# chown  linuxsir:linuxsir /opt/linuxsir

[root@cuc03 ~]# cd /opt/linuxsir
[root@cuc03 ~]# chmod 2770 sir0*

[root@cuc03 ~]# chown sir01.linuxsir sir01

[root@cuc03 ~]# chown sir02.linuxsir sir02

[root@cuc03 ~]# chown sir03.linuxsir sir03

[root@cuc03 ~]# chown sir04.linuxsir sir04

[root@cuc03 ~]# chown linuxsir.sir0104 sir0104rw

[root@cuc03 ~]# chown linuxsir.linuxsir sirshare
[root@cuc03 ~]# chmod 755 sirshare

[root@cuc03 ~]# chown linuxsir:linuxsir sirallrw
[root@cuc03 ~]# chmod 3777 sirallrw

 


5.4 修改Samba配置文件 smb.conf;

配置文件以下,修改/etc/samba/smb.conf後,不要忘記重啓smbd和nmbd服務器;

 

[global]
workgroup = LINUXSIR
netbios name = LinuxSir
server string = Linux Samba   Test Server
security = share


[linuxsir]
        comment = linuxsiradmin
        path = /opt/linuxsir/
        create mask =  0664
#create mask是用戶建立文件時的權限掩碼;對用戶來可讀可寫,對用戶組可讀可寫,對其它用戶可讀;
        directory mask = 0775
#directory mask 是用來設置用戶建立目錄時的權限掩碼,意思是對於用戶和用戶組可讀可寫,對其它用戶可讀可執行;
        writeable = yes
        valid users = linuxsir
        browseable = yes

[sirshare]
        path = /opt/linuxsir/sirshare
        writeable = yes
        browseable = yes
        guest ok = yes

[sirallrw]
        path = /opt/linuxsir/sirallrw
        writeable = yes
        browseable = yes
        guest ok = yes

[sir0104rw]
        comment = sir0104rw
        path = /opt/linuxsir/sir0104rw
        create mask =  0664
        directory mask = 0775
        writeable = yes
        valid users = linuxsir,@sir0104 
#@sir0104是用戶組;
        browseable = yes

[sir01]
        comment = sir01
        path = /opt/linuxsir/sir01
        create mask =  0664
        directory mask = 0775
        writeable = yes
        valid users = sir01,@linuxsir
        browseable = yes


[sir02]
        comment = sir02
        path = /opt/linuxsir/sir02
        create mask =  0664
        directory mask = 0775
        writeable = yes
        valid users = sir02,@linuxsir
        browseable = yes

[sir03]
        comment = sir03
        path = /opt/linuxsir/sir03
        create mask =  0664
        directory mask = 0775
        writeable = yes
        valid users = sir03,@linuxsir
        browseable = yes

[sir04]
        comment = sir04
        path = /opt/linuxsir/sir04
        create mask =  0664
        directory mask = 0775
        writeable = yes
        valid users = sir04,@linuxsir
        browseable = yes

 


5.5 關於客戶端訪問;


5.5.1 Windows 訪問;

咱們打開Windows的IE瀏覽器,用IP地址的訪問方式就能訪問了,格式爲 \\192.168.1.3 相似的。固然也能夠把共享文件夾掛在本地使用。好比咱們把sir01文件夾掛在本地中,應該以sir01用戶來掛載,掛載流程圖以下;

    

 

六、更新日誌;

2006/01/23 v0.1b
2006/01/24 v0.2b

七、參考文檔;

《Samba-HOWTO》

七、相關文檔;

《Samba 文件服務器用戶複雜權限模型設計和實現 》

========================================================

隨着計算機網絡的發展,實現不一樣操做系統的文件和打印共享成爲一個必然的趨勢。用過Windows的用戶都知道,網上鄰居是一個能夠方便地訪問其餘Windows計算機資源的共享方式。爲了使Windows用戶以及Linux用戶可以互相訪問彼此的資源,Linux提供了一套資源共享的軟件——Samba服務器。 
4.1 SMB協議和Samba簡介 
4.1.1 SMB 協議  
爲了使Windows 主機間的資源可以共享,微軟於1980年開發了SMB(Server Message Block)通訊協議,並經過SMB通訊協議,使網絡上各臺主機之間可以共享文件、打印機等資源。目前相似這種資源共享的通訊協議還有NFS、Appletalk、Netware等。 
4.1.2 Samba 簡介  
這些年來,Windows 和Linux 操做系統各自擁有本身的用戶羣和市場。然而在通常的公司或學校裏,可能同時有Windows 和Linux 操做系統的主機。Windows 主機彼此間可利用「網上鄰居」來訪問共享的資源,NFS也能使Linux 主機之間實現資源共享。但如何能使Windows 主機和Linux主機之間實現資源共享呢? 
微軟的「網上鄰居(就是Windows 上利用SMB通訊協議實現資源共享的程序)」一經推出,便廣受用戶的好評,你們忽然以爲原來要在網上共享資源滿是那麼簡單,有鑑於此,便有一些Linux 愛好者開始在Linux 主機上實現SMB通訊協議,後來這個實現了SMB功能的軟件既被稱爲 Samba ,它使得Windows 主機和Linux主機之間實現了資源共享。 
 4.1.3 Samba 軟件的功能  
因爲SMB通訊協議採用的是Client/Server架構,因此Samba 軟件能夠分爲客戶端和服務器端兩部分。經過執行Samba 客戶端程序,Linux 主機即可以使用網絡上Windows 主機所共享的資源;而在Linux 主機上安裝Samba 服務器,則可使Windows 主機訪問Samba 服務器共享的資源
Samba 提供瞭如下功能: 
 (1)共享Linux 的文件系統
(2)共享安裝在Samba 服務器上的打印機
(3)使用Windows 系統共享的文件和打印機 
(4)支持 Windows 域控制器和Windows 成員服務器對使用Samba 資源的用戶進行認證 
(5)支持WINS名字服務器解析及瀏覽

    (6)支持SSL安全套接層協議

 

4.2 安裝和啓動Samba

Samba 軟件安裝在Linux 一端。目前主要由一個20人左右的Samba 團隊負責維護及開發,用戶能夠在http://www.samba.org/站點得到Samba的詳細信息。同時,也能夠在網頁上下載Samba 的最新版本 

4.2.1 安裝Samba服務器 

若是用戶在安裝Linux 時已經安裝了Samba ,就無需再安裝了能夠經過下列命令肯定是否已經安裝了Samba 。 

[root@ smb_server  root]# rpm  –qa | grep  samba

samba-commom -2.2.7a-7.9.0

samba-2.2.7a-7.9.0

samba-client-2.2.7a-7.9.0

redhat-config-samba-1.0.4-1

samba-swat-2.2.7a-7.9.0

若出現這5個軟件包,則表示已經安裝了Samba ,不然必須安裝Samba 。 

[root@smb_server  root]# mount  /dev/cdrom  /mnt/cdrom  

將光盤掛載到 /mnt/cdrom目錄]

[root@smb_server  root]# cd  /mnt/cdrom/RedHat/RPMS 

切換到放置rpm文件的目錄 

[root@smb_server  root]# rpm  -ivh samba-commom -2.2.7a-7.9.0i386.rpm

這是Samba 必備的程序,必須安裝 

[root@smb_server  root]# rpm  -ivh samba-2.2.7a-7.9.0.i386.rpm

安裝Samba 服務器程序,可使我Windows 主機訪問Samba 服務器共享的資源。 

若是須要使Linux 主機訪問Windows 主機上的共享資源,則還應該安裝Samba 客戶端程序。 

[root@smb_server  root]# rpm  -ivh samba-client-2.2.7a-7.9.0.i386.rpm

4.2.2 Samba的全局參數的配置 

Samba最主要的配置文件是 /etc/samba/smb.conf,其中有不少選項能夠設置,但做爲初學者,只須要掌握其中一小部分選項的設置就能夠配置所須要的Samba服務器了。在瞭解基本配置的基礎上,就能很快架設一個基本的Samba服務器。在基本配置文件中,也只用到其中一小部分命令選項。

全局參數的配置在[global]字段中,沒有出現(或被註釋)的參數,Samba 採用的是默認配置。

# This is the main Samba configuration file. You should read the

# smb.conf(5) manual page in order to understand the options listed

# here. Samba has a huge number of configurable options (perhaps too

# many!) most of which are not shown in this example

#================== Global Settings ============================

[global]

#這是配置文件中關於全局參數的設置部分。 

…………

   workgroup = SMBGROUP

#這是設置服務器所要加入的工做組的名稱,會在Windows 的「網上鄰居」中能看到MYGROUP工做組,能夠在此設置所須要的工做組的名稱。 

netbios name=smb-server

#設置出如今「網上鄰居」中的主機名。默認狀況下,則使用真正的主機名。 

   server string = Samba Server

#這是設置服務器主機的說明信息,當在Windows 的「網上鄰居」中打開Samba 上設置的工做組時,在Windows的資源管理器窗口,會列出「名稱」和「備註」欄,其中「名稱」欄會顯示出Samba服務器的NetBios名稱,而「備註」欄則顯示出此處設置的「Samba Server」。固然,能夠修改默認的「Sambe Server」,使用本身的描述信息。 

 hosts allow = 192.168.1. 127

#這裏是設置容許什麼樣的IP地址的主機訪問Samba服務器。默認的狀況下,hosts allow選項被註釋,表示容許全部IP地址的主機訪問。 

  guest account = pcguest

#設置當訪問那些被設置了「guest ok=yes」參數的資源時所要使用的賬號名。默認的賬號爲」nobody」,若是不想用默認的值,則應該去掉註釋用的分號,用你想要的賬號(如pcguest、 zhangsan等 ),而後,你必需將這一新賬號加入到/etc/passwd文件中去。 

client  code  page=950

設置客戶端訪問Samba 服務器時所使用的字符編碼表(code page),默認值爲850,若是Samba 服務器要使用年中文名稱來來命名共享的資源,要將此值改成950 

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

#這一選項要求Samba服務器爲每個鏈接的機器使用一個單獨的日誌文件,指定文件的位置,名稱。Samba會自動將%m轉換成鏈接主機的NetBios名。 

   max log size = 0

指定日誌文件的最大容量(以KB爲單位),設置爲0,表示沒有限制。默認值爲5000。 

max disk size =1000

#設置可以共享的最大磁盤空間,單位爲MB,默認值爲0,表示不做任何限制。 

max open file =100

#設置同一客戶端最多能打開文件的數目,默認值爲10000個。 

   security = user

#設置Samba服務器的安全等級。默認狀況下,使用user等級。 

#Samba服務器一共有四種安全等級。 

share: 使用此等級,用戶不須要賬號及密碼能夠登錄Samba服務器。 

user:  使用此等級,由提供服務的Samba服務器檢查用戶賬號及密碼。 

server: 使用此等級,檢查賬號及密碼的工做可指定另外一臺Samba服務器負責。

domain: 使用此等級,須要指定一臺Windows NT/2000/XP服務器(一般爲域控制器),以驗證用戶輸入的賬號及密碼。 

;   password server = <NT-Server-Name>

#若是安全等級爲「server」或「domain」,則使用此選項指定要驗證密碼的主機名。 

  password level = 8

  username level = 8

#設置當驗證用戶口令和賬號時最多容許幾個大小寫字不一樣。默認值爲0。 

   encrypt passwords = yes

#設置當Samba客戶端將賬號及密碼傳送到服務器端時,是否採起密碼加密的方式。客戶的操做系統若是是Windows 95 OSR2 及NT SP3之後的版本,應該將此選項的值設爲yes,默認值爲no。 

   smb passwd file = /etc/samba/smbpasswd

#設置在Samba服務器上存放加密的密碼文件的位置(注意:Samba服務器與Linux採用不一樣的密碼文件)。 

 

4.2.3 設置Samba密碼文件 

smb.conf 文件中有「smb password file =/ect/samba/smbpassword」一行設置項,如今就要建立該設置項所指定的/ect/samba/smbpassword密碼文件(如果用Windows NT/2000Server 來驗證密碼,則能夠跳過此段內容)。以root賬號登陸,而後按下列步驟進行: 

[root@smb_server  root]#cat /etc/passwd | mksmbpasswd.sh  >  /etc/samba/smbpasswd

[root@ smb_server  root]# chmod  500  /etc/samba

[root@ smb_server  root]# chmod  600  /etc/samba/smbpasswd

 

此步驟是將未加密的/etc/passwd文件轉換成加密的smbpasswd文件。基於保密的原則,將/etc/samba目錄的權限設爲500,該文件的權限設爲600,以免他人取得密碼文件。 

完成以後再利用smbpasswd命令,設置/ect/samba/smbpassword文件中每一個賬號所使用的密碼。(下面以fred爲例。注意:此處設置的密碼是fred要訪問Samba服務器的密碼,並不是登陸Linux 主機的密碼,默認設置」UNIX password  sync=YES」, 則登陸Linux 主機的密碼將改變,與Samba服務器的密碼一致,若是但願這兩個密碼不一致,則設置」UNIX password  sync=NO」) 

[root@smb_server  root]# smbpasswd fred

New SMB password: 此處輸入密碼 

Retype SMB password: 從新輸入密碼 

Password  changed  for user  fred  看到這一句表示密碼設置成功。 

 

4.2.4 啓動Samba服務器 

能夠執行下面的命令來啓動Samba服務器: 

[root@ smb_server  Root]#   service smb start

當能看到下面的顯示,就表示啓動成功。 

Starting  SMB  service          [肯定]

Starting  NMB  service          [肯定]

 

若是要暫停或從新啓動Samba服務器,只要將上面命令中的start 改成stop或restat就能夠了。 

也可讓系統在每次開機時就啓動Samba服務器。執行ntsysv命令,進入Service設置畫面,選擇smb選項,單擊肯定便可。 

4.2.5 測試Samba配置文件 

設置好smb.conf文件以後,執行下面的命令測試smb.conf的設置語法是否正確。 

[root@smb_server  root]#  testparm

Load smb config files from /etc/samba/smb.conf

Processing section "[homes]"

Processing section "[printers]"

Processing section "[tmp]"

Processing section "[public]"

Processing section "[fredsdir]"

Loaded services file OK.

Press enter to see a dump of your service definitions

表示正確。 

檢查正常後,必定要記得執行 

[root@smb_server  root]#   service smb  restart

命令,從新啓動Samba服務器。

4.3 配置Samba 文件共享 

完成了全局環境的設置以後,能夠設置共享的資源(包括共享的文件和打印機)了。先來介紹如何配置Smb.conf,實現文件的共享。

4.3.1 設置共享資源參數 

   comment

#針對共享資源所做的說明、註釋部分

  browseable

#設置用戶是否能夠看到此共享資源。默認值爲yes,若將此參數設置爲no,用戶雖然看不到此資源,可是擁有權限的用戶仍可直接輸入該資源的網址來訪問該資源。

  writable

#設置共享的資源是否能夠寫入。若共享資源是打印機,則不需設置此參數

 

#設置可訪問的用戶。系統會自動將%S轉換成登陸賬號。

   create mode

# 設置文件的訪問權限,默認值爲0744。

   directory mode

設置目錄的訪問權限,默認值爲0755。

path

#若共享資源是目錄,則指定目錄的位置;若爲打印機,則指定打印機隊列的位置。

read only

#設置共享資源是否只讀或能夠寫入,默認值爲yes。若共享資源爲打印機時,此參數無任何意義。這一項與writable相反。

Public

#等同於guest ok選項,表示是否容許用戶不使用賬號和密碼便能訪問此資源。若是起用此功能,當用戶沒有賬號和密碼時,則會利用「guest account=」所設置的賬號名登陸。該選項默認值爲no,即不容許沒有賬號即密碼的用戶使用此資源。

avalible

#設置是否啓用此共享資源。默認值爲yes。若將此參數設置爲no,則無論其餘參數設置爲何,全部人均不得使用此資源。

 

 valid users

 

4.3.2 配置Samba文件共享舉例 

如下經過配置3個不一樣的共享目錄爲例,能夠知道配置Samba文件共享的通常方法。 

[global]

………… 

#採用前面的[global]配置

[homes]

#用來配置用戶訪問本身的目錄

   comment = Home Directories

#註釋

   browseable = no

#用戶私人目錄,不給別人瀏覽(並非不容許別人訪問)

   writable = yes

#容許用戶寫入本身的目錄

   valid users = %S

#可訪問的用戶侷限於用戶本身。%s會被自動轉換爲登陸賬號。

  create mode = 0664

#文件的訪問權限

   directory mode = 0775

#目錄的訪問權限

# This one is useful for people to share files

[tmp]

#這個部分爲全部用戶提供臨時共享的方式

   comment = Temporary file space

#註釋文字

  path = /tmp

#指定位置 

read only = no

#能夠讀寫 

public = yes

#容許用戶不用賬號和密碼訪問

 [public]

#  這個部分爲全部用戶提供能夠共同訪問的目錄。容許staff組用戶寫入,但其餘用戶只可訪問,不能寫入。

 comment = Public Stuff

   path = /home/samba

   public = yes

   writable = yes

   printable = no

   write list = @staff

# write list參數是用來設置具備寫權限的用戶列表。這裏只容許staff組的成員有寫的權限

 [fredsdir]

#這個部分用來設置某一用戶fred的訪問權限。

  comment = Fred’s Service

  path = /usr/fred/private

  valid users = fred

#只有fred能夠訪問(注意:即便security=share,也不表明用戶登陸Linux 主機後能夠訪問任意資源。)該共享目錄

  public = no

  writable = yes

  printable = no

 

說明:配置文件修改後,要從新用testparm測試配置文件,從新啓動Samba 服務器程序。 

4.3.3 使用共享的目錄 

如今以Windows 2000爲例,介紹fred 用戶如何讀取Linux 所共享的資源。 

1.以fred賬號登陸Windows ,而後在「網上鄰居」 中找到前面所設置工做組smbgroup。如圖4-1所示 

 

                             圖4-1

 

2.雙擊工做組smbgroup圖標,將看到Samba 服務器smb_server,如圖4-2所示 

 

                                          圖4-2

3.雙擊服務器smb_server圖標,若在Windows 中使用的密碼與Linux 的用戶密碼相同,便可以看到服務器上所共享的資源(表示登陸Linux 主機成功),如圖4-3所示。 

     4.若在Windows 中使用的密碼與Linux 的用戶密碼不一樣,則會出現「輸入網絡密碼對話框」,如圖4-4 所示,輸入st1在SMB中設置的用戶密碼(因爲設置了」unix password sync=YES」,因此此處輸入的密碼必定要是smb密碼),正確的密碼輸入後,會出現圖4-3所示的窗口。 

 

                                         圖4-3 

 

                                         圖4-4

5.在圖4-3的資源管理器窗口中,雙擊所要訪問的共享目錄(如fredsdir),出現圖4-5所示「輸入網絡密碼」窗口,輸入fred的密碼(由於fredsdir共享目錄只容許fred訪問,因此在此要輸入fred的smb密碼)結果如圖4-6所示

 
                       圖4-5 

 

                     圖4-6 

4.4 配置Samba打印共享 

4.4.1 Samba中的打印共享 

Samba中涉及打印共享的參數主要有如下幾個 

1.  在[global]字段中涉及共享打印機的主要字段 

   printcap name =/etc/printercap

#這是指定打印機配置文件的位置。打印守護進程讀取printcap文件中的配置信息,監視打印機的工做狀況。

   load printers

#指定是否要加載打印機(使打印機能夠共享)。默認值爲yes。

.

#若是用戶想要自動載入打印機列表,而不是個別地安裝,則必須在此指定以上兩項

   printing =cups

#指定打印系統類型。只有在你的打印系統不是標準的狀況下,才必須指定,不然沒必要指定。指定打印系統類型將影響到smb.conf文件中與打印機相關的命令(如print,lpq,lppause,lpresune)的執行方式。默認的打印系統類型爲bsd,其餘的類型還有sysv,plp,lprng,hpux,qnx,cups。

 

4.4.2 配置共享打印機 

1.在Linux Samba 服務器上配置本地打印機 

2.得到 Adobe Postscript  Driver

按下列步驟進行 

(1)到http://www.adobe.com/下載簡體中文版Adobe Postscript  Driver,文件名爲Winstchs.exe。 

(2)在Windows 環境(如Windows 2000 Professional)下安裝。 

(3)進入Windows 計算機C:WINNTsystem32spooldrivers目錄,從子目錄w32x86和WIN40中挑選出表4-1所示的8個文件,而且將文件名字母所有改成大寫。 

表4-1

 

 

ADFONTS.MFM

ADOBEPS4.HLP

ADOBEPSU.DLL

DEFPRTR.PRO

ADOBEPS4.DRV

ADOBEPS5.DLL

ADOBEPSU.HLP

ICONLIB.DLL

 

 

(4) 在Linux 計算機上建立/usr/share/cups/目錄, 表4-1所示的8個文複製到此目錄下。 

3.設置smb.conf的打印共享配置 

[global]

………… 

#按上文將有關共享打印機的幾個主要配置參數寫到此處。

[printers]

#這部分用於配置打印機共享,全部用戶均可以共享打印機。

  comment = All Printers

#註釋文字

   path = /var/spool/samba

#設置打印機隊列的位置,用戶必須自行建立該目錄,存放打印的臨時文件

   browseable = no

#不容許瀏覽共享打印機

# Set public = yes to allow user ’guest account’ to print

   guest ok = no

#必須用賬號和密碼才能夠訪問共享打印機

   writable = no

#共享打印機,writable必須設置爲no

   printable = yes

#容許用戶更改打印機隊列中的文件

 [fredsprn]

#該共享的打印機只容許fred私人使用

  comment = Fred’s Printer

  valid users = fred

  path = /home/fred

#打印機隊列是fred的用戶目錄,要主義fred必須有權訪問該目錄。

  printer = freds_printer

  #設置共享打印機的名稱,此參數又能夠寫成「printer name=」,該參數若是放在[global]字段,全部打印服務用到的打印機名都將是同樣的

  public = no

  writable = no

 printable = yes

 

4.爲Windows 客戶機準備打印驅動

爲了給Windows 客戶機準備打印驅動,能夠運行cupsaddsmb命令。執行以下的操做將打印機驅動程序放置在/etc/samba/drivers目錄下。

建立/etc/samba/drivers目錄 

[root@smb_sever root] #mkdir /etc/samba/drivers

 

運行cupsaddsmb命令,以root身份執行該命令,共享全部打印機 

[root@smb_sever root]# cupsaddsmb  -a  -U  root

 

5.從Windows 客戶機訪問Samba 共享打印機 

當配置好Samba 共享打印機以後,合法用戶就能夠在Windows 的網上鄰居看到被共享的打印機。雙擊共享的打印機,在彈出的窗口中確認安裝此打印機驅動便可。

4.5 在Linux環境下應用Samba服務 

在Linux平臺客戶機上使用Windows 計算機提供的共享資源或Linux Samba 服務器提供的共享資源,一般有兩種方法。分別是使用smbclient命令和使用smbmount命令。 

如今以使用Windows 計算機提供的共享資源爲例分別介紹這兩種方法。先在Windows 中設置共享的文件夾,Windows 計算機NetBios名爲win,IP地址爲192.168.0.3,共享的文件夾共享名爲share_dir。Linux計算機名爲lin,且安裝了smb組件。 

4.5.1 使用smbclient命令 

在Linux計算機上,執行如下命令 

[root@lin  root] # smbclient  -L  win

或者 

[root@lin  root] # smbclient  -L  192.168.0.3

 

結果在Linux計算機上列表顯示出win所提供的全部共享信息。 

在Linux計算機上,執行如下命令 

[root@lin  root] # smbclient  //win(或IP地址)/share_dir  -U  tom

其中tom是Windows 計算機上的用戶。系統提示輸入tom的密碼,輸入正確後,系統提示 

smb:>

此時,就能夠向使用FTP客戶的方法使用smbclient。 

4.5.2 使用smbmount命令 

知道某臺主機所共享的資源後,執行smbmonut命令將遠程共享掛載到本地。 

[root@lin  root] # mkdir –p /mnt/smb/win_share_dir

先建立掛載點目錄

[root@lin  root] #smbmount  //win/share_dir  /mnt/smb/win_share_dir

將遠程共享//win/share_dir//win/share_dir掛載到本地目錄/mnt/smb/win_share_dir

這樣就能夠象訪問本機目錄同樣操做此掛載的目錄了。若要卸載已掛載的目錄,則執行umount命令便可。 

[root@lin  root]#umount   /mnt/smb/win_share_dir

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息