zoukankan      html  css  js  c++  java
  • Linux-samba服务配置

    samba 服务 简介

    1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以SMB是没有意义的字符而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生(见图12-1)。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。

    smb(samba):用于linux和windows之间的文件共享,可以实现匿名用户和本地用户之间的文件共享

    工作原理:

    • smb进程 控制发布共享目录与权限    tcp  139  445
    • nmb进程 主要用于名称解析              udp  137  138

    软件包及配置文件了解

    • 软件包
      [root@centos7-1 ~]# rpm -aq |grep samba     //6系统上查看
      samba-winbind-clients-3.6.9-164.el6.x86_64        客户端工具
      samba-3.6.9-164.el6.x86_64                        服务端
      samba-client-3.6.9-164.el6.x86_64                 客户端工具
      samba4-libs-4.0.0-58.el6.rc4.x86_64               库文件
      samba-common-3.6.9-164.el6.x86_64                 工具包
      samba-winbind-3.6.9-164.el6.x86_64                客户端工具
      
    • 配置文件
      [root@courtoap ~]# rpm -ql samba |grep etc    // 6系统
      /etc/logrotate.d/samba        日志轮转文件
      /etc/pam.d/samba              验证机制
      /etc/rc.d/init.d/nmb          启动脚本
      /etc/rc.d/init.d/smb
      /etc/samba/smbusers           用户别名文件
      
      [root@centos7-1 ~]# rpm -ql samba |grep etc    // 7系统
      /etc/openldap/schema
      /etc/openldap/schema/samba.schema
      /etc/pam.d/samba
    • 二进制命令
      /usr/sbin/nmbd
      /usr/sbin/smbd
      [root@centos7-1 ~]# rpm -ql samba-common
      /etc/samba                   主目录
      /etc/samba/smb.conf          主配置文件
      /usr/bin/pdbedit             查看smb数据库用户
      /usr/bin/smbpasswd           设置用户密码
      /usr/bin/testparm            检测语法
    • 了解主配置文件
      [root@centos7-1 ~]# cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z]
      [global]
          workgroup = SAMBA
          security = user
          passdb backend = tdbsam
          printing = cups
          printcap name = cups
          load printers = yes
          cups options = raw
      [homes]
          comment = Home Directories
          valid users = %S, %D%w%S
          browseable = No
          read only = No
          inherit acls = Yes
      [printers]
          comment = All Printers
          path = /var/tmp
          printable = Yes
          create mask = 0600
          browseable = No
      [print$]
          comment = Printer Drivers
          path = /var/lib/samba/drivers
          write list = @printadmin root
          force group = @printadmin
          create mask = 0664
          directory mask = 0775
      cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z]

    Samba服务程序中的参数以及作用

    [global]   #全局参数。
      workgroup = MYGROUP #工作组名称
      server string = Samba Server Version %v #服务器介绍信息,参数%v为显示SMB版本号
      log file = /var/log/samba/log.%m #定义日志文件的存放位置与名称,参数%m为来访的主机名
      max log size = 50 #定义日志文件的最大容量为50KB
      security = user #安全验证的方式,总共有4种
      #share:来访主机无需验证口令;比较方便,但安全性很差
      #user:需验证来访主机提供的口令后才可以访问;提升了安全性
      #server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
      #domain:使用域控制器进行身份验证
      passdb backend = tdbsam #定义用户后台的类型,共有3种
      #smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
      #tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
      #ldapsam:基于LDAP服务进行账户验证
      load printers = yes #设置在Samba服务启动时是否共享打印机设备
      cups options = raw #打印机的选项
    [homes]   #共享参数
      comment = Home Directories #描述信息
      browseable = no #指定共享信息是否在“网上邻居”中可见
      writable = yes #定义是否可以执行写入操作,与“read only”相反
    [printers]   #打印机共享参数
      comment = All Printers  
      path = /var/spool/samba #共享文件的实际路径(重要)。
      browseable = no  
      guest ok = no     等于 public = no #是否所有人可见,等同于"public"参数。
      writable = no       等于 read only = yes  
      printable = yes

    搭建SMB服务

    测试默认情况下的共享文件,也就是安装完软件直接启动。不做任何配置文件的修改

    服务端:192.168.122.205

    [root@centos7-1 ~]# yum install samba
    [root@centos7-1 ~]# systemctl start smb
    # 6的启动命令
    service smb restart       service nmb restart 

    客户端测试查看服务端共享了哪些文件

    客户端:192.168.122.206

    [root@centos7-2 ~]# smbclient -L 192.168.122.205
    Enter root's password:       //此处不输密码,直接回车
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (Samba 4.7.1)
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Server               Comment
        ---------            -------
        CENTOS7-1            Samba 4.7.1
    
        Workgroup            Master
        ---------            -------
        SAMBA                CENTOS7-1

    服务端:192.168.122.205

    创建一个本地用户
    [root@centos7-1 ~]# useradd smb1
    
    将用户添加到数据库并且设置密码  (server端设置)
    [root@centos7-1 ~]# smbpasswd -a smb1     
    New SMB password:
    Retype new SMB password:
    Added user smb1.
    查看smb数据库的用户(查看是否成功添加)

    [root@centos7-1 ~]# pdbedit -L smb1
    smb1:1001:

    客户端:192.168.122.206

    查看共享的目录
    [root@centos7-2 ~]# smbclient -L 192.168.122.205 -U smb1
    Enter smb1's password: 
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (Samba 4.7.1)
        smb1            Disk      Home Directories
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Server               Comment
        ---------            -------
        CENTOS7-1            Samba 4.7.1
    
        Workgroup            Master
        ---------            -------
        SAMBA                CENTOS7-1
    
    通过smb1用户登录
    [root@centos7-2 ~]# smbclient //192.168.122.205/smb1 -U smb1
    Enter smb1's password: 
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    smb: > ls 
      .                                   D        0  Thu Nov 15 10:30:04 2018
      ..                                  D        0  Thu Nov 15 10:30:04 2018
      .mozilla                           DH        0  Mon Oct 29 12:26:18 2018
      .bash_logout                        H       18  Wed Aug  3 00:00:07 2016
      .bash_profile                       H      193  Wed Aug  3 00:00:07 2016
      .bashrc                             H      231  Wed Aug  3 00:00:07 2016
    
            9447424 blocks of size 1024. 5601668 blocks availabl

    实例一

    共享本地目录/samba/share, 并且只允许harry用户可写,sysadmin组的成员只读

    服务端:

    第1步:创建共享目录

    [root@centos7-1 ~]# mkdir /samba/share -p
    [root@centos7-1 ~]# echo hello world > /samba/share/t.txt
    [root@centos7-1 ~]# ls /samba/share/

    第2步:创建用户和组方便后面测试

    [root@centos7-1 ~]# useradd harry
    [root@centos7-1 ~]# groupadd sysadmin
    [root@centos7-1 ~]# useradd -G sysadmin u1
    [root@centos7-1 ~]# useradd -G sysadmin u2

    第3步:将创建的用户添加到smb服务的数据库并设置密码

    [root@centos7-1 ~]# smbpasswd -a harry
    New SMB password:
    Retype new SMB password:
    Added user harry.
    [root@centos7-1 ~]# smbpasswd -a u1
    New SMB password:
    Retype new SMB password:
    Added user u1.
    [root@centos7-1 ~]# smbpasswd -a u2
    New SMB password:
    Retype new SMB password:
    Added user u2.
    [root@centos7-1 ~]# pdbedit -L 
    smb1:1001:
    u1:1004:
    harry:1003:
    u2:1005:

    第4步:编辑配置文件进行相应的配置并重启服务

    [root@centos7-1 ~]# vim /etc/samba/smb.conf
    [share]
            comment = samba share       // 描述
            path = /samba/share              // 共享的目录
            browseable = yes                 // 不隐藏标签
            valid users = harry,@sysadmin    // 可读用户
            write list = harry               // 可写用户
    
    [root@centos7-1 ~]# systemctl restart smb

    客户端测试:

    查看共享目录,可以查看到共享的share目录

    [root@centos7-2 ~]# smbclient -L 192.168.122.205
    Enter root's password: 
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Home Directories
        print$          Disk      Printer Drivers
        share           Disk      samba share
        IPC$            IPC       IPC Service (Samba 4.7.1)
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Server               Comment
        ---------            -------
        CENTOS7-1            Samba 4.7.1
    
        Workgroup            Master
        ---------            -------
        SAMBA                CENTOS7-1    

    测试harry用户可读可写

    [root@centos7-2 ~]# smbclient //192.168.122.205/share -U harry
    Enter harry's password: 
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    smb: > ls 
      .                                   D        0  Thu Nov 15 11:21:44 2018
      ..                                  D        0  Thu Nov 15 11:21:20 2018
      t.txt                               N       12  Thu Nov 15 11:21:44 2018
    
            9447424 blocks of size 1024. 5608576 blocks available
    smb: > mkdir 1
    NT_STATUS_ACCESS_DENIED making remote directory 1
    smb: > 

    测试发现harry用户能够成功访问,但是创建文件却失败了(原因分析:服务本身已经给定了harry用户写的权限,那么就应该是目录没有写的权限)
    解决办法:
    服务端给予harry用户读写执行的权限

    [root@centos7-1 ~]# setfacl -m u:harry:rwx /samba/share/

    客户端再次测试:

    smb: > mkdir 1
    smb: > ls 
      .                                   D        0  Thu Nov 15 11:32:35 2018
      ..                                  D        0  Thu Nov 15 11:21:20 2018
      t.txt                               N       12  Thu Nov 15 11:21:44 2018
      1                                   D        0  Thu Nov 15 11:32:35 2018
    
            9447424 blocks of size 1024. 5609416 blocks available
    smb: > get t.txt 
    getting file 	.txt of size 12 as t.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
    smb: > 
    发现harr用户可以创建文件,和下载文件

    测试u1用户

    [root@centos7-2 ~]# smbclient //192.168.122.205/share -U u1
    Enter u1's password: 
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    smb: > ls 
      .                                   D        0  Thu Nov 15 11:32:35 2018
      ..                                  D        0  Thu Nov 15 11:21:20 2018
      t.txt                               N       12  Thu Nov 15 11:21:44 2018
      1                                   D        0  Thu Nov 15 11:32:35 2018
    
            9447424 blocks of size 1024. 5609216 blocks available
    smb: > mkdir aaa
    NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory aaa

    测试发现u1用户能够成功访问并且能够查看,但是创建文件却失败了。(原因:配置文件中我们只是允许了harry用户能够进行写,而sysadmin组里面的成员并没有给写的权限。所以并不能创建文件)

    注意:如果不加可用用户选项,那么表示当前samba数据库里面的用户都可以访问

    实例二

    基于用户名密码和acl的综合访问:

    需求:

    公司:uplooking
    1、财务部门 /samba/upl_cw  cw01财务总监有可读可写权限,财务部门员工可读,boss01对其有管理权限。
    2、市场部门 /samba/upl_sc  市场部门员工可读可写,公司员工可以查询资料,boss02对其有管理权限。
    3、HR部门   /samba/upl_rs  rs01HR总监可读写,HR部门员工可以对财务部查询,vip用户可以查询
    4、休息区   /samba/upl_pub  自己管理自己的文件
    思路:
    1、选择哪个服务做文件共享(samba)
    2、需要一台Linux服务器(rhel/centos)
    3、根据部门创建不同的工作目录来保存不同部门的文件
    4、将目录发布出去
    5、测试验证

    服务器:

    第1步:在服务器上创建相应的工作目录

    [root@centos7-1 ~]# mkdir /samba/upl_{cw,sc,rs,pub} -p

    第2步:创建相应的用户和组

    [root@centos7-1 ~]# groupadd uplooking
    [root@centos7-1 ~]# groupadd cw
    [root@centos7-1 ~]# groupadd rs
    [root@centos7-1 ~]# groupadd sc
    [root@centos7-1 ~]# useradd cw01 -g cw -G uplooking
    [root@centos7-1 ~]# useradd cw02 -g cw -G uplooking
    [root@centos7-1 ~]# useradd rs01 -g rs -G uplooking
    [root@centos7-1 ~]# useradd rs02 -g rs -G uplooking
    [root@centos7-1 ~]# useradd sc01 -g sc -G uplooking
    [root@centos7-1 ~]# useradd sc02 -g sc -G uplooking
    [root@centos7-1 ~]# useradd boss01 -g uplooking -G cw
    [root@centos7-1 ~]# useradd boss02 -g uplooking -G sc
    [root@centos7-1 ~]# useradd vip

    第3步:编辑配置文件进行相应的配置并重启服务

    [root@centos7-1 ~]# vim /etc/samba/smb.conf
    [cw_share]
            comment= cw01财务总监有可读可写权限,财务部门员工可读,boss01对其有管理权限
            path = /samba/upl_cw
            valid users = @cw,boss01,@rs
            write list = cw01,boss01
    [sc_share]
            comment= 市场部门员工可读可写,公司员工可以查询资料,boss02对其有管理权限
            path = /samba/upl_sc
            valid users = @uplooking
            read only = yes
            write list = @sc,boss02
    [hr_share]
            comment = rs01HR总监可读写,HR部门员工可以对财务部查询,vip用户可以读写
            path = /samba/upl_rs
            valid users = @rs,vip
            write list = rs01,vip
    [pub]
            comment = 自己管理自己的文件
            path = /samba/upl_pub
            public = yes
            writable = yes
            hosts allow = 192.168.122.0/24
    
    [root@centos7-1 ~]# systemctl restart smb

    第4步:将用户加入到samba数据库里

    [root@centos7-1 ~]# smbpasswd -a cw01
    New SMB password:
    Retype new SMB password:
    Added user cw01.
    [root@centos7-1 ~]# smbpasswd -a cw02
    New SMB password:
    Retype new SMB password:
    Added user cw02.
    [root@centos7-1 ~]# smbpasswd -a rs01
    New SMB password:
    Retype new SMB password:
    Added user rs01.
    [root@centos7-1 ~]# smbpasswd -a rs02
    New SMB password:
    Retype new SMB password:
    Added user rs02.
    [root@centos7-1 ~]# smbpasswd -a sc01
    New SMB password:
    Retype new SMB password:
    Added user sc01.
    [root@centos7-1 ~]# smbpasswd -a sc02
    New SMB password:
    Retype new SMB password:
    Added user sc02.
    [root@centos7-1 ~]# smbpasswd -a boss01
    New SMB password:
    Retype new SMB password:
    Added user boss01.
    [root@centos7-1 ~]# smbpasswd -a boss02
    New SMB password:
    Retype new SMB password:
    Added user boss02.
    [root@centos7-1 ~]# smbpasswd -a vip
    New SMB password:
    Retype new SMB password:
    Added user vip.
    [root@centos7-1 ~]# pdbedit -L
    smb1:1001:
    u1:1004:
    cw01:1006:
    harry:1003:
    u2:1005:
    cw02:1007:
    rs01:1008:
    rs02:1009:
    sc01:1010:
    sc02:1011:
    boss01:1012:
    boss02:1013:
    vip:1014:

    第5步:相应的acl授权

    [root@centos7-1 ~]# setfacl -m u:cw01:rwx /samba/upl_cw/
    [root@centos7-1 ~]# setfacl -m u:boss01:rwx /samba/upl_cw/
    [root@centos7-1 ~]# setfacl -m g:cw:rx /samba/upl_cw/
    [root@centos7-1 ~]# setfacl -m g:sc:rwx /samba/upl_sc/
    [root@centos7-1 ~]# setfacl -m g:uplooking:rx /samba/upl_sc/
    [root@centos7-1 ~]# setfacl -m u:boss02:rwx /samba/upl_sc/
    [root@centos7-1 ~]# setfacl -m u:rs01:rwx /samba/upl_rs/
    [root@centos7-1 ~]# setfacl -m g:rs:rx /samba/upl_rs/
    [root@centos7-1 ~]# setfacl -m u:vip:rwx /samba/upl_rs/
    [root@centos7-1 ~]# setfacl -m g:uplooking:rwx /samba/upl_pub/

    客户端测试验证:

    查看共享目录

    [root@centos7-2 ~]# smbclient -L 192.168.122.205
    Enter root's password: 
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Home Directories
        print$          Disk      Printer Drivers
        share           Disk      samba share
        cw_share        Disk      cw01财务总监有可读可写权限,财务部门员工可读,boss01对其有管理权限
        sc_share        Disk      市场部门员工可读可写,公司员工可以查询资料,boss02对其有管理权限
        hr_share        Disk      rs01HR总监可读写,HR部门员工可以对财务部查询,vip用户可以读写
        pub             Disk      自己管理自己的文件
        IPC$            IPC       IPC Service (Samba 4.7.1)
    Anonymous login successful
    Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
    
        Server               Comment
        ---------            -------
        CENTOS7-1            Samba 4.7.1
    
        Workgroup            Master
        ---------            -------
        SAMBA                CENTOS7-1
    
    详细测试此处就省略了。。。

    samba总结

    • SAMBA 可以让 Linux 与 Windows 直接进行文件系统的使用;
    • SAMBA 主要架构在 NetBIOS 上发展的,且以 NetBIOS over TCP/IP 克服NetBIOS 无法跨路由的问题;
    • Samba 使用的 daemon 主要有管理分享权限的 smbd 以及 NetBIOS 解析的nmbd
    • Samba 使用的模式主要有单机的 workgroup 方式,以及网域控管的 PDC 模式;
    • Samba 的主配置文件之档名为 smb.conf
    • smb.conf 内,主要区分为 [global] 服务器整体设定与 [share] 分享的资源两大部分
    • Samba 使用者账号控管主要的设定值为 security = {share,user,domain}等
    • Samba 客户端可使用 smbclient 以及 mount.cifs 进行网络的挂载
    • 新版的 Samba 默认使用数据库记录帐户信息,新增账号用 pdbedit ,修改密码则用 smbpasswd
    • Samba 主要支持 CUPS 的打印机服务器
    • 在权限控管方面,最容易出错的为 SELinux 的规则与类型 (SELinux type)
    • 默认情况下,服务端会将系统中的所有本地用户的家目录共享出去;并且不允许匿名用户访问
    • 本地用户都可以通过用户名和smab数据库的密码去访问当前用户的家目录
    • samba数据库里面的用户必须是当前操作系统中存在的用户

    配置文件:一般放在/etc/samba/smb.conf里面,可以通过rpm -qc packagename查询;编辑完配置文件可以通过testparm来进行samba的确认。

    常用命令

    将本地用户加入到smb数据库里

    # smbpasswd -a stu1   // 将用户添加到数据库并且设置密码

    查看smb数据库的用户

    # pdbedit -L    //查看smb数据库的用户 

    查看共享目录:客户端通过smbclient命令查看服务器共享出什么目录

    smbclient -L NetBiosName -U username 

    linux客户端访问

    # smbclient //192.168.122.205/homes -U smb1    // 通过smb1用户访问homes

    清空windows缓存

    cmd——>net use * /del  

    访问权限控制

    控制读写访问

    writable = yes/no        // 可写总开关
    read only = yes/no       // 可读总开关
    write list = tom,@admin  // 可读 多个用户用逗号隔开  加个@符号对组的控制
    read list = tom,@admin   // 可写

    对象的访问控制

    valid users = tom,@admin   // 指定可用用户
    invalid users = tom,@admin // 指定不可用用户 
    注意:两个参数不要同时存在

    网络访问控制

    hosts allow = 150.203.6.0/255.255.255.0 EXCEPT 150.203.6.66      // 允许哪个网络里的访问,表示150.203.6.0这个网段除了150.203.6.66这个用户不能访问,别的都能访问
    hosts allow = 150.203.15.0/255.255.255.0          
    hosts allow = *.uplooking.com
    hosts deny = 192.168.1.3 vm01.example.com       // 拒绝哪个网络的访问 
    如果deny和allow冲突,allow优先
  • 相关阅读:
    c++ 为自定义类添加stl遍历器风格的遍历方式
    C++ 生成随机数
    c/c++ 函数说明以及技巧总结
    XSLT 教程
    C# 高效过滤DataTable 中重复数据方法
    xml获取指定节点的路径
    TreeView控件
    推荐一些C#相关的网站、资源和书籍
    C#多线程操作
    C#二进制序列化
  • 原文地址:https://www.cnblogs.com/yanjieli/p/9963639.html
Copyright © 2011-2022 走看看