第一次設定SAMBA,讓CentOS與Windows共享目錄,因此簡單做一個筆記紀錄。
最近專案上需要做到Windows 系統將自CentOS上進行檔案寫入與讀取,做了簡單的研究,做了點簡單筆記記錄如何做到Windows與CentOS做檔案共享。
Windows 電腦間要共享檔案可以透過網路的芳鄰來做到,其概念主要是透過CIFS/SMB協定來達成,而Unix系統上要分享檔案,則是透過NFS,如果要讓Windows與Unix共享,則可以透過Samba。
下面針對一些名詞作介紹,這邊簡單做一個整理:
SMB(Server Message Block):最初由IBM提出,經過微軟大幅改良,主要目的為允許電腦間可以透過LAN對遠端主機檔案或目錄進行讀寫。
CIFS(Common Internet File System):基於SMB而發展出來的協定,允許網路上的機器分享檔案目錄文件與印表機,同時支援授權認證,能讓Windows系統互相溝通。
NFS(Network Fils System):在Unix上互相分享檔案的系統稱為NFS,NFS僅允許Unix機器互相溝通。
SAMBA:可以讓UNIX系統與Windows系統進行SMB/CIFS 檔案共享的自由軟體,後續版本中除了分享檔案目錄與印表機外,也可以整入Windows AD。
所以這次的需求主要就是透過SAMBA來處理。
CentOS上安裝Samba
yum install samba samba-client samba-common -y
建立 /home/joseph/SharedFolder 目錄,表示要開放 /home/joseph/SharedFolder目錄,允許透過Samba存取
安裝完成Samba後,samba的設定檔位置路徑為 /etc/samba/smb.conf,接著設定samba設定檔
vi /etc/samba/smb.conf
smb.conf
[global]
workgroup = SAMBA
netbios name = SAMBA_NETBIOS
server string = SAMBA SERVER
log file = /var/log/samba/log.%m
max log size = 500
# 建議設定為 mandatory
server signing = mandatory
security = user
passdb backend = tdbsam
ntlm auth = yes # 如果要讓 Windows 掛載,則需要設定成 YES
[ShareFolder]
comment =Shared
path = /home/joseph/SharedFolder
browseable = yes
writable = yes
create mode = 0660
directory mode = 2770
valid users = root # 必須是Linux上存在的user
smb.conf還有相當多的設定可以調整,這邊僅列出一部份,有其他更細節之設定,因為沒用到就沒提到了,其餘可以參考官方上的說明,有所有smb.conf設定:smb.conf,設定完成後,可以透過testparm 測試 smb.conf設定檔設定是否正確
針對上面設定,這邊做一個簡單的紀錄
workgroup:工作群組名稱
netbios name:SAMBA netBIOS name
server string:Server 描述說明
log file:SAMBA log 位置,可傳入參數,如%m表示Client端 NetBIOS名稱
max log size:表示SAMBA log檔最大SIZE,單位為KB,Samba會定期檢查並將超過大小的檔案作rename的動作,如加上 .old extension
security:user 表示需要在主機上有帳號才可登入使用
passdb backend:決定使用何種方式儲存user與group資訊,設定為tdbsam表示以TDB based password方式儲存,可傳入第二個optional參數表示passdb.tdb檔案欲存放位置,預設會在private目錄(${prefix}/private)
如passdb backend = tdbsam:/etc/samba/private/passdb.tdb
預設路徑於 /var/lib/samba/private/passdb.tbd,private目錄為隱藏目錄,且必需要有足夠權限才可進入與檢 視
ntlm auth: 允許使用NTLM 認證,目前測試 samba 必須設定成 yes 才可以在 windows 上成功掛載
[SharedFolder]:表示在網路芳鄰上顯示的名稱,smb.conf中可以存在多個 [ ]區塊,表示不同的分享目錄與設定
comment:註解
path:欲共享的目錄路徑
browsable:控制是否在網路上顯示
writable:是否可寫入,如果設為no,Client端將沒辦法對資料夾或檔案做寫入的動作
create mode:從Client端建立檔案後,建立之檔案權限會設定為create mode的值
directory mode:從Client端建立目錄後,建立之目錄權限會設定為directory mode的值
valid users:可登入SAMBA的帳號白名單列表,可直接指定帳號清單,或是以 @開頭表示可使用的群組,指定的user一定要是系統上存在的帳號,否則是無效的
如 root, @user 表示允許root帳號與 @user群組中的帳號使用
驗證設定是否正確:
sudo testparm
前面smb.conf中 passdb backend設定為tdbsam,這邊透過smbpasswd建立對應帳號,建立的同時會一併設定登入密碼,資料會寫入 passdb.tdb 中 這邊使用的帳號必須是系統上的帳號才可,否則會出現『Failed to add entry for user test.』錯誤
smbpasswd -a joseph
設定為開機啟動
systemctl enable smb
systemctl enable nmb
啟動SAMBA服務
systemctl start smb
systemctl start nmb
新增防火牆規則,允許外部可透過SAMBA連線至主機內存取目錄
firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload
關閉SELinux(目前尚未能清楚知道關閉之原因,或是其實需要做什麼設定,受陷於目前不清楚SELinux,故只能先關閉),目前未關閉SELinux情況下,Windows會沒權限無法存取SharedFolder內容
setenforce 0 # 暫時關閉,會於下一次登入時失效
vi /etc/selinux/config
SELINUX=disable #永久關閉SELINUX
到這邊基本設定即完成了,再來可以測試本機上 smb服務是否有啟動,可以檢視CentOS上445 port是否已被使用
可以使用任一熟悉的方式偵測,這邊使用lsof指令查看445 port使用資訊:
只要確認服務啟動後,即可切換至Windows系統準備連至CentOS。
首先必須先查到 CentOS上的IP位置:
接著至Windows上,開啟『我的電腦』-> 『連接網路磁碟』
點選後,磁碟可以任意選擇,主要是 Folder 位置,必須使用 UNC路徑來指向CentOS目錄,在目錄最後是SAMBA [] 區塊內的名稱,前面設定 [SharedFolder],故這邊使用 ShareFolder,接著可以點選完成。如果連線設定正常,SAMBA服務也正常設定,則會出現要求輸入帳號密碼的視窗
透過NETBIOS_NAME來找尋SAMBA server:
透過IP找尋SAMBA server:
在這邊輸入 smb.conf中設定的一組帳號還有設定的密碼,驗證過了後,即會看見硬碟被掛載到Windows上
回到我的電腦,可以看見目錄被掛載在R磁碟上
可以嘗試在Windows中新增一個檔案,新增一個HELLO_WORLD.txt,並指定內容
接著可以至CentOS上看,檔案確實被新增進來,且權限為 660
如果是建立目錄,則權限會是 2770
同樣的,在CentOS上新增也會立即反應至Windows上所見項目,因為存取的是同一個位置。
只需要透過指令並輸入密碼,就可以連到另一台主機的Samba
smbclient //{IP}/{section} -U account
# 以上面範例來看
smbclient //10.0.2.15/ShareFolder -U joseph
一開始覺得建立SAMBA是有困難的,中間比較過許多文章,發現難度其實不高,smb的設定相當多,有許多是未探索的設定,可以自行試試看,記得有看到整入AD或是LDAP做SAMBA登入,因步驟比較複雜這邊就沒特別研究了。
這編寫一篇筆記,也是幫助未來遇到時可以更快速的找回遺失的記憶。
參考資料: