随机
Enter 搜索 ↑↓ 切换 Esc 清空

smb-mount

命令

Samba/CIFS 挂载共享目录到本地

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