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系统之间共享文件的最佳选择。

    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种
    #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] #打印机共享参数

    配置共享资源
    Samba服务程序的主配置文件与前面学习过的Apache服务很相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的方法很简单,只要将下表的参数写入到Samba服务程序的主配置文件中,然后重启该服务即可,配置‘=’两边必须要有空格。

    参数 作用
    [database] 共享名称为database
    comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
    path = /home/database 共享目录为/home/database
    public = no 关闭“所有人可见”
    writable = yes 允许写入操作
    1. 1步:创建用于访问共享资源的账户信息。在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。

    pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。

    参数 作用
    -a用户名 建立Samba账户
    -x用户名 删除Samba账户
    -L 列出账户列表
    -Lv 列出账户详细信息的列表
    [root@redhat ~]# id liyuan
    uid=1000(liyuan) gid=1000(liyuan) groups=1000(liyuan),10(wheel)
    [root@redhat ~]# pdbedit -a -u liyuan
    new password:
    retype new password:
    Unix username:        liyuan
    NT username:          
    Account Flags:        [U          ]
    User SID:             S-1-5-21-2350665656-636402123-819638771-1000
    Primary Group SID:    S-1-5-21-2350665656-636402123-819638771-513
    Full Name:            li YUAN
    Home Directory:       \\redhat\liyuan
    HomeDir Drive:        
    Logon Script:        
    Profile Path:         \\redhat\liyuan\profile
    Domain:               REDHAT
    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:    Sun, 01 Jul 2018 23:42:42 CST
    Password can change:  Sun, 01 Jul 2018 23:42:42 CST
    Password must change: never
    Last bad password   : 0
    Bad password count  : 0
    Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    [root@redhat ~]#
    
    Linux testparm命令用于测试Samba的设置是否正确无误。<br />    执行testparm(test parameter)指令可以简单测试Samba的配置文件,假如测试结果无误,Samba常驻服务就能正确载入该设置值,但并不保证其后的操作如预期般一切正常。