---
# System prepended metadata

title: W7 Docker 序，Samba、Mail Server、LDAP

---

[TOC]

# W7 Docker 續、Samba、Mail Server
- Container 是什麼
## Volume
:::    success
將容器應用程式設計成 無狀態 是一種 best practice，狀態指應用程式在某時刻儲存的資料或上下文資訊，狀態資料要放在外部，需要時再注入容器中。
:::
若volume沒被容器掛載還是會留著，讓資料在容器重建後仍能取回。 


## SAMBA
* 使用情境：系統、環境（生態系）間的檔案傳輸

其他，依據情境與需求選擇
| 軟體 | 使用情境 |優缺|
| ---- | -------- |----|
| FTP | 網站檔案傳輸 |安全性低|
| NFS | Linux/Unix系統間檔案共享 |Windows原生不支援|
| Apple File Service | Mac 環境內檔案共享 |限於 Apple 生態、跨平台性差|
| Samba | 混合辦公室共享檔案、印表機 |需手動設定`smb.conf`、不同版本間存在相容性問題|

### Windows 網路芳鄰
* 發現其他電腦（透過NetBIOS over TCP/IP技術實現），似廣播發出訊號，告訴網路「我叫什麼、在哪」

>NetBIOS over TCP/IP: 一種軟體介面，
* 存取共享資源(以 SMB 技術連線)，負責檢查權限，確保只有授權用戶可以存取、使檔案存取安全穩定

>Server Message Block (SMB): 客戶端-伺服器通信協議，讓電腦在安全的環境中存取檔案

* CIFS：在 windows 環境共享檔案
* NFS：在 Linux/Unix 環境共享檔案、印表機，遠端掛載(mount)把遠端系統當本地硬碟使用

|特性|CIFS|NFS
|--|--|--
|適用系統|windows|Linux/Unix
|權限管理|ACL|UID/GID
|功能|檔案、印表機共享|僅檔案共享
|優點|跨平台、整合 AD、安全|高效、簡單
|缺點|需 Samba 支援 Linux|不支援 Windows
|網路芳鄰|原生系統|需額外工具

### Samba

* smbd
* smb.conf
* nmbd

### 實做
1.安裝
```
sudo apt update
sudo apt install samba -y
```
2.公開資料夾設為匿名擁有者
```
sudo mkdir -p /home/auth_edit /home/public_read
sudo chown nobody:nogroup /home/public_read
```
3.公開讀取權限
```
sudo chmod 755 /home/public_read
```
4.登入用戶群組權限
```
sudo chmod 755 /home/auth_edit
```
5.建立用戶 sambauser
```
sudo adduser sambauser
```
6.設定 Samba 密碼
```
sudo smbpasswd -a sambauser 
sudo smbpasswd -e sambauser 
```

### 如何連上windows
重啟服務之後要去左上角/網路/網路設定/選橋接介面卡/Wifi那個/確定，重新啟動。
![螢幕擷取畫面 2025-10-23 192351](https://hackmd.io/_uploads/B1n5x9wRxx.png)

在windows終端機輸入:
```
net use * \\<SAMBA 伺服器的 IP 地址>\public_read /user:sambauser
```
windows就有一個跟linux共用的資料夾/home/public_read
![image](https://hackmd.io/_uploads/r1tD-cD0ee.png)

斷開
```
net use \\<SAMBA 伺服器的 IP 地址>\shared /delete
```

## Mail server
使用者名稱@severname

* MUA - 郵件使用代理（使用者收發郵件的程式）
* MSA - 郵件代理提交（負責郵件提交及驗證）
* MTA - 郵件傳輸代理（伺服器之間郵件傳輸的中繼點）
* MDA - 郵件傳所代理（似住宅管理室，將郵件存入收件人信箱資料夾）
* MRA - 把信件下載回本機（讓收件人下載或遠端讀取郵件）


```mermaid

graph LR
  A((MUA))
  A --> B[/MSA/]
  B --> C[MTA]
  C --> D((網路))
  D --> E[MTA]
  E --> F[MDA]
  F --> G[\MRA\]
  G --> H((MUA))
  
  C --> I[\MDA\]
  I --> J{{MRA}}
  J --> K((MUA))
```

component 之間怎麼溝通?用甚麼port?

## SMTP
1. port
* 25 預設
* 465 透過 SSL 加密
* 587 透過 TLS 加密
2. 寄送電子郵件，MUA->MSA，MSA->MTA，MTA->MTA



## IMAP 網際網路訊息存取通訊協定
1. port
* 不安全：143
* 安全：993 透過 TLS/SSL加密
2. 在mail server 上存取和管理電子郵件的協定
3. 任何地方，使用任何裝置都能存取電子郵件

## POP3
1. port
* 不安全: 110
* 安全: 995，透過 TLS/SSL 加密
2. 從 mail server 下載所有郵件到電腦上後，將使用者 mailbox 內的資料刪除 



```
dig <<一個網域>> MX
```

為甚麼一個網站要有三個IP
因為怕一個IP當掉，有其他可以彌補

## Lab
架設郵件伺服器
1.安裝postfix
```
sudo apt install postfix
```

進入紫色的畫面 按下enter就好

* Internet Site
本機直接對外寄收郵件
* Internet with smarthost
本機寄信經由指定 SMTP 轉發
* Satellite system
本機只發信，靠中央伺服器寄出
* Local Only
僅本機內部收發郵件，不連網
5.
```
sudo apt install mailutils
```
```
echo "This is the body of the email" | mail -s "This is the subject line" [電腦使用者名稱]@localhost
```
```
sudo cat /var/mail/[電腦使用者名稱] #你會看到一封信
```

寄信
1. `telnet localhost 25`

* SPF(Sender Policy Framework): 寄件伺服器來源驗證機制，讓收件伺服器知道哪幾台主機有權替某個網域寄信
* DKIM(DomainKeys Identified Mail): 郵件內容簽章驗證機制，網域驗證郵件
* DMARC: 整合 SPF 和 DKIM 的驗證結果，以領域名稱為主的訊息驗證、報告與確認機制

# 作業

ssh 登入你的 moli.lsa.tw, 寄信給 hwmail@localhost
```
ssh [s學號]@moli.lsa.tw
```
```
echo "請給我作業說明" | mail -s "作業要求" hwmail@localhost
```
可以看到作業內容
```
 cat /var/mail/[s學號] 
```