服务器文件访问协议

服务器文件访问协议

  • 摘要
  • NFS、CIFS、SMB概述
  • SMB
    • Windows SMB
    • Linux Samba
    • Python SMB
  • NFS

摘要

本篇博客参考网上文档和博客,对基于网络的服务器/主机的文件访问、共享协议进行简要总结,完整内容将会不断更新,以便加深理解和记忆

NFS、CIFS、SMB概述

在网络环境中,NFS和CIFS(基于SMB协议)使用IP/TCP协议在服务器和客户端之间共享文件

比较NFSCIFS
名称网络文件系统通用互联网文件系统
当前版本4被SMBv3取代
适用Unix网络架构(Windows可通过第三方软件包使用)Windows架构(Linux也可通过Samba服务使用)
共享资源文件和目录文件目录和网络资源(如打印机)
身份验证基于IP(有限)基于用户(更安全)
文件锁定(避免多客户端同时写入发生冲出)由客户处理(无状态,服务器不跟踪)由服务器处理(文件锁)
性能

SMB

SMB(Server Message Block)是一个网络文件共享协议,允许应用程序和终端用户从远端的文件服务器访问文件资源(文件下载和上传)

Windows SMB

  • Windows 10 开启SMBv1(重启计算机)
image-20241029102106429
  • 创建共享:文件夹右键→共享→高级共享→设置共享名→设置共享权限(建议共享权限为everyone完全共享,everyone是指本机下的所有用户)(基于445端口,微软系统默认开启445端口)

    • 本地登录时,只受NTFS权限的影响
    • 远程登陆时,将受NTFS权限和共享权限的共同影响(取交集)
    image-20241029103250738
  • 访问共享:在开始-运行我的电脑-地址栏中输入UNC地址(通用命名规则,Universal Naming Convention,(局域)网络上资源的完整windows名称)(需要Netbios-ns137、138以及TCP139端口,查看本地打开的端口号:netstat -an

    • \\{IP或服务器名}\{共享文件夹名称}\{共享文件名称}\\DESKTOP-8MHVICE\book\\127.0.0.1\book
    • 隐藏文件夹的共享与访问:共享名 ,访问: ‘ I P 或服务器名 { 共享文件名称 ,访问:`\\{IP或服务器名}\{共享文件名称 ,访问:IP或服务器名{共享文件名称}`
    • 共享相关命令
    # 列出共享列表
    net share
    # 创建共享
    net share {共享名}={共享路径}
    # 删除共享
    # IPC$无法通过/del命令取消共享,且通过此共享名可以访问此电脑所有文件
    net share book /del
    
    • 屏蔽系统所有分区隐藏共享自动产生(当取消共享系统隐藏共享文件夹时,重启后,这些文件夹会自动恢复共享状态)

    打开注册表:win+r 键入regedit

    定位到共享注册表位置HKEY_Local_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters

    右键新建REG_DWORD类型的AutoShareServer 键,值为0

  • 关闭端口

    • 关闭445端口

      • 打开services.msc(win+r services.msc)停止并禁用server服务
      image-20241029142818196 image-20241029142907224
      • 防火墙限制规则(Win7、Win2008及以上系统):控制面板→防火墙→高级设置→入站规则(右键、新建入站规则)→协议和端口:由于445端口的特殊性,需要新建两个规则,分别选则TCP和UDP,并在下方输入框中输入445→下一步
      image-20241029143446615
      • 关闭139端口:控制面板→网络和Internet→网络连接(右键属性)→TCP/IP协议(右键属性)→高级→WINS中设置启用或禁用NBT(NetBIOS over TCP/IP)
      image-20241029144328848

Linux Samba

# 1.关闭防火墙
## 确保防火墙允许 Samba 服务端口
sudo ufw allow Samba
## 查看防火墙状态
systemctl status firewalld.service
## 关闭防火墙
# systemctl stop firewalld.service
## 永久关闭防火墙
# systemctl disable firewalld.service## 2.安装samba服务
# yum(centos默认)
yum install -y samba
# apt(Ubuntu默认)
apt install samba# 3.修改samba配置文件
## 备份
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
## 在[global]下增加配置
map to guest = Bad User
# map to guest = never
#### 指定 Samba 使用用户级别安全性,要求每个连接都有指定的用户名和密码
security = user
#### 强制 Samba 使用 SMB1 协议
min protocol = NT1
max protocol = NT1## 在文末添加[share]配置
[share]comment = This is samba dir# 路径path = /home/shareread only = nocreate mask = 0777directory mask = 0777writable = yesbrowseable = yesguest ok = yes# 限制只有 sambauser 用户可以访问共享valid users = sambauser# 4.创建共享文件夹
mkdir /home/share
## 给文件夹赋最高权限
# sudo chown nobody:nogroup /home/share
chmod -R 777 /home/share# 6.添加samba用户
## 创建系统用户(如果尚未创建)
sudo useradd -M -s /sbin/nologin sambauser
smbpasswd -a sambauser# 7.重启samba服务
systemctl restart smb# 8.设置samba开机自启
systemctl enable smb
systemctl enable smb.service# 9.查看 Samba 使用的端口(TCP 139 - NetBIOS 会话服务;TCP 445 - 直接 TCP/IP CIFS)
sudo ss -tuln | grep ':139\|:445'
## sudo netstat -tuln | grep ':139\|:445'
## sudo lsof -i -P -n | grep smbd# 10.查看 Samba 服务状态
sudo systemctl status smbd# 11.使用 smbclient 进行测试(在本地或远程测试 Samba 共享连接)
# https://blog.csdn.net/yexiangCSDN/article/details/82867469
smbclient //localhost/shared -U sambauser# 12.nmbd(NetBIOS)配置
"""
(1)nmbd 是 NetBIOS 名称服务的守护进程,用于在局域网(LAN)环境中解析主机名。假如你需要通过主机名而不是 IP 地址访问局域网 Samba 服务器,可以配置使用 nmbd。
(2)但是,nmbd 和 NetBIOS 广播在公网环境中不可用,因为:
①NetBIOS 依赖局域网广播:NetBIOS 使用 UDP 广播进行名称解析,只能在局域网内工作,无法跨越路由器、NAT 网关或互联网进行解析
②安全性问题:在公网中启用 nmbd 并开放 UDP 137138 端口可能带来安全风险,因为这些端口容易受到攻击
③标准的主机名解析应使用 DNS:在公网或跨网环境中,推荐使用 DNS 服务器进行主机名解析,安全性和稳定性更高
(3)nmbd 监听的端口:UDP 137 - NetBIOS 名称服务:用于名称解析;UDP 138 - NetBIOS 数据报服务:用于浏览和发现服务
"""
## 确保 nmbd 启用(启用 nmbd 服务,使得主机名可以在局域网中被发现和解析)
sudo systemctl start nmbd
sudo systemctl enable nmbd
## 配置 NetBIOS 名称:在 /etc/samba/smb.conf 的 [global] 部分设置 netbios name:
[global]
netbios name = debian  # 将此处的名称更改为你的主机名
## 检查 nmbd 监听端口
sudo ss -uln | grep ':137\|:138'
## 使用主机名连接
\\debian\shared
## 禁用 nmbd
sudo systemctl stop nmbd
sudo systemctl disable nmbd# 13.公网主机名访问 SMB 的正确方法
## 配置 DNS 解析: 在公网环境中,通过购买域名并在 DNS 服务器中配置 A 记录,将服务器 IP 地址与主机名关联
\\{HostName}.{domain}.com\shared
## 修改Hosts文件: 对于临时使用,可以在客户端的 Hosts 文件中手动添加主机名和 IP 地址的映射
{云服务器的公网IP} {HostName}

Python SMB

  • pysbm
# pip install pysmb# 1.登录到SMB服务器
from smb.SMBConnection import SMBConnection
host="xxx.xxx.xxx.xxx"  #ip或域名
username="xxxxxx" #用户名
password="xxxxxx" #密码
conn=SMBConnection(username,password,"","",use_ntlm_v2 = True)
result = conn.connect(host, 445) # smb协议默认端口445# 2.上传文件到smb服务器
"""
rb代表read+binary模式,即“读二进制文件”.注意如果是二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。上传二进制文件时,如果打开本地文件没有加上参数b,会抛出异常:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte
这是因为文件被当作文本文件,二进制文件无法转码成普通字符。因此需要改成二进制文件读取。
"""
localFile=open("本地文件路径","rb") 
## “共享文件夹名称”是一个文件夹,即smb共享文件夹。“存放路径”是相对共享文件夹下的文件
## 上传文件到smb服务器,默认超时30秒,可以添加参数修改:timeout=xx。
conn.storeFile("共享文件夹名称","存放路径",localFile) 
localFile.close() # 3.从smb服务器下载文件到本地,b同上
localFile=open("下载后的文件路径","wb")  # 写二进制文件
## 从smb服务器下载文件到本地,默认超时30秒,可以修改:timeout=xx。“文件所在路径”是相对共享文件夹的路径,不需要加"/".
conn.retrieveFile("共享文件夹名称","文件所在路径",localFile)
localFile.close() # 4.关闭连接
conn.close()
  • smbprotocol

NFS

Linux NFS文件共享 | 配置流程 |超详细_nfs 服务器地址为172.168.0.10。-CSDN博客

NFS详解(概念+实验演示)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463190.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode - 周赛421

目录 一,3334. 数组的最大因子得分 二,3335. 字符串转换后的长度 I 三,3336. 最大公约数相等的子序列数量 四,3337. 字符串转换后的长度 II 一,3334. 数组的最大因子得分 暴力方法就不演示,这里介绍一个…

【java】java的基本程序设计结构06-运算符

运算符 一、分类 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 1.1 算术运算符 操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B /…

群控系统服务端开发模式-应用开发-菜单功能开发

为什么优先开发菜单,而不是优先开发管理员?查看一下程序草图就明白,还有一个重点就是,管理员需要添加图片,而我还没有封装上传工具及上传目标。 一、添加路由 在根目录下route文件夹下的app.php文件里面,添…

顶点动画-河流的效果

目标是让一个矩形网格面片,通过顶点动画,实现出河流的效果。(如下图)所谓的河流效果,就是呈现出波浪感,而想要呈现出波浪感,我们必须了解 波长、波动频率、波动幅度 这些关键因素 1、波浪感的关…

线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式 在C中&#xff0c;线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式&#xff0c;并附有相应的示例代码。 1. 使用函数指针启动线程 最基本的方式是使用函数指针来启动线程。 示例代码&#xff1a; #include <iostream&g…

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…

讲讲RabbitMQ 性能优化

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲RabbitMQ 性能优化 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一个强大的消息代理&#xff0c;广泛用于分布式系统中&#x…

redolog与binlog的写入机制

redo log 事务在执行的过程中&#xff0c;生成的redo log是要先写到redo log buffer中的。redo log buffer里面的内容不需要每次生成后都直接持久化到磁盘。 如果事务执行期间MySQL发生异常重启&#xff0c;那这部分日志就丢了&#xff0c;但是由于没有commit&#xff0c;所以…

推荐一款数学绘图工具:FX Draw Tools

FX Draw Tools是目前最新好用的一款数学绘图工具。该软件界面简洁&#xff0c;使用方便。该软件能够帮助用户快速制作数学图表&#xff0c;从而提高用户的工作效率&#xff0c;轻松完成制图工作&#xff0c;欢迎需要的用户前来下载使用。 功能特色 1. 180和360可以被添加到任何…

《云计算网络技术与应用》实训8-1:OpenvSwitch简单配置练习

1.按《云计算网络技术与应用》实训5-1进行环境配置&#xff0c;安装好OVS 2.开启OVS虚拟交换机 3.创建一个网桥br0 4.查看网桥列表 5.把ens34网卡连接到网桥br0上 6. 查看网桥br0所有端口 7.列出网卡ens34连接的所有网桥列表 8.查看OVS网络状态 9.将网桥br0上连接的网卡ens34删…

Netty 组件介绍 - pipeline

ChannelPipeline为ChannelHandler链提供了容器&#xff0c;并且定义了该链上的入站和出站事件。当initChannel()被调用时&#xff0c;ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler。他们的执行顺序就是添加顺序。 Server public class Server {pr…

Leetcode 热题100 之 二叉树3

1.二叉树展开为链表 思路分析&#xff1a;迭代法。对于每个节点&#xff0c;我们将其左子树放到右子树的位置。将原来的右子树接到新的右子树&#xff08;也就是原来的左子树&#xff09;的末端。移动到右子节点&#xff0c;继续处理下一节点&#xff0c;直到所有节点都处理完。…

UE5.4 PCG Layered Biomes插件

B站学习链接 官方文档 一、PCGSpawn Preset&#xff1a;负责管理PCG要用到的植被资产有哪些 二、BiomesSettings&#xff1a;设置要使用的植被资产Layer、Spawn参数 1.高度Layer参数&#xff1a; 2.地形Layer&#xff1a;我这里用地形样条线绘制了一块地形Layer 绘制点和…

单个相机矫正畸变

1、通过标定助手获取到内参外参&#xff0c;外参在此无效&#xff0c;只用到了内参 2、然后通过halcon算子进行矫正 参考&#xff1a;超人视觉

Orleans8.2入门测试

微软官方文档&#xff1a;快速入门&#xff1a;使用 ASP.NET Core 生成第一个 Orleans 应用 - .NET | Microsoft Learn 项目及引入的nuget库&#xff1a; 1、接口项目&#xff1b;2、接口实现项目&#xff1b;3、silo项目&#xff1b;4、客户端项目 其中Microsoft.Orleans.St…

电赛入门之软件stm32keil+cubemx

hal库可以帮我们一键生成许多基本配置&#xff0c;就不需要自己写了&#xff0c;用多了hal库就会发现原来用基本库的时候都过的什么苦日子&#xff08;笑 下面我们以f103c8t6&#xff0c;也就是经典的最小核心板来演示 一、配置工程 首先来新建一个工程 这里我们配置rcc和sys&…

第三十章 章节练习商品列表组件封装

目录 一、需求说明 二、技术要点 三、完整代码 3.1. main.js 3.2. App.vue 3.3. MyTable.vue 3.4. MyTag.vue 一、需求说明 1. my-tag 标签组件封装 (1) 双击显示输入框&#xff0c;输入框获取焦点 (2) 失去焦点&#xff0c;隐藏输入框 (3) 回显标签信息 (4) 内…

vue 快速入门

文章目录 一、插值表达式 {{}}二、Vue 指令2.1 v-text 和 v-html&#xff1a;2.2 v-if 和 v-show&#xff1a;2.3 v-on&#xff1a;2.4 v-bind 和 v-model&#xff1a;2.5 v-for&#xff1a; 三、生命周期四、Vue 组件库 Element五、Vue 路由 本文章适用于后端人员&#xff0c;…

数据建模圣经|数据模型资源手册卷2,探索数据库逻辑模型设计

在企业信息系统体系结构中&#xff0c;数据处于核心地位。数据模型是信息系统开发和应用的基本指南&#xff0c;在逻辑模型层面为数据在数据库中的存储提供蓝图&#xff0c;以及对宏观世界的抽象设计。 简介 《The Data Model Resource Book, Revised Edition, Volume2》&#…

形态学操作篇 原理公式代码齐活

一、腐蚀 腐蚀操作的核心原理是利用一个结构元素在图像上进行扫描&#xff0c;判断结构元素所覆盖的区域与前景像素的关系。如果结构元素完全被包含在前景像素区域内&#xff0c;那么结构元素中心对应的像素位置在腐蚀后的图像中被标记为前景像素&#xff1b;如果结构元素不完…