第十一章 網絡文件共享服務之samba

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。

在此之前我們已經瞭解了NFS和FTP,NFS與samba一樣,也是在網絡中實現文件共享的一種實現,但不幸的是,其不支持windows平臺,而本章要提到的samba是能夠在任何支持SMB協議的主機之間共享文件的一種實現,當然也包括windows。


SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。

SMB協議是C/S型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。

通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網主機分享資源,還能與全世界的電腦分享資源。


Samba監聽端口有:

  tcp的139,445號端口

  udp的137,138號端口


tcp端口相對應的服務是smbd服務,其作用是提供對服務器中文件、打印資源的共享訪問

udp端口相對應的服務是nmbd服務,其作用是提供基於NetBIOS主機名稱的解析


Samba服務腳本:

  /etc/rc.d/init.d/nmb

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


Samba進程:

  nmbd:對應netbios

  smbd:對應cifs協議

  winbindd + ldap:對應Windows AD活動目錄


Samba用戶:

  帳號:都是系統用戶,/etc/passwd

  密碼:Samba服務自有密碼文件,通過smbpasswd -a USERNAME命令設置


Samba安全級別:

  Samba服務器的安全級別有四個,分別是share,user,server,domain

  share:表示匿名訪問

  user:表示基於本地的驗證

  server:表示由另一臺指定的服務器對用戶身份進行認證

  domain:表示由域控進行身份驗證


Samba配置文件:/etc/samba/smb.conf

  Samba主配置文件的配置內容默認包含三個部分,分別是[global]全局配置、[homes]宿主目錄共享設置、[printers]打印機共享設置

  [global]全局配置的設置項對整個samba服務器都有效

  [homes]則用來設置Linux用戶的默認共享,對應用戶的宿主目錄。當用戶訪問服務器中與自己用戶名同名的共享目錄時,通過驗證後將會自動映射到該用戶的宿主目錄中


  具體配置參數:   

workgroup    #表示設置工作組名稱;
server string  #表示描述samba服務器;
security     #表示設置安全級別,其值可爲share、user、server、domain;
passdb backend #表示設置共享帳戶文件的類型,其值可爲tdbsam(tdb數據庫文件)、ldapsam(LDAP目錄認證)、smbpasswd(兼容舊版本samba密碼文件);
comment      #表示設置對應共享目錄的註釋,說明信息,即文件共享名;
browseable    #表示設置共享是否可見;
writable     #表示設置目錄是否可寫
path         #表示共享目錄的路徑;
guest ok    #表示設置是否所有人均可訪問共享目錄;
printable    #表示設置是否爲打印機

  測試配置文件是否有語法錯誤,以及顯示最終生效的配置:使用testparm命令

testparm


web界面配置samba:

  samba-swat包提供了在web界面上配置samba的功能,其自帶web服務,默認端口爲901,通過xinetd來管理


Samba訪問方式:作爲客戶端

  交互式數據訪問:

smbclient -L HOST -U USERNAME
smbclient //SERVER/shared_name -U USERNAME

  基於掛載的方式訪問:

mount -t cifs //SERVER/shared_name -o username=USERNAME,password=PASSWORD


smbpasswd命令:

  -a Sys_User:添加系統用戶爲samba用戶併爲其設置密碼

  -d:禁用用戶帳號

  -e:啓用用戶帳號

  -x:刪除用戶帳號


Samba示例:

#使用yum命令安裝samba服務器:
yum -y install samba-*

#配置selinux安全機制(去除26行與29行的#號):
sed -i '26d' /etc/samba/smb.conf
sed -i '25 a setsebool -P samba_domain_controller on' /etc/samba/smb.conf
sed -i '29d' /etc/samba/smb.conf
sed -i '28 a setsebool -P samba_enable_home_dirs on' /etc/samba/smb.conf
#這兩行生效後,自己的home目錄就可以正常讀寫了。

#如果想將/test目錄設置成完全的共享就要改變文件目錄的selunux:
#chcon -t samba_share_t /test

#設置共享類型,有匿名訪問,有本地用戶驗證,默認爲user用戶驗證:
#設置爲匿名共享:
#sed -i '101d' /etc/samba/smb.conf
#sed -i '100 a security = share' /etc/samba/smb.conf
#設置爲本地用戶驗證:
#sed -i '101d' /etc/samba/smb.conf
#sed -i '100 a security = user' /etc/samba/smb.conf
#設置爲另一臺服務器進行遠程驗證:
#sed -i '101d' /etc/samba/smb.conf
#sed -i '100 a security = server' /etc/samba/smb.conf
#設置爲域控驗證:
#sed -i '101d' /etc/samba/smb.conf
#sed -i '100 a security = domain' /etc/samba/smb.conf

#假設現在有一個文件夾爲test,那麼就像下面這樣來設置共享:
#設置共享的標識:
echo '[test]' >> /etc/samba/smb.conf

#設置共享的顯示名,即在訪問時看到的共享名,假設這裏共享名爲test:
echo 'comment = test' >> /etc/samba/smb.conf

#設置共享路徑:
echo 'path = /test' >> /etc/samba/smb.conf

#設置共享是否可見:
echo 'browseable = yes' >> /etc/samba/smb.conf

#設置是否所有人均可訪問:
echo 'guest ok = yes' >> /etc/samba/smb.conf

#設置目錄是否可寫:
echo 'writable = yes' >> /etc/samba/smb.conf

#設置是否允許匿名用戶訪問:
echo 'public = yes' >> /etc/samba/smb.conf

#設置可以寫的用戶或組:
echo 'write list = root,@root' >> /etc/samba/smb.conf

#限制訪問端:
#設置可以訪問的用戶或組:
echo 'valid users = root,@root' >> /etc/samba/smb.conf

#設置拒絕來自192.168.72.1的用戶訪問:
echo 'hosts deny = 192.168.72.1' >> /etc/samba/smb.conf

#設置允許來自192.168.72.2的用戶訪問:
echo 'hosts allow = 192.168.72.2' >> /etc/samba/smb.conf

#映射共享目錄:
#創建用戶one:
#useradd one
#爲one用戶創建smb共享密碼:
#smbpasswd -a one

#假設這裏映射one用戶爲aaa用戶,那麼就要在/etc/samba/smbusers文件中添加如下內容:
#echo 'one = aaa' >> /etc/samba/smbusers

#在全局配置中添加如下內容:
sed -i '244 a username map = /etc/samba/smbusers' /etc/samba/smb.conf

#啓動smb服務:
#service smb start

#重啓smb服務:
service smb restart

#重新加載smb服務:
#service smb reload

#設置smb服務隨系統啓動而啓動:
chkconfig smb on

#建立共享文件夾:
mkdir /test


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章