zoukankan      html  css  js  c++  java
  • 如何在Linux下部署Samba服务?

        

    Samba简介

    • Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
    • Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享。
    • Samba由两个主要程序组成,它们是smbd和nmbd。这两个守护进程在服务器启动到停止期间持续运行,功能各异。Smbd和nmbd使用的全部配置信息全都保存在smb.conf文件中。Smb.conf向smbd和nmbd两个守护进程说明输出什么以便共享,共享输出给谁及如何进行输出。
      • nmbd :这个 daemon 是用来管理工作组啦、NetBIOS name 啦等等的解析。主要利用 UDP 协议开启 port 137, 138 来负责名称解析的任务;
      • smbd :这个 daemon 的主要功能就是用来管理 SAMBA 主机分享的目录、档案与打印机等等。 主要利用可靠的 TCP 协议来传输数据,开放的端口为 139 及 445(不一定存在) 。
    • Samba提供了基于CIFS的四个服务:文件和打印服务、授权与被授权、名称解析、浏览服务。前两项服务由smbd提供,后两项服务则由nmbd提供。 简单地说,smbd进程的作用是处理到来的SMB软件包,为使用该软件包的资源与Linux进行协商,nmbd进程使主机(或工作站)能浏览Linux服务器。

    在本教程中,将展示如何在CentOS 7上安装Samba并将其配置为独立服务器,以通过网络在不同操作系统之间提供文件共享。

    环境准备

    属性 Samba服务端 Samba客户端
    节点 wencheng-smb windows10
    系统 CentOS Linux release 7.5.1804 (Minimal) windows10 企业版
    内核 3.10.0-862.el7.x86_64 windows10 企业版2019 x64
    IP地址 172.16.70.185 172.16.70.50
    SELinux setenforce 0 | disabled  

    检查安装Samba

    [root@wencheng-smb ~]# rpm -qa | grep samba
    [root@wencheng-smb ~]# yum install -y samba
    [root@wencheng-smb ~]# smbd -V
    Version 4.10.16
    

     设置防火墙允许Samba策略

    [root@wencheng-smb ~]# firewall-cmd --add-service samba --permanent
    [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=137/udp --permanent
    [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=138/udpp --permanent
    [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=139/tcp --permanent
    [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=445/tcp --permanent
    [root@wencheng-smb ~]# firewall-cmd --reload
    [root@wencheng-smb ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: ens33
      sources:
      services: ssh dhcpv6-client samba
      ports: 139/tcp 137/tcp 138/tcp 445/tcp
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    

     情景一:配置匿名访问, 任何人都可以访问的共享目录(允许上传、删除、修改文件)。

    [root@wencheng-smb ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf_bak
    [root@wencheng-smb ~]# vim /etc/samba/smb.conf
    # See smb.conf.example for a more detailed config file or
    # read the smb.conf manpage.
    # Run 'testparm' to verify the config is correct after
    # you modified it.
    
    [global]
            workgroup = SAMBA    # 设定Samba Server所要加入的工作组或者域
            security = user     # 安全性等级share<user<domain 
            map to guest = Bad User  # 允许匿名用户访问
            log file = /var/log/samba/log.%m  # 日志文件路径,宏%m表示客户端主机的Netbios名
            max log size = 50   # 每个log日志的最大容量为50K ,单位是kb ,0代表不做限制
            display charset = UTF8
    
    [public]
            comment = Share Directories  # 共享的描述
            path = /data/samba/shares/public  # 共享目录的路径
            public = yes    # 开启共享
            writeable = yes  # 开启写权限,默认只读权限
            create mask = 0640
            directory mask = 0755
    
    [root@wencheng-smb ~]# testparm  # 测试smb.conf语法的正确性
    Load smb config files from /etc/samba/smb.conf
    Unknown parameter encountered: "max log siza"
    Ignoring unknown parameter "max log siza"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    
    Press enter to see a dump of your service definitions  # 直接回车
    
    # Global parameters
    [global]
        log file = /var/log/samba/log.%m
        map to guest = Bad User
        max log size = 50
        security = USER
        workgroup = SAMBA
        idmap config * : backend = tdb
    
    [public]
        comment = Public Directories
        create mask = 0640
        writeable = yes
        path = /data/samba/shares/public
      read only = No
    
    • 创建共享文件夹,并设置权限。
    [root@wencheng-smb ~]# mkdir -p /data/samba/shares/public
    [root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3}
    [root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6}
    [root@wencheng-smb ~]# ls /data/samba/shares/public/
    public1  public2  public3  public4  public5  public6
    
    [root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/
    [root@wencheng-smb ~]# ls -ld /data/samba/shares/public/
    drwxr-xr-x. 5 nobody nobody 96 May 25 16:07 /data/samba/shares/public/
    
    • 启动Samba服务。
    [root@wencheng-smb ~]# systemctl start smb.service nmb.service
    [root@wencheng-smb ~]# systemctl enable smb.service nmb.service
    
    [root@wencheng-smb ~]# netstat -nutpl | grep -E 'smbd|nmbd'
    tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      130587/smbd
    tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      130587/smbd
    tcp6       0      0 :::445                  :::*                    LISTEN      130587/smbd
    tcp6       0      0 :::139                  :::*                    LISTEN      130587/smbd
    udp        0      0 172.16.70.255:137       0.0.0.0:*                           130591/nmbd
    udp        0      0 172.16.70.185:137       0.0.0.0:*                           130591/nmbd
    udp        0      0 0.0.0.0:137             0.0.0.0:*                           130591/nmbd
    udp        0      0 172.16.70.255:138       0.0.0.0:*                           130591/nmbd
    udp        0      0 172.16.70.185:138       0.0.0.0:*                           130591/nmbd
    udp        0      0 0.0.0.0:138             0.0.0.0:*                           130591/nmbd
    

    Win10客户端测试连接。

    • Win + R 组合键,调出运行窗口 。

        

    •  输入Samba服务器IP。

        

    •  再次按 Win + R 组合键,调出运行窗口,并输入:gpedit.msc 命令,确定或回车,可以快速打开本地组策略编辑器。

        

    • 本地组策略编辑器窗口中,依次展开到:计算机配置 - 管理模板 - 网络 - Lanman 工作站,找到并双击打开“启用不安全的来宾登录”选项,并启用。

        

    •  再次访问Samba服务器IP。

        

        

    •  可执行写入,删除操作。

        

    情景二:配置用户可以访问多个部门的共享目录。

    [root@wencheng-smb samba]# cat smb.conf
    # See smb.conf.example for a more detailed config file or
    # read the smb.conf manpage.
    # Run 'testparm' to verify the config is correct after
    # you modified it.
    
    [global]
    	workgroup = SAMBA
    	server string = WenCheng Samba Server Version %v
    	netbios name = WenChengSamba
    	security = user
    	log file = /var/log/samba/log.%m
    	max log size = 50
    	map to guest = Bad User
    	display charset = UTF8
    
    [public]
    	comment = Public Directories
    	path = /data/samba/shares/public
    	public = yes
    	writeable = no    # 关闭匿名用户写权限
    	create mask = 0644
    	directory mask = 0755
         write list = samba   # 只允许samba管理员用户写
    
    [devops]
            comment = Devops Directories
            path = /data/samba/shares/devops
            public = no
    	writable = yes
            create mask = 0640
            directory mask = 0750
    	admin users = devops
            valid users = @devops,samba
            write list = @devops,samba
    
    [market]
            comment = Market Directories
            path = /data/samba/shares/market
            public = no
    	writable = yes
            create make = 0640
            directory mask = 0750
    	admin users = market
            valid users = @market,samba
    	write list = @market,samba
    
    共享目录说明:
      public :所有匿名用户只可读,samba管理员用户可读可写
      devops : 只允许@devops,@samba组用户可读可写
      market : 只允许@devops,@samba组用户可读可写
    
    •  验证smb.conf配置文件,并重启smb和nmb服务。
    [root@wencheng-smb samba]# testparm
    Load smb config files from /etc/samba/smb.conf
    Unknown parameter encountered: "display charset"
    Ignoring unknown parameter "display charset"
    Unknown parameter encountered: "create make"
    Ignoring unknown parameter "create make"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    
    Press enter to see a dump of your service definitions
    
    # Global parameters
    [global]
        log file = /var/log/samba/log.%m
        map to guest = Bad User
        max log size = 50
        netbios name = WENCHENGSAMBA
        security = USER
        server string = WenCheng Samba Server Version %v
        workgroup = SAMBA
        idmap config * : backend = tdb
    
    [public]
        comment = Public Directories
        create mask = 0640
        guest ok = Yes
        path = /data/samba/shares/public
        write list = samba
    
    [devops]
        admin users = devops
        comment = Devops Directories
        create mask = 0644
        path = /data/samba/shares/devops
        read only = No
        valid users = @devops @samba
        write list = @devops @samba
    
    [market]
        admin users = market
        comment = Market Directories
        path = /data/samba/shares/market
        read only = No
        valid users = @market @samb
    
    [root@wencheng-smb ~]# systemctl restart smb nmb
    
    • 创建普通用户及管理员账号; 创建共享目录;并分配给目录相关权限。
    [root@wencheng-smb ~]# useradd -M -s /sbin/nologin samba      # Samba管理员
    [root@wencheng-smb ~]# useradd -M -s /sbin/nologin devops      # devops部门管理员
    [root@wencheng-smb ~]# useradd -M -s /sbin/nologin market      # market部门管理员
    [root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g devops user1  # devops部门用户
    [root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g market user2  # market部门用户
    
    [root@wencheng-smb ~]# id samba
    uid=1000(samba) gid=1000(samba) groups=1000(samba)
    [root@wencheng-smb ~]# id devops
    uid=1001(devops) gid=1001(devops) groups=1001(devops)
    [root@wencheng-smb ~]# id market
    uid=1002(market) gid=1002(market) groups=1002(market)
    [root@wencheng-smb ~]# id user1
    uid=1003(user1) gid=1001(devops) groups=1001(devops)
    [root@wencheng-smb ~]# id user2
    uid=1004(user2) gid=1002(market) groups=1002(market)
    
    [root@wencheng-smb ~]# mkdir -p /data/samba/shares/{public,devops,market}
    [root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3}
    [root@wencheng-smb ~]# mkdir /data/samba/shares/devops/devops{1..3}
    [root@wencheng-smb ~]# mkdir /data/samba/shares/market/market{1..3}
    [root@wencheng-smb ~]# touch /data/samba/shares/market/market{4..6}
    [root@wencheng-smb ~]# touch /data/samba/shares/devops/devops{4..6}
    [root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6}
    [root@wencheng-smb ~]# ls /data/samba/shares/*
    /data/samba/shares/devops:
    devops1  devops2  devops3  devops4  devops5  devops6
    /data/samba/shares/market:
    market1  market2  market3  market4  market5  market6
    /data/samba/shares/public:
    public1  public2  public3  public4  public5  public6
    
    # 修改属主属组几权限
    [root@wencheng-smb ~]# chown samba.samba /data/samba/shares/
    [root@wencheng-smb ~]# chown devops.devops /data/samba/shares/devops/
    [root@wencheng-smb ~]# chmod 775 /data/samba/shares/devops/
    [root@wencheng-smb ~]# chown market.market /data/samba/shares/market/
    [root@wencheng-smb ~]# chmod 775 /data/samba/shares/market/
    [root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/
    [root@wencheng-smb ~]# chmod 775 /data/samba/shares/public/
    
    [root@wencheng-smb ~]# setfacl -m u:samba:rwx /data/samba/shares/*
    
    [[root@wencheng-smb ~]# ls -ld /data/samba/shares/
    drwxr-xr-x. 5 samba samba 48 May 28 10:09 /data/samba/shares/
    [root@wencheng-smb ~]# ls -ld /data/samba/shares/*
    drwxrwxr-x+ 5 devops devops 143 May 28 17:02 /data/samba/shares/devops
    drwxrwxr-x+ 5 market market 143 May 28 17:02 /data/samba/shares/market
    drwxrwxr-x+ 5 nobody nobody  96 May 28 10:06 /data/samba/shares/public
    
    [root@wencheng-smb ~]# getfacl /data/samba/shares/*
    getfacl: Removing leading '/' from absolute path names
    # file: data/samba/shares/devops
    # owner: devops
    # group: devops
    user::rwx
    user:samba:rwx
    group::rwx
    mask::rwx
    other::r-x
    
    # file: data/samba/shares/market
    # owner: market
    # group: market
    user::rwx
    user:samba:rwx
    group::rwx
    mask::rwx
    other::r-x
    
    # file: data/samba/shares/public
    # owner: nobody
    # group: nobody
    user::rwx
    user:samba:rwx
    group::rwx
    mask::rwx
    other::r-x
    
    将现有的用户添加到组。
    usermod [-G] [GroupName] [UserName]
    将现有的用户添加到多个组
    usermod [-G] [GroupName1,GroupName2] [UserName]
    
    将现有用户从组中移除。
    gpasswd [-d] [UserName] [GroupName]
    将现有多个用户添加到组。
    gpasswd [-M] [UserName1,UserName2] [GroupName]
    

    pdbedit命令解析

    pdbedit 命令用于管理Samba服务的帐户信息数据库,格式为:"pdbedit [选项] 帐户"
    第一次把用户信息写入到数据库时需要使用-a参数,以后修改用户密码、删除用户等等操作就不再需要了。
     
     pdbedit -L :查看samba用户
     pdbedit -a -u user:添加samba用户
     pdbedit -r -u user:修改samba用户信息
     pdbedit -x -u user:删除samba用户
     
     samba服务数据库的密码也可以用 smbpasswd 命令 操作
     smbpasswd -a user:添加一个samba用户
     smbpasswd -d user:禁用一个samba用户
     smbpasswd -e user:恢复一个samba用户
     smbpasswd -x user:删除一个samba用户
    
    •  将用户添加为Samba用户,这里以samba用户为例,其他用户类同,不再赘述。
    [root@wencheng-smb ~]# pdbedit -a -u samba
    Unknown parameter encountered: "display charset"
    Ignoring unknown parameter "display charset"
    new password:              # 登录samba密码
    retype new password:          # 再次确认输入
    Unix username:        samba
    NT username:
    Account Flags:        [U          ]
    User SID:             S-1-5-21-2219792021-1567261761-1612575661-1000
    Primary Group SID:    S-1-5-21-2219792021-1567261761-1612575661-513
    Full Name:
    Home Directory:       \wenchengsambasamba
    HomeDir Drive:
    Logon Script:
    Profile Path:         \wenchengsambasambaprofile
    Domain:               WENCHENGSAMBA
    Account desc:
    Workstations:
    Munged dial:
    Logon time:           0
    Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
    Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
    Password last set:    Fri, 28 May 2021 12:24:14 CST
    Password can change:  Fri, 28 May 2021 12:24:14 CST
    Password must change: never
    Last bad password   : 0
    Bad password count  : 0
    Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    
    [root@wencheng-smb ~]# pdbedit -L    # 查看samba用户
    Unknown parameter encountered: "display charset"
    Ignoring unknown parameter "display charset"
    samba:1000:
    devops:1001:
    market:1002:
    user1:1003:
    user2:1004:
    
    •  Win10测试连接Samba共享目录。

         

    •  “public”文件夹允许所有用户可直接打开,但无法上传,删除操作。

        

    • 访问“devops”文件夹需账号密码。

        

    Win10本机访问samba时用切换另一个用户登录。

    方法如下:
    1)按键ctrl+r,打开"运行",输入"cmd"
    2)输入命令"net use * /delete",接着输入"Y",即先取消所有的net 连接
    

         

    •   “devops”文件夹只允许devops用户及其组的用户(user1),samba管理员上传,删除操作。

        

    •  “market”文件夹只允许market用户及其组的用户(user2),samba管理员上传,删除操作。

        

    • “pbulic”文件夹只允许samba管理员上传,删除操作。

        

     至此,已实现Samba + Windows 文件共享。

    ********************如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】/【赞助】按钮,因为您的支持是我继续写作,分享的最大动力!********************
  • 相关阅读:
    消除左递归
    DFA最小化
    非确定的自动机NFA确定化为DFA
    正规式到正规文法与自动机
    正规文法与正规式
    词法分析程序的设计与实现
    4.文法和语言总结与梳理
    语法树,短语,直接短语,句柄
    语法
    第一次作业 编译原理概述
  • 原文地址:https://www.cnblogs.com/zhangwencheng/p/14782027.html
Copyright © 2011-2022 走看看