RH358提供基于文件的网络存储--提供SMB文件共享

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云防火墙,500元 1000GB
简介: RH358提供基于文件的网络存储--提供SMB文件共享

RH358提供基于文件的网络存储–提供SMB文件共享

本章节介绍如何提供Samba共享,但在我眼中,Samba已经成为鸡肋服务,因为勒索病毒的出现,很多政企都会在网络层面封禁135、137、138、139和445端口,而Samba协议就是使用这几个高风险端口,因此,是否用Samba真的好好考虑了。在我看来,还是别用。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

1. 描述 SMB

服务器消息块Server Message Block (SMB)是Microsoft Windows服务器和客户端的标准文件共享协议。可以通过几种方式配置SMB文件服务器。

  • 最简单的方法之一是配置一个独立的服务器,其中服务器及其客户机是一个通用Windows工作组的成员。服务器本地管理用户帐号和密码。

  • 更复杂的配置可能使用Microsoft Active Directory (AD)来通过域控制器协调用户身份验证。

  • Red Hat Enterprise Linux既可以作为客户端,也可以作为服务器来访问和提供SMB文件共享。客户端挂载SMB文件共享需要安装cifs-utils包。在服务器上,samba包允许使用SMB协议共享目录。

2. 使用SMB共享目录

Samba可以以SMB网络文件共享的方式共享Linux目录。本课程涵盖了作为独立服务器的Samba的配置。在该配置中,服务器管理其Samba数据库中的用户帐户,并向本地Windows工作组的成员提供文件共享。

SMB共享目录的基本步骤如下:

  • 安装samba软件包。

  • 准备共享目录。

  • 配置/etc/samba/smb.conf配置文件。

  • 在Samba数据库中设置适当的Linux用户并对其进行配置。

  • 启动Samba并打开本地防火墙。

  • 从客户端系统挂载SMB共享以验证您的配置。

3. 安装Samba和准备共享目录

在samba服务器上安装samba包。

[root@host ~]# yum install samba

如果要共享的目录不存在,则创建该目录。

[root@host ~]# mkdir /srv/smbshare

设置Linux访问权限

Samba将其用户帐户映射到Linux用户。在这个基本配置中,使用Linux文件权限控制对目录的访问。例如,为developers组的成员提供写访问权限,并为其他人提供读访问权限,可以使用以下命令:

[root@host ~]# chgrp developers /srv/smbshare
[root@host ~]# chmod 2775 /srv/smbshare
[root@host ~]# ll /srv/smbshare
drwxrwsr-x. 2 root developers 6 May 26 08:56 /srv/smbshare
# SGID位确保新内容自动属于开发人员组。

设置SELinux上下文类型

要使Samba正确地与SELinux一起工作,请将目录上下文类型设置为samba_share_t。

[root@host ~]# semanage fcontext -a -t samba_share_t '/srv/smbshare(/.*)?'

[root@host ~]# restorecon -Rv /srv/smbshare

Samba还可以提供标记为SELinux public_content_t(只读)和public_content_rw_t(读/写)类型的文件。使用public_content_rw_t类型,启用SELinux smbd_anon_write布尔值以允许读写访问。当你想要Apache HTTP Server或NGINX能够提供或写入共享目录内容时,这两种SELinux类型很有用。

**警告:**不要使用Samba共享同时也是NFS导出、挂载的NFS文件系统或FTP共享的目录。这样做可能会导致文件损坏或其他文件访问问题。

4. 配置Samba

Samba的配置文件为/etc/samba/smb.conf。该文件被划分为多个部分。每个节以方括号中的节名开始,后面是一组参数。

