在早期的網(wǎng)絡世界中,文件數(shù)據(jù)在不同主機之間的傳輸大多是使用**ftp,**但是使用ftp服務傳輸檔案使得我們無法直接修改主機上面的檔案數(shù)據(jù)。NFS服務可以實現(xiàn)在客戶端的機器上直接使用服務器上面的文件,但是NFS主要在unix系列操作系統(tǒng)上使用。windows上面也有類似的文件系統(tǒng),那就是cifs(Common Internet File system,通用internet文件系統(tǒng)),cifs的最簡單的用途就是“網(wǎng)上鄰居”,但是cifs只能讓windows機器溝通。
所以,為了實現(xiàn)windows和unix系列系統(tǒng)之間能夠相互溝通,就產(chǎn)生了samba服務。
SMB(Server Messages Block,信息服務塊)是一種在局域網(wǎng)上共享文件和打印機的一種通信協(xié)議,它為局域網(wǎng)內(nèi)的不同計算機之間提供文件及打印機等資源的共享服務。
Samba服務:是提供基于Linux和Windows的共享文件服務,服務端和客戶端都可以是Linux或Windows操作系統(tǒng)??梢曰谔囟ǖ挠脩粼L問,功能比NFS更強大。
環(huán)境:ubuntu20.04
我這里是ubuntu系統(tǒng),直接用命令安裝。
sudo apt-get install samba samba-common -y
一般安裝一個samba就可以了,后面samba-common一般會自動安裝上去,但為了保險,還是一起安裝。有些在其他Linux系統(tǒng)上,還會安裝samba-client,用來連接Linux之間的連接使用,但這里主要給windows使用,而且只作為服務器,所有就不安裝samba-client了。
安裝完查看版本,默認為4.13,官網(wǎng)最新為4.16。所以默認安裝的版本還是很新的。
ubuntu@ubuntu:~$ samba --version
Version 4.13.17-Ubuntu
首先最簡單的配置,找到一個文件夾作為共享文件,如:/ubuntu/home/share
1:更改share文件權限,授予所有權限
sudo chmod 777 /ubuntu/home/share
2:更改配置文件 /etc/samba/smb.conf
sudo vim /etc/samba/smb.conf
最后添加以下內(nèi)容
[share] # 自定義共享名
comment=this is Linux share directory # 描述符,是給系統(tǒng)管理員看的
path=/home/ubuntu/share # 共享的路徑
public=yes # 是否公開,也就是是否能在網(wǎng)上鄰居看到該共享
writable=yes # 是否可寫
保存退出,重啟samba服務
sudo systemctl restart smbd.service
3:windows打開測試
我這里服務器地址是192.168.152.103,所以在運行欄,輸入\192.168.152.103即可訪問
也可以,在“我的電腦”的地址欄輸入\192.168.152.103 直接訪問。
訪問即可看到剛才共享的文件夾,由于賦予了777所有權限,所以任何人創(chuàng)建文件,刪除文件都是可以的。
4:其他配置實例,共享參數(shù)參考
[共享文件夾] # 自定義共享名
comment=Home Directories # 描述符,是給系統(tǒng)管理員看的
path=/home/share # 共享的路徑
public=yes # 是否公開,也就是是否能在網(wǎng)上鄰居看到該共享
browseable=yes # 共享的目錄是否讓所有人可見
writable=yes # 是否可寫
guest ok=no # 是否拒絕匿名訪問,僅當安全級別為 share 時才生效
workgroup=WORKGROUP # 工作組,要設置成跟 Windows 的工作組一致
server string=Samba Server Version %v # 其他 Linux 主機查看共享時的提示符
netbios name=MYSERVER # 用于在 Windows 網(wǎng)上鄰居上顯示的主機名
hosts allow=127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 # 指定允許訪問 samba 服務器的主機
security=share # 定義安全級別
log file=/var/log/samba/log.%m # 定義日志文件,每個訪問的主機會產(chǎn)生獨立的日志文件,%m 是客戶端主機名
max log size=50 # 定義單個日志的最大容量(KB)
passdb backend=tdbsam # Samba 用戶的存儲方式,smbpasswd 表示明文存儲,tdbsam 表示密文存儲
deadtime=10 # 客戶端在10分鐘內(nèi)沒有打開任何 Samba 資源,服務器將自動關閉會話,在大量的并發(fā)訪問環(huán)境中,這樣的設置可以提高服務器性能
display charset=UTF8 # 設置顯示的字符集
max connections=0 # 設置最大連接數(shù),0表示無限制,如果超過最大連接數(shù)則拒絕連接
guest account=nobody # 設置匿名賬戶為nobody
load printers=yes # 是否在啟動 Samba 時就共享打印機
cups options=raw # 設置打印機使用的方式
valid users=user1 user2 user3 # 指定哪些用戶可以訪問,如果不指定則所有用戶都可訪問
invalid users=user1 user2 # 指定哪些用戶不可以訪問
create mask=0775 # 客戶端上傳文件的默認權限
directory mask=0775 # 客戶端創(chuàng)建目錄的默認權限
write list=user1 user2 user3 # 設置可對文件進行寫操作的用戶
admin users=user1 # 設置共享目錄的管理員,具有完全權限
但在公司,部門不同,權限也不同,所以有些文件需要單獨設置權限或者密碼之類的。
1:分配各賬號指定文件夾
如:hr:/samba/HR、it:/samba/IT,pm:/samba/PM,zhangsan可以訪問所有文件夾,在服務器創(chuàng)建好相關文件夾,并賦予777權限。
sudo mkdir -p /samba/HR
sudo mkdir /samba/IT
sudo mkdir /samba/PM
sudo chmod -R 777 /samba/
2:創(chuàng)建賬號及密碼
由于Samba用戶要以系統(tǒng)用戶為基礎,因而需要先創(chuàng)建出系統(tǒng)用戶之后,再將其添加為Samba用戶。
由于不需要這些賬號登錄服務器權限,所以設置參數(shù)sbin/nologin。
sudo useradd -s /sbin/nologin it
sudo useradd -s /sbin/nologin hr
sudo useradd -s /sbin/nologin pm
sudo useradd -s /sbin/nologin zhangsan
然后設置密碼,smbpasswd 命令,用于samba服務中對用戶權限進行管理。
smbpasswd參數(shù):
-a 添加用戶
-x 刪除用戶
-d 凍結用戶
-n 密碼置空
添加設置samba賬號密碼,添加按提示輸入密碼。
sudo smbpasswd -a it
sudo smbpasswd -a hr
sudo smbpasswd -a pm
sudo smbpasswd -a zhangsan
可以通過執(zhí)行“pdbedit -L”命令列表顯示目前系統(tǒng)中已經(jīng)存在的所有Samba用戶。
ubuntu@ubuntu:~$ sudo pdbedit -L
it:1001:
pm:1003:
hr:1002:
zhangsan:1004:
3:添加更改配置文件smb.conf
打開編輯配置文件
sudo vim /etc/samba/smb.conf
在最后添加對應的文件夾
[HR部門]
path=/samba/HR
writeable=yes
browseable=yes
create mask=0775
directory mask=0775
valid users=hr,zhangsan
[IT部門]
path=/samba/IT
writeable=yes
browseable=yes
create mask=0775
directory mask=0775
valid users=it,zhangsan
[PM部門]
path=/samba/PM
writeable=yes
browseable=yes
create mask=0775
directory mask=0775
valid users=pm,zhangsan
4:window測試登錄
在地址欄輸入 \192.168.152.103 打開,可以看到已經(jīng)出現(xiàn)對應的文件夾
隨便打開一個,如it部門,輸入賬號it及密碼,即可登錄進入查看操作,hr和pm賬號則拒絕訪問。
注:如一臺電腦登錄多個賬號,會報錯,例如:這里用 it 賬號登錄it部門,如果在登錄hr文件夾,或者pm文件夾,會報錯
“不允許一個用戶使用一個以上用戶名與一個服務器或共享資源的多重連接。中斷與此服務器或共享資源的所有連接,然后再試一次”
如果需要其他賬號登錄,斷開原賬號解決方法:
可使用以下命令斷掉已有連接(開始 -> cmd)
net use * /del /y #回車后顯示一下內(nèi)容
當然,除非賬號擁有所有權限,如這里的zhangsan賬號,登錄一次,可訪問進入所有文件夾。
有些情況設定,需要自己賬號登錄,只可見自己授權的目錄,其他目錄不可見。
例如:這里 /samba/PM 目錄,只對登錄pm賬號用戶可見。
1:global注釋掉map to guest=bad user
打開編輯配置文件
sudo vim /etc/samba/smb.conf
在 [global] 下找到 map to guest=bad user,這個參數(shù)配置,是實現(xiàn)匿名無須交互輸入用戶名和密碼的,登錄IP訪問時不需要輸入用戶名和密碼了。
在ubuntu中這個參數(shù)是默認是開啟的,所以每次訪問IP是不需要輸入密碼的,如://192.168.152.103 所有用戶可直接訪問,然后訪問里面的目錄,才需要賬號密碼。
由于現(xiàn)在需求是根據(jù)登錄用戶顯示,可見授權的目錄,所以我們需要設置訪問ip需要登錄密碼,里面目錄則不需要密碼了。
[global]
....
# map to guest=bad user #注釋掉這行即可
2:global配置引用子配置文件
配置自己目錄可見,需要通過子配置文件實現(xiàn),所以需要在主配置文件smb.conf中,配置引用子配置文件。
引用子配置文件有兩種方法:
1)第一種方法:config file
在[global]標簽下加入如下參數(shù)(/etc/samba/smb.conf):
[global]
config file=/etc/samba/%U.smb.conf
2)第二種方法:include
在[global]標簽下加入如下參數(shù)(/etc/samba/smb.conf):
[global]
include=/etc/samba/%U.smb.conf
config file和include的區(qū)別是:
1)使用config file時,當以自己的身份訪問Samba服務器,只能看到自己的目錄,其他在smb.conf中定義的共享資源都無法看到。
2)使用include時,當以自己的身份訪問Samba服務器,除了可以看到自己的目錄,其他在smb.conf中定義的共享資源也可以看到。
根據(jù)需要,我們只需要用第一種 config file 的方式。
編輯主配置文件。
sudo vim /etc/samba/smb.conf
在[global] 下添加
[global]
...
include=/etc/samba/%U.smb.conf
3:配置子配置文件
在 /etc/samba/ 目錄下,新建子配置文件pm.smb.conf
sudo vim /etc/samba/pm.smb.conf
添加如下:
[pm部門]
security=user
path=/samba/PM
writeable=yes
browseable=yes
create mask=0775
directory mask=0775
valid users=pm
如果主配置文件已經(jīng)配置過這個,請在主配置文件中提前刪除,僅在子配置文件中配置。
保存退出,重啟samba服務。
sudo systemctl restart smbd.service
4:windows登錄驗證
在運行欄輸入 //192.168.152.103,這時已經(jīng)提示需要輸入密碼了
輸入PM和密碼,進入,只能看到自己的PM部門文件夾,其他的主配置的IT和HR,都看不見,因為沒權限。
測試其他賬號之前,在cmd先刪除登錄的連接 net use * /del /y,否則無法測試,默認保存了pm的賬號信息。
重新連接登錄,輸入it賬號信息
進入,發(fā)現(xiàn)只能看到,主配置文件的配置過的文件夾。
這樣,pm自己的目錄只能pm賬號可見了。
同理,其他的目錄,也可以僅相關賬號可見,可自由發(fā)揮。
1:報錯 “不能訪問此文件夾,因為你組織的安全策略.........”
一般來說,windows默認開啟相關配置的,但是有些沒有開啟,如windows server之類的,訪問提示
“你不能訪問此共享文件夾,因為你組織的安全策略阻止未經(jīng)身份驗證的來賓訪問。這些策略可幫助保護你的電腦免受網(wǎng)絡上不安全設備或惡意設備的威脅?!?/strong>
這時需要開啟來賓訪問。
運行輸入gpedit.msc
打開組策略編輯器后——計算機配置——管理模板——網(wǎng)絡——Lanman工作站——啟用不安全的來賓登錄(雙擊打開把“未配置”更改為“已啟用”)
這時,可以登錄了。
2:重新進入,不提示重新輸入密碼,憑證管理
一般情況下,一臺電腦,一個用戶,登錄后,也不需要再次進入輸入密碼。
但是自己配置做測試的時候,可能有多個賬號,所以需要重復登錄。
除了以上的用的 net use * /del /y 外,在輸入賬號密碼,盡量不要需要“記住我的憑證”。
如果選擇了 “記住我的憑證”,不方便測試,可以在憑證管理者刪除。
打開組 “控制面板”——“憑證管理器”
注意這兩個憑證:
第一個是 windows憑據(jù),在選擇“記住我的憑證”時,會保留下來,刪掉即可
第二個是普通憑據(jù),這個是連接服務器這臺機器憑證,默認保留后,輸入一次密碼,后續(xù)都不輸入密碼時。不方便測試,所以刪除掉這個機器憑證。
刪除后,再次連接,提示輸入賬號密碼了。可以測試其他賬號了。
smb.conf 參數(shù)差不多將就200多個參數(shù),全部記住基本不可能,所以配置常用參數(shù)即可。
主要分兩部分,全局參數(shù) [global] 和共享參數(shù) [共享名稱]。
除了[global]段外,所有的段都可以看作是一個共享資源。段名是該共享資源的名字,段里的參數(shù)是該共享資源的屬性。
1:全局參數(shù)
[global]
config file=/usr/local/samba/lib/smb.conf.%m
說明:config file可以讓你使用另一個配置文件來覆蓋缺省的配置文件。如果文件 不存在,則該項無效。這個參數(shù)很有用,可以使得samba配置更靈活,可以讓一臺samba服務器模擬多臺不同配置的服務器。比如,你想讓PC1(主機名)這臺電腦在訪問Samba Server時使用它自己的配置文件,那么先在/etc/samba/host/下為PC1配置一個名為smb.conf.pc1的文件,然后在smb.conf中加入:config file=/etc/samba/host/smb.conf.%m。這樣當PC1請求連接Samba Server時,smb.conf.%m就被替換成smb.conf.pc1。這樣,對于PC1來說,它所使用的Samba服務就是由smb.conf.pc1定義的,而其他機器訪問Samba Server則還是應用smb.conf。
workgroup=WORKGROUP
說明:設定 Samba Server 所要加入的工作組或者域。
server string=Samba Server Version %v
說明:設定 Samba Server 的注釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。
netbios name=smbserver
說明:設置Samba Server的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了。
interfaces=lo eth0 192.168.12.2/24 192.168.13.2/24
說明:設置Samba Server監(jiān)聽哪些網(wǎng)卡,可以寫網(wǎng)卡名,也可以寫該網(wǎng)卡的IP地址。
hosts allow=127. 192.168.1. 192.168.10.1
說明:表示允許連接到Samba Server的客戶端,多個參數(shù)以空格隔開。可以用一個IP表示,也可以用一個網(wǎng)段表示。hosts deny 與hosts allow 剛好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容許來自172.17.2.*.*的主機連接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容許來自172.17.2.0/255.255.0.0子網(wǎng)中的所有主機連接
hosts allow=M1,M2
表示容許來自M1和M2兩臺計算機連接
hosts allow=@xq
表示容許來自XQ網(wǎng)域的所有計算機連接
max connections=0
說明:max connections用來指定連接Samba Server的最大連接數(shù)目。如果超出連接數(shù)目,則新的連接請求將被拒絕。0表示不限制。
deadtime=0
說明:deadtime用來設置斷掉一個沒有打開任何文件的連接的時間。單位是分鐘,0代表Samba Server不自動切斷任何連接。
time server=yes/no
說明:time server用來設置讓nmdb成為windows客戶端的時間服務器。
log file=/var/log/samba/log.%m
說明:設置Samba Server日志文件的存儲位置以及日志文件名稱。在文件名后加個宏%m(主機名),表示對每臺訪問Samba Server的機器都單獨記錄一個日志文件。如果pc1、pc2訪問過Samba Server,就會在/var/log/samba目錄下留下log.pc1和log.pc2兩個日志文件。
max log size=50
說明:設置Samba Server日志文件的最大容量,單位為kB,0代表不限制。
security=user
說明:設置用戶訪問Samba Server的驗證方式,一共有四種驗證方式。
【1】. share:用戶訪問Samba Server不需要提供用戶名和口令, 安全性能較低。
【2】. user:Samba Server共享目錄只能被授權的用戶訪問,由Samba Server負責檢查賬號和密碼的正確性。賬號和密碼要在本Samba Server中建立。
【3】. server:依靠其他Windows NT/2000或Samba Server來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統(tǒng)管理員可以把所有的Windows用戶和口令集中到一個NT系統(tǒng)上,使用Windows NT進行Samba認證, 遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作為替代的方式。
【4】. domain:域安全級別,使用主域控制器(PDC)來完成認證。
passdb backend=tdbsam
說明:passdb backend就是用戶后臺的意思。目前有三種后臺:smbpasswd、tdbsam和ldapsam。sam應該是security account manager(安全賬戶管理)的簡寫。
【1】.smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統(tǒng)用戶(真實
用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件。
【2】.tdbsam:該方式則是使用一個數(shù)據(jù)庫文件來建立用戶數(shù)據(jù)庫。數(shù)據(jù)庫文件叫passdb.tdb,默認在/etc/samba目錄下。passdb.tdb用戶數(shù)據(jù)庫可以使用smbpasswd –a來建立Samba用戶,不過要建立的Samba用戶必須先是系統(tǒng)用戶。我們也可以使用pdbedit命令來建立Samba賬戶。pdbedit命令的參數(shù)很多,我們列出幾個主要的。
pdbedit –a username:新建Samba賬戶。
pdbedit –x username:刪除Samba賬戶。
pdbedit –L:列出Samba用戶列表,讀取passdb.tdb數(shù)據(jù)庫文件。
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
說明:是否將認證密碼加密。因為現(xiàn)在windows操作系統(tǒng)都是使用加密密碼,所以一般要開啟此項。不過配置文件默認已開啟。
smb passwd file=/etc/samba/smbpasswd
說明:用來定義samba用戶的密碼文件。smbpasswd文件如果沒有那就要手工新建。
username map=/etc/samba/smbusers
說明:用來定義用戶名映射,比如可以將root換成administrator、admin等。不過要事先在smbusers文件中定義好。比如:root=administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,更貼近windows用戶的習慣。
guest account=nobody
說明:用來設置guest用戶名。
socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
說明:用來設置服務器和客戶端之間會話的Socket選項,可以優(yōu)化傳輸速度。
domain master=yes/no
說明:設置Samba服務器是否要成為網(wǎng)域主瀏覽器,網(wǎng)域主瀏覽器可以管理跨子網(wǎng)域的瀏覽服務。
local master=yes/no
說明:local master用來指定Samba Server是否試圖成為本地網(wǎng)域主瀏覽器。如果設為no,則永遠不會成為本地網(wǎng)域主瀏覽器。但是即使設置為yes,也不等于該Samba Server就能成為主瀏覽器,還需要參加選舉。
preferred master=yes/no
說明:設置Samba Server一開機就強迫進行主瀏覽器選舉,可以提高Samba Server成為本地網(wǎng)域主瀏覽器的機會。如果該參數(shù)指定為yes時,最好把domain master也指定為yes。使用該參數(shù)時要注意:如果在本Samba Server所在的子網(wǎng)有其他的機器(不論是windows NT還是其他Samba Server)也指定為首要主瀏覽器時,那么這些機器將會因為爭奪主瀏覽器而在網(wǎng)絡上大發(fā)廣播,影響網(wǎng)絡性能。
如果同一個區(qū)域內(nèi)有多臺Samba Server,將上面三個參數(shù)設定在一臺即可。
os level=200
說明:設置samba服務器的os level。該參數(shù)決定Samba Server是否有機會成為本地網(wǎng)域的主瀏覽器。os level從0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設置為0,則意味著Samba Server將失去瀏覽選擇。如果想讓Samba Server成為PDC,那么將它的os level值設大些。
domain logons=yes/no
說明:設置Samba Server是否要做為本地域控制器。主域控制器和備份域控制器都需要開啟此項。
logon .=%u.bat
說明:當使用者用windows客戶端登陸,那么Samba將提供一個登陸檔。如果設置成%u.bat,那么就要為每個用戶提供一個登陸檔。如果人比較多,那就比較麻煩??梢栽O置成一個具體的文件名,比如start.bat,那么用戶登陸后都會去執(zhí)行start.bat,而不用為每個用戶設定一個登陸檔了。這個文件要放置在[netlogon]的path設置的目錄路徑下。
wins support=yes/no
說明:設置samba服務器是否提供wins服務。
wins server=wins服務器IP地址
說明:設置Samba Server是否使用別的wins服務器提供wins服務。
wins proxy=yes/no
說明:設置Samba Server是否開啟wins代理服務。
dns proxy=yes/no
說明:設置Samba Server是否開啟dns代理服務。
load printers=yes/no
說明:設置是否在啟動Samba時就共享打印機。
printcap name=cups
說明:設置共享打印機的配置文件。
printing=cups
說明:設置Samba共享打印機的類型?,F(xiàn)在支持的打印系統(tǒng)有:bsd, sysv, plp, lprng, aix, hpux, qnx
2:共享參數(shù)
NAS或Linux安裝好Samba之后,就有了與Windows互相訪問的基礎。這里介紹一下如何使用將 Samba 共享文件夾目錄映射為 Windows 本地磁盤驅動器盤符操作步驟
操作步驟:
Windows 上訪問 samba 共享文件夾目錄,在“我的電腦”中輸入: \xxx.xxx.xxx.xxx\
下面以 IP 為 \192.168.44.130\ 演示
#在 文件夾 或 我的電腦 的地址欄中輸入
\\192.168.44.130\
將 samba 共享的文件夾目錄,映射成 Windows 的一個本地磁盤驅動器盤符:
將 samba 共享的 Linux 文件夾目錄,映射成 Windows 的一個本地磁盤驅動器盤符
Windows 斷開 samba 共享文件夾目錄連接
操作步驟:在【開始】→【運行】→【cmd】回車中輸入:
net use * /del
使用方法: