基礎概念
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。實際上也被用於Windows對Linux的文件進行共享。
Linux搭建samba服務
以Ubuntu 16.04爲例子:
- 首先更新一下倉庫源以避免各種玄學bug:
apt-get update
- 安裝samba服務
apt-get install samba
- 給定samba配置
vim /etc/samba/smb.conf
添加以下內容:
[share]
comment = share folder
path = /data/share-folder
create mask = 0700
directory mask = 0700
force group = sambas
public = no
available = yes
writable = yes
browseable = yes
該配置文件指定了以下內容:
- 訪問該服務的必需位於
sambas
用戶組裏。(禁止無密碼訪問) - 這些用戶對共享文件夾裏的東西可讀可寫。
- 共享文件夾位於
/data/share-folder
,映射地址爲/share
。 - 新建的文件和文件夾的權限均爲
700
,即擁有者纔可讀可寫可執行。
Tips:
添加sambas
用戶組:groupadd sambas
把一個用戶加入該用戶組:useradd -aG sambas <user-name>
- 添加samba密碼:
(假設要爲一個名爲bai
的Linux用戶開通samba服務)
smbpasswd bai
- 重啓samba服務以應用配置項:
service smbd restart
其它一些雜項:
- smb默認走的是139端口,有些網絡裏139被ban掉了,可以在
/etc/samba/smb.conf
中的[global]字段下添加``smb ports = 1399
,手動設定服務開放的端口(比如此時設爲1399)。 - windows可以使用
telnet <IP> <PORT>
來測試指定的端口是否通暢;否則請檢查samba服務是否正常運行或是否防火牆有所限制。
客戶端訪問
Linux客戶機
以用戶bai
和其密碼baibai
爲例,若此時samba服務走的是1399端口、運行在IP192.192.192.192
、映射的目錄是/share
:
mkdir /home/remote-share
sudo mount -t cifs -o username=bai,password=baibai,port=1399 //192.192.192.192/share /home/remote-share
就會把遠程的文件夾掛載到/home/remote-share
目錄下。
取消掛載請執行指令:
sudo umount /data/remote-share
。
Windows客戶機
要注意的是,Windows默認走139端口且無特殊方法可進行修改;因此,如有必要的話,請利用端口轉發等奇技淫巧來實現對不同端口的samba服務進行對接。
打開我的電腦-映射網絡驅動器:
配置盤符並用samba賬戶登錄:
其它的一些奇技淫巧
事實上,139由於之前的勒索病毒問題被大規模不分青紅皁白的封禁,所以在阿里雲等服務商下是走不通的,解決辦法在這裏提供一些思路:(針對Windows或其它非Linux設備)
- 利用Windows的
netsh interface portproxy
進行端口轉發; - 一樣還是端口轉發,但現在本機跑一個最小的虛擬機或docker鏡像。利用
itables
指令即可,很簡單——世界上最小的Linux鏡像不過5mb,非常時候幹這件事。 - 如果你有多臺主機,在本地的局域網中開一個Linux系統(橋接機),掛載雲端的非139端口的映射目錄;在這個橋接機上把這個掛載了雲端映射目錄再的目錄再次通過samba的139標準端口開放。需要注意的是,需要在橋接機上以root用戶登錄samba服務,才能修改雲端的共享文件夾。