1、Samba服务概述:

samba是基于smb(Server Message Block)协议的一种实现方式。Samba 最先在Linux和Windows 两个平台之间架起了一座桥梁,正是由于Samba 的出现,我们可以在Linux系统和Windows 系统之间互相通信,比如拷贝文件、实现不同操作系统之间的资源共享等等,我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地和远程联机打印。

1.1、Samba的原理

  1. SMB是基于NetBIOS的一个网络文件共享协议,允许cilent从服务器端访问文件资源。
  2. NetBIOS协议是一个用来让局域网内的主机互相连接的通讯协议,被广泛用于windows平台间的通信。
  3. samba就是基于smb开发的,让unix主机能够通过mbr协议与windows平台进行文件共享。

1.2、NETBIOS协议

NetBIOS是Network Basic Input/Output System的简称,网络基本输入/输出系统协议。协议,一般指用于局域网通信的一套API,是由IBM公司开发。主要作用:通过NETBIOS协议获得计算机名称,然后把计算机名解析为对应IP地址。
模式: C/S 模式

2、Samba 应用环境

环境 说明
文件和打印机共享 文件和打印机共享是Samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问哈。
身份验证和权限设置 smbd服务支持user mode和domain mode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机。
名称解析 Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。
浏览服务 局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。

3、samba服务

3.1、samba的安装包:

包名称 说明
samba samba服务器端程序。
libsmbclient samba客户端库文件。
samba-client samba客户端程序。
samba-common samba客户端以及服务端都会用到的文件,如samba.conf等。
samba-winbind samba对于windows域的支持的服务端的库。
samba-winbind-clients samba windwos域的客户端。

3.2、samba的进程文件:

进程 说明
nmbd 负责管理工作组,NetBIOS名解析,并提供浏览服务显示网络上的共享资源列表。工作在UDP的137,138端口上。
smbd 其主要功能就是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管,工作在TCP的139或445端口上。

3.3、samba的文件:

/etc/samba/smb.conf samba的主要配置文件。
/etc/samba/smbusers 共享服务中,linux与windows的账号的映射,格式为linuxuser = windowSUSEr1,windowsuser2
/var/lib/samba/private/passdb.tdb / secrets.tdb samba用户账号密码存放的数据
库。

4、主要配置文件smb.conf

4.1、samba配置简介

  • smb.conf文件的开头部分为samba配置简介,告诉我们smb.conf文件的作用及相关信息。

  • smb.conf中以“#”开头的为注释,为用户提供相关的配置解释信息,方便用户参考,不用修改它哈。

  • smb.conf中还有以“;”开头滴,这些都是samba配置的格式范例,默认是不生效滴,可以通过去掉前面的“;”并加以修改来设置想使用的功能。

4.2、Global Settings

Global Settings设置为全局变量区域。那什么是全局变量哈?全局变量就是说我们只要在global时进行设置,那么该设置项目就是针对所有共享资源生效滴。这与以后我们学习的很多服务器配置文件相似哈。

该部分以[global]开始:

smb.conf配置通用格式,对相应功能进行设置:字段=设定值

下面我们说下[global]常用字段及设置方法:

[global]
[network]

workgroup = MYGROUP #工作组名称,要与windows的工作组名称一致。
server string = Samba Server Version %v #samba服务器描述
; netbios name = MYSERVER
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #设置监听
的网卡
; hosts allow = 127. 192.168.12. 192.168.13. #设置可以访问的网段
[login]
log file = /var/log/samba/log.%m #日志文件路径。
max log size = 50 #一个日志文件最大多少Kb进行轮替。
[独立服务器设定  Standalone Server]
    security = user|share|domain  #安全认证方式
                        share:#共享模式
                        user:#使用samba服务器的密码库
                        domain:#使用外部域服务器的密码。
    passdb backend = tdbsam     #密码库格式。
1)设置工作组或域名称

工作组是网络中地位平等的一组计算机,可以通过设置workgroup字段来对samba服务器所在工作组或域名进行设置。

