当前位置: 首页 > article >正文

Samba服务

一、简介

Samba是一种实现SMB(Server Message Block)协议的软件,它允许 Linux 和 Unix 系统与 Windows 系统进行网络文件和打印服务的共享

主要进程:

samba服务的进程由smbdnmbd组成;

smbd进程:主要负责管理服务器上的共享目录、打印机、提供登录认证、创建对话进程和SMB资源共享等功能。端口:139445。

nmbd进程:主要负责提供NetBIOS的域名解析和浏览共享资源的服务。端口:137138。

工作原理:

1、由Samba客户端向Samba服务器端发送包含使用的协议版本等信息的数据请求包,当服务器收到数据请求包后对数据包中的内容进行确认,如果Samba服务器没有响应客户端的请求则本次会话请求连接失败。

2、当数据请求包的信息被Samba服务器确认后,服务器就向客户端发送建议使用的协议版本、端口等相关信息。

3、客户端在收到来自服务器端的信息后,开始根据服务器的要求确认自身的信息,然后向服务器发送认证信息并等待服务器的响应,如果服务器端响应客户端的请求,则本次会话请求连接成功,否则,则本次会话请求连接失败。

4、客户端与服务器端成功建立会话连接后,客户端就可以通过相应的命令访问所需的资源。

特点:
  • 跨平台文件共享:Samba 使得 Linux 和 Windows 系统能够无缝地共享文件和打印机资源。

  • SMB 协议支持:Samba 实现了 SMB 协议,这是 Windows 网络环境中用于文件和打印服务共享的协议。

  • 配置灵活性:通过编辑 smb.conf 配置文件,可以灵活地设置共享目录、用户权限、安全级别等。

  • 用户验证:Samba 支持多种安全级别,包括 share、user、server、domain,以及集成 Windows Active Directory 的能力。

  • 服务组成:Samba 服务主要由两个守护进程组成:smbd 负责文件和打印服务请求,nmbd 负责 NetBIOS 名称服务和网络浏览功能。

  • 日志记录:Samba 可以将访问和操作日志记录到指定的日志文件中,便于管理和监控。

  • 网络浏览:Samba 提供网络浏览服务,使得 Windows 客户端能够在网络上发现和访问 Samba 服务器的共享资源。

  • 打印机共享:Samba 不仅可以共享文件,还可以共享打印机,允许网络上的计算机使用共享的打印机资源。

  • 易于安装和使用:Samba 通常包含在大多数 Linux 发行版中,易于安装和配置,提供了命令行工具和图形界面(如 SWAT)来管理 Samba 服务。

  • 社区支持:作为一个开源项目,Samba 拥有活跃的社区,用户可以从社区获得帮助和支持。

二、Samba服务器部署

1、常用命令
  • smbd:SMB服务器,为客户端提供文件和打印服务
  • nmbd:NetBIOS名称服务器,可以提供浏览支持
  • smbclient:SMB客户端程序,用于从Linux或其他操作系统上访问SMB服务器上的资源
  • smbmount:挂载SMB文件系统的工具
  • smbumount:卸载SMB文件系统的工具
  • smbpasswd:添加、删除及管理SMB账户口令
2、安装samba服务器所需的软件包
[root@node1 ~]# yum -y  install samba  samba-client
3、配置文件,模板配置文件
全局设置
        workgroup = MYGROUP            // 工作目录 
        server string = Samba Server Version %v        // 服务器的版本信息
 
;       netbios name = MYSERVER        // 主机的NetBIOS设置
 
;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24        // 接口
;       hosts allow = 127. 192.168.12. 192.168.13.        // 允许访问的主机列表
 
日志设置
// 日志存放位置
log file = /var/log/samba/log.%m
// 日志文件大小设置,单位kb
max log size = 50

独立服务器选项
security = user        // samba运行模式
passdb backend = tdbsam        // 存储用户信息

security有三种运行方式:
  // user:使用samba自身的数据库验证用户
  // share:无需共享密码,任何人都可以访问samba共享资源
  // server:在此级别下,身份验证由samba主机负责,但是不推荐使用

