配置Samba文件共享服务器

时间:2021-06-14 06:30:49

Samba服务端:xuegod63.cn  IP:192.168.1.63

Samba客户端:xuegod64.cn  IP:192.168.1.64

 

Samba服务概述:

1.1 Samba 概述

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

 

1.2 Samba 应用环境

文件和打印机共享:文件和打印机共享是Samba的主要功能,SMB 进程实现资源共享,将文件和

打印机发布到网络之中,以供用户可以访问。

身份验证和权限设置:smbd服务支持user mode 和domain mode 等身份验证和权限设置模式,

通过加密方式可以保护共享的文件和打印机。

名称解析:Samba通过nmbd 服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS 名解析为IP 地址。

 

浏览服务:局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,

当使用客户端访问Windows 网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。

 

端口号: 139 和 445

在早期,SMB 运行于NBT 协议(NetBIOS over TCP/IP)上,使用UDP 协议的137、138 及TCP 协议的139 端口。

 

NETBIOS协议 

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

 

模式: C/S 模式

 

安装Samba

 

2 安装Samba服务端和客户端

服务器端:

[root@xuegod163 ~]# rpm -ivh/mnt/Packages/samba-3.6.9-164.el6.x86_64.rpm

#该包为Samba服务的主程序包。

xuegod64安装客户端软件包:

[root@xuegod164 ~]# rpm -ivh/mnt/Packages/samba-client-3.6.9-164.el6.x86_64.rpm
#
该包为Samba 的客户端工具,是连接服务器和连接网上邻居的客户端工具并包含其测试工具

注:如安装时有依赖关系,就解决一下依赖关系

 

配置文件

[root@xuegod63 ~]# ls/etc/samba/smb.conf

/etc/samba/smb.conf

 

服务启动和关闭

1)启动samba服务

[root@xuegod63 ~]#service smb start

启动 SMB 服务:                                            [确定]

2)设置服务开机自动启动

[root@xuegod63 ~]# chkconfig--level 3 smb on         #运行级别3 自动启动服务

[root@xuegod63 ~]#chkconfig --level 3 smb off         #运行级别3 自动关闭服务

 

查看端口:

tcp        0     0 0.0.0.0:139                0.0.0.0:*                   LISTEN      9548/smbd

tcp        0     0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      9548/smbd

 

此服务的使用方法

Linux:

smbclient -L  sambaIP

例:

[root@xuegod64 ~]#smbclient -L 192.168.1.63

Enter root's password:               #密码为空,直接回车

 

Windows:

windows:

windows+R  ,打开一个运行窗口

输入:\\192.168.1.63 

#同windows 访问共享文件一样。

 

修改配置文件,实战举例:

 Samba 常规服务器配置

基本的Samba服务器的搭建流程主要分为四个步骤:

[1]、编辑主配置文件smb.conf,指定需要共享的目录,并为共享目录设置共享权限。

[2]、在smb.conf文件中指定日志文件名称和存放路径。

[3]、设置共享目录的本地系统权限及samba共享权限。

[4]、重新加载配置文件或重新启动smb服务,使用配置生效

 

配置文件详解:

 

下面我们来具体看下smb.conf 的内容哈,smb.conf 大致分为三个部分

 

1、samba 配置简介

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

smb.conf 中还有以“;”开头,这些都是samba 配置的格式范例,默认是不生效,可以通过

去掉前面的“;”并加以修改来设置想使用的功能。
例:

[root@xuegod63 ~]# vim /etc/samba/smb.conf  #搜索分号 ;

;       netbios name = MYSERVER

 

;       interfaces = lo eth0 192.168.12.2/24192.168.13.2/24

注:另外#号也是表示注释

 

2、Global Settings

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

该部分以[global]开始:

格式:

字段=设定值

 

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

 

1)设置samba服务器所在工作组或域名

我们设置samba 服务器的工作组为xuegod.cn

       workgroup = xuegod.cn  #工作组

 

2)服务器描述,服务器描述实际上类似于备注信息,

设置samba 描述信息为“xuegod.cn Samba Server  ”。

        serverstring = xuegod.cn Samba Server  #samba服务器描述

 