我们设置samba服务器的工作组为CentOS

2)服务器描述

服务器描述实际上类似于备注信息哈,在一个工作组中,可能存在多台服务器,为了方便用户浏览,我们可以在server string配置相应描述信息,这样用户就可以通过描述信息知道自己要登录哪台服务器了啊~

我们设置samba描述信息为“CentOS File Server”。

3)设置samba服务器安全模式

samba服务器有share、user、server、domain和ads 五种安全模式,用来适应不同的企业服务器需求。

级别名称 说明
share安全级别模式 客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。
user安全级别模式 客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。
server安全级别模式 客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。
domain安全级别模式 如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。
ads安全级别模式 当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。

4.3、Share Definitions共享服务的定义

Share Definitions设置对象为共享目录和打印机,如果我们想发布共享资源,需要对Share Definitions部分进行配置。Share Definitions字段非常丰富,设置灵活。

我们先来讲下几个最常用的字段哈~

1)设置共享名

共享资源发布后,必须为每个共享目录或打印机设置不同的共享名,给网络用户访问时使用,并且共享名可以与原目录名不同。
共享名设置非常简单:[共享名]

我们来看个例子,Samba服务器中有个目录为/share,需要发布该目录成为共享目录,定义共享名为public

2)共享资源描述

网络中存在各种共享资源,为了方便用户识别,可以为其添加备注信息,以方便用户查看时知道共享资源的内容是什么哈。

格式:comment = 备注信息

举个例子哈,samba服务器上有个/sales目录存放公司销售部的数据,为了对公司部门员工进行区分,可以添加备注信息。

3)共享路径

共享资源的原始完整路径,可以使用path字段进行发布,务必正确指定。

格式:path = 绝对地址路径

samba服务器上/share/tools目录存放常用工具软件,需要发布该目录为共享,我们可以这样做。

4)设置匿名访问

共享资源如果对匿名访问进行设置,可以更改public字段。

格式:

public = yes     #允许匿名访问
public = no      #禁止匿名访问

samba服务器/share共享目录允许匿名用户访问,可以这样设置。

5)设置访问用户

如果共享资源存在重要数据的话,需要对访问用户审核,我们可以使用valid users字段进行设置哈~

格式:

valid users = 用户名
valid users = @组名

我们来看下面一个例子哈,samba服务器/share/tech目录存放了公司技术部数据,只允许技术部员工和经理访问,技术部组为tech,经理帐号为gm

6)设置目录只读

共享目录如果限制用户的读写操作,我们可以通过readonly实现哈~

格式:

readonly = yes    #只读
readonly = no     #读写

samba服务器公共目录/public存放大量共享数据,为保证目录安全我们只允许读取,禁止写入哈~

7)设置目录可写

如果共享目录允许用户写操作,可以使用writable或write list两个字段进行设置哈~

writable格式:
writable = yes      #读写
writable = no       #只读
write list格式:
write list = 用户名
write list = @组名

注意:
[homes]为特殊共享目录,表示用户主目录。
[printers]表示共享打印机。

5、配置一个共享资源

[share] #设置共享名
comment = Home Directories #描述
browseable = yes #是否允许查看此共享内容 。如果是否,后期通过绝对路径,可以查看到。
path = /share #共享路径,写绝对路径
public = yes #允许匿名查看
readonly = yes

6、samba的命令与客户端访问

6.1、testparm:测试有效的exports内的属性

6.2、pdbedit:管理smb的用户数据库。

pdbedit -L [-vm] 列出数据库中的用户等信息,-v详细信息,-w使用smbpasswd格式。
pdbedit -a -u [user] 新增一个用户,但必须存在实体用户。
pdbedit -r -u [user] 修改一个用户的信息,需搭配其他参数,可参考man文档。
pdbedit -x -u [user] 删除一个用户。
pdbedit -a -m -u [machine account计算机账号] 添加一个计算机账号,域相关。

6.3、smbpasswd:改变samba账户的密码。

