[Linux] SAMBA – 在Linux共享資料夾給Windows連線

原本我在自家有建置了一台http伺服器來做為本地開發使用,當時為了各種方便因此而採用Windows架構,
但是隨著開發的東西越來越複雜,需要的環境也越來越多變後,發現可能要採用與線上VPS同樣的Linux系統會更為恰當,
但是一直都有一個使用上的麻煩就是,正常情況下Linux沒辦法像同樣是Windows系統一樣直接共享資料夾,
甚至是直接編輯被共享的檔案,在編寫上就會少了這麼一個方便…

而在最近我查找到了這個存在好一段時間的功能 SAMBA ,他就是能夠將Linux的指定資料夾共享給Windows使用,
亦可以使用「連線網路磁碟機」的方式來連接這個被共享的Linux資料夾,進而達到即時存檔更新檔案的功能!

但由於網路上的各種教學文章橫跨了許多的Linux版本,因此我在安裝上不斷的碰壁,
基於想要介紹這個好功能給大家,與讓大家少走一點碰壁的冤忘路,就在這篇文章分享一下安裝的各個環節囉!

安裝

# yum install -y samba

其實這個功能安裝非常的簡單,只需要輸入yum的指令即可順利地安裝完成,
接下來則是要進行一些相對簡單的設定即可!

/etc/smaba/sam.conf 設定

這時候我們要開啟 /etc/samba/sam.conf 來做基本的設定!

當你想要新增一個共享的資料夾的時候,請直接在這個.conf的最下端新增上以下格式

[共享資料夾名稱]
comment = 這個共享的文字敘述
path = 路徑
browseable = 是否可以被顯示
real only = 是否只能閱讀
create mask = 0664 //權限
directory mask = 0775 //權限
writable = yes //是否可以寫入

範例

[www]
  comment = http Server Directories
  path = /var/www
  browseable = yes
  read only = no
  create mask  = 0664
  directory mask = 0775
  writable = yes

設定好存檔過後,可以鍵入測試的指令

# testparm

如果沒有特別跳出什麼異常訊息那就代表設定上基本上沒問題了。

接著我們要設定的是用於登入這個共享的使用者帳號

# pdbedit -a -u 使用者帳號

在這裡輸入你想要用來做登入的使用者帳號,接著會要求你要輸入兩次這個帳號的密碼!


防火牆通道設定

到目前為止就完成了大部份的設置,接下來的步驟是我們要將相對應的防火牆通道開啟,以便讓SMB服務能夠在區網內正常使用
SMB服務大致上使用的Port是以下三個
137/UDP
138/UDP
139/TCP

445/TCP // 讓電腦在 Windows 的網路列表中可以看到。如果不開通445 則只能手動輸入ip連線!

因此這裡我們只需要在防火牆內將這三個Port開通,並且重新啟動防火牆就完成防火牆的設定了。

# firewall-cmd --zone=public --permanent --add-port=137/udp
# firewall-cmd --zone=public --permanent --add-port=138/udp
# firewall-cmd --zone=public --permanent --add-port=139/tcp
# firewall-cmd --zone=public --permanent --add-port=445/tcp  // 445這個port可以讓windows在網路列表中看到這台電腦,如果不新增則看不到,只能自己輸入ip登入!
# systemctl restart firewalld

啟動 SMB 服務

接下來當我們都設定好之後,我們就要將 samba 服務給啟動才有效果!

# systemctl start smb
# systemctl enable smb

資料夾權限設定

接著,我們必須要將被共享的資烙夾權限設定為 777,可參考以下的範例

# chmod 777 要共享的資料夾路徑

範例:
# chmod 777 /var/www

SELinux 的設置

這同樣發生在新世代的Linux系統之中,系統由於有SELinux的保護以至於資料夾無法被重新寫入,
如果你已經有事前在設置其他服務時將SELinux關閉或設定好的話就可以跳過這個步驟,
但是如果你尚未關閉過,這裡用相當簡單的方式告訴你應該如何關閉!

查詢 SELinux 的狀態
# getenforce

如果顯示 Enforcing 表示目前SELinux是開啟的狀態,可以使用以下的兩種方式來關閉

暫時性將 SELinux 關閉

當Linux被重開機後就會恢復開啟狀態

# setenforce 0
永久性將 SELinux 關閉

尋找 /etc/selinux/config 並找到其中的 SELINUX=
並將他變更為 disabled。重新啟動Linux就完成了!

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


從 Windows 連線到 Linux 資料夾

我們只需要在檔案瀏覽的狀態列中,鍵入這台電腦的IP就可以與之連線,
或是也可以直接透過「連線網路磁碟機」的方式來連接這個被共享的資料夾

\\Linux電腦的IP

範例:
\\192.168.1.123

連接後透過我們剛才所設定的使用者帳號與密碼,就可以順利存取!


常見問題:

☆. 無法連線到伺服器
如果Windows上出現無法連線到伺服器,請首先要確定你的IP位置是否輸入正確,再來請確定相關的Port是否已經通過防火牆設定了。

☆. 沒有權限寫入檔案
如果可以看到資料夾但是無法變更或是寫入時,請重新再次檢查是否每一個關於權限的設定都已經啟動了
包含資料夾權限777、SELinux關閉,都是可能會發生無法寫入檔案的重要可能性。