Samba协议基础

     在NetBIOS 出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议, Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。

     随着 Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Inter net上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。

     在windows当中我们最常见的就是网上邻居可以看到同一互联网上连接的所有用户
在服务器端,linux与window Server相比的稳定性,安全性执行效率以及性价比都是较高的。所以好多window Server下跑的一些服务都会切换到运行在linux服务上,但是对于一些桌面用户来说用到的较多的就是文件共享协议。而在linux中我们可以使用 FTP NFS这类型文件共享协议,但是对于window上比较简单的直接打开的服务在linux中的nfs协议来说是不能在window上使用的这种直接将文件系统共享出来的协议为SMB。

SMB(Server Message block)协议

     是window下所使用的文件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。

Samba服务是SMB的一个开源实现,而smb的一些主要功能如下:

  • 通过SMB协议进行文件共享
  • 通过SMB协议进行打印共享(我们可以通过在linux上通过smb配置打印服务器,为window提供打印服务)
  • 加入一个windows2000/2003/2008域环境

     (在企业环境当中应用最多,目前smb是支持这三种主流的window服务操作系统的,好多企业当中整个的企业环境当中是使用window的域环境进行管理的,而所有的用户组,权限,组策略信息都是在window域环境进行配置的,那么但是我们的企业又想把一些应用服务和需要用到的一些域环境进行认证或者是做权限控制的这些应用服务去切换到linux系统当中,那在这种情况下就涉及到我如何和window下的这些域环境进行兼容,那么smb是可以加入window域环境当中,并且是可以和window下的这些域环境进行认证操作的。所以smb这个协议是相当强大的不仅限于只是实现文件共享)
通过windows域环境进行认证操作。
SMB协议又称为CIFS(Common Internet File System)协议

安装samba

yum install samba
Samba拥有两个主服务(相关服务),对于一般使用的服务他只有一个主服务

  • smbd
    提供samba核心功能也是使用最多的一种功能
    提供文件及打印共享服务功能,使用139/445端口
  • nmbd
    提供Netbios(解析协议慢慢的被淘汰)支持,使用137/138端口,而对于这种协议使用较少,现在都是dns进行解析 一般作为文件共享使用samba,则只需要smbd服务

SAMBA配置文件

Samba的配置文件为/etc/samba/smb.conf

配置文件分为三个部分:

  • [global] 定义全局性配置(配置samba服务的相关参数)
  • [homes] 定义对用户家目录的共享配置(其实在默认情况下不做任何设置,直接启用服务我们就可以通过smb协议访问所有用户的家目录)
  • [printers] 定义打印机共享配置

独立环境下(不和任何域环境有关系)的samba常用的global配置如下:
SAMBA

服务:
Smbd
nmbd

使用的端口:
Port 137      Used for NetBIOS network browsing
Port 138      Used for NetBIOS name service
Port 139      Used for file and printer sharing and other operations
Port 445      Used by Windows 2000/XP when NetBIOS over TCP/IP is disabled
1)Port 137 (UDP) - NetBIOS 名字服务 ; nmbd
3)Port 139 (TCP) - 文件和打印共享 ; smbd (基于SMB(Server Message Block)协议,主要在局域网中使用,文件共享协议)
2)Port 138 (UDP) - NetBIOS 数据报服务
4)Port 445 (TCP) - NetBIOS服务在windos 2000及以后版本使用此端口, (Common Internet File System,CIFS,它是SMB协议扩展到Internet后,实现Internet文件共享) 139/445

配置文件详解

[global]
workgroup = MYGROUP       定义该Samba服务器所在的工作组或者域(如果下面的security=domain的话)
server string = Samba Server Version %v
设定机器的描述,当我们通过网络邻居访问的时候可以在备注里面看见这个内容,而且还可以使用%v = Samba服务的版本号。
log file = /var/log/samba/log.%m      定义记录文件的位置LogFileName
max log size = 50     定义记录文件的大小size(单位是KB,如果是0的话就不限大小)
security = user     定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
* share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
* user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
* server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
* domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
后面三种安全级都要求用户在本Linux机器上也要系统帐户。否则是不能访问的。
load printers = yes
[homes]
     在smb.conf文件中一般没有对这个目录的设定特定内容比如路径等。当客户机发出服务请求时,就在smb.conf文件的其它部分查找友特定内容的服务。如果没有发现这些服务,并且提供了homes段时,那么就搜索密码文件得到用户的Home目录。通过Homes段,Samba可以得到用户的Home目录并使之共享。下面是这个段的最基本的几个设置。
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
write list = +staff @用来指定可以在该共享下写入文件的用户