3)设置samba 服务器安全模式。常见模式有两种:share 安全级别模式和user 安全级别模式

 

(1)share 安全级别模式

客户端登录samba 服务器,不需要输入用户名和密码就可以浏览samba 服务器的资源,适用于公

共的共享资源,安全性差,需要配合其他权限设置,保证samba 服务器的安全性。

(2)user 安全级别模式

客户端登录samba 服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服

务器默认为此级别模式。

 

3、Share Definitions 共享服务的定义

[homes]为特殊共享目录,表示用户主目录。

[printers]表示共享打印机。

 

配置一个共享资源:

[share]  #设置共享名

        comment =Home Directories  #描述

        browseable= yes   #是否允许查看此共享内容 。如果是否,后期通过绝对路径,可以查看到。

path = /share      #共享路径,写绝对路径

public = yes  #允许匿名查看

 

1)设置共享名

共享资源发布后,必须为每个共享目录或打印机设置不同的共享名,给网络用户访问时使用,并

且共享名可以与原目录名不同。

例:

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

 

2)共享资源描述

格式:comment =备注信息

举个例子哈,samba 服务器上有个/sales 目录存放公司销售部的数据,为了对公司部门员工进行

区分,可以添加备注信息。

 

3)共享路径

共享资源的原始完整路径,

格式:path =绝对地址路径

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

 

4)设置匿名访问

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

格式:

public = yes #允许匿名访问

public = no #禁止匿名访问

 

5)设置访问用户

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

格式:

valid users = 用户名

valid users = @组名

 

6)设置目录只读

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

格式:

readonly = yes #只读

readonly = no #读写

 

7)设置目录可写

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

writable 格式:

writable = yes #读写

writable = no #只读

write list 格式:

write list = 用户名

write list = @组名

 

Samba 服务日志文件

在/etc/samba/smb.conf 文件中,log file 为设置samba 日志的字段。

[root@xuegod63 ~]# ls/var/log/samba/

cores  log.192.168.1.100  log.192.168.1.64  log.smbd log.xj818  log.xuegod64  old

 

修改配置文件,实战举例

例1:匿名共享:

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

 

创建共享目录

[root@xuegod63 ~]# mkdir/share

[root@xuegod63 ~]# cp/etc/passwd /share/               #复制一个测试文件

 

修改配置文件

vim /etc/samba/smb.conf

[global]

workgroup = xuegod.cn

         serverstring = Xuegod.cn Samba Server

security = share

============================ Share Definitions ====

[public]                                                                        #设置共享名

        comment = Xuegod.cn Data                             #描述信息

        path = /share                                                   #设置共享路径,要写绝对路径

        public = yes                                                     #允许匿名查看

 

重启smb服务

[root@xuegod63 ~]#service smb restart

 

测试:

 

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

在/xsb目录中存放有销售部的重要数据,为了保证其他部门无法查看其内容,我们需要将全局配置中security 设置为user 安全级别,这样就启用了samba 服务器的身份验证机制,然后在共享目录/xsb下设置valid users 字段,配置只允许销售部员工能够访问这个共享目录。

 

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

 

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

改:

passdb backend = tdbsam

为:

        passdbbackend = smbpasswd

        smb passwdfile = /etc/samba/smbpasswd

重启服务

[root@xuegod63 ~]# service smb restart

关闭 SMB 服务:                                            [确定]

启动 SMB 服务:                                            [确定]

 

查看目录自动创建了smbpasswd文件

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

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

及密码。

[root@xuegod163 ~]# groupadd xsb

[root@xuegod163 ~]# useradd -g xsb xsb01

[root@xuegod163 ~]# useradd -g xsb xsb02

 

[root@xuegod163 ~]# id xsb01

uid=500(xsb01) gid=500(xsb) groups=500(xsb)

 

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

[root@xuegod63 ~]# smbpasswd -a xsb01

New SMB password:

Retype new SMB password:

Added user xsb01.

[root@xuegod63 ~]# smbpasswd -a xsb02

New SMB password:

Retype new SMB password:

Added user xsb02.

 

