金鱼哥RHCA回忆录:RH358提供基于文件的网络存储--提供SMB文件共享

举报
金鱼哥 发表于 2022/05/16 15:31:34 2022/05/16
【摘要】 第十章 提供基于文件的网络存储--提供SMB文件共享

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

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥


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并挂载使用。

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第十章 提供基于文件的网络存储–提供SMB文件共享 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。