原本我在自家有建置了一台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 範例: \2.168.1.123
連接後透過我們剛才所設定的使用者帳號與密碼,就可以順利存取!
常見問題:
☆. 無法連線到伺服器
如果Windows上出現無法連線到伺服器,請首先要確定你的IP位置是否輸入正確,再來請確定相關的Port是否已經通過防火牆設定了。
☆. 沒有權限寫入檔案
如果可以看到資料夾但是無法變更或是寫入時,請重新再次檢查是否每一個關於權限的設定都已經啟動了
包含資料夾權限777、SELinux關閉,都是可能會發生無法寫入檔案的重要可能性。