2015年10月23日

Raspberry Pi 架Samba Server 化身網路上的芳鄰

還念一下Windows你那區網好鄰居,就是「網路上的芳鄰」(在Windows vista 以後稱 網路(Network)),它的功能就是檔案共享,提供播放、編輯...等。要請Linux電腦在LAN當「芳鄰」,就要讓它變成Samba Server。

未來我想讓Raspberry Pi 化身P2P掛機神器,搜來的戰利品要在區網分享給Windows、Mac電腦,所以我準備這篇當成先修!關於介紹和歷史故事請看:Samba(software),通訊協定方面:NetBIOSNetBIOS over TCP/IP(NBT),基本觀念參考:第十六章、檔案伺服器之二: SAMBA 伺服器

 

Step 1 安裝Samba套件


$ sudo apt-get install update
#更新套件清單

$ sudo apt-get install samba
#安裝samba套件

 

Step 2 修改smb.conf 檔案


$ sudo nano /etc/samba/smb.conf
#使用nano編輯器開啟smb.conf

接下來,你應該可以看到一大篇英文介紹,看到設定有";"和"#"都是註解說明,不具備功能。 如果要啟用參數,就需要拿掉「註解」。

 

你看到的畫面長這樣

 

去下面尋找設定參數。

[global]

workgoup = WORKGROUP
#確認一下你的Windows工作群組名稱,預設:WORKGROUP,如果你Windows有修改,這裡也要改一下,以便Raspberry Pi加入

 

Windows 底下查看工作群組,「電腦」右鍵 –>「內容」

 

 

Step 3 修改smb.conf 檔案 -> 設定分享資料夾


請在smb.conf 文件最後加上分享設定,下面呈現幾個範例,順便說明參數設定。你可以複製貼上在做修改。

範例一、先來個最偷懶的設定,我們設定一個分享目錄,可匿名登入,所有使用者都具有讀、寫的權利。注意:這樣設定雖然快速省事,但也曝露資安風險。

[公開分享]
    comment = 簡易分享,匿名登入
    path = /media/Data1
    public = yes
    browseable = yes
    writable = yes
    create mask = 0776
    directory mask = 0776
    force user = pi

 

參數說明:

[公開分享]:顯示於使用者的資料夾名稱,你可以自由更改。

comment = 簡易分享,匿名登入:目錄描述,沒有功能。

path = /media/Data1 :設定要分享的目錄。

public = yes :是否公開(匿名登入),其實在問要不要帳號、密碼登入,yes(不需要)、no(要),如果設定no你需要看一下Step 4設定帳號密碼,這樣才能登入。 跟guest ok 的功能類似,擇一使用就好[13]

browseable = yes :列出改共用資料夾。如果設為否,使用者連進來時,不會看到此目錄。若使用者知道路徑,還可以輸入 \\Media\Date 進入資料夾。

writable = yes :是否可以寫入,yes代表可以。注意,read only = no :只可讀的效果一樣,no代表不只可讀,還可以寫,我是這樣理解的。 但要注意writable 和read only 擇一使用就好

create mask =0776 和 directory mask = 0776 :新增檔案、資料夾權限,數字代表Linux權限代碼。0776代表建立的檔案和目錄對於擁有者、同群組使用者,賦予讀取、寫入、執行的權限;其他使用者賦予讀取與寫入的權限,這種設定當然很偷懶,你必須依據管理需要,自行修該權限。(代碼:讀取, read=4、寫入, write=2、執行, eXecute=1,4+2+1=7 是這樣來的)

細節可以參考:Linux權限設定第五章、Linux 的檔案權限與目錄配置

force user = pi : 無論那位使用者登入強制視為pi,即使是匿名登入。無論我如何登入,上傳一個檔案,擁有者會是pi。當然,還是受到Linux目錄的權限管制,如果pi使用者沒有該目錄的寫入權限,就不能上傳檔案。

注意:如果匿名登入上傳的檔案,擁有者和群組將會是nobody和nogroup。

 

 

範例二、允許使用者登入(不能匿名登入),public = no 代表不公開。注意:所有使用者要經過設定samba認可的密碼,才能使用,我們在下面Step4介紹。

[User Only]
    comment = 使用者專用
    path = /media/Data2
    public = no
    browseable = yes
    writable = yes
    valid users = @users
    invalid users = mark
    create mask = 0740
    directory mask = 0740

參數說明:

