一、服務介紹
Samba是在Linux和UNIX系統上實現SMB協議的一個自由軟件服務,屬於C/S架構。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源
二、服務的發展
在早期的網絡中,數據的傳輸一般都是在FTP服務器上進行的傳輸,雖然FTP服務子啊傳輸數據時比較方便,但是卻有一個缺點,那就是用戶無法直接修改主機上的數據,也就是說我們如果想去對一個數據做修改那么只能通過在服務端上將源數據下載到客戶端之后才可以進行修改,因此數據需要在服務端和客戶端上都有存在,這樣的話就會有一個問題,如果說某一次修改了數據之后但是沒有及時的上傳會服務端,過了一陣后就無法確定哪個數據是最新的數據。
那么這個時候就需要有一種文件系統,直接滿足在客戶端就可以修改存儲數據,那么只要保證我們的服務端擁有這套數據就可以,后來就引用了NFS文件系統,那么在Windows下也有這種文件系統那就是CIFS,但是這種服務僅可以讓Windows之間來進行共享,不可以錯系統的進行數據共享,這就是一個問題。
1991 年一個名叫安德魯的大學生就有這樣的困擾,他手上有三部機器,分別是跑DOS的個人計算機、DEC公司的 Digital Unix 系統以及Sun的 Unix 系統。在當時,DEC 公司有發展出一套稱為 PATHWORKS 的軟件,這套軟件可以用來分享 DEC 的Unix 與個人計算機的DOS這兩個操作系統的檔案數據,可惜讓他覺得較困擾的是,Sun的 Unix 無法藉由這個軟件來達到數據分享的目的。這個時候哥們就想說既然這兩部系統可以相互溝通,沒道理Sun 就必需這么苦命吧?可不可以將這兩部系統的運作原理找出來,然后讓 Sun這部機器也能夠分享檔案數據呢?,為了解決這樣的的問題,這老兄就自行寫了個程序去偵測當 DOS 與 DEC 的 Unix 系統在進行數據分享傳送時所使用到的通訊協議信息,然后將這些重要的信息擷取下來,並且基於上述所找到的通訊協議而開發出ServerMessage Block (SMB) 這個檔案系統,而就是這套SMB軟件能夠讓Unix與DOS互相的分享數據!
因此哥們就去申請了 SMBServer ( Server Message Block 的簡寫 )這個名字來做為他撰寫的這個軟件的商標,可惜的是,因為SMB 是沒有意義的文字,因此沒有辦法達成注冊。既然如此的話,那么能不能在字典里面找到相關的字詞可以做為商標來注冊呢?翻了老半天,呵呵!這個SAMBA剛好含有 SMB ,又是熱情有勁的拉丁舞蹈的名稱。
Samba有兩個守護進程:smb和nmb(139、445端口)
三.實現Linux與Windows之間共享
[root@localhost ~]# yum -y install samba //安裝服務 [root@localhost ~]# vi /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = /dev/null printcap name = lpstat load printers = no cups options = raw disable spoolss = yes [share] path = /opt/share browseable = yes public = yes writable = yes 參數詳解: [global] samba服務器的全局設置,對整個服務器有效 load printers = no //是否啟用打印機。 cups options = raw //打印系統,建立文件時所給的權限 printcap name = /dev/null //設置獲取打印機描述信息的文件位置 printcap name = lpstat printing = bsd //定義打印機的系統類型,可選項有:bsd、sysv、plp、lprng、aix、hpux、qnx、cups disable spoolss = yes //新增,禁用打印機共享
[root@localhost ~]# mkdir /opt/share //創建共享目錄 [root@localhost ~]# chmod 777 /opt/share 賦與 共享目錄所有權限 [root@localhost ~]# systemctl start smb [root@localhost ~]# systemctl start nmb //啟動samba守護進程 [root@localhost ~]# netstat -ntpl //查找139、445端口 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2362/smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2362/smbd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 917/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1119/master tcp6 0 0 :::445 :::* LISTEN 2362/smbd tcp6 0 0 :::139 :::* LISTEN 2362/smbd tcp6 0 0 :::22 :::* LISTEN 917/sshd tcp6 0 0 ::1:25 :::* LISTEN 1119/master [root@localhost ~]# smbpasswd -a root //創建samba用戶密碼
在Windows下驗證
四.實現Linux之間共享
yum install samba-client cifs-utils -y(在客戶端安裝)
smbclient -L 192.168.100.111 -U root
mount -t cifs //192.168.100.111/share /mnt/
df -h
Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 18G 900M 17G 6% / devtmpfs 903M 0 903M 0% /dev tmpfs 913M 0 913M 0% /dev/shm tmpfs 913M 8.6M 904M 1% /run tmpfs 913M 0 913M 0% /sys/fs/cgroup /dev/sda1 497M 125M 373M 25% /boot tmpfs 183M 0 183M 0% /run/user/0 //192.168.100.111/share 18G 1.5G 17G 9% /mnt