/etc/samba/smb.conf配置文件以[global]部分开始。该部分提供了常规服务器配置和默认值,可以在后续部分中覆盖它们。下一节定义文件或打印机共享。注释一行,可以使用分号 (😉 或散列 (#) 字符。

配置全局部分

**[global]**部分定义了Samba服务器的基本配置。下面是最常用的参数。

workgroup

workgroup表示服务器的Windows工作组。当客户机系统查询服务器时,该名称将显示在客户机系统上。默认值为WORKGROUP。

security

安全参数控制Samba对客户机进行身份验证的方式。使用security = user,客户机使用本地Samba服务器在其数据库中管理的用户名和密码登录。该值为默认值。

server min protocol

server min protocol参数表示服务器支持的最小SMB版本。默认情况下,服务器支持协议的所有版本,并与客户端协商该版本。由于第一个版本SMB1(或CIFS)存在安全问题,Red Hat建议通过将server min protocol设置为SMB2来排除该版本。但是,通过这种配置,Microsoft Windows XP或更早版本将无法访问服务端,因为它们只支持SMB1。SMB协议当前版本为版本3

**注意:**Red Hat Enterprise Linux 8.2及以上版本。Samba默认禁用SMB1支持。

smb encrypt

smb encrypt激活流量加密。默认情况下,服务器和客户端协商加密。如果需要强制加密,smb加密参数设置为必选,server min protocol设置为SMB3。只有SMB3提供对加密的原生支持。Microsoft Windows 8, Microsoft Windows Server 2012。操作系统及以上版本均支持加密SMB3。

配置共享部分

在[global]节之后,在自定义节中定义您的共享。括号中的节名定义了共享的名称,就像从客户端看到的那样。这些部分中最有用的指示如下。

path

path指令提供要在服务器上共享的目录的全名。

writeable

writeable指令指示认证用户是否对共享有读写访问权限(当设置为yes时),或没有读写访问权限(当设置为no时)。默认设置为no。

write list

当writeable指令的值为no(默认值)时,可以使用write list指令提供一个以逗号分隔的对共享具有读写访问权限的用户列表。不在列表中的用户只有读访问权限。

在列表中,可以通过@字符作为组名的前缀来指定本地Linux组。以下示例授予operator1用户和developers组成员读/写访问权限。

write list = operator1, @developers

valid users

缺省情况下,所有通过认证的用户都可以访问共享。如果您想要限制该访问,请使用valid users指令。该指令接受以逗号分隔的应该具有访问权限的用户列表。

下面的示例声明SMB devcode共享,并授予对 /srv/smbshare目录的访问权限。所有经过认证的用户都有对共享的读访问权限,但只有developers组的成员有读/写访问权限。

[devcode]
path = /srv/smbshare
write list = @developers

下面的示例通过只允许developer组和operator1用户访问来进一步限制对共享的访问。operator1不在写列表中,只有读权限。

[devcode]
path = /srv/smbshare
valid users = operator1, @developers
write list = @developers

验证配置文件

/etc/samba/smb.conf文件是否存在错误,请使用不带参数的testparm命令。

[root@host ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
Enter
...output omitted...

5. 准备 Samba 用户

每个Samba帐户必须有一个具有相同用户名的关联Linux帐户。要创建仅samba用户帐户,请锁定其Linux密码,并将其登录shell设置为/sbin/nologin该配置阻止用户使用SSH或从控制台登录到Linux系统。

以为operator1用户创建一个锁定的Linux用户为例。

[root@host ~]# useradd -s /sbin/nologin operator1

创建Linux帐户之后,使用Samba公共工具包中的smbpasswd命令将它们添加到Samba数据库中。

要将用户添加到Samba数据库,请使用smbpasswd命令,并使用-a选项和用户名作为参数。命令提示输入密码。

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

要从Samba数据库中删除用户,请使用-x选项。

[root@host ~]# smbpasswd -x operator1
Deleted user operator1.

除了smbpasswd命令外,还提供了更强大的pdbedit命令。例如,使用pdbedit -L命令列出Samba数据库中的用户。有关更多信息,请参见pdbedit(8)手册页。

Samba在/var/lib/samba/private/目录下维护它的数据库。不要直接修改该目录中的文件。

6. 启动Samba

使用systemct l命令启用并启动smb服务。

[root@host ~]# systemctl enable --now smb

要允许Samba服务器通信,请打开Samba防火墙服务,该服务控制对端口139/TCP和端口445/TCP的访问。

[root@host ~]# firewall-cmd --permanent --add-service=samba

[root@host ~]# firewall-cmd --reload

**重要:**Samba定期检查/etc/samba/smb.conf是否被更改。如果配置文件已经更改,那么Samba将自动重新加载它。这不会影响任何已经建立到Samba服务的连接,直到连接关闭或Samba完全重新启动。

执行systemctl reload smb命令立即重新加载配置文件,或执行systemctl restart smb命令完全重启Samba。

7. 挂载SMB文件系统

Microsoft Windows和Linux系统都可以从Samba服务器访问SMB共享。在Linux系统下,需要安装cifs-utils包,以便在本地系统上挂载SMB共享。

在Linux上,使用//servername/sharename符号访问共享。标准的微软Windows统一命名约定Uniform Naming Convention (UNC)是用\servername\sharename来表示网络资源。但是,因为 \ 在shell中是转义字符。Linux实用程序通常使用 / 字符代替。

要挂载SMB共享,必须提供用户凭据,以便使用Samba服务器进行身份验证。这些凭据决定了对共享上的文件的访问权限。

对于手动挂载,可以使用username挂载选项。该命令提示用户输入密码。

[root@client ~]# mount -o username=operator1 //host.example.com/devcode /mnt
Password for operator1@//host.example.com/devcode: redhat

为了自动挂载共享,例如从/etc/fstab使用凭证选项。下面的示例显示了/etc/fstab中的条目,该条目使用凭据文件挂载devcode共享。

//host.example.com/devcode /data cifs credentials=/etc/samba/credentials 0 0

凭据文件提供用于身份验证的用户名和密码。

[root@client ~]# cat /etc/samba/credentials
username=operator1
password=redhat

因为凭据文件包含一个密码,所以将文件存储在一个安全的目录中,并限制其访问:

[root@client ~]# chown root /etc/samba/credentials
[root@client ~]# chmod 600 /etc/samba/credentials

请求加密

如果需要强制SMB流量加密,请在mount命令中使用seal选项。下面的示例显示了/etc/fstab中的条目,该条目挂载devcode共享并强制流量加密。

//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,seal 0 0

执行多用户SMB挂载

当使用凭据或用户名选项挂载SMB共享时,这些凭据将被本地系统上的所有用户使用。任何用户都可以使用这些特定的凭据访问共享。

理想情况下,希望每个用户都使用自己的SMB凭据来确定对挂载的共享上的文件的访问。可以通过多用户挂载选项进行设置。

当使用multiuser时,可以让根用户使用对共享具有最小访问权限的凭据挂载SMB共享。用户登录时,使用cifscreds命令将其SMB密码临时添加到安全内核密匙环中。然后,客户机的Linux内核将使用它们的SMB凭据来确定对共享的访问,而不是根用户用于挂载共享的凭据。

下面的步骤描述了多用户选项的系统配置。

  • 创建用于挂载SMB共享的凭据文件。在凭据文件中使用的用户必须具有对SMB共享的最小访问权限,并具有对共享目录的读访问权限,但是不需要更多的访问权限。

  • 在mount命令中添加multiuser选项。下面的/etc/fstab条目使用credentials和multiuser选项。该条目在单行中,没有换行。

//host.example.com/devcode /data cifs credentials=/etc/samba/creds,multiuser 0 0

  • 使用mount命令挂载SMB共享。

在访问挂载点之前,用户应该运行cifscreds命令提供他们的凭据。

[developer1@client ~]$ cifscreds add host.example.com
Password: redhat

cifscreds命令使用子命令作为其第一个参数,Samba服务器名作为第二个参数。add子命令将SMB凭据加载到内核密钥环。clear子命令为用户从特定主机的内核密钥环中删除凭据。update子命令用新用户和密码替换内核密钥环中的凭据。

注意:默认情况下,cifscreds假设SMB凭据使用的用户名与当前Linux用户名匹配。可以在addclear后使用-u username选项为SMB凭据指定不同的用户名子通信

参考文档:samba(7)、smb.conf(5)、testparm(1)、smbpasswd(8)、pdbedit(8)、mount.cifs(8) 和 cifscreds(1) man page

8. 课本练习

[student@workstation ~]$ lab filestorage-smb start

这个命令确保servera和serverd在网络上可用,并在servera上创建developer1和operator1用户帐户。

在本练习中,您将serverd配置为一个独立的SMB文件服务器,它共享/smbshare目录。将servera配置为使用SMB共享multiuser挂载选项挂载到/designs目录下。

1. 安装samba软件包

[root@serverd ~]# yum -y install samba

2. 创建marketing组和/smbshare目录并进行配置。

配置/smbshare目录如下:

  • 该目录属于营销组。

  • 目录中设置了SGID位。

  • 每个人对目录都有读权限,但只有marketing组可以写。

[root@serverd ~]# groupadd marketing
[root@serverd ~]# mkdir /smbshare
[root@serverd ~]# chgrp marketing /smbshare
[root@serverd ~]# chmod 2775 /smbshare
[root@serverd ~]# semanage fcontext -a -t samba_share_t '/smbshare(/.*)?'
[root@serverd ~]# restorecon -Rv /smbshare
Relabeled /smbshare from unconfined_u:object_r:default_t:s0 tounconfined_u:object_r:samba_share_t:s0
[root@serverd ~]# ls -ldZ /smbshare
drwxrwsr-x. 2 root marketing unconfined_u:object_r:samba_share_t:s0 6 Jul  2 09:40 /smbshare

3. 编辑/etc/samba/smb.conf配置文件。

  • 将工作组设置为MYCOMPANY。

  • 将Samba配置为需要加密流量。

  • 强制Samba只支持SMB版本3及更高版本。

  • 创建名为data的共享。

  • 共享/smbshare目录。

  • 保护共享,以便每个人都可以访问它,但只有marketing组的成员有写访问权限。

[root@serverd ~]# vim /etc/samba/smb.conf
[global]
        workgroup = MYCOMPANY
        smb encrypt = required
        server min protocol = SMB3
…………
[data]
        path = /smbshare
        write list = @marketing
[root@serverd ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
Enter
...output omitted...
# 如果该命令报告任何警告或错误,则在继续之前纠正它们

4. 按要求创建用户和组并设置好权限。

创建仅支持samba的developer1用户帐户,然后将其添加到marketing组。该用户帐户具有对该共享的写访问权限,因为它是marketing组的成员。

创建仅支持samba的operator1用户帐户。不要将其添加到marketing组,它对该共享具有只读访问权限。

[root@serverd ~]# useradd -s /sbin/nologin -G marketing developer1
[root@serverd ~]# smbpasswd -a developer1
New SMB password: redhat
Retype new SMB password: redhat
Added user developer1.

[root@serverd ~]# useradd -s /sbin/nologin operator1
[root@serverd ~]# smbpasswd -a operator1
New SMB password: redhat
Retype new SMB password: redhat
Added user operator1.

5. 创建额外的sambamount用户帐户,该帐户对共享具有最小的访问权限。

只在客户机系统上使用该系统帐户来使用多用户选项挂载共享

创建sambamount用户帐户。设置登录shell为/sbin/nologin,防止Linux用户登录。使用–system选项(或-r)将其声明为系统帐户,并且不创建主目录。

[root@serverd ~]# useradd -r -s /sbin/nologin sambamount
[root@serverd ~]# smbpasswd -a sambamount
New SMB password: redhat
Retype new SMB password: redhat
Added user sambamount.

6. 启用并启动smb服务,然后打开防火墙端口。

[root@serverd ~]# systemctl enable --now smb
[root@serverd ~]# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-07-02 10:12:52 CST; 4s ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
 Main PID: 2765 (smbd)
   Status: "smbd: ready to serve connections..."
    Tasks: 4 (limit: 11248)
   Memory: 8.3M
   CGroup: /system.slice/smb.service
           ├─2765 /usr/sbin/smbd --foreground --no-process-group
           ├─2767 /usr/sbin/smbd --foreground --no-process-group
           ├─2768 /usr/sbin/smbd --foreground --no-process-group
           └─2769 /usr/sbin/smbd --foreground --no-process-group
[root@serverd ~]# firewall-cmd --permanent --add-service=samba
success
[root@serverd ~]# firewall-cmd --reload
success

7. 持久地将SMB data共享挂载在servera上的/designs挂载点下。

# 为此,创建/etc/samba/creds.txt文件,包含sambamount用户的凭据。使用/etc/fstab中的credentials, multiuser, seal挂载选项来激活多用户模式并加密通信。
[root@servera ~]# yum -y install cifs-utils
[root@servera ~]# vim /etc/samba/creds.txt
username=sambamount
password=redhat
[root@servera ~]# chmod 600 /etc/samba/creds.txt
[root@servera ~]# mkdir /designs
[root@servera ~]# echo "//serverd.lab.example.com/data /designs cifs credentials=/etc/samba/creds.txt,multiuser,seal 0 0" >> /etc/fstab
 [root@servera ~]# mount /designs
[root@servera ~]# df /designs
Filesystem 1K-blocks Used Available Use% Mounted on
//serverd.lab.example.com/data 10474476 2289868 8184608 22% /designs

8. 测试。

[root@servera ~]# su - developer1
[developer1@servera ~]$ cifscreds add serverd.lab.example.com
Password: redhat
[developer1@servera ~]$ echo Hello World > /designs/test.txt
[developer1@servera ~]$ ls /designs
test.txt
[developer1@servera ~]$ cat /designs/test.txt
Hello World
[developer1@servera ~]$ exit
logout

[root@servera ~]# su - operator1
[operator1@servera ~]$ cifscreds add serverd.lab.example.com
Password: redhat
[operator1@servera ~]$ ls /designs
test.txt
[operator1@servera ~]$ cat /designs/test.txt
Hello World
[operator1@servera ~]$ echo Hello World > /designs/operator1.txt
-bash: /designs/operator1.txt: Permission denied

完成实验

[student@workstation ~]$ lab filestorage-smb finish

总结

  • 介绍SMB。
  • 如何部署和配置Samba。
  • 导出Samba并挂载使用。
  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

目录
相关文章
|
2月前
|
5G 调度 UED
5G中的动态频谱共享(DSS):高效利用频谱资源,加速5G网络演进
5G中的动态频谱共享(DSS):高效利用频谱资源,加速5G网络演进
588 4
|
3月前
|
消息中间件 存储 Serverless
函数计算产品使用问题之怎么访问网络附加存储(NAS)存储模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
13天前
|
存储 网络协议 安全
软件管理,磁盘存储,文件系统以及网络协议
【11月更文挑战第9天】本文介绍了软件管理、磁盘存储和网络协议等内容。软件管理包括软件生命周期管理和软件包管理,涉及需求分析、设计、实现、测试、发布、维护等阶段,以及软件包的安装、升级和依赖关系处理。磁盘存储部分讲解了磁盘的物理结构、分区与格式化、存储管理技术(如 RAID 和存储虚拟化)。网络协议部分涵盖了分层模型、重要协议(如 HTTP、TCP、IP)及其应用与安全。
|
2月前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
1月前
|
存储 网络协议 数据挖掘
|
2月前
|
算法 自动驾驶 物联网
解读蜂窝网络中的频谱共享技术
解读蜂窝网络中的频谱共享技术
80 5
|
3月前
|
存储 网络协议 搜索推荐
在Linux中,如何配置和管理虚拟机的网络和存储?
在Linux中,如何配置和管理虚拟机的网络和存储?
|
3月前
|
存储 机器学习/深度学习 分布式计算
HDFS与网络附加存储(NAS)的比较
【8月更文挑战第31天】
102 0
|
3月前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
3天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
下一篇
无影云桌面