欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

SAMBA

程序员文章站 2022-07-02 17:55:03
SAMBA介绍 SAMBA配置 SAMBA的相关包 SAMBA服务器配置 管理SAMBA用户 配置目录共享 基本特定用户和组的共享 SMB客户端访问 挂载CIFS文件系统 实现SMB共享 多用户SMB挂载 实现图形化管理 相关SELinux 配置 ......

SAMBA介绍

    SMB(Server Message Block)服务器消息块,IBM 发布,最早是DOS网络文件共享,也称为SAMBA,SAMBA使用的是NetBIOS通讯协议。
    NetBIOS(Network Basic Input/Output System)
        网络的基本输入输出系统,它定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法,作用是为局域网提供网络以及其他特殊功能。
        目前使用NetBIOS协议来获得局域网中计算机的名称来解析成IP地址实现数据的通信。
        SAMBA通过NetBIOS协议来获取对方主机的NetBIOS name进而来定位该主机所在位置,然后根据对方的主机赋予的权限来存取可用的资源。
        实际中SAMBA是通过两个服务来控制这两个步骤的,即nmb和smb两个服务。
            nmb是用来管理工作组合NetBIOS name解析,主要是通过UDP的137和138两个端口来负责名称解析任务。
            smb主要用来管理SAMBA主机所分享的目录、文件或打印机等,主要使用TCP协议的139和445两个端口进行数据的传输。
    Cifs(common internet file system),微软基于SMB 发布,最简单的实现就是window的网上邻居
    SAMBA:
        1991 年Andrew Tridgell, 实现windows 和UNIX 相通
    SAMBA 的功能:
        共享文件和打印,实现在线编辑 
        实现登录SAMBA 用户的身份认证
        可以进行NetBIOS 名称解析
        外围设备共享
    计算机网络管理模式:
        工作组WORKGROUP:计算机对等关系,帐号信息各自管理
        域DOMAIN:C/S 结构,帐号信息集中管理,DC,AD
    SAMBA的相关包:
        Samba   提供smb服务
        Samba-client  客户端软件
        samba-common   通用软件
        cifs-utils   smb客户端工具
        samba-winbind   和AD相关

    相关服务进程:
        smbd 提供smbd(cifs)服务 TCP:139,445
        nmbd NetBIOS 名称解析 UDP:137,138

    主配置文件:
        /etc/samba/smb.conf
        帮助参看:
            man smb.conf
            
    语法检查: 
        testparm [-v] [/etc/samba/smb.conf]

    客户端工具:
        smbclient
    mount.cifs

SAMBA配置

SAMBA的相关包

    Samba   提供smb服务
    Samba-client  客户端软件
    samba-common   通用软件
    cifs-utils   smb客户端工具
    samba-winbind   和AD相关