smbpasswd -a [user] 新增用户以及密码。
smbpasswd -r [user] 修改用户密码。
smbpasswd -x [user] 删除用户。
smbpasswd -d [user] 禁止登陆。
smbpasswd -e [user] 启用用户。

6.4、smbclient:unix客户端访问工具。

smbclient -L //IPADDR [-U smbuser] 测试查看目标服务器所开放的共享文件夹
smbclient //IPADDR/dir -U smbuser 连接共享服务器文件夹。

[root@host2 ~]# smbclient //192.168.25.132/test -U zhanghe 命令行形式访问。
Enter zhanghe's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-30.el6_7]
smb: \\> help
? allinfo altname archive blo
cksize
cancel case_sensitive cd chmod chown....

6.5、挂载访问。

mount -t cifs -o username=zhanghe,password=123456 -l //192.168.25.132/test /tmp

7、samba搭建实例

7.1、smb服务端搭建:

host1(192.168.1.1):
[root@host1 ~]# yum install samba
[root@host1 ~]# vim /etc/samba/smb.conf
[test]
comment = test on 192.168.25.132 server!
path = /tmp/samba
writable = yes
guest ok = yes
write list = zhanghe
[root@host1 ~]# testparm
[root@host1 ~]# useradd zhanghe
[root@host1 ~]# pdbedit -a -u zhanghe
[root@host1 ~]# pdbedit -L
[root@host1 ~]# mkdir -pv /tmp/samba
[root@host1 ~]# setfacl -m u:zhanghe:rwx /tmp/samba
[root@host1 ~]# service nmb start
[root@host1 ~]# service smb start

ps.配置iptables并设置selinux

8、修改配置文件,实战举例

8.1、例1:匿名共享:

公司现在用一个工作组Software, 需要添加samba 服务器作为文件服务器,并发布共享目
录/share,共享名为public,这个共享目录允许所有公司员工访问。

[root@host1 ~]# mkdir /share
[root@host1 ~]# cp /etc/passwd !$ #复制一个测试文件cp /etc/passwd /share
[root@host1 ~]# vim /etc/samba/smb.conf
[global]
workgroup = Software #工作组
server string = Software Samba Server #samba服务器描述
security = share # 允许匿名访问
============================ Share Definitions ====
[share] #设置共享名
comment = Home Directories #描述
path = /share #共享路径,写绝对路径
public = yes #允许匿名查看

2)重新加载配置

[root@host1 ~]#

8.2、例2:通过用户名和密码共享文件。把/sales 共享出去,只有知道用户名和密码的同事可以看这个共享。

我们需要将全局配置中security 设置为user 安全级别,然后在共享目录设置权限

注意:一定要先指定存放密码的文件位置:

2)修改samba 主配置文件smb.conf

改:

passdb backend = tdbsam
为:
passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd

1)添加销售部用户和组并添加相应samba 帐号

使用groupadd 命令添加sales 组,然后执行useradd 命令和passwd 命令添加销售部员工的

帐号及密码。

[root@host1 ~]# groupadd sales
[root@host1 ~]# useradd -g sales sale1
[root@host1 ~]# useradd -g sales sale2
[root@host1 ~]# id sale2
uid=502(sale2) gid=501(sales) groups=501(sales)

接下来为销售部成员添加相应samba 帐号

[root@host1 ~]# smbpasswd -a sale1

[root@host1 ~]# ls /etc/samba/smbpasswd
/etc/samba/smbpasswd
[root@host1 ~]# cat !$

[root@host1 ~]# smbpasswd -a sale2
New SMB password:
Retype new SMB password:
Added user sale2.

2)修改samba 主配置文件smb.conf

(1).设置user 安全级别模式

security = user

设置目录:

[root@host1 ~]# vim smb.conf

创建共享目录:

创建共享目录:

[root@host1 ~]# mkdir /sales
[root@host1 ~]# cp /etc/passwd !$
cp /etc/passwd /sales

3)重新加载配置

