samba

FTP,SAMBA,NFS之间的区别

FTP        Windows/linux/unix/macOS等        发布网站,文件共享              Tcp/21

Samba      Windows/linux                     文件共享(网上邻居)            Tcp/445,tcp/139

NFS        Linux/unix                        网站发布,文件共享(mount)     Tcp/2049

samba

能够将本地共享的目录通过文件系统接口方式输出给客户端,客户端可以使用mount命令挂载。客户端可以使用针对本地文件系统命令操作该目录,比如ls… samba是smb协议的实现。更为通用的叫法是cifs协议的实现。 可以实现windows和Linux之间文件共享和打印服务共享。

smb:Service Message Block;服务信息块 cifs:Common Internet File System 通用互联网文件系统

samba:作者-Andrew Tridgell;

功能:

文件系统共享;

NetBIOS协议;
    windows主机在网上邻居中可以搜索到网络中主机的主机名;workgroup
    使用的就是广播方式的netbios协议。
    要使windows主机能够找到启用samba的Linux主机,Linux主机也需要支持NetBIOS协议。
    NetBIOS要求主机名不能超过15个字符。
    NetBIOS仅是本地网络使用的网络协议。

打印服务;基于samba能够实现打印机共享给基于smb或cifs的所有的客户端。

samba通信模型:两种

peer to peer(Work Group模型)

    主机对主机

domain devel 域模型

    LDAP:Lightweight Directory Access Protocol 轻量级访问协议
    写入性能不是很好,但是查询性能非常好
    windows将LDAP协议以域的方式实现。
    DEC域控制器

samba运行原理

samba可以使用匿名账号登录文件系统 samba认证是使用系统用户的用户名,不是系统用户登录系统的账号和密码。 windows上配置文件共享,开启认证功能,一般是使用主机上用户名和密码。

安装samba:

程序环境: samba集成在centos中默认。分为三类程序

samba.x8664        ##服务端程序 samba-client.x8664 ##客户端程序    
samba-common.x86_64 ##公共组件,客户端和服务端都依赖此包 samba4-libs.x8664  ##服务端和客户端都会用到库文件 samba-common-tools.x8664  ##samba服务端和客户端工具 需要内核支持SMB/CIFS协议默认一般都是支持的。

samba程序文件介绍

配置文件:
    /etc/samba/smb.conf

主程序:有两个
实现samba协议和NetBIOS协议
    nmbd:Network Naming Service, NetBIOS 
        如果仅是在类Unix主机之上实现文件共享,不需要此服务
        windows共享需要名称解析,如果有windows主机使用该服务需要此服务。
    smbd:SMB/CIFS Service;

Unit File:
    /usr/lib/systemd/system/nmb.service
    /usr/lib/systemd/system/smb.service

监听的端口:
    137/udp, 138/udp
    139/tcp, 445/tcp 

客户端程序:
    mount -t cifs = mount.cifs
    smbclient:交互式命令行客户端工具;命令行的访问工具

samba的配置:

主配置文件 由samba-common包提供

/etc/samba/smb.conf
[root@centos7 ~]# grep -i -E "^#+[[:space:]]*(-|=)+.*" /etc/samba/smb.conf 

    #======================= Global Settings =====================================  ### 全局配置段
    # ----------------------- Network-Related Options -------------------------     ### 网络相关配置
    # --------------------------- Logging Options -----------------------------     ### 日志选项
    # ----------------------- Standalone Server Options ------------------------    ### 独立服务选项
    # ----------------------- Domain Members Options ------------------------       ### 域成员配置
    # ----------------------- Domain Controller Options ------------------------    ### 域控制配置
    # ----------------------- Browser Control Options ----------------------------  ### 浏览者控制选项
    #----------------------------- Name Resolution -------------------------------  ### 名称解析
    # --------------------------- Printing Options -----------------------------    ### 打印相关选项
    # --------------------------- File System Options ---------------------------   ### 文件系统相关
    #============================ Share Definitions ==============================  ### 共享定义配置段

两类配置段:

全局配置段

    网络相关配置选项        
        workgroup = MYGROUP 工作组模型中的工作组名称。windows一般用的是workgroup
        server string = Samba Server Version %v 鼠标悬停到网络主机上显示提示信息
        interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  指明要监听的地址或网络接口;
        hosts allow = 127. 192.168.12. 192.168.13. 运行访问的主机网段
            127网段192.168.12网段可以访问
        netbios name = MYSERVER 当前主机被网络其他电脑使用netbios解析到主机名
    注意:samba一般是内部服务用所以interface一般只是监听在本地某个接口或地址上,一般不指定某个网段,很少进行夸网段共享。

    日志相关选项          
        log file = /var/log/samba/log.%m 日志文件路径%m代表一个客户端的ip地址
        max log size = 50 日志大小

    独立服务选项
        security = user  ###定义全级别
            share (depricated)废弃选项
            server (depricated)废弃选项
            user 用户登录必须使用账号和密码登录

        passdb backend = tdbsam  ###定义密码到一个tdb方式编码的库。

    打印选项
        load printers = yes  ###开启打印服务
        cups options = raw

共享文件系统配置段

    每一个共享都要使用一个独立的配置段

    [shared_ID]:定义共享名称,在网络上邻居中显示的资源名称。

        配置段选项有三类:
            [homes]:每个samba用户是否能够通过samba服务访问自己的家目录;
                不是所有系统用户都是samba用户,只有有了samba账号密码的系统用户才是
            [printers]:打印服务;
            [shared_FS]:用户自定义的共享目录;

        home和shared配置中常用指令:
            comment:注释信息;
            path:本地文件系统路径;类似url映射本地文件系统该路径。
            browseable: 是否可浏览,是否为用户可见;是否允许属组合主用户浏览samba服器上的共享资源名称。
            guest ok:是否允许来宾账号访问;
            public:是否公开给所有来宾;
            writable:是否可写;需要双授权,文件系统可写,服务可写
                read only = no
            write list:拥有写权限的用户或组列表;
                用户名 
                @组名, +组名

samba用户管理:

    smbpasswd, pdbedit

    smbpasswd [OPTIONS] USERNAME  ###username必须问系统用户
        -a:添加
        -x:删除
        -d:禁用
        -e:启用

    pdbedit:
            -L:列出samba服务中的所有用户;
            -a:添加用户为samba用户;
                    -u USERNAME:

            -x:删除
            -t:从标准输出接收密码;

访问服务:

启动服务 服务端启动服务:systemctl status nmb smb 创建系统用户centos 为用户创建用密码pdbedit -au centos

(1) smbclient交互式客户端程序:
        (1) 查看目标服务上的共享,自己有权查看的共享。
                    smbclient -L SMB_SERVER [-U USERNAME]    ##-U大写的

            [root@centos6 ~]# smbclient  -L 192.168.197.129 -U centos  ###centos用户使用密码查看
            Enter centos's password: 
            Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]

                    Sharename       Type      Comment       ###共享资源名称信息
                    ---------       ----      -------
                    IPC$            IPC       IPC Service (Samba Server Version 4.2.3)
                    centos          Disk      Home Directories  ###共享的目录

            Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]

                    Server               Comment           ###服务器信息
                    ---------            -------
                    CENTOS7              Samba Server Version 4.2.3
                    LOCALHOST            Samba Server Version 4.2.3

                    Workgroup            Master
                    ---------            -------
                    MYGROUP              LOCALHOST

            [root@centos6 ~]# smbclient  -L 192.168.197.129 使用匿名用户查看
            Enter root's password:             ###不需输入任何密码
            Anonymous login successful

        (2) 访问共享服务
                    smbclient //SMB_SERVER[/SHARE_NAME] [-U USERNAME]   ##-U大写的

            [root@centos6 ~]# smbclient  //192.168.197.129/home -U centos 
            Enter centos's password: 
            Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
            tree connect failed: NT_STATUS_BAD_NETWORK_NAME
            [root@centos6 ~]# smbclient  //192.168.197.129/homes -U centos 
            Enter centos's password: 
            Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
            smb: \> ls
              .                                   D        0  Tue Oct 18 16:12:19 2016
              ..                                  D        0  Tue Oct 18 16:12:19 2016
              .mozilla                           DH        0  Fri Oct 14 21:35:44 2016
              .bash_logout                        H       18  Fri Nov 20 13:02:30 2015
              .bash_profile                       H      193  Fri Nov 20 13:02:30 2015
              .bashrc                             H      231  Fri Nov 20 13:02:30 2015

                            61410 blocks of size 524288. 61345 blocks available
            smb: \> help
            ?              allinfo        altname        archive        blocksize      
            cancel         case_sensitive cd             chmod          chown          
            close          del            dir            du             echo           
            exit           get            getfacl        geteas         hardlink       
            help           history        iosize         lcd            link           
            lock           lowercase      ls             l              mask           
            md             mget           mkdir          more           mput           
            newer          open           posix          posix_encrypt  posix_open     
            posix_mkdir    posix_rmdir    posix_unlink   print          prompt         
            put            pwd            q              queue          quit           
            readlink       rd             recurse        reget          rename         
            reput          rm             rmdir          showacls       setea          
            setmode        stat           symlink        tar            tarmode        
            timeout        translate      unlock         volume         vuid           
            wdel           logon          listconnect    showconnect    ..             
            !              

        常用命令    put mget ls cd mkdir pwd del ... 
                lcd 切换本地工作目录

