# 在 Ubuntu 24.04 系统上配置 Samba（SMB）共享

在 **Ubuntu 24.04** 系统上配置 Samba（SMB）共享，将本地目录 `/home/shuncom/teleport_backup` 共享为 `\\192.168.30.54\teleport_backup`，请按以下步骤操作：

---

## ✅ 第一步：安装 Samba

```bash
sudo apt update
sudo apt install samba -y

```

---

## ✅ 第二步：创建或确认共享目录，并设置权限

```bash
# 确保目录存在
sudo mkdir -p /home/shuncom/teleport_backup

# 设置属主（建议使用 shuncom 用户）
sudo chown -R shuncom:shuncom /home/shuncom/teleport_backup

# 设置适当权限（根据需求调整）
sudo chmod -R 755 /home/shuncom/teleport_backup
# 或更宽松（如需写入）：
# sudo chmod -R 775 /home/shuncom/teleport_backup

```

> ⚠️ 注意：Samba 默认不共享用户家目录下的子目录（因安全限制），但通过正确配置可实现。

---

## ✅ 第三步：为 Samba 添加用户（必须与系统用户对应）

```bash
# 假设你要用 "shuncom" 用户访问共享
sudo smbpasswd -a shuncom

```

> 🔐 系统会提示你设置一个 **Samba 密码**（可以和登录密码不同）。  
> 此用户必须是系统已存在的用户（`id shuncom` 应有输出）。

启用该用户（默认已启用）：

```bash
sudo smbpasswd -e shuncom

```

---

## ✅ 第四步：配置 Samba 共享（编辑 smb.conf）

备份原配置：

```bash
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

```

编辑配置文件：

```bash
sudo nano /etc/samba/smb.conf

```

在文件末尾添加以下内容：

```ini
[teleport_backup]
   comment = Teleport Backup Share
   path = /home/shuncom/teleport_backup
   browseable = yes
   writable = yes
   guest ok = no
   valid users = shuncom
   create mask = 0644
   directory mask = 0755
   force user = shuncom

```

### 参数说明：

<table id="bkmrk-%E9%85%8D%E7%BD%AE%E9%A1%B9-%E4%BD%9C%E7%94%A8-browseable-%3D-"><thead><tr><th>配置项</th><th>作用</th></tr></thead><tbody><tr><td>`browseable = yes`</td><td>网络邻居中可见</td></tr><tr><td>`writable = yes`</td><td>允许写入</td></tr><tr><td>`guest ok = no`</td><td>禁用匿名访问</td></tr><tr><td>`valid users = shuncom`</td><td>仅允许 shuncom 用户访问</td></tr><tr><td>`force user = shuncom`</td><td>所有操作以 shuncom 身份执行，避免权限混乱</td></tr></tbody></table>

> 💡 如果你希望多个用户访问，可将 `valid users = user1,user2`，并为每个用户执行 `smbpasswd -a`。

---

## ✅ 第五步：重启 Samba 服务

```bash
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd  # 开机自启

```

---

## ✅ 第六步：配置防火墙（如果启用 UFW）

Ubuntu 24.04 默认可能启用 `ufw`，需放行 SMB 端口：

```bash
sudo ufw allow samba
# 或手动开放端口：
# sudo ufw allow 139/tcp
# sudo ufw allow 445/tcp

```

查看状态：

```bash
sudo ufw status

```

---

## ✅ 第七步：从 Windows 访问测试

在 Windows 文件资源管理器地址栏输入：

```
\\192.168.30.54\teleport_backup

```

- 弹出登录框时，输入： 
    - **用户名**：`shuncom`
    - **密码**：你在 `smbpasswd -a shuncom` 时设置的 Samba 密码

> 📌 注意：不要用 Windows 的“记住凭据”，避免后续混淆。

---

## 🔍 故障排查

### 1. 无法访问？检查服务状态：

```bash
sudo systemctl status smbd

```

### 2. 权限被拒绝？

- 确认 `/home/shuncom` 目录对其他用户有 **执行权限（x）**： ```bash
    chmod o+x /home/shuncom
    
    ```
    
    > 否则 Samba 无法进入家目录。

### 3. 测试本地连接：

```bash
smbclient -L localhost -U shuncom

```

### 4. 查看日志：

```bash
sudo tail -f /var/log/samba/log.smbd

```

---

## ✅ 最终效果

- Windows 访问：`\\192.168.30.54\teleport_backup`
- 需输入用户名 `shuncom` + Samba 密码
- 可读写，文件属主为 `shuncom`

---

> 💡 **安全建议**：
> 
> - 不要设置 `guest ok = yes`（除非内网可信）
> - 定期更新系统：`sudo apt upgrade`
> - 如仅限内网使用，可绑定 IP（在 `smb.conf` 的 `[global]` 中加 `interfaces = 192.168.30.54/24`）

完成以上步骤，你的 SMB 共享即可正常使用！

你已确认 **445/139 端口通**，Samba 服务运行正常，共享配置也基本正确，但 **Windows 无法访问 `\\192.168.30.54\teleport_backup`**。

