让我们一起搭建samba服务,共享文件不再痛苦

Posted Richard_LiuJH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让我们一起搭建samba服务,共享文件不再痛苦相关的知识,希望对你有一定的参考价值。

目录

搭建samba需求分析

开始搭建

使用docke

r搭建samba服务

权限配置

-u  新增用户 user1  user2

-s  配置文件夹和访问权限                ​ 


      日常工作中难免要和别人分享文件,现在“云端产品”的功能也非常丰富,价格也是非常感人的。针对局域网的环境,我们完全可以搭建一个小型的文件共享服务。samba是一个非常好的选择。

        其实搭建samba的过程很简单,也有非常多的资料介绍。借助docker可以分分钟完成一个samba服务的搭建,所以本文是在巨人的肩膀上完成的。但网上几乎是千篇一律的过程,对于其中的配置参数反而会让人摸不着头脑。不如先从整体上了解samba的功能,然后根据需求来实现我们的搭建过程。

搭建samba需求分析

         上图是我们搭建samba服务的大体框架,在samba服务中可以配置用户的访问权限。用户user1 user2  访问自己的网络文件夹。其中samba服务需要使用系统端口139和445,139端口主要是SMB运行NBT(NetBios over TCP/IP)上使用,445是win2000后SMB直接在tcp/ip上使用的端口。所以没有特殊的NBT层,可以只使用445端口。

       我们将需求简化成以下四点

            1.  找一个Linux系统,搭建samba 服务

            2.  配置共享文件夹的权限

            3.  用户user1, user2 如何访问访问

            4.  维护(更新配置、新增用户、修改密码等等)

开始搭建

根据需求,按照他们之间的逻辑关系绘制下图

使用docke

r搭建samba服务

1.  在docker hub上下载最受欢迎的dperson/samba镜像Docker Hubhttps://registry.hub.docker.com/r/dperson/samba

      下载dperson/samba镜像

docker pull dperson/samba

2.  配置

 在官方页面中,对配置进行了详细的介绍

sudo docker run -it --rm dperson/samba -h
Usage: samba.sh [-opt] [command]
Options (fields in '[]' are optional, '<>' are required):
    -h          This help
    -c "<from:to>" setup character mapping for file/directory names
                required arg: "<from:to>" character mappings separated by ','
    -G "<section;parameter>" Provide generic section option for smb.conf
                required arg: "<section>" - IE: "share"
                required arg: "<parameter>" - IE: "log level = 2"
    -g "<parameter>" Provide global option for smb.conf
                required arg: "<parameter>" - IE: "log level = 2"
    -i "<path>" Import smbpassword
                required arg: "<path>" - full file path in container
    -n          Start the 'nmbd' daemon to advertise the shares
    -p          Set ownership and permissions on the shares
    -r          Disable recycle bin for shares
    -S          Disable SMB2 minimum version
    -s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]"
                Configure a share
                required arg: "<name>;</path>"
                <name> is how it's called for clients
                <path> path to share
                NOTE: for the default values, just leave blank
                [browsable] default:'yes' or 'no'
                [readonly] default:'yes' or 'no'
                [guest] allowed default:'yes' or 'no'
                NOTE: for user lists below, usernames are separated by ','
                [users] allowed default:'all' or list of allowed users
                [admins] allowed default:'none' or list of admin users
                [writelist] list of users that can write to a RO share
                [comment] description of share
    -u "<username;password>[;ID;group;GID]"       Add a user
                required arg: "<username>;<passwd>"
                <username> for user
                <password> for user
                [ID] for user
                [group] for user
                [GID] for group
    -w "<workgroup>"       Configure the workgroup (domain) samba should use
                required arg: "<workgroup>"
                <workgroup> for samba
    -W          Allow access wide symbolic links
    -I          Add an include option at the end of the smb.conf
                required arg: "<include file path>"
                <include file path> in the container, e.g. a bind mount

The 'command' (if provided and valid) will be run instead of samba

这么多配置参数,第一眼看上去肯定不知从何下手。所有先整理一下配置参数和我们需求的对应关系,如下图

 docker中常见的启动参数就不介绍了,主要是看samba启动时配置的 -p -u 和 -s。如果需要进行权限管理,那么就需要加上-p,否则默认是全公开的访问。那么-u和-s就是对用户以及共享文件的管理参数设置了。

权限配置

  • -u  新增用户 user1  user2

        

  • -s  配置文件夹和访问权限                 

        -s 参数看起来复杂,其实就是个填空题。按照需求填写即可,只需每项中间加分号。

例如:

启动samba服务

我们可以直接通过docker run 来启动容器

sudo docker run -it -p 139:139 -p 445:445 \\
            -v /path/to/directory:/share \\
            -d dperson/samba -p \\
            -u "user1;badpass" \\
            -u "user2;badpass" \\
            -s "public;/share/public" \\
            -s "share_1_2;/share/dir_1_2;yes;no;no;user1,user2;admin;admin;user1与user2专用" \\
            -s "share1;/share/dir1;yes;no;no;user1;admin;admin;user1专用" \\
            -s "share2;/share/dir2;no;no;no;user2;admin;admin;user2专用"

同时也可以使用docker-compose 的compose.yml配置文件

version: '3.1'

services:

  samba:
    image: dperson/samba
    restart: always
    container_name: samba
    ports:
      - 139:139
      - 445:445
    volumes:
      - /path/to/directory:/share
    command: '-p                                              
                -u "user1;badpass"
                -u "user2;badpass"
                -s "share_1_2;/share/dir_1_2;yes;no;no;user1,user2;admin;admin;user1与user2专用"
                -s "share1;/share/dir1;yes;no;no;user1;admin;admin;user1专用"
                -s "share2;/share/dir2;no;no;no;user2;admin;admin;user2专用"'

执行docker-compose up即可

访问

在windows中,win+R调出运行页面,输入 \\\\your-ip\\share1 即可访问对应的共享文件。例如下图

samba服务维护

常用docker命令

  • 查看日志                        docker logs samba
  • 进入docker终端交互     docker exec -it samba /bin/bash

更改配置文件 /etc/samba/sms.conf

通过docker exec -it samba /bin/bash进入 交互模式,打开配置文件/etc/samba/sms.conf

配置完成后重启容器 docker restart ID 

使用smbpasswd (进入samba终端)

  • 添加用户             sudo smbpasswd -a username
  • 删除用户             sudo smbpasswd -x username
  • 冻结用户             sudo smbpasswd -d username
  • 解冻用户             sudo smbpasswd -e username
  • 更改密码             sudo smbpasswd username
  • 密码置空             sudo smbpasswd -n username

其他问题

如果由于之前连接samba导致访问失败,可以尝试断开所有的smba连接,在cmd终端中输入下面命令即可

   net use * /del /y 

          

以上是关于让我们一起搭建samba服务,共享文件不再痛苦的主要内容,如果未能解决你的问题,请参考以下文章

让我们一起搭建samba服务,共享文件不再痛苦

让我们一起搭建samba服务,共享文件不再痛苦

Samba部署共享服务

在Linux上搭建Samba服务器,用于与Windows之间的跨平台文件共享

搭建文件共享服务器-samba 匿名和用户验证访问

linux下实现文件共享:搭建samba服务器