Linux 搭建Samba服务

发布时间 2023-11-11 23:56:32作者: 背对背依靠

Samba 介绍

SMB最开始是windos开发的一种协议,用于在Windows系统中实现文件和打印服务的共享。后来有一个叫作 Andrew Tridgell 的人在1992年开发了一个叫作samba的开源软件,该软件实现了windows的SMB/CIFS网络协议,可以用来在类Unix和windows之间文件共享。

Samba的出现是为了提供跨平台的文件和打印共享服务,特别是在以Windows为主的网络环境中,使得Unix和Linux系统可以无缝地集成进来。


CIFS:common internet file system的缩写,译为通用网络文件系统,基于smb协议开发而来的文件系统,可以理解为SMB协议的升级版。


因为Samba实现的是SMB/CIFS协议,所以自然Samba服务端使用的是445和139端口。

139端口:主要用于支持基于NetBIOS(Network Basic Input/Output System)的SMB会话。NetBIOS是一种较老的网络协议,用于提供本地网络内的计算机名称解析和会话服务。所以在一些网络中还有依赖NetBIOS的设备环境中,可能需要使用139端口

445端口:随着时间的推移,SMB协议得到了改进,发展出一种直接在TCP/IP上运行的方式,不再依赖于NetBIOS。这就是端口445的用途。它用于“直接SMB”(Direct SMB),即SMB协议直接通过TCP/IP进行通信。在现代网络中,基本上用的多是445端口,因为它直接基于TCP/IP,更加高效且不依赖于NetBIOS。


不同端口的使用场景:

139端口:windows95、windows2000还有一些很早很早的Unix或Linux系统会用到139端口。

445端口:window7、Windows XP以及后面一些版本,还有一些现代Linux发行版,主要使用端口445进行SMB通信。

所以,由此可知Samba同时监听了139和445端口并不是两个端口都用了,同时监听两个端口是为了兼容一些老系统、老设备。但是现在大多数网络配置中,用的都是445端口共享资源,139端口没使用。

Linux 搭建Samba服务端

1、服务安装

一般通过软件管理工具,例如yum、apt这些进行安装就行了,也可以去官网下载源码包编译安装。

samba官网:https://www.samba.org/

例如:ubuntu安装samba

sudo apt install samba -y

2、添加用户

一般情况下,系统上已经存在对应的系统用户,需要访问存储在Samba服务器上的共享资源时,可以通过 smbpasswd 命令将系统用户添加到samba的用户数据库中,并且为该用户在Samba中设置密码。

samba的用户数据库是: /var/lib/samba/private/passdb.tdb

(1)创建系统用户

useradd -r -s /sbin/nologin  smb1

(2)将系统用户添加到samba数据库中并设置密码

smbpasswd -a smb1

(3)通过pdbedit -L可以查看samba数据库中的用户有哪些,只有在samba数据库中的用户才能访问samba服务端共享资源。

# 需要root权限,不然会出现错误提醒
pdbedit -L

说明: 如果要删除一个samba用户的话,使用 smbpasswd 的 -x 选项可以实现;

例如:删除smb1这个用户

smbpasswd -x  smb1

3、共享配置

通过软件包管理工具安装的samba服务,配置文件一般是 /etc/samba/smb.conf 文件。可以通过编辑这个配置文件来指定需要共享的目录。

配置共享目录时的格式大致是这样的

[xxxx]              # 共享模块的名称,这里的xxxx是共享名,可以自定义
comment = xxxx      # 共享模块的描述信息
path = /path        # 共享目录的具体路径,应替换为实际路径
available = yes     # 指定该共享是否可用,yes表示可用
browseable = yes    # 是否在网络邻居中显示此共享,yes表示显示,no则隐藏
public = yes        # yes表示共享是公开的,任何人都可以访问。如果设置为 no,则需要通过身份验证才能访问。
writable = yes      # 是否允许用户写入数据到共享目录,yes表示可写
valid users = smb1  # 指定哪些用户或用户组可以访问该共享,不指定表示所有用户,如果指定用户,可以是单个用户或多个用户,用空格分隔

例如:需要共享/home/share目录,但是客户端只能读不能写,可以这样配置

[share]
comment = Shared Folder
path = /home/share
available = yes
browseable = yes
public = no
writable = no
valid users = smb1

