Samba服务

news/2024/9/19 4:47:28/ 标签: 运维

samba 服务

一、简介

Samba 是一种在 Linux 和 Unix 系统上实现 SMB(Server Message Block)协议的服务,其目的是提供文件和打印服务。它可以让 Windows、Linux 和 Unix 之间实现文件和打印机的共享,并且支持通过 SMB/CIFS 协议进行身份验证和密钥,以保护共享资源的安全。

二、部署

2.1 安装

  • 这里以 centos7.9 为例
[root@test-server ~]# yum install -y samba
[root@test-server ~]# rpm -q samba
samba-4.10.16-25.el7_9.x86_64

2.2 配置

  • samba的配置文件默认是在 /etc/samba/smb.conf
[global]# 网络信息培训workgroup = WORKGROUP  # 工作名称server string = Samba Server Version %v  # 描述信息netbios name = Samba  # 网络中显示的名称# 用户相关配置security = user # 安全模式,user | share | domainpassdb backend = tdbsam  # 存放用户账户密码信息的后端数据库username map = /etc/samba/smbusers  # Samba用户指定相应的系统用户或组map to guest = "定义未经过身份验证应该映射到的用户"guest account = "访客用户使用的用户"config file = /etc/samba/smb.conf.%U  # 指定用户配置文件# 日志相关配置log file = /var/log/samba/log.%m  # 日志路径max log size = 50  # 日志文件的最大大小# 网络相关配置dns proxy = "是否作为DNS代理"hosts allow = "允许访问的ip段或ip,用空格间隔,格式: ip/mask"hosts deny = "拒绝访问的ip段或ip,用空格间隔,格式: ip/mask"# 打印机相关配置printing = cups  # 使用CUPS作为打印系统printcap name = cups  # 指定打印机配置文件的名称load printers = yes  # 定义所有打印机都可用cups options = raw[xxx]comment = xxx  # 简介path = /project/samba/public  # 共享目录public = no  # 是否公共共享writable = yes  # 是否可写read only = yes  # 只读write list = xxx  # 可写的用户和组,配合read only使用admin users = xxx,@xxx  # 管理员用户和组valid users = xxx,@xxx  #  有效用户和组create mask = 0644  # 文件创建掩码directory mask = 0755  # 目录创建掩码
  • /etc/samba/smbusers:用户配置文件
user1
user2
user3
group1
group2
group3

2.3 管理命令

  • pdbedit
# 查看单个用户信息
pdbedit -u p1# 查看所有用户,
pdbedit -L# 查看所有用户详细信息
pdbedit -L -v# 查看帮助
pdbedit --help
  • smbpasswd
# 创建用户
smbpasswd -a username# 删除用户
smbpasswd -a username# 启动用户
smbpasswd -e username# 关闭用户
smbpasswd -d username# 查看帮助
smbpasswd -h

2.4 启动

[root@test-server ~]# systemctl enable --now smb

三、示例

在这里插入图片描述

3.1 准备环境

# 安装
[root@test-server ~]# yum install -y samba# 创建用户
[root@test-server ~]# groupadd Pod
[root@test-server ~]# groupadd HR
[root@test-server ~]# groupadd Qc
[root@test-server ~]# useradd p1 -g Pod -s /sbin/nologin -M
[root@test-server ~]# useradd p2 -g Pod -s /sbin/nologin -M
[root@test-server ~]# useradd h1 -g HR -s /sbin/nologin -M
[root@test-server ~]# useradd h2 -g HR -s /sbin/nologin -M
[root@test-server ~]# useradd q1 -g Qc -s /sbin/nologin -M
[root@test-server ~]# useradd q2 -g Qc -s /sbin/nologin -M# 创建目录
[root@test-server ~]# mkdir -p /share/{Pod,HR,Qc,Public}# 设置权限
[root@test-server ~]# chown -R :Pod /share/Pod
[root@test-server ~]# chown -R :Qc /share/Qc
[root@test-server ~]# chown -R :HR /share/HR# 这里加了t,只允许用户删除自己的文件
[root@test-server ~]# chmod -R 1771 /share/Pod
[root@test-server ~]# chmod -R 1771 /share/HR
[root@test-server ~]# chmod -R 1771 /share/Qc
[root@test-server ~]# chmod -R 1777 /share/Public

3.2 配置 samba

  • 编辑 /etc/samba/smb.conf
[root@test-server ~]# vim /etc/samba/smb.conf
[global]workgroup = SAMBAserver string = Samba Server Version %vnetbios name = Sambasecurity = userpassdb backend = tdbsamusername map = /etc/samba/smbusers# config file = /etc/samba/smb.conf.%Ulog file = /var/log/samba/log.%mmax log size = 50printing = cupsprintcap name = cupsload printers = yescups options = raw# 中间的home printers print$不用修改[Pod]comment = Pod Directorypath = /share/Podpublic = nowritable = yesvalid users = @Podcreate mask = 0640directory mask = 0750[HR]comment = HR Directorypath = /share/HRpublic = nowritable = yesvalid users = @HRcreate mask = 0640directory mask = 0750[Qc]comment = Qc Directorypath = /share/Qcpublic = nowritable = yesvalid users = @Qccreate mask = 0640directory mask = 0750[Public]comment = Public Directorypath = /share/Publicpublic = nowritable = yesvalid users = @Pod,@HR,@Qccreate mask = 0644directory mask = 0755
  • 添加 /etc/samba/smbusers