(2)mount.cifs 
        mount -t cifs //SMB_SERVER/SHARED_ID  /MOUNT_POINT  -o username=USER,password=PASS

        注意:挂载操作中的用户,与-o选项中指定的用户直接产生映射关系;访问挂载,是以-o选项指定的用户身份运行,与本地用户以ID产生映射;
                /SHARED_ID 可以不输入  SHARED_ID就是配置段中共享文件系统设置中的[SHARED_ID]

[root@centos6 ~]# mount -t cifs //192.168.197.129/homes /mnt -o user=centos,password=yang [root@centos6 ~]# mount //192.168.197.129/homes on /mnt type cifs (rw)

自定义共享的方式:

修改主配置文件,、/etc/samba/smb.cof,在共享文件系统配置段加入下面的配置即可定义自定义共享

[shared_ID]              ###共享资源名和本地文件系统路径名可以不一致。随便起
    comment =            ###注释信息
    path =               ###文件系统路径 
    guest ok =           ###是否允许其来宾用户访问
    read only =          ###是否只读,不是只读就是可读写
    public =             ###是否为所有人可见,来宾,匿名用户。
    browseable =         ###浏览控制,非属组合属主用户是否可见资源。
    write list =         ###有写权限的用户,相当于黑名单。
            注意:writable = yes 不能与write list共存。否则用户还是有写权限。
            write list可以使用组来定义一个组内的用户都是否拥有写权限。
            write list = +GROUPNAME  ##注意要有个加号。
    注意:只要用户拥有服务的写权限,就能删除文件,哪怕属主不是他。
注意:定义所用户在服务级的写权限write = yes (read only = no)不建议与write list同时使用;

检查配置文件是否有语法错误:testparm命令

查询samba服务器状态

smbstatus命令:
    显示samba服务的相关共享的访问状态信息;
        -b:显示简要格式信息;
        -v:显示详细格式信息;

    Samba version 4.2.3
    PID     Username      Group         Machine            Protocol Version       
    ------------------------------------------------------------------------------
    40302     nobody        nobody        192.168.197.128 (ipv4:192.168.197.128:43946) NT1         

    Service      pid     machine       Connected at
    -------------------------------------------------------
    public       40302   192.168.197.128  Tue Oct 18 05:21:50 2016

    No locked files

总结:

C/S架构。用户以系统用户身份登录指定的共享资源。没有默认登录根目录。

samba的用户必须为系统用户,但是密码是单独设置的。可以使用smbpasswd, pdbedit为用户设置密码。用户登录samba服务后都是以系统用户身份登录。共享资源要给予相应授权才能读写查看。

samba的工作模型,工作组模型,域控制器模型。一般文件共享工作组模型就可以了。

设置共享目录。要修改主配置文件/etc/samba/smb.conf文件。在共享文件系统配置段,定义该目录的共享。定义好后需要使用testparm命令测试语法。

samba有匿名用户,guest来宾用户。匿名用户使用nobody这个系统用户登录。共享文件系统配置中控制目录是否可读写。是否可浏览到

登录samba服务器必须制定要访问资源名称shared_id否则不能的登录,需要事先查询都有哪些资源。或用户自己就知道资源。

samba可使用udp协议也可以使用tcp协议。根据客户端与服务端的协商。

udp137,138 tcp139,445

samba提供的共享资源是可以挂在到其他主机上的。

