還念一下Windows你那區網好鄰居,就是「網路上的芳鄰」(在Windows vista 以後稱 網路(Network)),它的功能就是檔案共享,提供播放、編輯...等。要請Linux電腦在LAN當「芳鄰」,就要讓它變成Samba Server。
未來我想讓Raspberry Pi 化身P2P掛機神器,搜來的戰利品要在區網分享給Windows、Mac電腦,所以我準備這篇當成先修!關於介紹和歷史故事請看:Samba(software),通訊協定方面:NetBIOS、NetBIOS over TCP/IP(NBT),基本觀念參考:第十六章、檔案伺服器之二: SAMBA 伺服器。
Step 1 安裝Samba套件
$ sudo apt-get 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 =0664 :使用者新建「檔案」的權限
directory mask = 0775 :使用者新建「目錄」的權限
注意:你必須依據管理需要,自行修該權限。(代碼:讀取, 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
假如該使用者同時在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 -u pi
#為Samba建立pi使用者(必須是Linux使用者),同時要新建立密碼(可以和系統不一樣,Samba專用)
更多關於pdbedit的用法,詳見附錄二。
Step 5 重新啟動Samba服務
$ sudo service smbd 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
hosts allow = 192.168.1.0/24 192.168.5.
允許除了 192.168.1.1 外的其它 192.168.1.* 的機器連線。
# 設定允許存取的來源端。
hosts deny = 192.168.1.52
#拒絕192.168.1.52的連線,預設:無此項目
[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 -L
#列出使用者
$ sudo pdbedit -L -v
#列出所有使用者的詳細資訊
#修改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 . < ) /”
參考資料
- Wiki, Samba(software)
- Wiki, NetBIOS
- Wiki, NetBIOS over TCP/IP(NBT)
- Linux權限設定
- 第五章、Linux 的檔案權限與目錄配置
- Samba-Server 網路芳鄰共享的設定
- Samba 網路硬不顯示隱藏檔
- Samba官方教學, pdbedit
- Securing and Optimizing Linux: RedHat Edition -A Hands on Guide
- Using Samba
- Multiple Interfaces
- 第二十章 SAMBA 網路芳鄰
- guest ok = yes 及 public = yes 的差異
- Chapter 9. Users and Security
- pdbedit — manage the SAM database (Database of Samba Users)
- Samba的技巧
- 第十六章、檔案伺服器之二: SAMBA 伺服器
- Fedra 9 Linux 全方位學習,李蔚澤
- 未加密的密碼可能會造成 SP3 才能無法連線到 SMB 伺服器
- Linux 設定 Samba 445 Port 使用的網路卡
- Samba Member Server port usage
keywords:Samba
沒有留言:
張貼留言