结合你提供的信息（尤其是 `/home/shuncom` 的权限），**根本原因极可能是：**

> ❌ **`/home/shuncom` 目录权限为 `drwxr-x--x`（即 `751`），其他用户（包括 Samba 进程）没有进入（execute）权限！**

虽然 `teleport_backup` 子目录是 `755`，但 **Linux 要求父目录必须有 `x` 权限才能访问子目录**。Samba 默认以 `nobody` 或指定用户身份访问，若无权限进入 `/home/shuncom`，就会被拒绝。

---

## ✅ 解决方案

### 🔧 步骤 1：修复家目录权限（关键！）

```bash
# 给其他用户添加 "进入" 权限（x）
sudo chmod o+x /home/shuncom

```

验证：

```bash
ls -ld /home/shuncom
# 应显示：drwxr-x--x → 变为 drwxr-x--x（最后一位 x 表示 others 有 execute 权限）
# 实际权限应为 751 → 但至少 others 有 x（即权限位最后一位是 1, 3, 5, 7）

```

> 💡 更安全的做法（推荐）：
> 
> ```bash
> # 只允许特定组访问（如 sambashare）
> sudo groupadd sambashare
> sudo usermod -aG sambashare shuncom
> sudo chgrp sambashare /home/shuncom
> sudo chmod 750 /home/shuncom  # owner:rwx, group:rx, others: none
> 
> ```
> 
> 但简单场景下 `chmod o+x` 足够（内网环境）。

---

### 🔧 步骤 2：确认 Samba 用户已正确设置

```bash
# 查看 Samba 用户列表
sudo pdbedit -L

# 确保 shuncom 在其中
# 如果没有，重新添加：
sudo smbpasswd -a shuncom   # 设置密码
sudo smbpasswd -e shuncom   # 启用

```

> ⚠️ 注意：**Samba 密码 ≠ 系统登录密码**，必须单独设置！

---

### 🔧 步骤 3：检查 Samba 配置是否生效

你的 `smb.conf` 末尾配置基本正确，但建议在 `[global]` 段落中显式指定安全模式（Ubuntu 24.04 默认可能较严格）：

编辑 `/etc/samba/smb.conf`，在 `[global]` 部分添加或确认以下行：

```ini
[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = ubuntu24-00
   security = user
   map to guest = never
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   server min protocol = NT1  # ← 仅当 Windows 是 Win10/11 且无法连接时临时加（不推荐长期用）

```

> 🚫 **不要随意加 `server min protocol = NT1`**，除非你确定是协议问题（Win10 默认禁用 SMB1）。  
> 先尝试不加，优先解决权限问题。

---

### 🔧 步骤 4：重启 Samba 服务

```bash
sudo systemctl restart smbd nmbd

```

---

### 🔧 步骤 5：从 Windows 测试（关键操作）

1. **先清除 Windows 凭据缓存**（非常重要！）：
    
    
    - 按 `Win + R`，输入 `cmd` 打开命令提示符
    - 执行： ```cmd
        net use * /delete /y
        
        ```
    - 或手动删除：  
        **控制面板 &gt; 凭据管理器 &gt; Windows 凭据 &gt; 删除与 192.168.30.54 相关的条目**
2. **使用完整凭据访问**：
    
    
    - 在文件资源管理器输入： ```
        \\192.168.30.54\teleport_backup
        
        ```
    - 弹出登录框时： 
        - **用户名**：`shuncom`（或 `.\shuncom`）
        - **密码**：你在 `smbpasswd -a shuncom` 时设置的 **Samba 密码**
        - 勾选“记住凭据”（可选）

---

### 🔍 附加排查命令（在 Ubuntu 上）

```bash
# 1. 本地测试共享是否可见
smbclient -L //localhost -U shuncom

# 2. 查看实时日志（另开终端）
sudo tail -f /var/log/samba/log.smbd

# 3. 检查 SELinux/AppArmor（Ubuntu 默认无 SELinux，但有 AppArmor）
sudo aa-status | grep samba  # 通常不影响，可忽略

```

---

## ✅ 总结：最可能的原因和修复

<table id="bkmrk-%E9%97%AE%E9%A2%98-%E4%BF%AE%E5%A4%8D-%2Fhome%2Fshuncom-"><thead><tr><th>问题</th><th>修复</th></tr></thead><tbody><tr><td>**`/home/shuncom` 权限缺少 `o+x`**</td><td>`sudo chmod o+x /home/shuncom`</td></tr><tr><td>**未设置 Samba 密码**</td><td>`sudo smbpasswd -a shuncom`</td></tr><tr><td>**Windows 缓存了错误凭据**</td><td>`net use * /delete` 清除</td></tr></tbody></table>

> 💡 **90% 的类似问题都是因为家目录权限不足导致的！**

执行 `chmod o+x /home/shuncom` 后，Windows 应能正常访问共享。如果仍有问题，请贴出 `tail -f /var/log/samba/log.smbd` 在 Windows 尝试连接时的**具体错误日志**。