SAMBA服务器配置

    主配置文件:
        /etc/samba/smb.conf
        帮助参看:
            man smb.conf
        smb.conf 继承了.ini文件的格式,用[ ]分成不同的部分。
    全局设置:
        [global]  服务器通用或全局设置的部分
    特定共享设置:
        [homes]  用户的家目录共享
            comment = Home Directories  描述信息
            browseable = no 用户的家目录是否允许访问,这里通常设置为no
            writable = yes  是否允许写入内容
            valid users = %S    
            valid users = MYDOMAIN\%S   
        [printers]  定义打印机资源和服务
        [sharename]  自定义的共享目录配置
            paht=/PATH/TO/SHARE_DIRECTORY   共享内容路径
            comment=Comment String  描述信息
            guest ok ={yes|no}  是否允许访客访问
            public = {yes|no}   是否公开,与guest ok类似
            writable = {yes|no} 是否可写
            read only = {yes|no}    是否只读
            write list = +group_name    用户指明可写的用户列表,这里的+表示加组名,表示组里面的用户可以写
    # 和; 
        以此开头的语句为注释,大小写不敏感
    宏定义:
        %m      客户端主机的NetBIOS名 
        %M      客户端主机的FQDN
        %H      当前用户家目录路径 
        %U      当前用户用户名
        %g      当前用户所属组 
        %h      samba 服务器的主机名
        %L      samba 服务器的NetBIOS名  
        %I      客户端主机的IP
        %T      当前日期和时间 %S 可登录的用户名
    全局内的配置:
        workgroup   指定工作组名称
        server string   主机注释信息
        netbios name    指定NetBIOS名 名
        interfaces      指定服务侦听接口和IP
        hosts allow     可用“ “,”  ,空格,或tab 分隔,默认允许所有主机访问 , 也可在每个共享独立配置,如在[global] 设置,将应用并覆盖所有共享设置
            IPv4 network/prefix: 172.25.0.0/24 IPv4 前缀: 172.25.0.
            IPv4 network/netmask: 172.25.0.0/255.255.255.0
            主机名: desktop.example.com
                    以example.com后缀的主机名: .example.com
            示例:
                    hosts allow = 172.25.
                    hosts allow = 172.25. .example.com
        hosts deny  拒绝指定主机访问
        config file=/etc/samba/conf.d/%U    用户独立的配置文件
        Log file=/var/log/samba/log.%m      不同客户机采用不同 日志
        max log size=50     日志文件达到50K ,将轮循rotate, 单位KB
        passdb backend = tdbsam     密码数据库格式
        Security 三种认证方式:
            share : 匿名(CentOS7 不再支持)
            user :  samba用户(采有linux 用户,samba 的独立口令)
            domain:     使用DC(DOMAIN CONTROLLER) 认证
        实现samba 用户:
            包:samba-common-tools
            工具:smbpasswd pdbedit
            samba 用户须是Linux 用户,建议使用/sbin/nologin
    语法检查:
        testparm
            testparm - check an smb.conf configuration file for internal correctness
            testparm [OPTION...] <config-file> [host-name] [host-ip]
                -s, --suppress-prompt               禁止输入提示
                -v, --verbose                       同时显示默认选项
                -l, --skip-logic-checks             跳过全局检查
                --show-all-parameters               显示参数类型和可能值
                --parameter-name=STRING             将testparm限制为命名参数
                --section-name=STRING               将testparm限制为命名节
                --usage                             显示简短的有用消息
                -d, --debuglevel=DEBUGLEVEL         设置调试水平
                --option=name=value                 从命令行设置smb.conf选项

管理SAMBA用户

    前提:
        samab用户必须是系统中已经存在的用户
    添加samba 用户
        smbpasswd -a <user>
        pdbedit -a -u <user>
    修改用户密码
        smbpasswd <user>
    删除用户和密码 :
        smbpasswd –x <user>
        pdbedit –x –u <user>
    查看samba 用户列表 :
        /var/lib/samba/private/passdb.tdb
        pdbedit –L –v
    查看samba 服务器状态
        smbstatus

配置目录共享

    每个共享目录应该有独立的[ ] 部分
        [共享名称]      远程网络看到的共享名称
        comment     注释信息
        path    所共享的目录路径
        public      能否被guest 访问的共享,默认no ,和guest ok 类似
        browsable   是否允许所有用户浏览此共享, 默认为yes,no 为隐藏
        writable=yes    可以被所有用户读写,默认为no
        read only=no  和writable=yes 等价  如与以上设置冲突,放在后面的设置生效,默认只读
        write list      三种形式:
            用户,@ 组名,+ 组名, 用,分隔
            如writable=no ,列表中用户或组可读写,不在列表中用户只读
        valid users     特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

基本特定用户和组的共享

    vim /etc/samba/smb.conf
        [share]
        path = /app/dir
        valid users=wang,@admins
        writeable = no
        browseable = no

SMB客户端访问

    UNC路径: Universal Naming Convention, 通用命名规范
        格式:\\sambaserver\sharename
    终端下使用smbclient 登录服务器
        smbclient -L instructor.example.com
        smbclient -L instructor.example.com -U wang
            > cd directory
            > get file1
            > put file2
        smbclient //instructor.example.com/shared -U wang
            可以使用-U 选项来指定用户% 密码,或通过设置和导出USER和PASSWD环境变量来指定

挂载CIFS文件系统

    手动挂载
        mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb
    开机自动挂载
        cat /etc/fstab  可以用文件代替用户名和密码的输入
            //server/homes /mnt cifs credentials=/etc/smb.txt 0 0
        cat /etc/smb.txt
            username=wang
            password=password
         chmod 600 /etc/smb.txt