passdb backend有三种运行方式
    // tdbsam:使用数据库文件passdb.tdp,该文件存放在/etc/samba下,该参数值为默认
    // ldapsam:使用LDAP方式进行验证
    // smbpasswd:使用smbpasswd为系统用户设置samba密码
  • # Security-Enhanced Linux (SELinux) Notes       ---selinux参数配置
  • # setsebool -P samba_enable_home_dirs on      ---共享用户家目录时,需要设置的bool值
  • # chcon -t samba_share_t /path/to/directory     ---共享自定义目录时,需要更改目录的context值当文件系统重打标签时,通过chcon进行的更改将丢失
  • # setsebool -P samba_export_all_ro on           ---以只读权限共享目录时,需要设置的bool值
  • # setsebool -P samba_export_all_rw on          ---以读写权限共享目录时,需要设置的bool值
4、共享目录测试
[homes]
        comment = Home Directories        // 描述信息    可不加
        browseable = no                    // 共享但是不可读
        writable = yes                    // 共享权限可写
;       valid users = %S                    // 定义可访问的用户,这里表示所有合法登录的用户
;       valid users = MYDOMAIN\%S
 
[printers]
        comment = All Printers        // 描述信息
        path = /var/tmp            // 定义共享目录
        browseable = no            // 是否可读,yes表示只读,no不能浏览
        guest ok = no                // 定义是否可以匿名
        writable = no                // 定义是否可写

共享设置部分有一系列的参数设置,常见的如下:

  • comment = :定义共享描述。
  • path = :定义具体的共享目录(值为共享目录的绝对路径)。
  • browseable = :定义是否可以浏览,yes为可以浏览,no为不能浏览,默认为yes。
  • read only = :定义共享权限是否只读,yes表示只读,默认值为只读。
  • writable = :定义共享权限是否可写,yes表示可写,no表示不可写,默认为no。
  • write list = :定义具体读写共享权限的用户列表,不在列表的用户默认只有只读权限,参数值可以设置为用户名和组名;设置用户名的格式为:username1,username2(中间用逗号隔开),设置组名的格式:@groupname1,@groupname2(中间用逗号隔开)。
  • guest ok = :定义是否允许匿名,yes表示允许匿名,no表示不允许匿名。
  • valid users = :定义可以访问共享的samba用户列表,格式username1,username2。不允许列表以外的samba用户访问共享,若列表为空白,则表示所有的samba用户均可访问共享
  • public = : 定义是否为公共共享,yes为公共共享  no表示非公共共享。设置目录共享时,一定要事先创建需要共享的目录,且留意共享目录的文件系统权限和共享权限的一致性。

三、实验1

将samba服务器端目录/smbshare共享,共享名为myshare,共享可以浏览,允许用户rose和用户marry访问,用户rose具有只读权限,marry具有读写权限  (rose和marry系统存在的用户)。

服务器:
1、创建目录 
[root@node1 ~]# mkdir /smbshare
[root@node1 ~]# cd /smbshare
[root@node1 ~]# mkdir test1
[root@node1 ~]# touch t1
 2、更改配置文件
[root@node1 ~]# vim /etc/samba/smb.conf
[myshare]
comment = this is a directory
path = /smbshare
browseable = yes
valid users = rose,marry
write list = marry
3、新建rose和marry用户
[root@node1 ~]# useradd -s /sbin/nologin rose
[root@node1 ~]# useradd -s /sbin/nologin marry

为什么要将用户设置为不可登录状态?

因为将系统用户添加为samba用户后,防止系统用户直接登录系统或者通过ssh登录系统。

4、设置samba用户

命令:smbpasswd

-a:添加用户

-x:删除用户

-e:启用用户

-d:禁用用户

[root@node1 ~]# smbpasswd -a rose
New SMB password:
Retype new SMB password:
Added user rose.
[root@node1 ~]# smbpasswd -a marry
New SMB password:
Retype new SMB password:
Added user marry.
[root@node1 ~]#
5、设置权限,保证samba用户的访问权限和服务设置的权限一致
[root@node1 ~]# setfacl -m u:rose:r-x /smbshare/
[root@node1 ~]# setfacl -m u:marry:rwx /smbshare/
[root@node1 ~]# getfacl /smbshare/
getfacl: Removing leading '/' from absolute path names
# file: smbshare/
# owner: root
# group: root
user::rwx
user:rose:r-x
user:marry:rwx
group::r-x
mask::rwx
other::r-x
6、启动服务
[root@node1 samba]# systemctl restart smb nmb
[root@node1 samba]# systemctl enable smb nmb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service → /usr/lib/systemd/system/nmb.service.
[root@node1 samba]#
客户端:
[root@node2 ~]# yum -y install samba-client cifs-utils
1、匿名用户访问samba服务器共享资源列表--smbclient

