了解 Samba服务器配置的工作流程
当Samba 服务安装完毕,并不是直接可以使用 Windows 或 Linux的客户端访问Samba服务器,还必须对服务器进行设置:告诉 Samba 服务器将哪些目录共享出来给客户端进行访问,并根据需要设置其他选项,比如添加对共享目录内容的简单描述信息和访问权限等具体设置。
基本的Samba 服务器的搭建流程主要分为5个步骤。
(1)编辑主配置文件 smb.conf,指定需要共享的目录,并为共享目录设置共享权限。
(2)在smb.conf文件中指定日志文件名称和存放路径。
Samba 的工作流程如图1所示。
(1)客户端请求访问 Samba 服务器上的共享目录。
(2)Samba 服务器接收到请求后,会查询主配置文件 smb.conf,看是否共享了目录,如果共享了目录则查看客户端是否有权限访问。
(3)Samba 服务器会将本次访问信息记录在日志文件之中,日志文件的名称和路径都需要我们设置。
(4)如果客户端满足访问权限设置,则允许客户端进行访问。
图1 Samba 的工作流程示意图
主要配置文件 smb.conf
Samba的配置文件一般就放在/etc/samba 目录中,主配置文件名为smb.conf。
1. Samba 服务程序中的参数以及作用
使用ll命令查看 smb.conf 文件属性,并使用命令 vim /etc/samba/smb.conf 查看文件的详细内容,如图2所示。
图2 查看 smb.conf 配置文件
CentOS7的smb.conf配置文件已经简化,只有36行左右。为了更清楚地了解配置文件,建议研读 smb.conf.example。Samba 开发组按照功能不同,对smb.conf文件进行了分段划分,条理非常清楚。表1罗列了主配置文件的参数以及相应的注释说明。
表1 Samba 服务程序中的参数以及作用
作用范围 | 参数 | 作用 |
[global] | workgroup=MYGROUP | #工作组名称,如workgroup=SmilcGroup |
server string=Samba Server Version %v | 服务器描述,参数%v为显示SMB版本号 | |
log file = /var/log/samba/log.%m | 定义日志文件的存放位置与名称,参数%m为来访的主机名 | |
max log size=50 | #定义日志文件的最大容量为50KB | |
Security = user | #安全验证的方式,总共有4种,如 security-user, 表示: 需验证来访主机提供的口令后才可以访问;提升了安全性,系统默认方式 | |
Security = share | #来访主机无须验证口令;比较方便,但安全性很差 | |
Security = server | #使用独立的远程主机验证来访主机提供的口令(集中管理账户) | |
Security = domain | #使用域控制器进行身份验证 | |
passdb backend = tdbsam | #定义用户后台的类型,共有3种。第一种表示: 创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 | |
passdb backend = smbpasswd | #使用smbpasswd命令为系统用户设置Samba服务程序的密码 | |
passdb backend =ldapsam | #ldapsam:基于 LDAP服务进行账户验证 | |
load printers=yes | #设置在Samba服务启动时是否共享打印机设备 | |
cups options=raw | #打印机的选项 | |
[homes] | #共享参数 | |
comment=Home Directories | #描述信息 | |
browseable=no | #指定共享信息是否在“网上邻居”中可见 | |
writable=yes | #定义是否可以执行写人操作,与“read only”相反 | |
[printers] | #打印机共享参数 |
技巧:为了方便配置,建议先备份 smb.conf,一旦发现错误可以随时从备份文件中恢复主配置文件。操作如下。
[root@CentOS7-1 ~]# cd /etc/samba
[rootCentOS7-1 samba]#ls
[root@CentOS7-1 samba]# cp smb.conf smb.conf.bak
2.Share Definitions 共享服务的定义
Share Definitions 设置对象为共享目录和打印机,如果想发布共享资源,需要对 Share Definitions 部分进行配置。Share Definitions 字段非常丰富,设置灵活。
我们先来看几个最常用的字段。
(1)设置共享名。
共享资源发布后,必须为每个共享目录或打印机设置不同的共享名,供网络用户访问时使用,并且共享名可以与原目录名不同。
共享名的设置非常简单,格式为:
[共享名]
(2)共享资源描述。
网络中存在各种共享资源,为了方便用户识别,可以为其添加备注信息,以方便用户查看时知道共享资源的内容是什么。
格式:
comment=备注信息
(3)共享路径。
共享资源的原始完整路径,可以使用 path 字段进行发布,务必正确指定。
格式:
path =绝对地址路径
(4)设置匿名访问。
设置是否允许对共享资源进行匿名访问,可以更改 public 字段。
格式:
public = yes #允许匿名访问
public= no #禁止名访问
【例1】samba服务器中有个目录为/share,需要发布该目录成为共享目录,定义共享名为public,要求:允许浏览、允许只读、允许匿名访问。设置如下所示。
[public]
comment = public
path = /share
browseable = yes
read only = yes
public = yes
(5)设置访问用户。
如果共享资源存在重要数据的话,需要对访问用户进行审核,我们可以使用 valid users字段进行设置。
格式:
valid users = 用户名
valid users = @组名
【例2】 samba 服务器/share/tech 目录中存放了公司技术部数据,只允许技术部员工和经理访问,技术部组为tech,经理账号为manager。
[tech]
comment=tech
path=/share/tech
valid users=@tech,manager
(6)设置目录只读。
共享目录如果需要限制用户的读写操作,我们可以通过read only实现。
格式:
read only= yes #只读
read only= no #读写
相关示例如下。
hosts allow = 192.168.10. server.abc.com
上述程序表示允许来自192.168.10.0或 server.abc.com的访问者访问samba 服务器资源。
hosts deny= 192.168.2.
上述程序表示不允许来自192.168.2.0网络的主机访问当前 samba 服务器资源。
【例3】Samba 服务器公共目录/public存放大量共享数据,为保证目录安全,仅允许192.168.10.0网络的主机访问,并且只允许读取,禁止写入。
[public]
comment = public
path = /public
public = yes
read only = yes
hosts allow = 192.168.10.
(8)设置目录可写。
如果共享目录允许用户写操作,可以使用 writable 或 write list 两个字段进行设置。
writable 格式:
writable=yes #读写
writable=no #只读
write list格式:
write liet = 用户名
write list = @组名
注意:[homes]为特殊共享目录,表示用户主目录。[printers]表示共享打印机。
Samba 服务的日志文件和密码文件
1.Samba 服务日志文件
日志文件对于 Samba 非常重要,它存储着客户端访问 Samba 服务器的信息,以及Samba服务的错误提示信息等,可以通过分析日志,帮助解决客户端访问和服务器维护等问题。
在/ete/samba/smb.conf文件中,log file 为设置Samba日志的字段。如下所示:
log file = /var/log/samba/log.%m
Samba服务的日志文件默认存放在/var/log/samba/中,其中 Samba 会为每个连接到Samba服务器的计算机分别建立日志文件。使用
Is -a /var/log/samba 命令可以查看日志的所有文件。
当客户端通过网络访问 Samba 服务器后,会自动添加客户端的相关日志。所以,Linux管理员可以根据这些文件来查看用户的访同情况和服务器的运行情况。另外当 Samba 服务器工作异常时,也可以通过/var/log/samba/下的日志进行分析。
2.Samba 服务密码文件
Samba 服务器发布共享资源后,客户端访问 Samba服务器,需要提交用户名和密码进行身份验证,验证合格后才可以登录。Samba 服务为了实现客户身份验证功能,将用户名和密码信息存放在/etc/samba/smbpasswd 中,在客户端访问时,将用户提交的资料与smbpasswd中存放的信息进行比对,如果相同,并且Samba服务器其他安全设置允许,客户端与Samba服务器的连接才能建立成功。
那如何建立 Samba 账号呢?首先,Samba 账号并不能直接建立,需要先建立Linux 同名的系统账号。例如,如果要建立一个名为yy的Samba 账号,那么 Linux 系统中必须提前存在一个同名的yy系统账号。
Samba 中添加账号的命令为smbpasswd,格式为:
smbpasswd -a 用户名
【例4】在Samba 服务器中添加 Samba 账号reading。
(1)建立Linux系统账号 reading。
[root@CentOS7-1 ~]# useradd reading
[root@CentOS7-1 ~]# passwd reading
[root@CentOS7-1 ~]#smbpasswd -a reading
Samba 账号添加完毕。如果在添加 Samba 账号时输人完两次密码后出现错误信息Failed to modify password entry for user amy,则是因为 Linux 本地用户里没有reading 这个用户,在Linux系统里面添加一下就可以了。
提示:在建立Samba 账号之前,一定要先建立一个与Samba 账号同名的系统账号。
经过上面的设置,再次访问Samba 共享文件时就可以使用reading账号。