实现SMB共享

    一、在samba 服务器上安装samba包 
        yum -y install samba
    二、创建samba 用户和组
        groupadd -r admins
        useradd -s /sbin/nologin -G admins wang
        smbpasswd -a wang
        useradd -s /sbin/nologin mage
        smbpasswd -a mage
    三、创建samba 共享目录, 并设置SElinux
        mkdir /testdir/smbshare
        chgrp admins /testdir/smbshare
        chmod 2775 /testdir/smbshare
        semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?'
        restorecon -vvFR /testdir/smbshare
    四、samba 服务器配置
        vim /etc/samba/smb.conf
            security = user
            passdb backend = tdbsam
            [share]
            path = /testdir/smbshare
            write list = @admins
        systemctl start smb nmb
        systemctl enable smb nmb
        firewall-cmd --permanent --add-service=samba
        firewall-cmd --reload
     五、samba 客户端访问
        安装包
            yum -y install cifs-utils
        用wang 用户挂载smb 共享并访问
            mkdir /mnt/wang
            mount -o username=wang //smbserver/share /mnt/wang
            echo "Hello wang" >/mnt/wang/wangfile.txt
        用mage 用户 挂载smb 共享并访问
            mkdir /mnt/mage
            mount -o username=mage //smbserver/share /mnt/mage
            touch /mnt/mage/magefile.txt

多用户SMB挂载

    SAMBA 共享默认只支持同时用一个用户挂载SMB 共享
    CentOS7 中可启用多用户挂载功能
        客户端挂载samba 共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限。
    
    一、samba 服务器配置
        yum install samba
        mkdir /multiuser
        vim /etc/samba/smb.conf
            [smbshare]
            path=/multiuser
            writable=no
            write list= @admins
    二、samba 服务器创建samba 用户
        useradd –s /sbin/nologin smbuser
        smbpasswd –s smbuser
        useradd –s /sbin/nologin –G admins wang
        smbpasswd –a wang
        useradd –s /sbin/nologin mage
        smbpasswd –a mage
    三、samba 服务器设置目录权限和SELinux对wang,admins 组分配目录读写权限
        chmod 777 /testdir/multiuser
        或者
        setfacl –m u:wang:rwx /testdir/multiuser
        setfacl –m g:admins:rwx /testdir/multiuser
        设置SELinux 标签:
            semanage fcontext -a -t samba_share_t '/testdir/multiuser (/.*)?'
            restorecon /testdir/multiuser
    四、samba 客户端启用多用户挂载
        yum -y install cifs-utils
        mkdir /mnt/smb
        echo 'username=smbuser' >/etc/multiuser
        echo 'password=centos' >>/etc/multiuser
        chmod 600 /etc/multiuser
        以多用户方式挂载:
            vim /etc/fstab
                //smbserver/smbshare /mnt/smb cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0
        mount -a
    五、在samba 客户端用实现多用户访问
        useradd wang;useradd mage
        用root 访问
            ls /mnt/smb; touch /mnt/smb/root.txt
        用wang 访问
            ls /mnt/smb; touch /mnt/smb/wang.txt
            cifscreds add –u wang smbserver
            touch /mnt/smb/wang.txt
        用mage 访问
            cifscreds add –u mage smbserver
            ls /mnt/smb
            touch /mnt/smb/mage.txt

实现图形化管理

    一、在CentOS6( 第二张光盘) 上安装包
        yum install samba-swat
    二 、配置swat 服务
        vim /etc/xinetd.d/swat
        disable = no
        port = 901
        only_from = 127.0.0.1  此行改成172.16.0.0/16
        service xinetd restart
    三 、浏览器访问管理
        http://127.0.0.1:901  以root 用户登录
        注意:commit changes 后会自动重新加载配置,且自动将/etc/samba/smb.conf

相关SELinux 配置

    SMB 共享目录应设为samba_share_t 安全上下文
    semanage fcontext -a -t samba_share_t '/sharedpath(/.*)?'
    restorecon -vvFR /sharedpath
    SMB设共享目录安全上下文也可设 public_content_t ( 只读)和public_content_rw_t ( 读写).
    要支持读写,SElinux 布尔值smbd_anon_write 必须启用
    如用SMB 网络共享samba 服务器上的用户家目录,需在samba 服务器上启用布尔值samba_enable_home_dirs
    如需挂载远程SMB 目录做为本地用户家目录,需在SMB 客户机上启用布尔值use_samba_home_dirs