browseable = 可浏览(设置共享是否可游览,如果是no表示隐藏,通过ip+共享名进行访问)
writable = yes 可写,还要看目录权限 rw
write list = maomao,@GROUPNAME,+GROUPNAME
read only = yes 只读设置 ro
create mask = 0644 客户机创建文件权限
directory mask = 0755 客户机创建目录的权限
valid user = //允许
invalid = user1,user2,@group1//禁止登录用户,用户用逗号隔开,组用@ //禁止
访问控制
hosts allow = 允许主机 192.168.100.
hosts deny = 拒绝主机 允许优先
max connections = 最大连接数目
deadtime = 断掉连接时间(分钟,0为不限制)
public =所有用户都可以访问 / guest ok=yes/no
map to guest = Bad User 匿名访问

windows系统中删除登陆缓存信息

cmd中输入net use * /delete
在这里插入图片描述

案例一(Linux当服务端,Windows作为客户端访问)

1、通过samba提供一个公共文件服务器,所有人都可以访问并写入,但是当前用户不可以删除和修改他人的文件

首先确认是否安装samba服务,如果为安装使用yum install samba安装服务

[root@redhat ~]# rpm -qa | grep samba
samba-4.12.3-12.el8.3.x86_64
samba-common-4.12.3-12.el8.3.noarch
samba-libs-4.12.3-12.el8.3.x86_64
samba-client-libs-4.12.3-12.el8.3.x86_64
samba-common-libs-4.12.3-12.el8.3.x86_64
samba-common-tools-4.12.3-12.el8.3.x86_64

关闭防火墙、关闭selinux

[root@redhat ~]# systemctl stop firewalld
[root@redhat ~]# setenforce 0

修改配置文件

注意使用tab键起到间隔的作用,不是敲空格

[root@redhat ~]# vim /etc/samba/smb.conf
//添加如下选项
[public]
        Path = /public
        Writable = Yes
        Create mask = 644

新建共享的目录及文件

[root@redhat ~]# mkdir /public
[root@redhat ~]# touch /public/{1,2,3,4}

新建用户

[root@redhat ~]# useradd pub
[root@redhat ~]# smbpasswd -a pub
New SMB password:
Retype new SMB password:
Added user pub.

修改权限

[root@redhat ~]# chmod o+w /public
[root@redhat ~]# chmod o+t /public

重启服务
[root@redhat ~]# systemctl restart smb nmb

在window资源设备器上去访问:\192.168.159.128
注意需要开启共享权限否则访问不了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试删除1文件
在这里插入图片描述2、技术部需要一个文件服务器,用于存放常用的软件工具,所有人都可以访问,但是只有技术部里的用户可以写入

修改配置文件

[root@redhat ~]# vim /etc/samba/smb.conf
//添加如下选项
[soft]
        Path = /soft
        Read only = Yes
        Write list = +jishuzu

新建共享目录及文件

[root@redhat ~]# mkdir /soft
[root@redhat ~]# touch /soft/{a,b,c}

新建组及加入组的用户

[root@redhat ~]# groupadd jishuzu
[root@redhat ~]# useradd jishu
[root@redhat ~]# smbpasswd -a jishu
New SMB password:
Retype new SMB password:
Added user jishu.

将用户加入组

[root@redhat ~]# gpasswd -a  jishu jishuzu
Adding user jishu to group jishuzu

为组中的用户设定acl

[root@redhat ~]# setfacl -m g:jishuzu:rwx /soft

重启服务

[root@redhat ~]# systemctl restart smb nmb

测试
用组外用户pub测试是否能写入

注意每次切换用户必须删除Windows缓存信息

在这里插入图片描述

能访问但不能写入
在这里插入图片描述

使用组内成员jishu访问
在这里插入图片描述
添加文件测试权限
在这里插入图片描述3、每个人都可以进入自己的独立家目录,别人不可以访问。

修改配置文件

[root@redhat ~]# vim /etc/samba/smb.conf
//添加如下选型
[yourself]
        Browseable = No
        Writable = Yes

重启服务

[root@redhat ~]# systemctl restart smb nmb
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