服务器文件访问协议

news2024/11/27 16:51:34

服务器文件访问协议

  • 摘要
  • 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/share
		read only = no
		create mask = 0777
		directory mask = 0777
		writable = yes
		browseable = yes
		guest 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.coloradmin.cn/o/2227868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ResNet50模型的船型识别与分类系统研究

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【LSTM模型实现光伏发电功率的预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理视频监控新选择

在数字化转型的浪潮中,视频监控作为安防领域的核心组成部分,正经历着前所未有的技术革新。随着技术的不断进步和应用场景的不断拓展,视频监控系统的兼容性、稳定性以及安全性成为了用户关注的焦点。NVR小程序接入平台/设备EasyNVR&#xff0c…

单元测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需…

基于 ThinkPHP+Mysql 灵活用工_灵活用工系统_灵活用工平台

基于 ThinkPHPMysql 灵活用工灵活用工平台灵活用工系统灵活用工小程序灵活用工源码灵活用工系统源码 开发语言 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示 一、企业管理后台 二、运用管理平台 三、手机端

【Linux内核揭秘】深入理解命令行参数和环境变量

文章目录 命令行参数什么是命令行参数main函数的参数 环境变量什么是环境变量常见的环境变量PATHHOMESHELLPWDOLDPWD 本地变量总结 命令行参数 什么是命令行参数 形如这样的命令后面带的选项就是命令行参数。 首先我们要了解一下命令行参数的原理。 我们知道像ls,mkdir,touch等…

Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义

Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义 前言一、项目结构二、通用步骤定义三、特性文件设计四、测试脚本实现五、运行测试总结 前言 在敏捷迭代中,为了适应快速、高频的交付,自动化测试框架的设计…

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...

全文链接:https://tecdat.cn/?p38026 分析师:Fanghui Shao 在当今金融领域,风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户,还是信贷风控模型的构建,以及基于决策树的银行信贷风险预警,…

Ubuntu22.04环境搭建MQTT服务器

官网: https://mosquitto.org 1.引入库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa2.升级安装工具 sudo apt-get update 3.安装 sudo apt-get install mosquitto 4.安装客户端 sudo apt-get install mosquitto-clients5.添加修改配置文件 进…

Python | Leetcode Python题解之第519题随机翻转矩阵

题目: 题解: class Solution:def __init__(self, m: int, n: int):self.m mself.n nself.total m * nself.map {}def flip(self) -> List[int]:x random.randint(0, self.total - 1)self.total - 1# 查找位置 x 对应的映射idx self.map.get(x,…

【linux网络编程】| socket套接字 | 实现UDP协议聊天室

前言:本节内容将带友友们实现一个UDP协议的聊天室。 主要原理是客户端发送数据给服务端。 服务端将数据再转发给所有链接服务端的客户端。 所以, 我们主要就是要实现客户端以及服务端的逻辑代码。 那么, 接下来开始我们的学习吧。 ps:本节内容…

Windows 下实验视频降噪算法 MeshFlow 详细教程

MeshFlow视频降噪算法 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow,它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field),其运动矢量 (motion vectors) 仅在网格顶点 (m…

随机采样方法之逆变换采样

抽样或采样是指从目标总体中抽取出部分个体也就是样本,通过对样本的属性或特征进行分析,以此对总体进行评估。采样作为一种重要的数据分析方法,在深度学习、渲染等诸多方面具有广泛的应用。本文将回顾一种基本的采样方法即逆变换采样。 一、…

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份)-最新出炉 附下载链接

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份) 下载链接-点它👉👉👉: 国自然地学部立项名单(2021-2023年)和标书范本(2007-201…

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…

信息安全数学基础(34)正规子群和商群

正规子群详述 定义: 设G是一个群,H是G的子群。若H的左陪集与右陪集总是相等(即对任何的a∈G,都有aHHa),则称H是G的正规子群或不变子群,记为H⊴G。 性质: 平凡性:任何群G…

日期选择简化版今日、本周、本月、本季度、本年

function 未来之窗_时间_现在() {let date new Date(),year date.getFullYear(), //获取完整的年份(4位)month date.getMonth() 1, //获取当前月份(0-11,0代表1月)strDate date.getDate() // 获取当前日(1-31),小时 date.getHours(),分钟 date.getMinutes();if (month &…

C语言笔记(指针题目)例题+图解

本文分为两部分 ,第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析,第二部分是一些笔试题目。若有错误,请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…

Android Input的流程和原理

Android Input事件机制 Android系统是由事件驱动的,而Input是最常见的事件之一,用户的点击、滑动、长按等操作,都属于Input事件驱动,其中的核心就是InputReader和InputDispatcher。InputReader和InputDispatcher是跑在system_serv…

Manus在虚拟现实仿真模拟中的应用案例分享

Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Manu…

windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(四)

驱动的测试代码解读 1. 打开设备对象: // 1. 打开底层设备对象HANDLE hDevice CreateFile(L"\\\\.\\NDISFilter", // 设备名称GENERIC_READ | GENERIC_WRITE, // 访问权限0, // 不共享NULL, // 默认安全属性OPEN_EXISTING, // 打开现有设备0, // 无特殊标志NULL /…