来源:Canonical / Ubuntu Server 文档贡献者,How to mount CIFS shares permanently。原页标注最后更新于 2026 年 6 月 26 日。本文为经授权的中文翻译整理,编辑修正均在对应位置说明。
当 Ubuntu 需要持续访问 Windows 文件服务器或 Samba 共享时,可以把远端共享挂载到本地目录,并把挂载规则写入 /etc/fstab。系统启动后会按规则尝试连接,应用就可以通过固定路径访问共享文件。
这里讲的是共享的客户端挂载,不是创建 Samba 服务端。开始前,应先确认网络、服务端名称解析、共享名称及账号访问权限。原文使用以下示例名称:本地用户 ubuntuusername,远端用户 msusername,服务器 servername,共享 sharename,挂载点 /media/windowsshare。它们都需要替换成实际环境的值。

安装客户端,建立独立的挂载目录
sudo apt-get install cifs-utils
sudo mkdir /media/windowsshare
每个共享应使用自己的挂载点。挂载以后,目录中原有的本地内容会被挂载视图遮住,因此应先确认这个路径的用途,而不是随意选择已有业务目录。上述命令会安装软件并创建系统目录,需要管理员权限。
来宾共享:只适用于明确允许匿名访问的服务
对于确实不需要密码的共享,原文给出的 fstab 条目是:
//servername/sharename /media/windowsshare cifs guest,uid=1000 0 0
guest 表示按来宾方式连接;uid=1000 指定本地显示的所属用户。这里的 1000 只是示例,不代表所有机器上正确的用户。远端 ACL 仍然决定服务器允许哪些文件操作,本地显示的所有者不能绕过远端权限。
如果共享路径中有空格,在 fstab 中用 \040 表示,例如 //servername/My\040Documents。保存条目后,可单独尝试挂载这个目录:
sudo mount /media/windowsshare
安全边界:来宾条目只说明如何访问已经允许匿名使用的共享。不要为了让挂载成功,就把原本受保护的共享改成来宾访问。
密码共享:不要把密码直接写入 fstab
原文展示了在挂载选项中写 username=msusername,password=mspassword 的办法,随即说明它不合适:/etc/fstab 通常所有本地用户都能读取,密码也会随之暴露。本稿将它保留为反例说明,不提供带明文密码的可复制整行配置。
更合适的做法是把凭据放在只允许所属用户读取和修改的文件里,例如 /home/ubuntuusername/.smbcredentials。文件内容为:
username=msusername
password=在本机安全编辑器中填写真实密码
不要把这里的说明文字当作实际密码;也不要通过会进入 shell 历史的命令行参数填入真实秘密。原文使用 gedit 编辑文件,服务器没有图形桌面时,可用自己熟悉的本地文本编辑器。文件建好后收紧权限:
chmod 600 ~/.smbcredentials
编辑补注:最好在写入秘密之前就确认目标文件权限为 600、文件归属正确。凭据文件仍是明文存储,600 只限制普通本地用户访问,不能防止 root、失窃备份或被攻陷的账号读取。不要把它提交到代码仓库。
用管理员权限编辑 /etc/fstab,添加:
//servername/sharename /media/windowsshare cifs credentials=/home/ubuntuusername/.smbcredentials 0 0
再单独运行 sudo mount /media/windowsshare,检查挂载是否成功。只有在手动挂载正常之后,才适合安排重启验证。远端服务器离线或启动时网络尚未准备好,都可能让自动挂载失败,甚至影响启动流程。本文没有在真实服务器上完成这些测试。
让本地用户与远端权限对应起来
需要指定挂载文件的本地所属用户或组时,可以增加 uid 和 gid 选项。原文的用户归属示例是:
//servername/sharename /media/windowsshare cifs uid=ubuntuusername,credentials=/home/ubuntuusername/.smbcredentials 0 0
在具体机器上要核实用户名与数值 ID 的对应关系。若同时使用 Samba 与 authd,还必须按 authd 文档完成客户端用户、组映射;否则身份标识不匹配会造成权限问题。修改本地显示归属不能代替服务端账号授权。
需要在登录时挂载:libpam-mount
原文还提供了基于 PAM 的登录时挂载方式,前提是 Ubuntu 账号与网络共享使用相同的用户名和密码。先安装:
sudo apt-get install libpam-mount
随后由管理员编辑 /etc/security/pam_mount.conf.xml。取消 <luserconf name=".pam_mount.conf.xml" /> 所在段落的注释,使用户可以维护自己的配置;并在已有的 <mntoptions allow="..."> 允许列表中加入 uid,gid,dir_mode,credentials。这里是增加必要选项,不是无条件放开所有挂载参数。
用户配置 ~/.pam_mount.conf.xml 的原文示例如下:
<?xml version="1.0" encoding="utf-8" ?>
<pam_mount>
<volume
options="uid=%(USER),gid=100,dir_mode=0700,credentials=/home/ubuntuusername/.smbcredentials,nosuid,nodev"
user="*"
mountpoint="/media/windowsshare"
path="sharename"
server="servername"
fstype="cifs" />
</pam_mount>
其中 nosuid,nodev 限制挂载中文件的特殊权限和设备语义,dir_mode=0700 控制目录权限显示。gid=100、用户通配符、固定的凭据路径和公共挂载点仍必须按目标环境改写;这个单用户示例不能直接变成多用户共享一套秘密的部署配置。
编辑补注:PAM 配置错误可能影响登录,应保留现有管理会话和配置副本,并按系统维护流程验证。本文只展示源文的配置含义,没有修改本机 PAM 或安装软件。
遇到 permission denied,按层检查
mount error(13) permission denied 表示服务端拒绝了访问。先检查账号密码是否有效、账号是否确实能访问目标共享;然后检查凭据文件格式。应写成 password=...,不要在等号左右加入空格。
如果账号表示为 SALES\sally,用户名通常是 sally,域是 SALES。可以在凭据文件中另加一行:
domain=SALES
协议版本和认证方式也相互关联。当前源文明确说明 SMB1 不安全且已不受支持,初次排查可先不显式指定 sec= 或 vers=,让客户端与服务端协商。如果仍有问题,再依据 mount.cifs(8) 手册和服务端策略选择参数。不要把降级到 SMB1 当作常规修复。
网络晚于启动就绪时,改为手动或登录挂载
如果开机时无法可靠访问网络,可以在对应的 fstab 条目加入 noauto,关闭自动挂载,登录后再手动挂载,或使用前述 PAM 方式:
//servername/sharename /media/windowsshare cifs noauto,credentials=/home/ubuntuusername/.smbcredentials 0 0
与原文差异:源页在最后一段把凭据文件写成 .smbpasswd,前文则一直使用 .smbcredentials。本稿统一为前面实际创建的 .smbcredentials,避免因为文件名不一致导致认证失败。它只是本地凭据文件名,不是 Samba 密码数据库命令。
持续挂载的关键不是在配置中多加几个选项,而是让网络可用时间、远端账号权限、本地身份映射和凭据保存方式彼此一致。验证也应分开进行:先验证一次指定挂载,再验证重启或登录时的预期行为。












暂无评论内容