前言
從基礎篇中,我們瞭解了samba是什麼,有什麼用,以及簡單的搭建,詳情請查看===>CentOS7下的samba基礎篇:瞭解與搭建,接下來要做的就是實際的部署和應用了。
首先是安裝,yum或者rpm任意選擇一種。
[root@linus ~]# yum install -y samba* #其實直接輸入samba即可安裝,後面加上*會安裝多餘的軟件包,但也不影響
開啓服務,然後查看其運行狀態。
[root@linus ~]# systemctl start smb.service
[root@linus ~]# netstat -anput | grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2446/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2446/smbd
tcp6 0 0 :::139 :::* LISTEN 2446/smbd
tcp6 0 0 :::445 :::* LISTEN 2446/smbd
配置文件說明
服務已經正常啓動了,接下來就開始進行配置了,samba服務的配置文件位於 /etc/samba/目錄下,名稱爲smb.conf
[root@linus ~]# ls /etc/samba/
lmhosts smb.conf smb.conf.example
將註釋行和空行過濾掉,查看其文件內容,並對其說明
[global] #全局生效
workgroup = SAMBA #工作組
security = user #用戶訪問samba server的驗證方式,總共有4種
#share:來訪主機無需驗證口令;比較方便,但安全性很差
#user:需驗證來訪主機提供的口令後纔可以訪問;提升了安全性
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理賬戶)
#domain:使用域控制器進行身份驗證
passdb backend = tdbsam #定義用戶的後臺類型,共三種
#smbpasswd:使用smbpasswd命令爲系統用戶設置Samba服務程序的密碼
#tdbsam:創建數據庫文件並使用pdbedit命令建立Samba服務程序的用戶
#ldapsam:基於LDAP服務進行賬戶驗證
printing = cups #此項用來指定打印系統的類型
printcap name = cups #此項是用來設置開機時自動加載的打印機配置文件名稱和路徑
load printers = yes #設置在samba服務啓動時是否共享打印機設備
cups options = raw #打印機選項
[homes] #用於設置用戶宿主目錄的共享屬性
comment = Home Directories #描述
valid users = %S, %D%w%S #允許訪問共享的用戶
browseable = No #共享是否可被查看
read only = No #只讀權限
inherit acls = Yes
[printers] #打印機共享參數,打印機名
comment = All Printers #共享描述
path = /var/tmp #共享路徑
printable = Yes #是否可以打印
create mask = 0600 #默認權限
browseable = No #共享是否可被查看
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = root
create mask = 0664
directory mask = 0775
寫入參數及作用
對於修改samba的主配置文件來說,其實就是新增目錄共享,將以下項寫入到配置文件中即可,除了共享目錄位置和允許訪問的配置項外,其他的都能省略。
[name]:共享名稱爲database
comment = test:描述
**path = /home/test:共享目錄爲/home/test
public = no:關閉所有人可見
writable = yes:允許寫入操作
valid users = user:可以訪問的用戶列表
write list = user:有寫入權限的用戶列表
pdbedit
首先我們要知道,samba默認的認證方式是通過用戶口令進行認證的,當然,若不考慮安全性,直接把驗證方式改爲share往下即可。
pdbedit命令是專門用來創建訪問共享用戶的,你以爲系統中的用戶就可以嗎,辣怎麼可能,那樣豈不是所有的已有用戶都可以訪問共享了嗎,那和無驗證模式有什麼區別呢?這種認證模式可以確保僅讓特定用戶訪問資源,假如有三個部門,人事,財務,市場,這樣可以創建三個目錄,然後創建對應的訪問用戶,將各自的目錄共享給各自部門的人。
使用pdbedit命令創建用戶時要注意,首先,只有先建立賬戶信息數據庫之後,才能使用用戶口令認證模式。其次,samba服務的數據庫要求賬戶必須在當前系統中已經存在,否則日後創建文件時將導致文件的權限屬性混亂。
pdbedit使用
pdbedit -a username:新建Samba賬戶。
pdbedit -r username:修改Samba賬戶。
pdbedit -x username:刪除Samba賬戶。
pdbedit -L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
pdbedit -Lv:列出Samba用戶列表詳細信息。
服務搭建與使用
該說的都說了,接下來就是對於samba服務的詳細搭建過程了。
環境:
samba服務器IP:192.168.1.124
windows10和CentOS7的IP隨意,能互通即可。
注:samba服務器需要關閉selinux和firewalld防火牆,否則會攔截訪問請求
主要是在samba服務器上進行搭建,其餘僅用於測試。
小需求:caiwu是財務部部長的賬戶,只允許他能寫入文件,其餘賬戶只能讀取
1.創建測試用戶caiwu
[root@linus ~]# useradd caiwu
[root@linus ~]# pdbedit -a caiwu1
new password:
retype new password:
Failed to add entry for user caiwu1. #創建系統中不存在的用戶,顯示條目未能添加
[root@linus ~]# pdbedit -a caiwu #創建已存在的用戶
new password:
retype new password:
Unix username: caiwu
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1877094264-3563949321-3775828196-1000
Primary Group SID: S-1-5-21-1877094264-3563949321-3775828196-513
Full Name:
Home Directory: \\linus\caiwu
HomeDir Drive:
Logon Script:
Profile Path: \\linus\caiwu\profile
Domain: LINUS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 三, 06 2月 2036 23:06:39 CST
Kickoff time: 三, 06 2月 2036 23:06:39 CST
Password last set: 四, 26 3月 2020 02:29:08 CST
Password can change: 四, 26 3月 2020 02:29:08 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
2.創建測試目錄/caiwu_test,屬主爲caiwu
[root@linus ~]# mkdir /caiwu_test
[root@linus ~]# chown caiwu:caiwu /caiwu_test
[root@linus ~]# chmod +777 /caiwu_test/
3.修改samba的主配置文件,寫入共享信息
[root@linus ~]# vim /etc/samba/smb.conf
.... #將下列配置寫入到文件最後,但要注意排列,否則會報錯
[caiwu]
comment = test #描述
path = /caiwu_test #共享目錄位置
public = No #不支持來賓訪問
read only = Yes #只讀權限
valid users = caiwu #可以訪問用戶,可以把財務部所有的組成員寫入此項中
write list = caiwu #有可寫入權限的用戶
4.重載配置,並創建測試文件。
[root@linus ~]# systemctl reload smb
[root@linus ~]# touch /caiwu_test/test.txt
[root@linus ~]# chmod +777 /caiwu_test/test.txt #爲什麼還要給文件設置權限?此文件爲root用戶創建,若不給予其權限,即使服務搭建沒有問題,也無權限使用此文件
5.windows訪問samba服務的共享目錄
然後將你使用pdbedit創建的訪問用戶caiwu登錄
windows訪問成功,並且可以寫入數據,接下來看看linux訪問
[root@linus ~]# smbclient //192.168.1.124/caiwu_test -U caiwu
Enter SAMBA\caiwu's password:
Domain=[LINUS] OS=[Windows 6.1] Server=[Samba 4.6.2]
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
誒,好像報錯了,沒有連接上,網上很多人都遇見了tree connect failed: NT_STATUS_BAD_NETWORK_NAME的報錯,就是因爲名稱錯誤,是共享名,寫在配置文件中的共享名。千萬要注意格式。
smbclient //samba主機IP/共享名【而不是共享目錄名】 -U 登錄用戶
我們按照這個格式試一下
[root@linus ~]# smbclient //192.168.1.124/caiwu -U caiwu
Enter SAMBA\caiwu's password:
Domain=[LINUS] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
. D 0 Thu Mar 26 03:06:22 2020
.. DR 0 Thu Mar 26 02:55:50 2020
test.txt A 12 Thu Mar 26 03:21:41 2020
52403200 blocks of size 1024. 47782212 blocks available
smb: \>
這樣就訪問成功了。
清空windows遠程連接
可以使用net use * /del /y清空網絡連接,默認一臺windows中只允許一個用戶訪問共享,若要且換用戶,需要重啓系統,刷新網絡配置,而使用net use * /del /y可以直接刷新,不需要重啓
C:\Users\Administrator>net use * /del /y
你有以下的遠程連接:
\\192.168.1.124\IPC$
繼續運行會取消連接。
命令成功完成。
C:\Users\Administrator>net use * /del /y
列表是空的。
6.再創建一個用戶caiwu2,修改配置文件,允許其訪問共享資源,但不允許其寫入
[root@linus ~]# useradd caiwu2
[root@linus ~]# pdbedit -a caiwu2
使用caiwu2訪問samba共享,然後將其共享文件進行修改,在保存的時候,報錯就來了。
這就是我們想看到的效果,權限已經放行了,但還是不能修改文件,因爲我們沒有把caiwu2加入可以寫入的列表。
安全考慮
服務是搭建完成了,沒什麼問題,訪問也需要密碼了,還有什麼問題呢?我們忽略了一點,現在用戶使用的賬戶名和密碼,是linux中實際存在的賬戶嗎?是的,因爲samba數據庫不允許創建不存在的用戶,也就是說,能訪問samba1的用戶在linux中實際存在,而這恰恰就是安全隱患。
爲了安全考慮,通常都會使用samba中的一個叫用戶名稱映射的功能。
1.創建用戶別名文件
[root@linus ~]# vim /etc/samba/samba_user_map #在哪裏創建都可以
caiwu = zhangsan
caiwu2 = lisi
2.修改主配置文件,啓動用戶名稱映射功能
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
username map = /etc/samba/samba_user_map #只需要加入此項即可,路徑是別名文件的路徑
printing = cups
printcap name = cups
load printers = yes
cups options = raw
3.重載服務,然後開始驗證
[root@linus ~]# systemctl reload smb
密碼爲samba數據庫創建的賬戶密碼
通過設置別名的方式,也可以訪問共享,並且具有一定的安全性.