例如:共享/home/share1目录,客户端可以修改共享目录中的数据,可以这样配置

[share]
comment = Shared Folder
path = /home/share
available = yes
browseable = yes
public = no
writable = yes
valid users = smbuser
create mask = 0664
directory mask = 0775

4、配置检验

一般通过smbclient这个工具可以检查配置是否成功

smbclient -L  server_hsot -U user%passwd

windows 搭建samba服务端

1、设置共享目录

2、设置共享用户

3、验证配置

在 网络驱动器映射 使用UNC格式的路径输入路径即可。

UNC 格式说明

UNC:(Universal Naming Convention)通用命名规则。由微软公司发明,是一种用于在网络上指定文件或文件夹位置的命名约定,允许用户通过网络共享访问文件和文件夹。

UNC格式广泛使用在windows中,Linux中也支持这种格式,例如使用Samba软件包来实现文件和打印机的共享。

UNC的格式如下:

\\主机名或者主机地址\共享资源的名称

例如:

\\192.168.16.238\monitor

说明:

UNC格式不允许指定端口号,因为端口号不是共享资源的一部分

例如,对于SMB/CIFS服务,默认端口通常是445。如果服务端的端口号变了,就需要另想他法了。

Samba 客户端工具

windows

Windows操作系统自带了对SMB/CIFS协议的支持,因此可以直接连接到Samba服务器。

需要在 控制面版 中可以启用相关功能:

勾选对SMB的支持

用户可以通过映射网络驱动器(输入\服务器地址\共享名称)来访问Samba共享。

也可以通过win+r快捷键打开“运行”(输入\服务器地址\共享名称)来访问Samba共享。

Linux

Linux操作系统中常用的命令行可以端工具是 smbclient ,通过该工具可以显示指定服务器端所分享出来的所有资源或者连接道samba服务端。

例如:列出服务器共享的模块名称

smbclient -L 10.0.0.22 -U smb3%redhat

	Sharename       Type      Comment
	---------       ----      -------
	share           Disk
	IPC$            IPC       IPC Service (Samba 4.7.6-Ubuntu)

例如:进入到samba服务器

smbclient //10.0.0.22/share -U smb3%redhat
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Mar 16 23:30:36 2023
  ..                                  D        0  Thu Mar 16 20:37:15 2023
  3.txt                               N        0  Thu Mar 16 20:46:26 2023
  5.txt                               N        0  Thu Mar 16 20:46:45 2023
  2.txt                               N        0  Thu Mar 16 20:46:39 2023
  6.txt                               N        0  Thu Mar 16 20:47:05 2023
  7.txt                               A        0  Thu Mar 16 23:30:32 2023

说明:

使用该工具登录到samba服务端的时候,使用的也是UNC格式,但是在Linux操作系统中,需要将反斜线()换为斜线(/)

使用 CIFS

上面我们说了CIFS是SMB协议的升级版,叫作通用网络文件系统。CIFS的有一个重要特性就是跨平台性,不仅在Windows环境中得到广泛应用,也被Linux、macOS等系统支持,使得不同操作系统的用户可以轻松地共享文件和资源。

Linux挂载windows共享目录

1、Linux中安装 cifs-utils 工具包可以启用系统CIFS的支持,这个工具包提供了必要的用户空间工具来挂载和操作CIFS文件系统。此时便可以通过标准的挂载命令将CIFS共享挂载为本地文件系统。

sudo apt install  cifs-utils

2、编辑/etc/fstab配置文件实现持久化挂载

//192.168.252.155/G  /data/samba  cifs  username=Orchid,password=redhat,_netdev 0 0

说明:

  • 192.168.252.155/G是Windows Server共享的路径,挂载点使用UNC格式指定,使用斜线(/)来表示路径,而不是Windows中常用的反斜线(\)

  • 挂载选项需要指定username和password

  • 在/etc/fstab文件中添加_netdev选项的主要目的是告诉系统这是一个网络文件系统。这样,系统会在网络服务可用后再尝试挂载这个文件系统,可以避免在网络尚未准备好时挂载失败的情况。

3、使用mount工具进行挂载

mount -a

4、输入df -h命令进行检查

df -h

windows挂载Linux共享模块

1、选择网络驱动器

2、输入相关凭证

3、检查是否挂载成功