mount -t cifs或使用mount.cifs

注意:挂载点无论是什么权限,只要挂载了cifs共享目录,该目录就是服务端远程主机的上共享目录的权限,属主和属组。

这挂在点就是samba服务器上共享目录的映射(权限,uid,gid),呈现在客户端。客户端的用户操作该挂载点,就想操作本地文件系统一样。只要本机有与之对应的uid或gid的用户就能拥有该目录的权限。但是客户端主机对挂载点的操作,是根据服务器授权的。

客户端主机对共享资源的挂在点权限是登录账号(服务端的系统用户)在服务端主机服务和文件系统的授权的交集,并且客户端主机有gid或uid与服务端共享目录的uid和gid相同,才会有属主和数组权限。

最重要的:权限的最终权限决定于本地文件系统授权和服务授权的交集,其次才是客户端是否有与之对应uid或gid的用户,否者就只能是其他人身份(但是其他人身份,guest用户或匿名用户的授权又取决于服务授权)。

实现了类似UIDmap功能。只要uid本机中有,就认为是本地主机上的文件。并拥有响应权限。服务端说这个文件是谁的就是谁的。inux只认uid和gid,拿着自己家的钥匙打开任意一家的门,而且还是主人身份。

服务端共享目录的权限及属主属组

[root@centos7 ~]# ll -d /home/samba/
drwxrwxr-x. 3 centos centos 27 Oct 18 07:58 /home/samba/
[root@centos7 ~]# id centos
uid=1001(centos) gid=1001(centos) groups=1001(centos)

客户端挂在后,挂载点权限属主和属组的变化

[root@centos6 ~]# ll -d /mydata/
drwxr-xr-x. 3 root root 4096 Oct 15 05:41 /mydata/
[root@centos6 ~]# mount -t cifs //192.168.197.129/public/ /mydata/ -o username=centos,password=yang
[root@centos6 ~]# ll -d /mydata/
drwxrwxr-x. 3 yang yang 0 Oct 18 19:52 /mydata/

客户端只要有与之对应的uid或gid就拥有相应权限,否则就只能是其他人的权限。

[root@centos6 ~]# id yang
uid=1001(yang) gid=1001(yang) groups=1001(yang)

下面的练习暂不使用samba,会有很多问题。但是要使用nfs测试下述实验。

练习:

(1) 创建一个共享mydata,路径为/mysql/data,客户端1挂载至/mydata;而后客户端1主机安装mysql或mariadb,将数据目录设定为/mydata,要确保mysql服务能正常 运行,但数据目录位于samba server上; mysql更换数据位置要初始化数据库。

(2) 客户端2主机使用类似客户端1主机的方式挂载mydata共享至本地的/mydata目录,而后,直接安装mysql或mariadb server,设定其数据目录为/mydata;测试

(a) 客户端1 mysql服务运行时,客户端2的mysql服务能否启动?

(b) 客户端1 mysql服务停止时,客户端2的mysql服务能否启动?

练习目的:

部署samba服务,熟悉权限设定

该项目测试两台mysql公用一个使用samba共享的目录为数据位置,测试能否同时使用。

应该会出现很多问题,但是生产环境中使用该模式,是当一台mysql出现问题,立即启用第二台服务器。

练习:

创建一个共享ftp,路径为/var/ftp/pub;要求仅centos和gentoo用户能上传;此路径对其它用户不可见;

练习:

(1) samba sever共享/data/application/web,在目录中提供wordpress;

(2) 部署两台amp服务器,均挂载此共享作为某主机的文档映射路径;

(3) 验正两台主机上的wordpress是否可被同时访问;

(a) 发一个文件,验正图片上传等功能; (b) 在任一客户端上访问此应用,多次刷新,确认下所有资源访问是否正常 ;

练习目的:

两台web前端服务器使用同一个存储,该存储上部署samba服务提供共享存储,部署mysql。

测试是两台服务器是否能够同时响应用户的请求对数据库进行读写。

部署dns实现一个FQDN两条A记录。实现负载均衡。其中一台web前端出现故障,删除该web前端的

A记录。实现切换,将缓存时间调短一些,尽量少的影响客户访问(客户端有dns缓存)。

两个实验写好文档和测试文档。下周一,上交,pdf文档。

 

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56562