# 添加用户和组
[root@test-server ~]# vim /etc/samba/smbusers
p1
p2
Pod
h1
h2
HR
q1
q2
Qc
  • 设置用户密码
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a p1
Added user p1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a p2
Added user p2.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a h1
Added user h1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a h2
Added user h2.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a q1
Added user q1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a q2
Added user q2.

3.3 启动 samba

# 加载配置
[root@test-server ~]# systemctl reload smb

3.4 测试 samba

[root@test-server ~]# yum install -y samba-client
# 使用p1登录,在Pod创建一个p1目录,在Public创建一个p1目录
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p1%123456
smb: \> mkdir p1
smb: \> ls
.     D        0  Wed Sep  4 15:31:06 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:06 2024
smb: \> exit[root@test-server ~]# smbclient //127.0.0.1/Public -U p1%123456
smb: \> mkdir p1
smb: \> ls
.     D        0  Wed Sep  4 15:31:06 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:16 2024
smb: \> exit# 使用p2登录Pod,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p2%123456
Try "help" to get a list of possible commands.
smb: \> 
smb: \> ls
.     D        0  Wed Sep  4 15:30:56 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:06 2024smb: \> cd p1  # 测试是有权限的
smb: \p1\> cd ..
smb: \> deltree p1  # 无法删除
NT_STATUS_ACCESS_DENIED deleting remote directory \p1
smb: \> exit# 使用h1登录Pod,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Pod -U h1%123456
tree connect failed: NT_STATUS_ACCESS_DENIED# 使用h1登录Public,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Public -U h1%123456
Try "help" to get a list of possible commands.
smb: \> cd p1  # 可以查看
smb: \p1\> cd ..
smb: \> deltree ../p1  # 无法删除
NT_STATUS_ACCESS_DENIED deleting remote directory \p1
smb: \> exit# 使用p1登录Pod,测试自己能否删除
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p1%123456
Try "help" to get a list of possible commands.
smb: \> deltree p1  # 可以删除
smb: \> ls
.     D        0  Wed Sep  4 15:40:18 2024
..    D        0  Wed Sep  4 14:46:56 2024
smb: \> exit

四、总结

4.1 问题

  1. session setup failed: NT_STATUS_UNSUCCESSFUL 问题
# 通用情况
# 系统、samba必须都存在该用户,必须是启用状态
id [username]  # 检查系统中是否存在该用户
pdbedit -u [username]  # 检查samba是否存在该用户
pdbedit -u [username] -v | grep "Account Flags"  # 查看用户是否被禁用,DU代表禁用,U是启用状态# 个别情况
# 我这里在部署测试的时候,使用smbpasswd创建了p1用户,然后将系统的p1用户删掉了重新创建,导致登录samba的时候一直报这个错误,需要删除samba的用户并重新创建
# 解决办法: smbpasswd -x p1; smbpasswd -a p1
  1. tree connect failed: NT_STATUS_BAD_NETWORK_NAME 问题
# 检查目录权限
# 检查smb.conf中的权限
# 检查防火墙和selinux

4.2 详细配置

  • 可以通过 acl 对目录进行更细致的权限控制
  • 可以设置 config file = /etc/samba/smb.conf.%U 来对二级目录进行权限配置
  • 如果想设置某个目录只读,只有某个特定用户或者组可以上传和修改,可以使用 read onlywrite list

http://www.ppmy.cn/news/1521048.html

相关文章

海外媒体发稿:排名靠前的Vents杂志网站发布新闻通稿-大舍传媒

海外媒体发稿:排名靠前的Vents杂志网站发布新闻通稿 近日,知名海外媒体Vents杂志网站发布了最新一期新闻通稿,涵盖了音乐、娱乐、新闻等多个领域的热点事件。作为一家自2009年成立以来便致力于为全球读者提供第一手资讯的在线媒体&#xff0…

深入解析Spring Boot中的`@Transactional`注解

一、Transactional注解概述 1.1 什么是Transactional Transactional是Spring框架中用于声明式事务管理的注解。通过在方法或类上添加Transactional注解,Spring会自动将该方法或类中的数据库操作纳入到事务管理中,从而保证这些操作的原子性、一致性、隔…

ES6中try-catch

