【Linux】Samba:容器搭建 SMB 文件共享

本教程将逐步指导如何通过 Docker 搭建一个 SMB 共享服务器,实现文件夹共享到局域网中。

前提条件

  • 已安装 Docker 环境(非容器环境安装教程可省略)。
  • 确保宿主机上已有需要共享的文件夹路径(如 /path/to/share)。
  • 了解基本网络环境及 IP 地址配置。

挂载 USB 存储设备(可选)

检查硬盘状态

插入 USB 硬盘后,运行以下命令查看设备状态:

sudo fdisk -l

记住硬盘设备路径(如 /dev/sdb1)。

挂载硬盘

创建一个挂载点并将硬盘挂载到该目录:

sudo mkdir -p /mnt/usb_drive
sudo mount /dev/sdb1 /mnt/usb_drive

如果需要自动挂载,可编辑 /etc/fstab,例如:

/dev/sdb1  /mnt/usb_drive  ext4  defaults  0  0

快速启动 SMB 共享容器

命令示例

docker run -it --name samba \
    -p 139:139 \
    -p 445:445 \
    -v /path/to/share:/share_dir \
    -d dperson/samba \
    -u "username;password" \
    -s "share_name;/share_dir/;yes;no;yes;all;username;username"

参数说明

  1. -p 139:139-p 445:445
    映射 SMB 服务的标准端口,用于客户端访问。
  2. -v /path/to/share:/share_dir
    将宿主机的 /path/to/share 挂载为容器内部的 /share_dir,实现共享。
  3. -u "username;password"
    创建一个 SMB 用户,用户名为 username,密码为 password。支持多用户配置,可以添加多个 -u 参数。
  4. -s "share_name;/share_dir/;yes;no;yes;all;username;username"
    配置共享目录:
    • share_name:共享名称(显示在网络设备中)。
    • /share_dir/:共享路径,对应容器内的目录。
    • yes:是否可被发现(browse)。
    • no:是否只读(readonly)。
    • yes:是否允许访客访问(guest)。
    • all:允许访问的用户列表,all 表示所有用户。
    • username:管理员用户(admins)。
    • username:有写权限的用户列表(writelist)。

启动容器后验证

查看容器状态:

docker ps

查看日志:

docker logs samba

只有登录用户可读写

调整启动命令中的共享参数,确保 访客(guest)访问被禁用,并限制访问和写入权限给特定用户。

命令示例

docker run -it --name samba \
    -p 139:139 \
    -p 445:445 \
    -v /path/to/share:/share_dir \
    -d dperson/samba \
    -u "user1;password1" \
    -u "user2;password2" \
    -s "secure_share;/share_dir/;yes;no;no;user1,user2;user1;user2"

参数解析

  • -u "user1;password1"-u "user2;password2"
    创建两个用户:user1user2,并分别设置密码。
  • -s "secure_share;/share_dir/;yes;no;no;user1,user2;user1;user2"
    • secure_share:共享名称。
    • /share_dir/:共享路径。
    • yes:共享可被发现。
    • no:禁止匿名访客访问(guest=no)。
    • user1,user2:仅允许 user1user2 登录访问。
    • user1admins 设置为 user1,表明该用户是管理员。
    • user2writelist 设置为 user2,允许其写入权限。

测试 SMB 共享

Windows 客户端

  1. 打开资源管理器,在地址栏输入:

    \\<宿主机IP地址>\share_name
    
  2. 提示输入凭据时,填写配置的用户名和密码。

Linux 客户端

  1. 安装

    smbclient
    

    工具:

    sudo apt install smbclient -y
    
  2. 测试访问:

    smbclient //192.168.1.2/share_name -U username
    

macOS 客户端

  1. 在 Finder 中选择“前往” > “连接服务器”。

  2. 输入共享地址:

    smb://<宿主机IP地址>/share_name
    

停止和删除容器

  • 停止容器:

    docker stop samba
    
  • 删除容器:

    docker rm samba
    

常见问题及解决方案

无法访问共享目录

  • 确认宿主机防火墙开放了 139445 端口。
  • 使用 IP 地址访问代替主机名。

无法写入共享目录

  • 确认 -s 参数中 readonly 设置为 no

  • 检查共享目录的权限:

    chmod -R 777 /path/to/share
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值