valid users = @users 和 invalid users = mark :分別代表 允許登入 和 不允許登入,這兩個設定不一定要同時存在。= 等號後面可以接多個使用者或群組,設定格式為:使用者1, 使用者2, @群組1, @群組2...等,以此類推。

接多個使用者或群組範例:
valid users = pi, mark, jack, @admin

參考:Samba-Server 網路芳鄰共享的設定

假如該使用者同時在valid users和 invalid users 結果會如何?答案是依照invalid users 的標準,不能登入;以這範例來說,假如mark使用者在users群組內,mark還是會被invalid users 排除,不能登入。

create mask =0740 和 directory mask = 0740 :再一提這兩個參數,我這裡賦予檔案和目錄的擁有者有讀取、寫入、執行的權限,同群組的使用者僅可讀,其他使用者沒有任何權利。這麼做安全性較高,確保檔案和目錄不會被擁有者以外的使用者刪除。

 

 

範例三、這範例和範例一差不多

[分享3]
    comment = 指定可寫入使用者
    path = /media/Data3
    public = yes

    browsable = yes
    writable = no
    write list = pi
    create mask = 0740
    directory mask = 0740

write list = pi :這參數是當該分享資料夾設為不可寫入(writable = no 或 read-only = yes)的時候,才有出現的必要,目的用來指定可以破例寫入的使用者。可設定多位使用者和群組,設定格式為:使用者1, 使用者2, @群組1, @群組2...等,以此類推,用法和上述valid users 的格式一樣。

如果您同時設定了「writable = yes」與「write list」時,那麼當本身具有寫入權限的使用者,其雖未被列在「write list」的名單之中,還是具有寫入權限的。

 

家目錄參數

這個設定是讓使用者直接存取家目錄,但家目錄在Windows會透過valid users = %S 參數取代[homes],連進來可看到以使用者名稱命名的家目錄。一般維持預設即可。而參數的意義,上面範例大致都說明完畢,這裡稍稍做些補充。

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = %S
   veto files = /.*/

%S:取代設定項目值為「使用者」。更多類似的參數考:第五章、Linux 的檔案權限與目錄配置smb.conf — The configuration file for the Samba suite

veto files = /.*/ :不顯示. 開頭的隱藏目錄和檔案[7],如下圖,算是需要特別標記的功能。


 

記得按下ctrl+o 存檔,如果不需要使用者驗證,直接跳Step 5 重啟服務即可使用。

 

 

Step 4 在pdbedit建立Samba使用者密碼


pdbedit是Samba使用者的Security Account Manager(SAM) 資料庫,細部設定參考:pdbedit

Samba不能直接透過Linux使用者密碼登入,需要透過建立使用者設定,使用者必須為Linux使用者,但密碼能和系統不一樣

$ sudo pdbedit –a pi
#為Samba建立pi使用者(必須是Linux使用者),同時要新建立密碼(可以和系統不一樣,Samba專用)

更多關於pdbedit的用法,詳見附錄二。

 

Step 5 重新啟動Samba服務


$ sudo /etc/init.d/samba restart
#重啟samba服務

[ ok ] Stopping Samba daemons: nmbd smbd.
[ ok ] Starting Samba daemons: nmbd smbd.

走到這裡,基本的Samba Server 已經正常運作了,用Windows 電腦連進去試試吧!

如果您有興趣,可以看看附錄的部分。

 

 

 

附錄一、smb.conf 細部設定


這部分算是我的進階筆記,除非有特殊需求(想當Geek?),您可以參考一下。

[global]

server string = Samba Server
#描述文字

max connections = 100
#設定數目連線上限,預設:無此項目(無限制)

 

[Networking]

bind interfaces only = yes
#限定可登入的網段,interfaces選項允許你覆蓋預設網路介面列表,限制傳入SMB (bsmbd、nmbd服務)的要求(requests),讓Samba「看見」屏蔽後的NBT(NetBIOS over TCP/IP)流量,只能下面interfaces中指定的地址[9]如果您有使用DHCP,此功能可能無法使用[10]。預設:未啟用(被註解掉)。

如果設定bind interfaces only = Yes,在interfaces未指定的接口,TCP/ IP Session Service (port 135、139、445)排除,但nmbd仍會偵聽傳入UDP port137的封包,但不會回應[11]。其他說法參考第二十章 SAMBA 網路芳鄰

 

interfaces = 127.0.0.1/8 eth0
#同時監聽多個網路介面,如果主機上有多張網卡,就該設定此項目,預設:未啟用。

