Samba:使⽤ Samba 为远程客户端提供共享⽂件系统
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
写在前面
- 分享一些 SMB 的搭建笔记
- 考试顺便整理
- 理解不足小伙伴帮忙指正
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
SMB 简单介绍
SMB协议
最初由Microsoft开发
,后来成为 Windows 网络中最常用的文件共享协议。SMB协议也可以用于与Unix或Linux系统进行文件共享,通过Samba软件包,Unix和Linux系统可以作为SMB服务器提供文件共享服务,允许Windows系统访问共享文件和打印机。
NFS
能让 Unix 和 Linux 机器沟通或者让 Windows 机器沟通,SMB 可以实现 Windows 机器与 Unix 或 Linux 机器沟通。
在实际的使用中, SMB协议
更多的是 Windows操作系统
中使用文件共享协议
,它允许 Windows系统
之间共享文件和打印机。
Samba
Samba
是在 Linux 系统上实现 SMB
协议的一个免费软件,在局域网上共享文件和打印机
的一种`通信协议,由服务器及客户端程序构成。
可以实现以下功能:
文件共享
:Samba 可以将 Linux/UNIX 系统上的文件和目录共享给 Windows、macOS 和其他支持 SMB/CIFS 协议的客户端。这意味着您可以使用 Samba 在不同操作系统之间共享文件和目录。打印机共享
:Samba 允许您将打印机连接到 Linux/UNIX 系统,并通过 SMB/CIFS 协议将其共享给 Windows、macOS 和其他客户端。这样,您可以在网络上共享打印机,并允许多个用户使用同一台打印机。认证和授权
:Samba 提供了身份验证和访问控制机制,允许您配置用户认证、访问权限和共享级别。您可以创建用户账号,设置密码策略,并为共享目录指定不同的访问权限。域控制器
:Samba 可以充当一个域控制器,提供类似于 Windows 域的功能。您可以使用 Samba 创建和管理用户账号、组、策略,并实现集中管理和身份验证。家庭文件服务器
:您可以使用 Samba 在家庭网络中搭建一个文件服务器,允许家庭成员共享文件和目录,并进行访问控制。安全性和加密
:Samba 支持加密通信,并提供了数据的保护和安全传输。您可以配置 Samba 使用 SSL/TLS 加密协议来保护数据的传输和存储。跨平台兼容性
:Samba 提供了与 Windows 网络的良好兼容性,使 Linux/UNIX 系统能够与 Windows 网络无缝集成。
samba 访问流程简单说明
- Samba 服务器启动并监听指定的端口(默认为 445 端口)。
- 客户端发起连接请求,连接到 Samba 服务器。
- Samba 服务器接收到连接请求,建立与客户端的连接。
- 客户端发送 SMB/CIFS 请求到 Samba 服务器,请求访问共享资源或执行特定操作。
- Samba 服务器解析请求,根据请求的类型和参数执行相应的操作。
- 如果请求涉及访问共享资源,Samba 服务器将检查客户端的身份验证信息,并根据配置文件中的访问控制规则确定是否授予访问权限。
- Samba 服务器执行请求的操作,如读取、写入、创建、删除文件等。
- Samba 服务器生成响应,将响应发送回客户端。
- 客户端接收到响应,根据响应的内容进行相应的处理和显示。
主机既可以充当客户端
,也可以充当服务器
来访问和提供 SMB
文件共享:
- 作为
客户端
,挂载SMB
文件共享需要安装cifs-utils
软件包以及 samba-client。 - 作为
服务器
,使用SMB
协议共享目录需要安装samba
软件包。
Linux 环境配置SMB共享
基本步骤如下:
- 安装
samba
软件包。 - 准备
Samba
用户 - 准备共享的目录。
- 配置
/etc/samba/smb.conf
配置文件 - 启动
Samba
并打开本地防火墙 - 从客户端系统挂载
SMB
共享以验证您的配置。
安装部署
将 serverd
配置为独⽴的 SMB
⽂件服务器,它将共享 /smbshare
⽬录。可以使⽤ multiuser
挂载选项,将 servera
配置为将此 SMB
共享挂载到 /designs
⽬录下。
安装 samba 软件包。
1 | [root@serverd ~]# yum install samba -y |
创建 marketing
组和 /smbshare
⽬录。配置 /smbshare
⽬录,其他配置:
- 该⽬录属于该
marketing
组 - 该⽬录设置了
SGID
位 - 每个⼈都具有⽬录的读取访问权限,但只有
marketing
组可以写⼊ - ⽬录具有
samba_share_t SELinux
上下⽂类型
1 | #创建 marketing 组。 |
编辑 /etc/samba/smb.conf
配置⽂件,按照下面的要求配置
- 将⼯作组设置为 MYCOMPANY
- 将
Samba
配置为需要加密流量
。 - 强制 Samba 仅⽀持
SMB 版本 3 和更⾼版本
。 - 创建名为 data 的共享。
- 共享
/smbshare
⽬录。 - 保护共享,以便每个⼈都可以访问它,但只有 marketing 组的成员具有写⼊访问权限。
编辑 /etc/samba/smb.conf
⽂件,并将 workgroup
指令设置为 MYCOMPANY。
1 | ...output omitted... |
在 [global] 部分下,强制加密
,并将最⼩协议版本
设置为 SMB3
。
1 | ...output omitted... |
在⽂件的末尾,添加以下块
来定义新的共享。
1 | ...output omitted... |
完成后,保存并关闭该⽂件。
运⾏ testparm
命令,以验证 /etc/samba/smb.conf
配置⽂件
1 | [root@serverd ~]# testparm |
创建仅限 Samba 的 developer1
用户帐户,然后将它添加到 marketing
组。该用户帐户对共享具有写访问权限,因为它是 marketing 组的成员。
1 | [root@serverd ~]# useradd -s /sbin/nologin -G marketing developer1 |
创建仅限 Samba 的 operator1 用户帐户。不要将它添加到 marketing
组,以便它对该共享具有只读访问权限。将这两个帐户的 SMB 密码设为 redhat。
将 developer1 用户帐户添加到 Samba
1 | [root@serverd ~]# smbpasswd -a developer1 |
完整的操作
1 | [root@serverd ~]# groupadd marketing |
添加 smb
用户,这里使用系统用户,先创建系统用户,然后添加对应的 smb 用户
1 | [root@serverd ~]# useradd -s /sbin/nologin -G marketing developer1 |
配置 smb
开机自启动
1 | [root@serverd ~]# systemctl enable --now smb |
查看服务状态
1 | [root@serverd ~]# systemctl status smb |
防火墙放行
1 | [root@serverd ~]# firewall-cmd --permanent --add-service=samba |
将 SMB data 共享永久挂载到 servera
上的 /designs
挂载点下。为此,使⽤ sambamount
用户的凭据创建 /etc/samba/creds.txt
⽂件。使⽤ /etc/fstab
中的 credentials、multiuser
和 seal
挂载选项激活多用户模式并加密通信。
安装 cifs-utils
软件包,它提供 mount.cifs
命令
1 | [root@servera ~]# yum install cifs-utils |
创建 /etc/samba/creds.txt
⽂件,以提供⽤于挂载该共享的帐户和密码。使⽤ sambamount
帐户,密码为 redhat。
1 | username=sambamount |
保护⽂件,以便只有 root
用户可以访问它
1 | [root@servera ~]# chmod 600 /etc/samba/creds.txt |
创建 /designs
挂载点
1 | [root@servera ~]# mkdir /designs |
编辑 /etc/fstab
⽂件,再为 SMB 共享添加⼀个条⽬。在单⾏中定义以下新挂载,⽆换⾏符。
1 | //serverd.lab.example.com/data /designs cifs credentials=/etc/samba/creds.txt,multiuser,seal 0 0 |
credentials=/etc/samba/cred.txt
: 指定用户账户和密码的文件路径。Samba 服务将从这个文件中获取用户登录验证信息。
multiuser
: 表示允许多个用户同时登录这个共享。如果不指定这个参数,默认只允许一个用户连接。
seal
: 表示Samba将用户账户信息存储在cred.txt文件中进行简单的文本明文形式存储,而不是使用更安全的加密方式。
挂载⽂件系统,然后验证挂载是否成功。
1 | [root@servera ~]# mount /designs |
测试对共享的访问权限。为此,请以 developer1 用户⾝份登录,提供该用户的 SMB 凭据,然后确认您可以写⼊该共享。
执⾏与 operator1 用户相同的测试。该用户帐户仅具有读取访问权限,因为它不属于该 marketing 组以 developer1 用户⾝份登录。lab 脚本已为您创建了该用户帐户。
1 | [root@servera ~]# su - developer1 |
完整Demo
服务端配置 samba
共享
在 servera
上准备 samba
共享:
- 创建共享文件夹
/common
- 用户
rob
验证的密码是compede
- 用户
brian
验证的密码是postroll
部署步骤:
- 安装对应的数据包
- 添加对应的 smb 用户
- 共享目录授权
- SElinux 配置
1 | yum -y install samba samba-client |
保证本地用户安全,给对应的 配置无法登录的 bash
1 | # id brian; id rob |
添加 smb
用户
1 | [root@servera ~]# pdbedit -L |
创建共享文件夹,这里需要配置对应的权限,上面要, 添加 brian
组,同时给 GID 权限
1 | mkdir /common |
查上下文关系类型,配置 SELinux
1 | # vim /etc/samba/smb.conf.example |
1 | # ls -ldZ /common/ |
使用多用户访问 samba 共享目录
在 servera 上配置 SMB 服务:
- 您的
SMB
服务器必须是STAFF
工作组的一个成员 - 共享
/common
目录共享名必须为common
- 只有
example.com
域内的客户端可以访问common
共享 common
必须是可以浏览的- 用户
rob
必须能够读取共享中的内容 - 要求
rob
用户以只读的方式访问该目录,brian
可以用读写的方式来访问该目录
在 serverb
上,要求通过 smb
多用户的方式将共享目录 common
挂载到 /mnt/private
上
- 要求在对该共享目录挂载时,以
rob
的身份进行操作 - 要求每次开机该共享目录可以自动挂载
1 | # vim /etc/samba/smb.conf |
1 | ... |
1 | # systemctl enable --now smb nmb |
1 | # smbclient -L //servera -N |
客户端配置
1 | # yum search cifs |
1 | # smbclient -L //servera -N |
1 | username=rob |
1 | # chmod 600 /etc/samba/cred.txt |
1 | ... |
1 | # mount –a |
1 | # df -ht cifs |
博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知:)
红帽服务管理与自动化(RH358)
授课笔记
© 2018-至今 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)
Samba:使⽤ Samba 为远程客户端提供共享⽂件系统
https://liruilongs.github.io/2023/08/05/rhca/RH385/SMB:使⽤-SMB-为远程客⼾端提供共享⽂件系统/