smb-mount
Samba/CIFS 挂载共享目录到本地
补充说明
smb_mount 指通过 Linux 的 CIFS 文件系统将远程 SMB/CIFS 共享目录挂载到本地目录。与 smbclient 的交互式访问不同,挂载后共享目录如同本地目录一样可直接读写,适用于文件管理器、应用程序等需要持久化访问的场景。
安装
安装 CIFS 挂载工具
# Debian / Ubuntu
sudo apt-get install cifs-utils
# RHEL / CentOS / Rocky / AlmaLinux
sudo yum install cifs-utils
# Fedora
sudo dnf install cifs-utils
# openSUSE
sudo zypper install cifs-utils
# Arch Linux
sudo pacman -S cifs-utils
挂载与卸载
创建挂载目录并挂载:
sudo mkdir -pm 755 /mnt/smb_share
sudo mount -t cifs //<服务器IP>/<共享名> /mnt/smb_share \
-o "username=<用户名>,password=<密码>,rw,file_mode=0777,dir_mode=0777,noperm"
参数说明:
| 参数 | 说明 |
|---|---|
-t cifs |
指定文件系统类型为 CIFS |
username= |
Samba 用户名 |
password= |
Samba 密码 |
rw |
读写挂载 |
file_mode=0777 |
文件权限掩码 |
dir_mode=0777 |
目录权限掩码 |
noperm |
客户端不校验权限(由服务端控制) |
uid= |
指定文件所有者的 UID |
gid= |
指定文件所有者的 GID |
_netdev |
表示网络文件系统,网络就绪后才挂载 |
验证挂载:
df -h | grep <共享名>
ls /mnt/smb_share
卸载:
sudo umount /mnt/smb_share
查看远程共享列表
smbclient -L //<服务器IP> -U <用户名>%<密码>
开机自动挂载
方法一:使用 systemd 服务(推荐)
1. 创建挂载脚本:
sudo tee /root/cifs-mount.sh <<'EOF'
#!/bin/bash
SHARE='//<服务器IP>/<共享名>'
MOUNT='/mnt/smb_share'
LOG="logger -t cifs-mount"
$LOG "开始挂载 $SHARE → $MOUNT"
mkdir -p "$MOUNT"
if mountpoint -q "$MOUNT"; then
$LOG "$MOUNT 已挂载,跳过"
exit 0
fi
sleep 3
opts="username=<用户名>,password=<密码>,rw,file_mode=0777,dir_mode=0777,noperm,_netdev"
if ! mount -t cifs "$SHARE" "$MOUNT" -o "$opts"; then
rc=$?
$LOG "挂载失败,返回码 $rc"
exit $rc
fi
$LOG "挂载成功"
exit 0
EOF
sudo chmod +x /root/cifs-mount.sh
2. 创建 systemd 服务:
sudo tee /etc/systemd/system/cifs-mount.service <<'EOF'
[Unit]
Description=CIFS Share Mount
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStartPre=-/bin/sleep 10
ExecStart=/root/cifs-mount.sh
User=root
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
3. 启用服务:
sudo systemctl daemon-reload
sudo systemctl enable --now cifs-mount.service
sudo systemctl status cifs-mount.service
4. 查看挂载日志:
journalctl -u cifs-mount.service -e # 最新日志
journalctl -u cifs-mount.service -f # 实时滚动日志
5. 管理服务:
sudo systemctl restart cifs-mount.service # 手动重启挂载
sudo systemctl disable --now cifs-mount.service # 停止并禁用
方法二:通过 /etc/fstab 挂载
# 备份 fstab
sudo cp /etc/fstab /etc/fstab.bak
# 追加挂载条目
echo '//<服务器IP>/<共享名> /mnt/smb_share cifs username=<用户名>,password=<密码>,rw,file_mode=0777,dir_mode=0777,noperm,_netdev 0 0' | sudo tee -a /etc/fstab
# 测试挂载
sudo mount -a
# 验证
df -h | grep smb_share
密码明文存储在 fstab 中存在安全风险。推荐使用凭据文件:
sudo tee /etc/smbcred <<'EOF' username=<用户名> password=<密码> EOF sudo chmod 600 /etc/smbcred然后在 fstab 中将
username=...,password=...替换为credentials=/etc/smbcred。
检验读写
cd /mnt/smb_share
echo "Hello" > test.txt
cat test.txt
rm test.txt