其他範例:

interfaces = eth0, eth1  [11]

interfaces = 192.168.1.51/24 192.168.3.54/24

interfaces = 192.168.1.51/255.255.255.0 192.168.3.54/255.255.255.0  [10]

坦白說,看這麼多解釋,有點暈頭轉向,更多實務應用參考:Linux 設定 Samba 445 Port 使用的網路卡Samba Member Server port usage

 

hosts allow = 192.168.1.0/255.255.255.0
#允許所有 192.168.1.* 範圍的IP連線,預設:無此項目

其他範例:

host allow = 192.168.1 except 192.168.1.52
允許除了 192.168.1.1 外的其它 192.168.1.* 的機器連線。

hosts allow = 192.168.1.0/24 192.168.5.
# 設定允許存取的來源端。

hosts deny = 192.168.1.52
#拒絕192.168.1.52的連線,預設:無此項目

參考:第二十章 SAMBA 網路芳鄰 

 

[Misc]

usershare allow guests = yes
#是否允許訪客(匿名使用者),預設:yes

usershare max shares = 100
#允許最大匿名使用者數 ,預設:無此參數(無限制)

參考:smb.conf — The configuration file for the Samba suite

 

[Authentication]

encrypt passwords = yes
#以加密的形式傳送密碼,如果設定為no,Windows XP SP3以後的版本會無法連線,Windows client 端需要修改登錄檔[18][19]

security = user
#設定登入的認證方式,分四種:share、user、server、domain

share:不需驗證,即可存取。user:一般帳號密碼驗證,預設值。 server:使用者需先通過認證方可存取,但帳號密碼的檢查工作是靠另外一台 SMB Server 來負責。domain:NT 網域來認證[17]

 

[Debugging/Accounting]

log file = /var/log/samba/log.%m
#記錄檔的目錄與檔名。%m :被取代成為主機名稱,%d 表示 process id,%l 表示客戶端的 IP[17]

max log size = 1000
#設定記錄檔最大的大小,預設是1000。0 表示不限制。在記錄檔超出設定值時,Samba 會將該檔案更名為 .old 檔,並建立新的記錄檔。

log level = 0
#設定記錄的等級,等級可以設等級,依詳細程度由簡單->複雜分成 0 到 10。

 

附錄二、pdbedit 其他常用指令


$ sudo pdbedit -x pi
#在Samba移除pi使用者(不會影響系統使用者)


$ sudo pdbedit -a pi

$ sudo pdbedit -L
#列出使用者

$ sudo pdbedit -L -v
#列出所有使用者的詳細資訊

$ sudo pdbedit -u pi -h “\\\\raspberrypi\\Myhome
#修改pi帳號連入家目錄的位置

更多設定細節和範例:pdbedit — manage the SAM database (Database of Samba Users)

$ sudo pdbedit -h
#pdbedit用法說明

 

錄三、SMB狀態


$ sudo smbstatus
#列出登入使用者、連線主機、開啟目錄…等等資訊

$ sudo smbstatus -p
#僅列出已登入使用者

$ sudo smbstatus -L
#僅使用者正開啟的資料夾

參考:Samba的技巧

 

其實,Samba還有更多細節,例如:Printer分享、WINS,如果有碰到再寫了 ( o . < ) /”
 

 

參考資料


  1. Wiki, Samba(software)
  2. Wiki, NetBIOS
  3. Wiki, NetBIOS over TCP/IP(NBT)
  4. Linux權限設定
  5. 第五章、Linux 的檔案權限與目錄配置
  6. Samba-Server 網路芳鄰共享的設定
  7. Samba 網路硬不顯示隱藏檔
  8. Samba官方教學, pdbedit
  9. Securing and Optimizing Linux: RedHat Edition -A Hands on Guide
  10. Using Samba
  11. Multiple Interfaces
  12. 第二十章 SAMBA 網路芳鄰
  13. guest ok = yes 及 public = yes 的差異
  14. Chapter 9. Users and Security
  15. pdbedit — manage the SAM database (Database of Samba Users)
  16. Samba的技巧
  17. 第十六章、檔案伺服器之二: SAMBA 伺服器
  18. Fedra 9 Linux 全方位學習,李蔚澤
  19. 未加密的密碼可能會造成 SP3 才能無法連線到 SMB 伺服器
  20. Linux 設定 Samba 445 Port 使用的網路卡
  21. Samba Member Server port usage

keywords:Samba

沒有留言:

張貼留言