• centos 7 搭建Samba


    一、Samba简介

         Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成。 SMB(Server Message Block的缩写,即服务器消息块)主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。

      Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享。

      SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议访问Samba服务器上的资源,同时,Samba服务器也可以访问网络中 其它windows系统或者Linux系统共享出来的文件。Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

      组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,而不能使用主机名的方式进行访问,监听137和138 UDP端口。

    二、实验环境

    服务端:Centos 7   192.168.10.130    客户端:Windows 7虚拟机

    三、开始实验

    1、安装Samba

    1.1 检查本机是否安装了Samba

    [root@app ~]# rpm -qa | grep samba

    如上图所示,我们可以看到系统默认只安装了Samba客户端和通用包,没有安装服务端,SAMBA 这个服务器总共需要至少三个套件,分别是:

    samba:这个套件主要包含了 SAMBA 的主要 daemon档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的logrotate 设定文件及开机预设选项档案等;
    samba-common:这个套件则主要提供了 SAMBA 的主要设定档(smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等;
    samba-client:这个套件则提供了当 Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount等等。

    下面我们查看下yum仓库中的Samba版本:

    [root@app ~]# yum list  samba-*

    这里我们卸载系统自带的Samba-4.7安装yum仓库中的Samba-4.9。

    1.2 卸载系统自带的Samba

    [root@app ~]# rpm -e samba-common -f --nodeps
    [root@app ~]# rpm -e samba-common-libs -f --nodeps
    [root@app ~]# rpm -e samba-client -f --nodeps
    [root@app ~]# rpm -e samba-client-libs -f --nodeps

    1.3 使用yum安装Samba

    [root@app ~]# yum install samba samba-common samba-client -y

    安装完成后,能看到如下所示说明安装成功

    1.4 验证Samba服务

    [root@app ~]# systemctl start nmb
    [root@app ~]# systemctl status smb

    如果一切顺利你会看到如下所示:

    至此Samba安装完成,下面介绍Samba配置文件的常用选项:

    1.5 Samba配置文件/etc/samba/smb.conf.example中常用配置选项如下:

    [global]
    
    # ----------------------- Network-Related Options -------------------------
    #
    workgroup = MYGROUP   # Windows域名或者工作组名
    server string = Samba Server Version %v  # 这是一段描述信息,可以随便写。一般用linux访问共享时会看到,Windows看不到。
    netbios name = MYGROUP  # 用于指定与主机名无关的服务器名称,最大值为15个字符。
    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  # 用于指定监听的网络接口,可以是网卡名,也可以是IP地址的形式。
    hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.1.10 # 指定仅允许哪些主机有权访问Samba服务器资源(白名单),该参数可以放置在全局,也可以放置在共享段。这里可以指定允许访问的主机名、IP地址或网段,当指定网段时可以使用192.168.12或192.168.12.0/255.255.255.0格式,使用EXCEPT可以指定排除的IP地址。
    hosts deny = 127. 192.168.12. 192.168.13. EXCEPT 192.168.1.10 # 指定不允许哪些主机访问Samba服务器资源(黑名单),语法与白名单类似。
    
    # --------------------------- Logging Options -----------------------------
    log file = /var/log/samba/log.%m #定义日志文件,因为使用了Samba变量%m,所以每个访问共享的主机会产生独立的
    max log size = 50  # 定义日志文件大小50KB(单位是KB)
    
    
    # ----------------------- Standalone Server Options ------------------------
    security = user # 有四种安全级别:uesr,share(官方不推荐),server(官方不推荐),domain(ads)。user:是通过Samba服务器提供的用户名和密码进行访问。share:不需要用户名密码就可以访问Samba服务器。server:基于其它服务器验证的方式访问Samba服务器,domain是基于AD服务器验证的方式访问Samba服务器。
    passdb backend = tdbsam # 用户名密码的存储方式,有三种:tdbsam,smbpasswd,ldapsam。smbpasswd代表使用老的明文格式存储账户及密码;tdbsam代表基于TDB的密文格式存储;ldapsam代表使用LDAP存储账户资料。
    
    
    # ----------------------- Domain Members Options ------------------------
    #
    security = domain # 必须是domain或者ads
    passdb backend = tdbsam  # 与上面相同,这里不解释。
    realm = MY_REALM # 仅当设置了“security=ads”选项时才使用realm选项。realm选项指定主机所属的活动目录领域。
    password server = <NT-Server-Name> # 仅当“security=server”时使用此选项,或者如果无法使用DNS定位域控制器。可以使用下面参数列表:
    My_PDC_Name、[My_BDC_Name]、[My_Next_BDC_Name]:password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
    
    # ----------------------- Domain Controller Options ------------------------
    #
    security = user # 必须使用域控制器中的用户登陆.
    passdb backend = tdbsam  # 与上面选项一样不解释。
    domain master = yes # 指定Samba为域主控制器,允许Samba来整理子网之间的浏览列表。如果已经有Windows NT域控制器执行此任务,应设置为no。
    domain logons = yes # 允许Samba为Windows或者工作站提供网络登录服务。
    #
    # logon script = specifies a script to run at login time on the client. These
    # scripts must be provided in a share named NETLOGON.
    # logon path = specifies (with a UNC path) where user profiles are stored.
    
        # the following login script name is determined by the machine name
        # (%m):
    ;    logon script = %m.bat
        # the following login script name is determined by the UNIX user used:
    ;    logon script = %u.bat
    ;    logon path = \%LProfiles\%u
        # use an empty path to disable profile support:
    ;    logon path =
    
        # various scripts can be used on a domain controller or a stand-alone
        # machine to add or delete corresponding UNIX accounts:
    
    ;    add user script = /usr/sbin/useradd "%u" -n -g users
    ;    add group script = /usr/sbin/groupadd "%g"
    ;    add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
    ;    delete user script = /usr/sbin/userdel "%u"
    ;    delete user from group script = /usr/sbin/userdel "%u" "%g"
    ;    delete group script = /usr/sbin/groupdel "%g"
    
    
    # ----------------------- Browser Control Options ----------------------------
    #
    local master = no # 当设置为no时,Samba不会成为网络上的主浏览服务器。当设置为yes时,将进行正常的选举。
    os level = 33 # 选举Samba主服务器的优先级,数字越大称为主服务器的几率越高。
    preferred master = yes # 如果为yes在启动Samba时强制进行本地主服务器选举,并为自己赢得选举提供更高的机会
    
    
    #----------------------------- Name Resolution -------------------------------
    #
    # 用于支持 Windows Internet Name Service (WINS).
    #
    Samba可以是WINS服务器或WINS客户端,但不能同时是两者。
    wins support = yes # 当设置为yes时,Samba的NMBD组件将启用其WINS服务器。
    wins server = w.x.y.z  # wins服务器地址
    wins proxy = yes # 当设置为yes时,Samba为不支持WINS功能的客户机进行名称解析查询。默认为否,网络上必须至少有一台WINS服务器进行域名解析。
    dns proxy = yes # 当设置为yes时Samba将尝试通过DNS nslookups解析NetBIOS名称
    
    
    # --------------------------- Printing Options -----------------------------
    #
    load printers = yes # 设置为“yes”时,将自动加载打印机列表进行共享,而不是单独进行设置。
    cups options = raw # 允许您将选项传递到CUPS库。例如,将此选项设置为raw,则可以在Windows客户端上使用驱动程序。
    printcap name = /etc/printcap # 用于指定备用的printcap文件。lpstat:自动获取UNIX System V系统上的打印机列表:
    printing = cups  # 定义打印机的系统类型,可选项有:bsd,sysv,plp,lprng,aix,hpux,qnx,cups
    
    # --------------------------- File System Options ---------------------------
    #
    map archive = no  # 当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的属性。默认yes
    map hidden = no  # 当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的隐藏文件属性,默认为yes
    map read only = no  # 当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的只读属性。默认为yes
    map system = no  # 当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的系统文件属性,默认为no
    store dos attributes = yes  # 当Windows客户端将文件复制或移动到Samba服务器的共享目录时,是否保留文件在Windows中的相关属性(只读,系统,隐藏,存档属性)。默认为no。
    
    
    #============================ 单独设置的常用选项 ==============================
    [test]
    comment = Home Directories  # 描述符,是给系统管理员看的
    path = /tmp   # 共享文件的路径
    security = user  # 设置安全级别
    public = yes  # 是否公开,也就是是否能在网上邻居看到该共享 
    guest ok = yes/no   # 设置是否所有人都可以访问共享目录,与public配置项作用相同。
    guest ok = no # 是否拒绝匿名访问,仅当安全级别为 share 时才生效
    browseable = yes # 共享的目录是否让所有人可见
    guest account = nobody  # 设置匿名账户为nobody 
    invalid users = root,@bob # 用来指定禁止访问该共享的用户和组,多个用户或者组中间用逗号隔开
    valid users = root,@bob # 用来指定允许访问该共享资源的用户。如果开启此项,则不再列表中的用户将无法访问共享。多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。
    writable = yes/no   # writable用来指定该共享路径是否可写。
    write list = root,@bob # 允许写入该共享的用户
    
    deadtime = 10  # 客户端在10分钟内没有打开任何 Samba资源,服务器将自动关闭会话,在大量的并发访问环境中,这样的设置可以提高服务器性能 
    display charset = UTF8   # 设置显示的字符集 
    max connections = 0  # 设置最大连接数,0表示无限制,如果超过最大连接数则拒绝连接
    
    create mask = 0775   # 客户端上传文件的默认权限 
    directory mask = 0775  # 客户端创建目录的默认权限
    admin users = user1  # 设置共享目录的管理员,具有完全权限
    
    # 过滤上传的文件
    veto files=/*.txt/*.bmp/*.doc/
    delete veto files = yes
    #文件类型之间用“/“分隔开只设置veto files实际上是隐藏文件不让用户看到,文件已经上传到了服务器,没有实现过滤的功能。delete veto files 设置为 yes 后才是将限制类型的文件删除,实现文件过滤的功能。
    常用配置选项

     2、使用匿名的方式访问共享

    2.1 创建匿名共享目录,有读写的权限。

    [root@app ~]# mkdir /tmp/share
    [root@app ~]# chmod -R 777 /tmp/share/ 

    2.2 实验环境,关闭本机防火墙,selinux

    [root@app ~]# systemctl stop firewalld.service # 临时关闭本机防火墙
    [root@app ~]# setenforce 0   //  临时关闭selinux
    # 永久关闭selinux
    修改配置文件/etc/selinux/config:
    将SELINUX=enforcing改为SELINUX=disabled
    重启机器即可

    2.3 编辑/etc/samba/smb.conf(请先将smb.conf备份一份,方便出问题后随时替换回来),我的配置文件如下:

    [global]
        workgroup = WORKGROUP
       # 这个版本没有share这个安全级别,需要配合map to guest = Bad User
        security = user  
        map to guest = Bad User
    
        passdb backend = tdbsam
    
    [my_share]
        comment = public share
        public = yes
        path = /tmp/share/
        writable = yes   # 可写的权限

    重启Samba服务后,访问Samba共享。

    2,4 访问共享,进行验证

     

     2.5 过滤上传文件类型,禁止上传图片和zip,EXE文件

    修改后的配置文件如下:

    [global]
        workgroup = WORKGROUP
       # 这个版本没有share这个安全级别,需要配合map to guest = Bad User
        security = user  
        map to guest = Bad User
    
        passdb backend = tdbsam
    
    [my_share]
        comment = public share
        public = yes
        path = /tmp/share/
        writable = yes   # 可写的权限
        # 只设置veto files实际上是隐藏文件不让用户看到,没有真正删除文件delete veto files 设置为 yes 后才是将限制类型的文件删除
        veto files = /*.jpg/*.jpeg/*.zip/*.exe/
        delete veto files = yes

    保存文件后,重启Samba服务进行验证。

     匿名共享就到这里吧,下面进行用户验证。

    3、用户名密码登陆Samba服务器

    3,1 创建Samba账户

    创建3个用户,一个禁止访问共享用户deny_user,一个只读权限read_user,一个读写权限write_user。

    # 创建系统账户,用于映射Samba账户,不需要登陆系统
    [root@app ~]# useradd -s /bin/nologin deny_user
    [root@app ~]# useradd -s /bin/nologin read_user
    [root@app ~]# useradd -s /bin/nologin write_user
    
    # 创建Samba账户
    [root@app ~]# pdbedit -a deny_user
    new password:               # 输入密码
    retype new password:     # 确认密码
    Unix username:        deny_user
    NT username:          
    Account Flags:        [U          ]
    User SID:             S-1-5-21-4013762177-3865157733-2962489042-1000
    Primary Group SID:    S-1-5-21-4013762177-3865157733-2962489042-513
    Full Name:            
    Home Directory:       \appdeny_user
    HomeDir Drive:        
    Logon Script:         
    Profile Path:         \appdeny_userprofile
    Domain:               APP
    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:    Mon, 02 Dec 2019 23:54:49 CST
    Password can change:  Mon, 02 Dec 2019 23:54:49 CST
    Password must change: never
    Last bad password   : 0
    Bad password count  : 0
    Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    [root@app
    ~]# pdbedit -a read_user ... [root@app ~]# pdbedit -a write_user ...

    3.2 创建共享目录

    [root@app ~]# mkdir /tmp/user
    [root@app ~]# chmod -R 777 /tmp/user/ 

    3.3 配置文件内容如下:

    [global]
        workgroup = WORKGROUP
        security = user  
        
        passdb backend = tdbsam
    
    [user]
        comment = security user
        path = /tmp/user/
        valid users = read_user write_user  # 有读取权限的用户
        invalid users = deny_user  # 禁止访问共享的用户
        write list = write_user  # 有写入权限的用户
    
        # 只设置veto files实际上是隐藏文件不让用户看到,没有真正删除文件delete veto files 设置为 yes 后才是将限制类型的文件删除
        veto files = /*.jpg/*.jpeg/*.zip/*.exe/
        delete veto files = yes

    保存配置文件,重启Samba服务。

    3.4 验证最终效果:

    好了就简单到这里吧,关于更多选项这里就不逐一进行演示了。

    关于pdbedit的常用参数如下:

    pdbedit –a username         :新建Samba账户。
    pdbedit –x username         :删除Samba账户。
    pdbedit –L                  :列出Samba用户列表,读取passdb.tdb数据库文件。
    pdbedit –Lv                 :列出Samba用户列表的详细信息。
    pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
    pdbedit –c “[]” –u username :恢复该Samba用户的账号。

     

      

  • 相关阅读:
    MVC项目实践,在三层架构下实现SportsStore-04,实现分页
    MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
    MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
    MVC单元测试,使用Repository模式、Ninject、Moq
    MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
    rsync算法原理和工作流程分析
    man rsync翻译(rsync命令中文手册)
    rsync工作机制(翻译)
    rsync技术报告(翻译)
    第2章 rsync(二):inotify+rsync详细说明和sersync
  • 原文地址:https://www.cnblogs.com/caesar-id/p/11964677.html
Copyright © 2020-2023  润新知