快轉到主要內容

用Docker在Ubuntu架設SMB伺服器,與Windows分享檔案

· 民國115年丙午年
·
切換繁體/簡體
分類 Linux系統 Linux使用技巧
標籤 Linux Windows
目錄

用幾條簡單的指令快速在Ubuntu Linux架設一個SAMBA伺服器,並透過Docker容器隔離,讓Windows電腦可以存取SMB共享資料夾。

SAMBA是SMB協定(網路上的芳鄰)的開源實作,目的在於讓Linux可以與Windows電腦分享檔案以及印表機等資源。只要在Linux跑SAMBA服務,Windows電腦便可以透過區域網路連線,用檔案總管打開Linux的共享資料夾,在兩台電腦間傳輸檔案。

1. 為什麼我要用Docker跑SAMBA
#

在Linux直接安裝SAMBA安裝太麻煩啦。我只是要分享電腦上的一些檔案而已。我希望這個過程應該是dead simple的。

看看SAMBA - Arch Wiki列出的步驟,不知道在Ubuntu設定SMB共用資料夾為什麼要搞那麼麻煩,SAMBA要寫設定檔和規定權限,還要建立一個專門用戶,好複雜,堪比NFS,難道是因為這個技術實在太古老了嗎,或者是為了Windows的複雜權限管理所設計。

雖然現在SAMBA能用Systemd自動管理但還是覺得不方便。因此我都用SSHFS(SFTP)居多,因為直接跟SSH共用通訊埠就好了 。

但是SMB是更廣泛實現的協定,從Windows 95以降的系統都有內建,無需額外安裝軟體就能用,若要跟Windows電腦交換檔案還是有個SMB比較好。

使用Docker容器跑SAMBA的話,可以將SMABA服務與Linux宿主系統隔離,並且只暴露需要的目錄到網路上。即使權限設定不很嚴格,從外部存取SMB的人也看不到Docker容器內部和掛載進去以外的資料夾,這樣可以增加系統安全性。

關於SAMBA安全性:目前已知SMB v1.0有嚴重安全性漏洞,可能被勒索病毒利用。故現在SAMBA使用的協定版本多半已經升級到3.0了。

2. 安裝Docker
#

參見:Linux系統各發行版安裝Docker Engine教學

3. 撰寫docker-compose
#

不用自己打包Docke映像檔,Github上面有很多現成的範本。請找至少一年內還有在更新的。例如這個:Docker container of Samba 它已經幫你做好範本了,只要在docker-compose.yml填入連線時候的帳號密碼,還有要分享的資料夾路徑就行。

  1. 新增存放資料的路徑
mkdir ~/samba-docker

cd ~/samba-docker
  1. 從Github取得smb.conf範本,按需修改
wget -O smb.conf https://raw.githubusercontent.com/dockur/samba/refs/heads/master/smb.conf
  1. 例如,我為了提昇安全性,在smb.conf加入以下設定,限定客戶端連線進來的最低SMB協定版本為SMBv2
[global]
min protocol = SMB2
  1. 取得docker-compose.yml範本,按需修改
wget -O docker-compose.yml https://github.com/dockur/samba/blob/master/compose.yml
  1. 例如這是我的範例,分享Linux家目錄下的~/下載目錄
services:
  samba:
    image: dockurr/samba
    container_name: samba
    environment:
      NAME: "Linux" # 分享的名稱
      USER: "samba" # 使用者帳號
      PASS: "12345678" # 密碼
      UID: "1000" # 符合目前Linux使用者的權限
      GID: "1000"
    ports:~/samba-docker
      - 445:445 # 冒號左邊是對外開放的通訊埠
    volumes:
      - /honme/user/下載/:/storage # 冒號左邊是要分享的目錄路徑
      - ./smb.conf:/etc/samba/smb.conf # 允許自訂smb.conf內容
    restart: always # 開機自動啟動
  1. 然後啟動就可以了。
docker compose up -d
  1. SMB預設通訊埠是445,如果防火牆有擋記得開放
sudo ufw allow 445

sudo ufw reload
  1. 使用ip addr取得Linux電腦的IPV4位址,通常應該是192.168.開頭的。

  2. 在同一區域網路的另外一台Windows電腦,開啟檔案總管,開啟網路,在檔案路徑輸入\\Linux電腦IP,輸入帳號密碼,就可以連線到Linux的SAMBA。

  3. 若不用Docker容器的時候就把這個服務關掉。

cd ~/samba-docker

docker compose down

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。