smbclient -L  [samba服务器的hostname或者IP]

smbclient -L 172.16.30.20         ----匿名访问,直接回车,不需要输入密码

2、samba用户浏览samba服务器共享资源列表

smbclient -L  [samba服务器的hostname或者IP]  -U 【samba用户名】

smbclient -L 172.16.30.20  -U rose

3、匿名用户访问samba服务器的共享资源

smbclient  //[samba服务器的hostname或者IP]/[共享名]   ---------匿名用户不需要密码

smbclient //172.16.30.20/myshare

4、samba用户浏览samba服务器共享资源

smbclient  //[samba服务器的hostname或者IP]/[共享名]  -U [samba用户]

smbclient //172.16.30.20/myshare  -U rose

5、使用mount命令讲samba服务器共享资源挂载到本地目录下

mkdir  /smbmount

交互式挂载---等待你输入密码

mount -t cifs -o username=rose //172.16.30.20/myshare   /smbmount  

----输入samba用户rose的samba密码

6、非交互式挂载---直接挂载上

mount -t cifs -o username=rose,password=rose,sec=ntlmssp //172.16.30.20/myshare   /smbmount

若想下次启动生效

vim  /etc/fstab

//172.16.30.20/myshare   /smbmount   cifs   username=rose,password=rose,sec=ntlmssp  0   0

7、多用户挂载,使用multiuser选项

vim /etc/fstab

//172.16.30.20/myshare /smbmount cifs   multiuser,username=rose,password=rose,sec=ntlmssp  0   0

普通用户galaxy使用cifscreds命令向samba服务器提交samba用户marry的凭证,此时普通用户galaxy临时具有samba用户marry的权限,实现其对myshare共享具有marry的读写权限

8、windows操作系统

\\172.16.30.20   回车

输入samba用户和密码

默认情况下,普通用户无法拥有samba用户的权限去访问共享目录的。

multiuser这个挂载选项的作用是:可以让普通用户拥有samba用户的权限来访问共享目录。

需要通过cifscreds 172.16.30.20 -u marry 临时获得samba用户marry的权限来访问共享目录。

四、实验2

samba服务:

在主机Server30上配置Samba服务。

您的Samba服务器必须是STAFF工作组的一个成员。

共享/common目录,共享名为common。

只有example.com域内的客户端可以访问common共享。

common共享必须是可以浏览的。

用户marry必须能够读取共享中的内容,如果需要的话,验证密码是:redhat.

1、安装samba服务
[root@Server30 ~]# yum -y install samba samba-client
2、修改配置文件
        workgroup = STAFF            # 服务器必须是STAFF工作组的一个成员
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
 
[common]
        comment = gx
        path = /common
        browseable = yes
        valid users = marry
        write list = marry
        hosts allow = 192.168.100.
 3、创建一个marry用户,不允许登录到系统中,并设置samba密码为redhat
[root@Server30 samba]# useradd -s /sbin/nologin marry
[root@Server30 samba]# smbpasswd -a marry
New SMB password:
Retype new SMB password:
Added user marry.
[root@Server30 samba]# 
4、设置权限,保证marry用户的访问权限与服务设置的一样
[root@Server30 samba]# setfacl -m u:marry:rwx /common/
[root@Server30 samba]# getfacl /common/
getfacl: Removing leading '/' from absolute path names
# file: common/
# owner: root
# group: root
user::rwx
user:marry:rwx
group::r-x
mask::rwx
other::r-x
5、启动服务
[root@Server30 samba]# systemctl restart nmb smb
[root@Server30 samba]# systemctl enable nmb smb
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service → /usr/lib/systemd/system/nmb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
 6、使用客服端访问资源,可以访问到公共资源
[root@node2 ~]# smbclient //192.168.100.10/common -U marry
Password for [SAMBA\marry]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sun Jul 21 08:48:46 2024
  ..                                  D        0  Sun Jul 21 08:48:46 2024
  test                                D        0  Sun Jul 21 08:48:46 2024
 
                52363264 blocks of size 1024. 50584968 blocks available