[root@host1 ~]# service smb restart
Shutting down SMB services: [ OK ]
Starting SMB services: [ OK ]

测试:
输入:
用户 :sale2密码:123456
输入销售部的帐号及密码进行登录

这样销售部成员就可以进行访问sales 共享目录下的数据了

9、扩展参数

9.1、客户端访问控制

hosts allow 和 hosts deny 的使用方法

hosts allow 和 hosts deny 字段的使用

名称 说明
hosts allow 字段定义允许访问的客户端
hosts deny 字段定义禁止访问的客户端

这里我们添加hosts deny 和hosts allow 字段

hosts deny = 192.168.0. 表示禁止所有来自192.168.0.0/24 网段的IP 地址访问
hosts allow = 192.168.0.24 表示允许192.168.0.24 这个IP 地址访问
# 当host deny 和hosts allow 字段同时出现并定义滴内容相互冲突时,hosts allow优先。

9.2、设置Samba 的权限,允许sales组可以写

设置系统权限

[root@host1 ~]# chmod 777 /sales
[root@host1 ~]# ll -d !$
ll -d /sales
drwxrwxrwx 2 root root 4096 Mar 7 21:50 /sales

设置服务器权限:

[root@host1 ~]# vim /etc/samba/smb.conf

boss用户和sale组都可以读写

write list = boss,@sales 就表示只有boss 帐号和sales组,可以对/sales 有写入权限

10、使用GUI工具SWAT管理samba

swat是samba的图形化管理工具,我们可以在配置后通过http来通过网页配置,并且内嵌

帮助文档,能够非常直观的配置samba服务,swat是基于xinetd超级守护进程。

[root@host1 tmp]# yum install xinetd -y 安装xinetd超级守护进程
[root@host1 tmp]# yum install samba-swat -y 安装swat程序,主机安装包名为samba-swat,如果直接输入swat是找不到包的!!
[root@host1 tmp]#vim /etc/xinetd.d/swat 编辑swat的配置文件。
# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \\
# to configure your Samba server. To use SWAT, \\
# connect to port 901 with your favorite web brows
er.
service swat
{
port = 901 <--- 监听的端口默认为901。
socket_type = stream <--- socket类型为stream,面向连接的稳定数据传输,即为TCP协议。
wait = no
only_from = 192.168.25.0 <---只监听指定范围内的主机,即限制登陆主机,设置为0.0.0.0 则默认为监听所有主机。
user = root <---只允许使用指定用户登录。
server = /usr/sbin/swat <---指定主程序路径。
log_on_failure += USERID
disable = no <---开启swat工具,yes为关闭。
}
[root@host1 tmp]# service xinetd start 开启xinetd服务即可,因为swat是由xinetd来管理的。
[root@host1 tmp]# ss -tunl | grep 901 查看901端口号,的确为设置的tcp的901


访问服务器的901端口:


11、将SMB加入开机启动

设置开机启动samba

chkconfig smb on

————————————分割线————————————

如何在Ubuntu 14.04中使用Samba共享文件 http://www.linuxidc.com/Linux/2014-07/104894.htm

VMWare 虚拟机 Ubuntu 双网卡 访问 samba 速度 翻倍 http://www.linuxidc.com/Linux/2013-06/85445.htm

Samba文件共享服务器加入Windows Server 2003域 http://www.linuxidc.com/Linux/2013-06/86391.htm

Samba安装配置 http://www.linuxidc.com/Linux/2013-06/86101.htm

CentOS 6.2 下Samba 服务的配置 http://www.linuxidc.com/Linux/2013-01/78390.htm

Samba服务器安装和配置 http://www.linuxidc.com/Linux/2014-12/110459.htm

Win7+VMware+Fedora18 Samba服务器的搭建图解 http://www.linuxidc.com/Linux/2013-01/78234.htm

————————————分割线————————————

Samba 的详细介绍:请点这里
Samba 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132609.htm

文档更新时间: 2019-10-16 15:18   作者:cklx