SMB服务简介
?
1、Samba簡介
Samba是種自由軟件,用來讓UNIX系列的操作系統與微軟Windows操作系統的SMB/CIFS(Server Message Block/Common Internet File System)網絡協定做連結。在目前的版本(v3),不僅可存取及分享SMB的資料夾及打印機,本身還可以整合入Windows Server的網域、扮演為網域控制站(Domain Controller)以及加入Active Directory成員。簡而言之,此軟件在Windows與UNIX系列OS之間搭起一座橋梁,讓兩者的資源可互通有無。
?
2、SMB協議
在安裝Samba系統之前,很有必要了解一下Samba是如何工作的。Samba之所以能夠工作,是因為它模仿的是Windows內核的文件和打印共享協議,該協議稱之為SMB?協議(Server Message Block )。SMB在Windows出現之前就已經存在了。該協議可以追溯到上個世紀的80年代,它是由英特爾、微軟、IBM、施樂以及3com等公司聯合提出的。雖然在過去的20年中,該協議得到了擴展,但是該協議的基本理論仍然是相同的。
微軟已經將SMB改名為公共因特網文件系統(CIFS,Common Internet File System )。這在一定程度上是由于它想與最初的基于NetBIOS的SMB保持一定的距離。最初,NetBIOS是一個偉大的工具,但是漸漸地顯示出該工具無法處理在內部網絡中連接到計算機上的全部計算機的個數,或者在因特網上無法顯示連接到當前計算機上的計算機的個數。
3、Samba特點及作用
特點:可以實現跨平臺文件傳輸,并支持在線修改
作用:(a)分享檔案與打印機服務;
???????? ? (b)可以提供用戶登入?SAMBA?主機時的身份認證
???????? ? (c)可以進行?Windows?網絡上的主機名解析?(NetBIOS name)
?
4、samba的守護進程
smbd:提供對服務器中文件、打印資源的共享訪問,端口號為?139 445
nmbd:提供基于NetBIOS主機名稱的解析,端口號為137 138
?
?
5、Samba的主要配置文件
(1)對應NetBOIS名與主機IP的文件,一般samba會自動搜索(只對本機生效)
/etc/samba/lmhosts
?
(2)samba密碼保存文件,默認不存在:/etc/samba/smbpasswd
?
(3)用戶別名,用于適用不同操作系統中用戶名習慣。需要配置文件中“username map”選項支持:/etc/samba/smbusers
?
(4)Samba的服務腳本:/etc/init.d/smb
?
(5)Samba的主配置文件:? /etc/samba/smb.conf
?
(6)檢測配置文件是否正確:testparm
6、Samba配置文件詳解
(1)smb.conf文件的主配置內容詳解
[global]:全局設置
[homes]:用戶目錄共享設置
[printers]:打印機共享設置
[myshare]:自定義名稱的共享目錄設置
?
==================Global Settings ===================
[global]
?
config file = /usr/local/samba/lib/smb.conf.%m
說明:config file可以讓你使用另一個配置文件來覆蓋缺省的配置文件。
?
workgroup = WORKGROUP
說明:設定?Samba?所要加入的工作組或者域。
?
server string = Samba Version %v
說明:設定?Samba的注釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。
?
netbios name = smbserver
說明:設置Samba的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了。
?
interfaces = lo eth0 192.168.115.2/24 192.168.116.2/24
說明:設置Samba監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。
?
hosts allow = 192.168.112.0,192.168.10.1
說明:表示允許連接到Samba的客戶端,多個參數以空格逗號隔開。可以用一個IP表示,也可以用一個網段表示。hosts deny?與hosts allow?剛好相反。
?
max connections = 0
說明:指定連接Samba的最大連接數目。如果超出連接數目,則新的連接請求將被拒絕。0表示不限制。
?
deadtime = 0
說明:設置斷掉一個沒有打開任何文件的連接的時間。單位是分鐘,0代表Samba不自動切斷任何連接。
?
time server = yes/no
說明:time server用來設置讓nmdb成為windows客戶端的時間服務器。
?
log file = /var/log/samba/log.%m
說明:設置Samba日志文件的存儲位置以及日志文件名稱。在文件名后加個宏%m(主機名),表示對每臺訪問Samba的機器都單獨記錄一個日志文件。
?
max log size = 50
說明:設置Samba?日志文件的最大容量,單位為kB,0代表不限制。
?
security = user
說明:設置用戶訪問Samba的驗證方式,一共有四種驗證方式。
1.?share:用戶訪問Samba不需要提供用戶名和口令,?安全性能較低。
2.?user:Samba共享目錄只能被授權的用戶訪問。
3.?server:依靠其他Windows NT/2000或Samba來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows用戶和口令集中到一個NT系統上,使用Windows NT進行Samba認證,?遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作為替代的方式。
4.?domain:域安全級別,使用主域控制器(PDC)來完成認證。
?
passdb backend = tdbsam
說明:passdb backend就是用戶后臺的意思。目前有三種后臺:smbpasswd、tdbsam和ldapsam。sam應該是security account manager(安全賬戶管理)的簡寫。
1.smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統用戶(真實
用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件。
2.tdbsam:該方式則是使用一個數據庫文件來建立用戶數據庫。數據庫文件叫passdb.tdb,默認在/etc/samba目錄下。passdb.tdb用戶數據庫可以使用smbpasswd?–a來建立Samba用戶,不過要建立的Samba用戶必須先是系統用戶。我們也可以使用pdbedit命令來建立Samba賬戶。pdbedit命令的參數很多,我們列出幾個主要的。
pdbedit?–a username:新建Samba賬戶。
pdbedit?–x username:刪除Samba賬戶。
pdbedit?–L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
pdbedit?–Lv:列出Samba用戶列表的詳細信息。
pdbedit?–c?“[D]”?–u username:暫停該Samba用戶的賬號。
pdbedit?–c?“[]”?–u username:恢復該Samba用戶的賬號。
3.ldapsam:該方式則是基于LDAP的賬戶管理方式來驗證用戶。首先要建立LDAP服務,然后設置“passdb backend = ldapsam:ldap://LDAP Server”
?
encrypt passwords = yes/no
說明:是否將認證密碼加密。因為現在windows操作系統都是使用加密密碼,所以一般要開啟此項。不過配置文件默認已開啟。
?
smb passwd file = /etc/samba/smbpasswd
說明:用來定義samba用戶的密碼文件。smbpasswd文件如果沒有那就要手工新建。
?
username map = /etc/samba/smbusers
說明:用來定義用戶名映射,比如可以將root換成administrator、admin等。不過要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba,更貼近windows用戶的習慣。
?
guest account = nobody
說明:用來設置guest用戶名。
?
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。
?
domain master = yes/no
說明:設置Samba服務器是否要成為網域主瀏覽器,網域主瀏覽器可以管理跨子網域的瀏覽服務。
?
local master = yes/no
說明:local master用來指定Samba是否試圖成為本地網域主瀏覽器。如果設為no,則永遠不會成為本地網域主瀏覽器。但是即使設置為yes,也不等于該Samba就能成為主瀏覽器,還需要參加選舉。
?
preferred master = yes/no
說明:設置Samba一開機就強迫進行主瀏覽器選舉,可以提高Samba成為本地網域主瀏覽器的機會。如果該參數指定為yes時,最好把domain master也指定為yes。使用該參數時要注意:如果在本Samba所在的子網有其他的機器(不論是windows NT還是其他Samba)也指定為首要主瀏覽器時,那么這些機器將會因為爭奪主瀏覽器而在網絡上大發廣播,影響網絡性能。
如果同一個區域內有多臺Samba,將上面三個參數設定在一臺即可。
?
os level = 200
說明:設置samba服務器的os level。該參數決定Samba是否有機會成為本地網域的主瀏覽器。os level從0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設置為0,則意味著Samba將失去瀏覽選擇。如果想讓Samba成為PDC,那么將它的os level值設大些。
?
domain logons = yes/no
說明:設置Samba是否要做為本地域控制器。主域控制器和備份域控制器都需要開啟此項。
?
logon . = %u.bat
說明:當使用者用windows客戶端登陸,那么Samba將提供一個登陸檔。如果設置成%u.bat,那么就要為每個用戶提供一個登陸檔。如果人比較多,那就比較麻煩。可以設置成一個具體的文件名,比如start.bat,那么用戶登陸后都會去執行start.bat,而不用為每個用戶設定一個登陸檔了。這個文件要放置在[netlogon]的path設置的目錄路徑下。
?
wins support = yes/no
說明:設置samba服務器是否提供wins服務。
?
wins server = wins服務器IP地址
說明:設置Samba是否使用別的wins服務器提供wins服務。
?
wins proxy = yes/no
說明:設置Samba是否開啟wins代理服務。
?
dns proxy = yes/no
說明:設置Samba是否開啟dns代理服務。
?
load printers = yes/no
說明:設置是否在啟動Samba時就共享打印機。
?
printcap name = cups
說明:設置共享打印機的配置文件。
?
printing = cups
說明:設置Samba共享打印機的類型。現在支持的打印系統有:bsd, sysv, plp, lprng, aix, hpux, qnx
?
共享參數:
================== Share Definitions ==================
[共享名]
?
comment =?任意字符串
說明:comment是對該共享的描述,可以是任意字符串。
?
path =?共享目錄路徑
說明:path用來指定共享目錄的路徑。可以用%u、%m這樣的宏來代替路徑里的unix用戶和客戶機的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我們不打算用home段做為客戶的共享,而是在/home/share/下為每個Linux用戶以他的用戶名建個目錄,作為他的共享目錄,這樣path就可以寫成:path = /home/share/%u;?。用戶在連接到這共享時具體的路徑會被他的用戶名代替,要注意這個用戶名路徑一定要存在,否則,客戶機在訪問時會找不到網絡路徑。同樣,如果我們不是以用戶來劃分目錄,而是以客戶機來劃分目錄,為網絡上每臺可以訪問samba的機器都各自建個以它的netbios名的路徑,作為不同機器的共享資源,就可以這樣寫:path = /home/share/%m?。
?
browseable = yes/no
說明:browseable用來指定該共享是否可以瀏覽。
?
writable = yes/no
說明:writable用來指定該共享路徑是否可寫。
?
available = yes/no
說明:available用來指定該共享資源是否可用。
?
admin users =?該共享的管理者
說明:admin users用來指定該共享的管理員(對該共享具有完全控制權限)。在samba 3.0中,如果用戶驗證方式設置成“security=share”時,此項無效。
例如:admin users =bobyuan,jane(多個用戶中間用逗號隔開)。
?
valid users =?允許訪問該共享的用戶
說明:valid users用來指定允許訪問該共享資源的用戶。
例如:valid users = bobyuan,@bob,@tech(多個用戶或者組中間用逗號隔開,如果要加入一個組就用“@+組名”表示。)
?
invalid users =?禁止訪問該共享的用戶
說明:invalid users用來指定不允許訪問該共享資源的用戶。
例如:invalid users = root,@bob(多個用戶或者組中間用逗號隔開。)
?
write list =?允許寫入該共享的用戶
說明:write list用來指定可以在該共享下寫入文件的用戶。
例如:write list = bobyuan,@bob
?
public = yes/no
說明:public用來指定該共享是否允許guest賬戶訪問。
?
guest ok = yes/no
說明:意義同“public”
?
(2)輔助配置內容
注釋行:以?#?號開頭的行
配置樣例行:以分號(;)開頭的行
結合grep命令可以提取有效配置行
?grep -v "^#" smb.conf | grep -v "^;" | grep -v ^$
(3)常見全局配置項的含義
workgroup?????所在工作組名稱
server string?????服務器描述信息
security?????????安全級別,可用值如下:
share??????? ???????不需要密碼可以訪問
user????????? ???????使用系統用戶,samba密碼登陸
server ???????????由其他服務器提供認證
domain ?????????由域控制器提供認證
?
log file?????????日志文件位置,“%m”變量表示客戶機地址
max log size?????日志文件的最大容量,單位為KB
passwd backend?設置共享賬戶文件的類型
(4)常見共享目錄配置項的含義
comment?????對共享目錄的注釋、說明信息
path?????????共享目錄在服務器中對應的實際路徑
guest ok? ????是否允許所有人訪問,等效于“public”
read only??????所有人只讀
writable??????所有人可寫,與read only的作用相反
write list? ??????擁有寫權限的用戶列表
browseable?????目錄是否?瀏覽?可見
valid users???????指定可以訪問的用戶
create mask??上傳文件的默認權限
directory mask?目錄的默認權限
(5)常見的變量
%v??? ?samba的版本號
%S??任意用戶可以登陸
%m? client端的NetBIOS主機名
%L????服務器端的NetBIOS主機名
%u???當前登陸的用戶名
%g????當前登陸的用戶組名
?
7、使用Samba作為企業共享服務器案例詳解
提示:本次Samba安裝及配置是在CentOS7.x系統上進行的。
?
某公司有銷售、客服、財務三個部門,每個部門有一個領導,現在需要創建一個Samba服務器,每個部門有一個單獨的文件共享目錄,里面存放的是各部門的工作報表及共享文件,需要本部門所有人都有上傳、下載、創建、修改文件的權限,但刪除時,只能刪除自己創建的文件,各部門領導擁有自己部門共享目錄的所有權限。
日常工作中經常會遇到各部門需要交叉訪問文件,所以又創建了一個公司內部所有人都能查看和下載文件的共享目錄,該共享目錄中有三個文件夾,分別對應銷售、客服、財務三個部門,但是普通員工只有查看和下載的權限,只有各部門領導擁有本部門目錄的所有權限。總目錄所有者為root
?
(1)安裝前的準備工作
a、關閉防火墻和SElinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# sed -i "7s/enforcing/disabled/" /etc/selinux/config
[root@localhost ~]# setenforce 0
?
b、配置好yum源,準備好客戶機
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
?
c、創建好需要的用戶賬號和共享目錄
按照下表要求創建各部門需要的賬號和共享目錄
注意:這里是模擬環境,實際環境不要使用這么簡單的密碼
| ? | 部門領導賬號 | 部門員工1 | 部門員工2 | 部門共享目錄 | 全體共享目錄 |
| 銷售部用戶 | xiaoshou | xiaoshou1 | xiaoshou2 | /xiaoshou 本部門可訪問 | /share/xiaoshou 全體可訪問 |
| 對應的密碼 | 123 | 123 | 123 | ||
| 客服部用戶 | kefu | kefu1 | kefu2 | /kefu 本部門可訪問 | /share/kefu 全體可訪問 |
| 對應的密碼 | 123 | 123 | 123 | ||
| 財務部用戶 | caiwu | caiwu1 | caiwu2 | /caiwu 本部門可訪問 | /share/caiwu 全體可訪問 |
| 對應的密碼 | 123 | 123 | 123 |
(1)創建銷售部需要的賬號
[root@localhost ~]# useradd xiaoshou
[root@localhost ~]# useradd xiaoshou1
[root@localhost ~]# useradd xiaoshou2
[root@localhost ~]# echo '123'|passwd --stdin xiaoshou
[root@localhost ~]# echo '123'|passwd --stdin xiaoshou1
[root@localhost ~]# echo '123'|passwd --stdin xiaoshou2
(2)創建客服部需要的賬號
[root@localhost ~]# useradd kefu
[root@localhost ~]# useradd kefu1
[root@localhost ~]# useradd kefu2
[root@localhost ~]# echo '123'|passwd --stdin kefu
[root@localhost ~]# echo '123'|passwd --stdin kefu1
[root@localhost ~]# echo '123'|passwd --stdin kefu2
(3)創建財務部需要的賬號
[root@localhost ~]# useradd caiwu
[root@localhost ~]# useradd caiwu1
[root@localhost ~]# useradd caiwu2
[root@localhost ~]# echo '123'|passwd --stdin caiwu
[root@localhost ~]# echo '123'|passwd --stdin caiwu1
[root@localhost ~]# echo '123'|passwd --stdin caiwu2
?
(4)創建相應的共享目錄
[root@localhost ~]# mkdir /xiaoshou
[root@localhost ~]# mkdir /kefu
[root@localhost ~]# mkdir /caiwu
[root@localhost ~]# mkdir /share
[root@localhost ~]# mkdir /share/xiaoshou
[root@localhost ~]# mkdir /share/kefu
[root@localhost ~]# mkdir /share/caiwu
(2)安裝并啟動Samba服務
[root@localhost ~]# yum -y install samba
[root@localhost ~]# systemctl start smb
[root@localhost ~]# netstat -antp|grep smb
tcp??????? 0????? 0 0.0.0.0:139???? 0.0.0.0:*?????????????? LISTEN????? 2403/smbd??????????
tcp??????? 0????? 0 0.0.0.0:445???? 0.0.0.0:*?????????????? LISTEN????? 2403/smbd??????????
tcp6?????? 0???? ?0 :::139????????? :::*??????????????????? LISTEN????? 2403/smbd??????????
tcp6?????? 0????? 0 :::445????????? :::*??????????????????? LISTEN????? 2403/smbd???
?
(3)開放Samba權限,使用系統權限控制共享權限
系統權限對共享目錄生效,Samba服務器權限也會對共享目錄生效,在實際的工作中,可能共享目錄較多,每個部門用戶多,會出現權限交叉。建議使用系統權限控制共享目錄權限,而不是使用samba權限。
a、修改Samba的主配置文件,配置共享的目錄。
[root@localhost ~]# cp -a /etc/samba/smb.conf /etc/samba/smb.conf.back
[root@localhost ~]# vim /etc/samba/smb.conf
[xiaoshou]
??????? path = /xiaoshou
??????? browseable = yes
??????? writable = yes
?
[kefu]
??????? path = /kefu
??????? browseable = yes
??????? writable = yes
?
[caiwu]
??????? path = /caiwu
??????? browseable = yes
??????? writable = yes
?
[share]
??????? path = /share
??????? browseable = yes
??????? writable = yes
b、設置所有共享目錄的系統權限
設置銷售部共享目錄/xiaoshou權限
[root@localhost ~]# gpasswd -M xiaoshou1,xiaoshou2 xiaoshou?把兩個銷售加入銷售領導的組
[root@localhost ~]# chown xiaoshou:xiaoshou /xiaoshou?
設置銷售部共享目錄的所有者和所屬組為銷售領導
[root@localhost ~]#?chmod 3770 /xiaoshou?
設置銷售部共享目錄的權限,用戶創建文件時默認的用戶組、粘著位和讀寫權限
?
設置客服部共享目錄/kefu權限
[root@localhost ~]# gpasswd -M kefu1,kefu2 kefu
[root@localhost ~]# chown kefu:kefu /kefu
[root@localhost ~]#?chmod 3770 /kefu
?
設置財務部共享目錄/caiwu權限
[root@localhost ~]# gpasswd -M caiwu1,caiwu2 caiwu
[root@localhost ~]# chown caiwu:caiwu /caiwu
[root@localhost ~]# chmod 3770 /caiwu
?
設置全體共享目錄/share權限
[root@localhost ~]# chown xiaoshou /share/xiaoshou
[root@localhost ~]# chown kefu /share/kefu
[root@localhost ~]# chown caiwu /share/caiwu
[root@localhost ~]# chmod 755 /share/xiaoshou
[root@localhost ~]# chmod 755 /share/kefu
[root@localhost ~]# chmod 755 /share/caiwu
(4)重啟Samba服務并查看共享是否設置成功
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# yum -y install samba-client???安裝Samba客戶端軟件
[root@localhost ~]# smbclient -L 192.168.115.120??查看共享是否設置成功
Enter SAMBA\root's password:
Anonymous login successful
OS=[Windows 6.1] Server=[Samba 4.6.2]
?
???????? Sharename?????? Type????? Comment
???????? ---------?????? ----????? -------
???????? print$????????? Disk????? Printer Drivers
?????????xiaoshou??????? Disk?????
???????? kefu??????????? Disk??????看到這里就說明共享設置成功
???????? caiwu?????????? Disk?????
???????? share?????????? Disk??????
???????? IPC$??????????? IPC?????? IPC Service (Samba 4.6.2)
Anonymous login successful
OS=[Windows 6.1] Server=[Samba 4.6.2]
?
???????? Server?????????????? Comment
???????? --------- ???????????-------
?
???????? Workgroup??????????? Master
???????? ---------??????????? -------
(5)轉化系統用戶為Samba用戶
[root@localhost ~]# smbpasswd -a xiaoshou
New SMB password:
Retype new SMB password:
Added user xiaoshou.
[root@localhost ~]# smbpasswd -a xiaoshou1
New SMB password:
Retype new SMB password:
Added user xiaoshou1.
[root@localhost ~]# smbpasswd -a xiaoshou2
New SMB password:
Retype new SMB password:
Added user xiaoshou2.
?
[root@localhost ~]# smbpasswd -a kefu
New SMB password:
Retype new SMB password:
Added user kefu.
[root@localhost ~]# smbpasswd -a kefu1
New SMB password:
Retype new SMB password:
Added user kefu1.
[root@localhost ~]# smbpasswd -a kefu2
New SMB password:
Retype new SMB password:
Added user kefu2.
?
[root@localhost ~]# smbpasswd -a caiwu
New SMB password:
Retype new SMB password:
Added user caiwu.
[root@localhost ~]# smbpasswd -a caiwu1
New SMB password:
Retype new SMB password:
Added user caiwu1.
[root@localhost ~]# smbpasswd -a caiwu2
New SMB password:
Retype new SMB password:
Added user caiwu2.
?
查看Samba用戶
[root@localhost ~]# pdbedit -L
xiaoshou:1000:
xiaoshou2:1002:
kefu1:1004:
xiaoshou1:1001:
kefu:1003:
kefu2:1005:
caiwu:1006:
caiwu1:1007:
caiwu2:1008:
(6)使用Samba用戶測試設置的權限是否符合要求
在Windows中打開一個文件夾,在地址欄中輸入?\\192.168.115.120回車,然后輸入Samba用戶名和密碼即可進行登入,之后可以在各大共享目錄進行上傳文件、創建文件、刪除文件、修改文件內容、給文件改名等操作,驗證權限是否符合我們設置的要求。(切換多個用戶進行驗證)
??在Windows中登陸Samba賬號以后,如果電腦沒有重啟過,會有緩存導致下次登陸Samba共享文件時自動以上次的用戶進入而不需要輸入密碼,這時我們可以在Windows中打開cmd輸入"net use * /del"回車進行清理Windows登錄Samba的緩存。
轉載于:https://www.cnblogs.com/aisa/p/8624720.html
總結
- 上一篇: Catalan数总结
- 下一篇: struts2_模型驱动