smb: \> 

五、实验3

多用户Samba挂载:

在主机Server30上通过Samba共享目录/storage。

共享名为share。

共享目录share必须可以浏览。

用户jim能以读的方式访问此共享,访问密码为redhat。

用户bob能以读写的方式访问此共享,访问密码是redhat。

此共享永久挂载在desktop30上的/mnt/smb目录,并使用用户jim进行认证,任何用户可临时通过bob来获得读写权限。

1、安装samba服务
[root@node1 ~]# yum -y install samba samba-client
 2、修改配置文件
[share]
        comment = gx
        path = /storage
        browseable = yes
        valid users = jim, bob
        write list = bob
3、创建用户并设置他们的权限
[root@node1 ~]# setfacl -m u:jim:r-x /storage/
[root@node1 ~]# setfacl -m u:bob:rwx /storage/
4、设置密码
[root@node1 ~]# smbpasswd -a jim
New SMB password:
Retype new SMB password:
Added user jim.
[root@node1 ~]# smbpasswd -a bob
New SMB password:
Retype new SMB password:
Added user bob.
5、挂载,创建挂载的目录,使用df -Th 查看
[root@node2 ~]# mkdir /mnt/smb

[root@node2 home]# df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
devtmpfs               devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                  tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                  tmpfs     777M  9.0M  768M   2% /run
/dev/sda3              xfs        50G  1.7G   49G   4% /
/dev/sda1              xfs       960M  187M  774M  20% /boot
tmpfs                  tmpfs     389M     0  389M   0% /run/user/0
//192.168.100.10/share cifs       50G  1.7G   49G   4% /mnt/smb
6、换到普通用户使用bob用户来读写
[hyh@node2 ~]$ smbclient //192.168.100.10/share -U bob
Password for [SAMBA\bob]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sun Jul 21 10:06:15 2024
  ..                                  D        0  Sun Jul 21 10:06:15 2024
 
                52363264 blocks of size 1024. 50593816 blocks available
smb: \> mkdir test1
smb: \> ls
  .                                   D        0  Sun Jul 21 10:06:42 2024
  ..                                  D        0  Sun Jul 21 10:06:42 2024
  test1                               D        0  Sun Jul 21 10:06:42 2024
 
                52363264 blocks of size 1024. 50593816 blocks available
smb: \> 

 完成。


http://www.kler.cn/news/314635.html

相关文章:

  • 传统到AI 大数据分析的演变,颠覆智慧水电的未来?
  • 【JavaEE初阶】多线程(4)
  • 2024/9/21黑马头条跟学笔记(十)
  • Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot
  • 从零到一:打造安全高效敦煌测评自养号体系
  • 《C++高效字符串拼接之道:解锁性能与优雅的完美结合》
  • mac系统加密文件
  • Flutter Android Package调用python
  • 基于深度学习的因果推理与决策
  • 【JVM】运行时数据区
  • Ubuntu 20.04 内核升级后网络丢失问题的解决过程
  • 《DevOps实践指南》笔记-Part 3
  • Swift里的数值变量的最大值和最小值
  • 分布式光伏发电站数据采集设备管理硬件解决方案
  • 机器学习——Stacking
  • C++速通LeetCode中等第21题-排序链表(空间O(1))
  • 828华为云征文 | 华为云X实例的镜像管理详解
  • Unexpected end of file from server 错误
  • 系统架构设计师教程 第5章 5.4 软件测试 笔记
  • 论文阅读笔记:Sapiens: Foundation for Human Vision Models
  • MoCo和SimCLR【CV双雄】
  • mxnet算子调用kernel示例(MINIST)
  • Java面试篇-AOP专题(什么是AOP、AOP的几个核心概念、AOP的常用场景、使用AOP记录操作日志、Spring中的事务是如何实现的)
  • SYN Flood攻击原理,SYN Cookie算法
  • 【数据结构C语言】【入门】【首次万字详细解析】入门阶段数据结构可能用到的C语言知识,一章让你看懂数据结构!!!!!!!
  • 我的AI工具箱Tauri版-FasterWhisper音频转文本
  • 什么是 HTTP/3?下一代 Web 协议
  • 直播音频解决方案
  • PyTorch 实现手写数字识别
  • 2024华为杯数模CDEF成品文章!【配套完整解题代码+数据处理】