[root@xuegod63 ~]# cat /etc/samba/smbpasswd

xsb01:500:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U          ]:LCT-56FBDA3D:

xsb02:501:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U          ]:LCT-56FBDA4F:

 

 

创建共享目录

[root@xuegod63 ~]# mkdir/xsb

[root@xuegod63 ~]# cp/etc/hosts /xsb/

 

修改配置文件,指定共享目录,设置访问权限

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

 

重启服务

[root@xuegod63 ~]#service smb restart

关闭 SMB 服务:                                            [确定]

启动 SMB 服务:                                            [确定]

 

测试:

输入:

用户 :xsb01   密码:123456

 

输入销售部的帐号及密码进行登录

 

 

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

 

如果需要切换用户,需要清空一下Windows系统的共享缓存

使用net use 查看缓存信息

使用net use * /delete 删除缓存信息

 

扩展:

1、隐藏共享目录

browseable = no

这样用户访问共享目录后看不到对应目录,需要写入目录的绝对URL进行访问

\\192.168.1.163\xsb

 

2、控制访问源

hosts allow 和hosts deny

hosts allow 和 hosts deny字段的使用

hosts allow 字段定义允许访问的客户端

hosts deny 字段定义禁止访问的客户端

实例:

如果公司现在要求共享目录xsb只允许192.168.1.0/24网段的主机访问,同时禁止192.168.1.3IP地址的访问

hosts allow = 192.168.1.                    #允许192.168.1.0/24网段访问

hosts deny = 192.168.1.3                   #禁止192.168.1.3主机访问

注:

当hosts allow 和hostsdeny 同时设置时,hosts allow 生效,如果这样的话,上面的这两项设置192.168.1.3就是不生效的,针对这种情况,可以使用except进行排除

hosts allow = 192.168.1. EXCEPT 192.168.1.3

 

 

验证:重启服务

3、控制写入权限

writeable = yes    #允许授权用户写入

write list =xsb01  #允许单个用户写入

 

4、用户账号映射

前面已经说过,samba 的用户帐号信息是保存在smbpasswd 文件中,而且可以访问samba 服务

器的帐号也必须对应一个同名的系统帐号。基于这一点,所以,对于一些黑客来说,只要知道samba服务器滴samba 帐号,就等于是知道了Linux 系统帐号,只要破解其samba 帐号密码加以利用就可以攻击samba 服务器。所以我们要使用用户帐号映射这个功能来解决这个问题

 

用户帐号映射这个功能需要建立一个帐号映射关系表,里面记录了samba帐号和虚拟帐号的对应

关系,客户端访问samba 服务器时就使用虚拟来登录。

 

1)编辑主配置文件/etc/samba/smb.conf

在global 下添加一行字段username map = /etc/samba/smbusers开启用户帐号映射功能。

创建samba用户

[root@xuegod163 ~]# useradd rm

[root@xuegod163 ~]# smbpasswd -a rm

 

2)编辑/etc/samba/smbusers

smbusers 文件保存帐号映射关系,其有固定滴格式:

samba 帐号 =虚拟帐号(映射帐号)

[root@xuegod163 ~]# vim/etc/samba/smbusers

# Unix_name = SMB_name1 SMB_name2 ...

root = administrator admin

nobody = guest pcguest smbguest

rm = zxj jingyu

~          

帐号rm就是我们上面建立的samba 帐号(同时也是Linux 系统帐号),zxj 及jingyu就是映射滴帐号名(虚拟帐号),帐号rm在我们访问共享目录时只要输入zxj或jingyu就可以成功访问了,但是实际*问samba 服务器的还是我们的rm帐号,这样一来就解决了安全问题哈~我们继续。

3)重启samba服务:service smb restart

4)验证效果

输入我们定义的映射帐号zxj注意我们没有输入帐号rm,映射帐号zxj密码和rm帐号一样,访问成功后显示的也是rm目录的共享内容

现在就可以通过映射帐号浏览共享目录了

注意:强烈建议不要将samba用户的密码与本地系统用户的密码设置成一样,可以避免非法

用户使用samba 帐号登录系统非法破坏