# Samba NAS伺服器建構指南
> Samba是易於使用的雲端檔案管理系統,支援 SMB/CIFS 協定,這使得 Windows、Linux 和 macOS 用戶都能夠方便地訪問共享資料夾。
可以配置Samba設定滿足你的需求,包括設定用戶權限、共享協定等
本篇在ubuntu20.04的伺服器上建構Samba Server
## 建構Samba Server
在Server上先創建一個資料夾,未來就拿它當作大家存取的對象吧。
#### 1. 安裝samba軟體
```
sudo apt update
sudo apt install samba
```
#### 2. 更改設定文檔
```
sudo nano /etc/samba/smb.conf
```
新增以下程式碼段落控制資料夾名稱與權限,未來登入路徑會是`\\xxx.xxx.xxx.xxx\share_name`
```
[share_name]
comment = brief descript
path = /path/to/your/folder
browseable = yes
read only = no
guest ok = yes
valid users = user1, user2, user3
```
#### 3. 測試文檔內容,若語法有問題則會報錯
```
sudo testparm
```
#### 4. 重啟服務
```
sudo service smbd restart
```
#### 5. 重要!!如果系統有防火牆,請開啟以下port,否則無法運作
```
sudo ufw allow 137/udp
sudo ufw allow 138/udp
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
```
## 如何透過網路連線?
一般而言,Samba系統主要是給<font color='red'>**內網**</font>使用的,如果需要外網連線功能可以過設定router的portforward實現。
### windows
對client端來說使用window的系統最為方便,連線步驟如下:
1. 以window10為例,到瀏覽檔案找到本機點右鍵,`連線網路磁碟機`

2. 輸入網路位置(Samba Server IP)與設定分享得資料夾名稱

3. 登入使用者的帳號密碼

4. 登入成功! 畫面與操作跟一般的資料夾沒兩樣
### Linux
使用網路連接伺服器,用`smb://`開頭
```
smb://xxx.xxx.xxx.xxx/share_dir_name
```
## Samba的用戶管理
注意: 新增使用者,需已有帳號在server上,且請在ubuntu與samba使用相同密碼
##### 1. 創建linux使用者
`-M`不建立家目錄,`-s`設定預設shell,`/bin/false`將不為使用者提供交互介面登入
```
sudo useradd -M $username -s /bin/false
sudo useradd --no-create-home --shell /bin/false username 功能同上
```
新增後記得設定密碼(與後續密碼一致)
```
sudo passwd $username
```
##### 2. samba新增使用者,需已有帳號在server上
```
sudo pdbedit -a -u {username}
```
```
新增/修改/刪除
sudo pdbedit -a/-r/-x -u {username}
修改密碼
sudo smbpasswd {username}
```
##### 3. 修改/etc/samba/smb.conf檔案,確認使用者有在valid users核准名單中,
##### 4. 記得修改conf檔案後需要測試與重啟,詳情請見第一段
### 其他管理用戶相關指令
列出使用者。`-L`列出所有使用者
```
sudo pdbedit -L
```
列出使用者詳細訊息。
```
sudo pdbedit -Lv username
```
監看線上使用情形
```
sudo smbstatus
```
## 補充 : config檔怎麼寫
/etc/samba/smb.conf檔案的深入說明
下方列出一些比較難懂,或是特別好用的設定檔
### GLOBAL
```
[global]
設定可以連線的對象 (省略ip部分表示都可以連線)
host allow = 127. 192.168.1 192.168.1.111
中文解碼方式也是在這邊設定
```
### SHARE DIR
```
[DIR_name]
browseable = yes/no ;設定是否在網絡上可看見該共享資源,no將會隱藏共享資源,只有知道共享名稱的用戶才能夠訪問。
write list = user ;設定有寫入權限的使用者
```
<!--
測試中功能...
```
write list = @usergroup ; @代表設定有寫入權限的群組
管理者共用一個群組,就可以同時具有寫入權限
``` -->
<!--
# Samba Client怎麼使用
如果是window連到linux server就像前面的說明一樣容易,但如果碰到linux client到linux server就要一點小功夫了,聽我娓娓道來
```
smbclient -L //192.168.1.111
smbclient -L //192.168.1.111 -U {username}
``` -->
<!-- # 未整理
```
查看目前啟動情況sudo systemctl status smbd
=========================================================
啟動並設定開機時啟動samba:
sudo systemctl start smbd
sudo systemctl start nmbd
sudo systemctl enable smbd
sudo systemctl enable nmbd
如果已經啟動過而想重啟的話,將start改成restart即可:
sudo systemctl restart smbd
sudo systemctl restart nmbd
``` -->
### 補充
```
開機時會自動執行
sudo systemctl enable myservice.service
僅是暫時一次性的啟用
sudo systemctl start myservice.service
```