在ES6(ECMAScript 2015)中,try-catch 语句的语法和使用方式与在之前的ECMAScript版本中是一样的。try-catch 语句用于处理代码中可能发生的错误,确保程序的健壮性和用户体验。 基本语法 try { // 尝试执行的代码块 // 如果发生…

Chrome 浏览器插件获取网页 window 对象(方案二)

前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMessage 发送数据到插件就行了,结果发现不是这…

TCP如何关闭连接(详细版)

关闭连接的⽅式通常有两种,分别是 RST 报⽂关闭和 FIN 报⽂关闭。 如果进程异常退出了,内核就会发送 RST 报⽂来关闭,它可以不⾛四次挥⼿流程,是⼀个暴⼒关闭连接的⽅式。 安全关闭连接的⽅式必须通过四次挥⼿,它…

uniap app跳转小程序

微信开放平台申请账号并认证配置APP的相关配 其中安卓的包名可以通过反编译工具查看链接 https://download.csdn.net/download/u010843503/88725345d打开后 其中md5就是签名,复制后把中间空格取消就行。 微信开放平台绑定小程序 绑定后查看微信小程序的原始id也…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面,路径:flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1: 通过…

CSS中表示长度的单位有哪些?有什么区别?

CSS中有px、em和rem三个长度单位。px是固定像素,不随页面大小变化;em和rem是相对长度单位,em相对于父元素,rem相对于根元素(html)。 在响应式布局中,rem更常用,因为它只有一个参照物…

Ansible与Docker集成:实现容器化运维自动化

Ansible与Docker集成:实现容器化运维自动化 在现代 DevOps 和云原生环境中,Ansible 和 Docker 是两种非常受欢迎的工具。Ansible 专注于配置管理和任务自动化,而 Docker 则通过容器化技术实现应用的轻量级隔离和部署。将 Ansible 和 Docker …

基于udp的socket网络编程

套接字 网络套接字 原始套接字 unix套接字 windows下SOCKET 为整数。 协议家族 套接字种类 协议 udpServer.cc #pragma warning(disable:4996) #include<iostream> #include<string> #include<cstdlib> #include<WinSock2.h>#pragma comment(li…

mac电脑里面的 磁盘分区,容器,宗卷,宗卷组的理解和使用

在mac电脑里面我们一般都是使用宗卷&#xff0c;他和我们常见的pc机器硬盘的分区是有区别的。 对于物理硬盘来说 不管是分区还是宗卷&#xff0c;他们都是逻辑上面的概念。 分区 mac电脑里面的分区 和 pc电脑中的分区差不多&#xff0c; 他们都是针对的物理硬盘&#xff0c;…

Java 方法的特性详解

目录 一、引言 二、方法的重载 &#xff08;一&#xff09;定义与作用 &#xff08;二&#xff09;判断方法相同的标准 三、可变个数形参的方法 &#xff08;一&#xff09;使用场景 &#xff08;二&#xff09;格式与特点 &#xff08;三&#xff09;代码示例 四、方…

【大模型】llama系列模型基础

前言&#xff1a;llama基于transformer架构&#xff0c;与GPT相似&#xff0c;只用了transformer的解码器部分。本文主要是关于llama&#xff0c;llama2和llama3的结构解读。 目录 1. llama1.1 整体结构1.2 RoPE1.3 SwiGLU 激活函数 2. llama22.2 GQA架构2.3 RLHF 3. llama3参考…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库&#xff1a; 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错&#xff1a;ModuleNotFoundError: No module named ‘ten…

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求&#xff1a; 编写一个解决方案&#xff0c;找出至少有五个直接下属的经理 数据准备&#xff1a; Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

Mysql梳理1——数据库概述(上)

笔记来源&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 https://www.bilibili.com/video/BV1iq4y1u7vj 目录 11.2 引入 11.2. 1 数据库与数据库管理系统 11.2.2 数据库与数据库管理系统的关系 11.2.…

nnunetv2(一)配置文件和nnUNetv2_convert_MSD_dataset命令

文章目录 setup.pypyproject.tomlconfiguration.pynnUNetv2_convert_MSD_dataset 如有错误&#xff0c;欢迎评论 setup.py 可以使用pip install .命令来安装nnunet v2 pyproject.toml 配置文件 [project] name "nnunetv2" # 项目名称 version "2.5" # …

jmeter中响应时间、TPS、服务器资源图表

插件下载可以参考前面文章&#xff1a;相关插件 一、响应时间图表 jmeter中的聚合报告已经足够显示响应时间&#xff0c;但是不会显示很详细&#xff0c;下面使用监听器中的插件查看&#xff0c; 添加后&#xff0c;可以不用更改任何配置&#xff0c;直接使用默认即可统计响应…

vue3 + ts + element ui plus 添加阿里图标库图标(只添加一个, 并引入)

先创建一个vue文件, 引入svg代码, 这个文件放components里也挺好 ** catalogIcon.vue代码如下: ** <template><svg t"1725419972935" class"icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://www.w3.org/20…

深度学习--机器学习相关(3)

1.K-近邻算法 KNN 听起来像是某种神经网络的名字&#xff0c;如RNN、CNN 等&#xff0c;其实不然&#xff0c;这是一种经典、简单的分类算法K- 近邻算法(K-Nearest Neighbor,KNN)。与无监督学习讲解的聚类算法不同&#xff0c;KNN 是一个有监督算法。 有监督学习是一种学习算…