FTP文件傳輸服務確實可讓主機之間的文件傳輸變得簡單方便,可是FTP協議的本質是傳輸文件,而非共享文件,所以要想經過客戶端直接在服務器上修改文件內容仍是一件比較麻煩的事情。html
1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,服務器消息塊)協議,旨在解決局域網內的文件或打印機等資源的共享問題,這也使得在多個主機之間共享文件變得愈來愈簡單。到了1991年,當時還在讀大學的Tridgwell爲了解決Linux系統與Windows系統之間的文件共享問題,基於SMB協議開發出了SMBServer服務程序。這是一款開源的文件共享軟件,通過簡單配置就可以實現Linux系統與Windows系統之間的文件共享工做。當時,Tridgwell想把這款軟件的名字SMBServer註冊成爲商標,但卻被商標局以SMB是沒有意義的字符而拒絕了申請。後來Tridgwell不斷翻看詞典,忽然看到一個拉丁舞蹈的名字—Samba,並且這個熱情洋溢的舞蹈名字中又剛好包含了「SMB」,因而Samba服務程序的名字由此誕生。Samba服務程序如今已經成爲在Linux系統與Windows系統之間共享文件的最佳選擇。linux
首先使用 rpm -qa | grep samba 命令查看系統有沒有安裝Samba服務數據庫
若是沒有,使用 yum install samba 命令進行安裝vim
。。。中間部分輸出信息省略。。。瀏覽器
使用 rpm -qa | grep samba 命令查看安裝的Samba信息安全
service smb start # 啓動Samba服務服務器
service smb stop # 中止Samba服務網絡
service smb restart # 從新啓動Samba服務dom
service smb status # 查看Samba服務的狀態tcp
chkconfig smb on # 加入開機啓動項
因爲在Samba服務程序的主配置文件中,註釋信息行實在太多,不便於分析裏面的重要參數,所以先把主配置文件用mv命令改個名字,而後使用cat命令讀入主配置文件,再在grep命令後面添加-v參數(反向選擇),分別去掉全部以井號(#)和分號(;)開頭的註釋信息行,對於剩餘的空白行可使用^$參數來表示並進行反選過濾,最後把過濾後的可用參數信息經過重定向符覆蓋寫入到原始文件名稱中。執行過濾後剩下的Samba服務程序的參數並不複雜,爲了更方便讀者查閱參數的功能,下面的表中羅列了這些參數以及相應的註釋說明。
mv /etc/samba/smb.conf /etc/samba/smb.conf-backup
cat /etc/samba/smb.conf-backup | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
vim /etc/samba/smb.conf
Samba服務程序中的參數以及做用
[global] | #全局參數。 | |
workgroup = MYGROUP | #工做組名稱 | |
server string = Samba Server Version %v | #服務器介紹信息,參數%v爲顯示SMB版本號 | |
log file = /var/log/samba/log.%m | #定義日誌文件的存放位置與名稱,參數%m爲來訪的主機名 | |
max log size = 50 | #定義日誌文件的最大容量爲50KB | |
security = user | #安全驗證的方式,總共有4種 | |
#share:來訪主機無需驗證口令;比較方便,但安全性不好 | ||
#user:需驗證來訪主機提供的口令後才能夠訪問;提高了安全性 | ||
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理帳戶) | ||
#domain:使用域控制器進行身份驗證 | ||
passdb backend = tdbsam | #定義用戶後臺的類型,共有3種 | |
#smbpasswd:使用smbpasswd命令爲系統用戶設置Samba服務程序的密碼 | ||
#tdbsam:建立數據庫文件並使用pdbedit命令創建Samba服務程序的用戶 | ||
#ldapsam:基於LDAP服務進行帳戶驗證 | ||
load printers = yes | #設置在Samba服務啓動時是否共享打印機設備 | |
cups options = raw | #打印機的選項 | |
[homes] | #共享參數 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共享信息是否在「網上鄰居」中可見 | |
writable = yes | #定義是否能夠執行寫入操做,與「read only」相反 | |
[printers] | #打印機共享參數 | |
comment = All Printers | ||
path = /var/spool/samba | #共享文件的實際路徑(重要)。 | |
browseable = no | ||
guest ok = no | #是否全部人可見,等同於"public"參數。 | |
writable = no | ||
printable = yes |
第1步:建立用於訪問共享資源的帳戶信息。在CentOS 6和7系統中,Samba服務程序默認都使用的是用戶口令認證模式(user)。這種認證模式能夠確保僅讓有密碼且受信任的用戶訪問共享資源,並且驗證過程也十分簡單。不過,只有創建帳戶信息數據庫以後,才能使用用戶口令認證模式。另外,Samba服務程序的數據庫要求帳戶必須在當前系統中已經存在,不然往後建立文件時將致使文件的權限屬性混亂不堪,由此引起錯誤。
pdbedit命令用於管理SMB服務程序的帳戶信息數據庫,格式爲「pdbedit [選項] 帳戶」。在第一次把帳戶信息寫入到數據庫時須要使用-a參數,之後在執行修改密碼、刪除帳戶等操做時就再也不須要該參數了。pdbedit命令中使用的參數以及做用以下表所示。
用於pdbedit命令的參數以及做用
參數 | 做用 |
-a 用戶名 | 創建Samba用戶 |
-x 用戶名 | 刪除Samba用戶 |
-L | 列出用戶列表 |
-Lv | 列出用戶詳細信息的列表 |
useradd samba # 建立帳戶
pdbedit -a -u samba # 把用來鏈接SMB服務的帳戶信息寫入到數據庫
第2步:建立用於共享資源的文件目錄。在建立時,不只要考慮到文件讀寫權限的問題,並且因爲/home目錄是系統中普通用戶的家目錄,所以還須要考慮應用於該目錄的SELinux安全上下文所帶來的限制。在前面對Samba服務程序配置文件中的註釋信息進行過濾時,這些過濾的信息中就有關於SELinux安全上下文策略的說明,咱們只需按照過濾信息中有關SELinux安全上下文策略中的說明中給的值進行修改便可。修改完畢後執行restorecon命令,讓應用於目錄的新SELinux安全上下文當即生效。
mkdir /home/database/
chown -Rf samba:samba /home/database/
restorecon -Rv /home/database
第3步:設置SELinux服務與策略,使其容許經過Samba服務程序訪問普通用戶家目錄。執行getsebool命令,篩選出全部與Samba服務程序相關的SELinux域策略,根據策略的名稱(和經驗)選擇出正確的策略條目進行開啓便可:
getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on
getsebool -a | grep samba
第4步:在Samba服務程序的主配置文件中,根據下表所提到的格式寫入共享信息。在原始的配置文件中,[homes]參數爲來訪用戶的家目錄共享信息,[printers]參數爲共享的打印機設備。這兩項若是在從此的工做中不須要,徹底能夠註釋掉。
用於設置Samba服務程序的參數以及做用
參數 | 做用 |
[database] | 共享名稱爲database |
comment = Do not arbitrarily modify the database file | 警告用戶不要隨意修改數據庫 |
path = /home/database | 共享目錄爲/home/database |
public = no | 關閉「全部人可見」 |
writable = yes | 容許寫入操做 |
vim /etc/samba/smb.conf
第5步:Samba服務程序的配置工做基本完畢。接下來重啓smb服務(Samba服務程序在Linux系統中的名字爲smb)並配置iptables防火牆,放通Samba服務使用的四個端口(tcp/139,445,udp/137,138),而後就能夠檢驗配置效果了。
service smb restart #從新啓動Samba服務
service smb status #查看Samba服務的狀態
iptables -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -j ACCEPT
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p udp --dport 138 -j ACCEPT
使用iptables命令配置的防火牆默認會在系統下一次重啓時失效,若是想讓配置的防火牆策略永久生效,執行保存命令:
service iptables save
CentOS7下添加端口的操做:
firewall-cmd --zone=public --add-port=139/tcp --permanent(--permanent永久生效,沒有此參數重啓後失效)
firewall-cmd --zone=public --add-port=445/tcp --permanent
firewall-cmd --zone=public --add-port=137/udp --permanent
firewall-cmd --zone=public --add-port=138/udp --permanent
firewall-cmd --reload # 從新加載防火牆
systemctl restart firewalld.service # 重啓防火牆
接下來就是在Windows系統下鏈接Samba服務了,只需在Windows的「運行」命令框中(用快捷鍵「Win+R」就能夠打開)輸入兩個反斜槓,而後再加服務器的IP地址便可。
正確輸入新建的samba帳戶名以及使用pdbedit命令設置的密碼後,就能夠登陸到共享界面中了,以下圖所示。此時,咱們能夠嘗試執行查看、寫入、改名、刪除文件等操做。
Samba爲何會使用四個端口,都是用來幹什麼的?
SMB是基於客戶機/服務器型的協議,於是一臺Samba服務器既能夠充當文件共享服務器,也能夠充當一個Samba的客戶端,例如,一臺在Linux下已經架設好的Samba服務器,Windows客戶端就能夠經過SMB協議共享Samba服務器上的資源文件,同時,Samba服務器也能夠訪問網絡中其它Windows系統或者Linux系統共享出來的文件。
Samba在Windows下使用的是NetBIOS協議,若是你要使用Linux下共享出來的文件,請確認你的Windows系統下是否安裝了NetBIOS協議。
組成Samba運行的有兩個服務,一個是SMB,另外一個是NMB;SMB是Samba的核心啓動服務,監聽139 TCP端口,主要負責創建Linux Samba服務器與Samba客戶機之間的對話,驗證用戶身份並提供對文件和打印系統的訪問,只有SMB服務啓動,才能實現文件的共享;而NMB服務是負責解析用的,監聽137和138 UDP端口,相似與DNS實現的功能,NMB能夠把Linux系統共享的工做組名稱與其IP對應起來,若是NMB服務沒有啓動,就只能經過IP來訪問共享文件。
例如,某臺Samba服務器的IP地址爲192.168.0.162,對應的工做組名稱爲MYWORKGROUP,那麼在Windows的IE瀏覽器輸入下面兩條指令均可以訪問共享文件。其實這就是Windows下查看Linux Samba服務器共享文件的方法。
\\192.168.0.162\共享目錄名稱
\\MYWORKGROUP\共享目錄名稱
Samba服務所使用的端口和協議:
1)Port 137(UDP)- NetBIOS名字服務;nmbd
2)Port 138(UDP)- NetBIOS數據報服務
3)Port 139(TCP)- 文件和打印共享;smbd(基於SMB(Server Message Block)協議,主要在局域網中使用,文件共享協議)
4)Port 389(TCP)- 用於LDAP(Active Directory Mode)
5)Port 445(TCP)- NetBIOS服務在Windows 2000及之後版本使用此端口,(Common Internet File System,CIFS,它是SMB協議擴展到Internet後,實現Internet文件共享)
6)Port 901(TCP)- 用於SWAT,用於網頁管理Samba
本文參考自: