smbclient (Samba客户端)

由于 FreeBSD mount_smbfs (不推荐) 只支持 smb v1 协议,导致默认构建的 FreeBSD Samba 共享存储( smb v2 )无法访问。所以改为使用标准的 Samba 客户端 smbclient

命令行连接Samba服务器

  • 列出SMB共享

列出服务器共享
# admin用户密码password访问服务器192.168.1.18列出共享
smbclient -L //192.168.1.18 -U admin%password

# 如果使用 -U admin ,则会交互提示输入密码

输出信息案例:

列出服务器共享输出案例
Can't load /usr/local/etc/smb4.conf - run testparm to debug it

	Sharename       Type      Comment
	---------       ----      -------
	docs            Disk      
	IPC$            IPC       IPC Service (Samba Server Version 4.16.11)
SMB1 disabled -- no workgroup available

可以看到服务器端共享了 docs ,并且默认禁止了 smb v1 协议

  • 如果要像ftp一样访问服务器共享,则修订上述命令,去掉 -L 参数

类似ftp一样使用smbclient
smbclient //192.168.1.18/docs -U admin%password

可以看到服务器端共享的 docs 存储下有2个目录和一个测试文件:

类似ftp一样使用smbclient
Can't load /usr/local/etc/smb4.conf - run testparm to debug it
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sun Jun 29 11:14:17 2025
  ..                                  D        0  Wed Jun 18 23:17:10 2025
  test                                N        0  Sun Jun 29 10:55:23 2025
  backup                              D        0  Sun Jun  1 21:54:18 2025
  github                              D        0  Fri Jun 27 17:46:47 2025

		6572595736 blocks of size 1024. 4718174432 blocks available

配置普通用户挂载SMB

为了方便使用,可以配置一个 samba 用户组给予 sudo 权限运行挂载命令:

  • 添加 samba 组并将用户 admin 加入该组:

配置 samba 组及用户
# 创建samba组,gid设置成502
pw groupadd samba -g 502
# 将admin用户加入samba组
pw groupmod samba -m admin

#如果使用Ubuntu这样的Linux系统可以使用以下2条命令
#sudo groupadd samba
#sudo adduser user admin
  • 修订 /usr/local/etc/sudoers (FreeBSD) 或 /etc/sudoers (Linux),添加:

修订 sudoers 配置,允许samba用户组用户执行挂载cifs命令
%samba   ALL=(ALL) /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs

# 如果sudo时不需要密码设置,则可以使用
# %samba   ALL=(ALL) NOPASSWD: /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs

警告

实践中发现,FreeBSD不支持 mount.cifs ,这个工具只有Linux才提供,所以实际上目前FreeBSD无法作为客户端来挂载 smb v2 输出的共享,只能将Samba配置为 smb v1 输出,这样才能通过 FreeBSD mount_smbfs (不推荐) 挂载。

备注

以下步骤为Linux客户端,FreeBSD无法执行。我在一台 树莓派Raspberry Pi 5 的 Raspberry Pi OS上测试

  • 执行 mount.cifs 命令挂载Samba共享:

mount.cifs 挂载
mount -t cifs //192.168.7.200/docs /mnt -o username=admin

自动挂载CIFS

为了能够自动挂载,需要为 mount.cifs 提供密码配置参数

  • 创建 /etc/samba/user.docs 配置文件(假设作为访问 docs ),包含2行内容

/etc/samba/user.docs 配置文件
username=samba_user
password=samba_user_password
  • 修订 /etc/samba/user.docs 访问权限

修订 /etc/samba/user.docs 文件访问权限
# permissions of 0400 = read only
sudo chmod 0400 /etc/samba/user.docs
  • 创建本地挂载目录 /home/admin/docs (我需要将远程目录挂载为admin目录下的 docs 目录,请按实际调整)

创建本地挂载目录
mkdir /home/admin/docs
  • 修订本地挂载配置 /etc/fstab :

修订本地挂载 /etc/fstab
//192.168.7.200/docs  /home/admin/docs  cifs  credentials=/etc/samba/user.docs,rw,noexec,uid=admin,gid=admin  0 0

注意这里的参数:

  • credentials=/etc/samba/user.docs 指定了认证密码文件

  • noexec 避免执行samba挂载目录下文件

  • uid=admin,gid=admin 设置挂载后该目录下文件的属主映射为 admin 用户名和组,否则默认是 root 用户名和组(这里是为了方便admin用户使用)

  • 最后执行 mount /home/admin/docs 挂载,完成后执行 df -h 就会看到挂载了远程 FreeBSD Samba 输出的共享存储 docs :

挂载samba存储情况
Filesystem            Size  Used Avail Use% Mounted on
...
//192.168.7.200/docs  6.2T  1.8T  4.4T  29% /home/admin/docs

参考