---
url: https://eoht.net/vps/settings/ubuntu-mount-nas.md
description: >-
  使用 cifs-utils 将 NAS 的 SMB 共享挂载到 Ubuntu，说明本地 UID/GID、受限凭据文件、SMB 版本协商、fstab
  网络挂载选项及重启后的验证和故障排查。
---

# Ubuntu 自动挂载 NAS：SMB、凭据文件与 fstab 配置 {#auto-mount-nas-on-ubuntu}

本文以使用 systemd 的 Ubuntu 和已开启 SMB 的 NAS 为例。准备 NAS 地址、共享名称和有权限访问该共享的 NAS 账号；下文的 `192.168.2.10`、`share`、UID/GID 都是示例，需替换为实际值。

## 新建挂载目录 {#create-mount-directory}

```sh
sudo mkdir -p /mnt/nas_share
```

使用空目录作为挂载点；挂载会暂时遮住该目录原有内容，不会将它们自动迁移到 NAS。

## 安装 cifs-utils {#install-cifs-utils}

```sh
sudo apt update
sudo apt install cifs-utils
mount.cifs -V
```

## 查看本地用户的 UID 和 GID {#find-user-uid-and-gid}

在需要访问文件的本地用户会话中运行：

```sh
id
```

记录输出中的 `uid` 与 `gid`。若正在使用 root，应改用 `id 实际用户名` 查询目标用户，不能直接把示例中的 `1000` 或截图中的 `0` 当成自己的值。

![Ubuntu =688x](https://i.eoht.net/docs/202404290023588.webp "使用 id 查询本地用户的 UID 和 GID")

`uid`、`gid` 控制服务器未提供所有者信息时的本地显示与权限映射；**它们不是 NAS 登录账号，也不能绕过 NAS 端权限**。是否能写入最终还取决于 NAS 共享和账号设置。[mount.cifs 说明](https://manpages.debian.org/bookworm/cifs-utils/mount.cifs.8.en.html)

## 配置凭据和 fstab {#configure-fstab-mount}

先创建仅 root 可读写的凭据文件；如果已存在，直接编辑原文件，不要覆盖其他挂载使用的凭据：

```sh
sudo install -d -m 700 /etc/samba/credentials
sudo touch /etc/samba/credentials/nas-share
sudo chown root:root /etc/samba/credentials/nas-share
sudo chmod 600 /etc/samba/credentials/nas-share
sudo nano /etc/samba/credentials/nas-share
```

将下列占位内容替换后写入文件，保存时按 `Ctrl+O`、回车，退出按 `Ctrl+X`：

```ini
username=NAS账号
password=NAS密码
```

只有 NAS 要求域或工作组时才另加 `domain=实际域名`。密码不放入命令参数或 `/etc/fstab`。

备份并编辑挂载配置：

```sh
sudo cp -a /etc/fstab "/etc/fstab.backup.$(date +%Y%m%d%H%M%S)"
sudo nano /etc/fstab
```

在文件末尾添加一行，替换共享地址和本地 UID/GID：

```text
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials/nas-share,uid=1000,gid=1000,file_mode=0600,dir_mode=0700,_netdev,nofail 0 0
```

| 配置 | 含义 |
| --- | --- |
| `credentials=...` | 使用受限文件中的 NAS 账号和密码 |
| `uid` / `gid` | 在服务器未提供相应所有者信息时使用的本地用户与组 |
| `file_mode` / `dir_mode` | 未协商 Unix 权限时的本地权限；此示例仅供目标用户访问 |
| `_netdev` | 标记为依赖网络的挂载 |
| `nofail` | NAS 不可用时允许系统继续启动，不代表挂载已经成功 |
| `0 0` | 不使用 dump，也不安排本地 fsck 检查网络共享 |

示例省略 `vers`，让现代客户端与服务器协商共同支持的 SMB 版本。若需要固定协议，应先确认 NAS 的支持范围：`vers=2.0` **只指定 SMB 2.0**，不是同时启用 2.0 和 3.0；`vers=3.0`、`vers=3.1.1` 也分别指定对应版本。不要把所有连接失败都通过降低协议版本处理。

`_netdev` 和 `nofail` 的启动行为见 [systemd 挂载说明](https://www.freedesktop.org/software/systemd/man/latest/systemd.mount.html)。

## 挂载并验证 {#mount-nas-share}

先检查配置，再仅挂载本条记录：

```sh
findmnt --verify --verbose
sudo systemctl daemon-reload
sudo mount /mnt/nas_share
findmnt -T /mnt/nas_share -o TARGET,SOURCE,FSTYPE,OPTIONS
ls -ld /mnt/nas_share
```

确认 `SOURCE` 指向预期 NAS 共享、`FSTYPE` 为 `cifs`，然后用目标本地用户检查能否读取预期文件。目录存在或 `ls` 能运行，并不能证明它已经挂载到 NAS。若业务需要写入，应另外用一个可删除的测试文件验证 NAS 写权限。

![Ubuntu =688x](https://i.eoht.net/docs/202404290032107.webp "挂载后的目录与权限示例，仍需结合 findmnt 验证来源")

在可以中断业务时重启，再重复 `findmnt` 检查开机挂载。失败时查看 `sudo journalctl -b -u mnt-nas_share.mount` 与 `sudo dmesg --ctime` 中的 CIFS 错误：分别排查 NAS 地址与共享名、账号权限、凭据文件、协议协商和启动时网络是否就绪。回传日志时去掉账号及内部地址等敏感信息。
