Linux入门攻坚——31、rpc概念及nfs和samba

NFS:Network File System
    传统意义上,文件系统在内核中实现

RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol
    一部分功能由本地程序完成
    另一部分功能由远程主机上的

NFS本质上是一种RPC的实现。
本地用户进程要使用文件系统,通过系统调用,由内核完成文件系统的操作,而NFS只不过是系统内核又通过RPC调用了服务器上的系统调用(带有参数)完成服务器上文件系统的操作,将操作的结果再返回给客户端。

半结构数据:XML、JSON、RESTful

NFS:sun公司研发,版本:
    NFSv1、NFSv2——基于udp,NFSv3、NFSv4.0、NFSv4.1、
    NFSv4.2——pNFS,parallel NFS
NFS:基于IP的认证
NIS:Network Information System,本地网络用户账号信息集中存储,身份认证集中于某服务器

NFS实现跨主机的文件共享机制,效果就像在Windows系统上将一个文件夹共享,让后在其他机器上将此共享文件夹映射为本地的一个磁盘一样的效果。

NFS实现需要解决以下问题:
1)、两个主机用户之间的映射关系,两个主机的用户一致,则一一对应就可以,如果id相同但用户名不同怎么办?如果本地主机上的用户id在远程主机上不存在怎么办?root用户怎么处理,如果都是一一映射的话,本地root用户就成了远程主机的root,存在安全问题?Sun采用挤压root权限的做法,并开发了NIS,集中身份认证。NIS风险很大。
2)、NFSv4版本在服务器上有idmapd进程,进行用户映射,本地用户被映射为远程的nfsnologin,对特定文件的特定权限,无法实现如用户属主属组一样的验证,因为请求和响应过程不是完整的,仅是远程系统调用和调用结果的交互。所以,nfs是基于IP认证的,哪个文件对哪个IP具有读或写的权限等。
3)、实现IP认证,服务器端还需要一个mountd进程,来验证挂载请求是否是允许的客户端IP,如果验证通过,mountd进程给客户端一个令牌和一个nfs端口,客户端以此令牌访问给定的nfs端口,实现访问。mountd监听的端口,由公共服务RPC分配的,其进程叫做portmapper,监听在111/tcp端口
4)nfs端口由nfsd进程监听,在2049/tcp、udp。

NFS的过程描述如下:本地主机访问远程主机的111端口,即RPC公共服务,进程为portmapper,获取mountd进程的端口,mountd进程启动时在portmapper中注册,由portmapper随机分配一个端口,然后本地主机在使用获得mountd端口,访问mountd进程,由mountd分配令牌,最后,本地主机使用得到的令牌,访问2049端口进程,即nsfd进程,进行网络文件系统的操作。

NFS:监听在2049/tcp,2049/udp,
RPC服务:portmapper,监听于111端口。
    rpcinfo :report RPC information
nfs服务器:nfsd,mountd,idmapd

rpcinfo命令:报告RPC的信息

nfs服务需要安装nfs-utils包,因为在内核中,已经安装。

启动nfs服务:

此时,再用rpcinfo查看信息:

配置nfs:
/etc/exports:文件格式是,每行定义一个共享文件系统,使用下面的格式给出这个文件系统(和选项)即可:
  directory(or file system)  client1(option1,option2)  client2(option1,option2)
   文件系统    客户端(选项)    客户端(选项)

    客户端:可以是IP、FQDN或DOAMIN、NETWORK
常用选项
    有几个常用的选项可以对 NFS 实现进行定制。这些选项包括:
    secure: 这个选项是缺省选项,它使用了 1024 以下的 TCP/IP 端口实现 NFS 的连接。指定 insecure 可以禁用这个选项。
    rw: 这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读的。
    async: 这个选项可以改进性能,但是如果没有完全关闭 NFS 守护进程就重新启动了 NFS 服务器,这也可能会造成数据丢失。
    no_wdelay: 这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项。
    nohide: 如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用 hide 选项。
    no_subtree_check: 这个选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。
    no_auth_nlm: 这个选项也可以作为 insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。
    mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录。
    fsid=num: 这个选项通常都在 NFS 故障恢复的情况中使用。

实操测试:
1、创建一个要共享出去的目录:mkdir /shared/nfs -pv
2、编辑/etc/exports文件:

重启nfs服务:Service nfs restart
查看共享的文件系统:showmount -e 192.168.147.129

在其他主机上通过showmount -e IP也可以查看相关IP主机的共享文件系统。
 3、挂载NFS文件系统:mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point

用户映射
    通过 NFS 中的用户映射,可以将伪或实际用户和组的标识赋给一个正在对 NFS 卷进行操作的用户。这个 NFS 用户具有映射所允许的用户和组的许可权限。对 NFS 卷使用一个通用的用户/组可以提供一定的安全性和灵活性,而不会带来很多管理负荷。
    在使用 NFS 挂载的文件系统上的文件时,用户的访问通常都会受到限制,这就是说用户都是以匿名用户的身份来对文件进行访问的,这些用户缺省情况下对这些文件只有只读权限。这种行为对于 root 用户来说尤其重要。然而,实际上的确存在这种情况:希望用户以 root 用户或所定义的其他用户的身份访问远程文件系统上的文件。NFS 允许指定访问远程文件的用户——通过用户标识号(UID)和组标识号(GID),可以禁用正常的 squash 行为。
 用户映射的选项包括:
     root_squash: 这个选项不允许 root 用户访问挂载上来的 NFS 卷。
     no_root_squash: 这个选项允许 root 用户访问挂载上来的 NFS 卷。
     all_squash: 这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。
     anonuidanongid: 这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。


在挂载NFS的主机上,以root身份向挂载的文件系统写文件,被拒绝。挤压root权限。修改/etc/exports配置,如下:


在服务器端,添加用户gentoo进行测试:

在客户端添加federa:

在CentOS6.9上,非root用户都被映射为了nobody,我测试了all_squash和no_all_squash,ls -l显示结果都一样。
exportfs命令:不用重新启动nfs服务,就可以重新导出或关闭文件系统。
/etc/exports中增加一行:/shared/ftp  192.168.147.130(rw),不重启nfs服务

维护exports文件导出的文件系统表的专用工具:
exportfs -ar:重新导出所有的文件系统
exportfs -au:关闭导出的所有文件系统
exportfs -u FS:关闭指定的导出的文件系统
开机自动挂载nfs:
  /etc/fstab
  SERVER:/path/to/exported_fs /mount_point  nfs   defaults 0 0

rsize 的值是从服务器读取的字节数。wsize 是写入到服务器的字节数。 如果使用比较高的值,可以提高传输速度。 timeo是超时时间。

挂载nfs时,如果nfs服务器未开机或故障,导致挂载不成功,则启动受影响,因此,一般挂载选项除了defaults,还要加上_netdev,即defaults,_netdev

samba:不同平台(Windows与Linux之间)间文件系统共享,用到的协议:
  SMB:Service Message Block
  CIFS:Common Internet File System

CIFS协议在Windows上监听的端口比较多:137/udp,138/udp,139/tcp,445/tcp
NetBIOS:Windows基于主机实现互相通信的机制,本地名称解析,使用短名称;使用137,138端口,广播实现。

linux要实现在Windows系统中共享文件,就要实现Windows的一些协议,如NetBIOS协议,用于本地组中主机的发现(解析主机名),要实现CIFS协议,用于文件系统共享,如果Windows系统使用的是域控制,使用了活动目录,即AD,linux还要实现此种协议,以被域控制器及AD发现和加入。

samba实现的协议:
  nmbd:netbios
  smbd:cifs
  winbindd:能让linux加入windows的活动目录中(AD)

samba提供的软件包:

可以看到,作为客户端的软件包已经安装了。

linux使用Windows共享文件:使用samba-client

smbclient -L IP:查看IP主机上的共享,探测提供的共享
在Windows7上共享一个文件夹test,共享名改成tools

匿名用户登录成功,但是无权限显示,使用创建的test用户:

默认Windows7提供了这么多的共享,可以看到我们共享的tools了。

获取到共享信息之后:
基于交互式的数据访问
smbclient //192.168.147.1/tools -U test,这是一种交互式的数据访问

登录后的操作如同ftp,有各种命令。这是一种交互式的客户端。

基于挂载的方式访问数据:
mount -t cifs  //SERVER/shared_name /mount_point -o username=USERNAME,password=PASS

windows上访问共享,UNC路径:\\SERVER\shared_name

Linux作为服务器,从Windows上访问linux上的共享。即samba服务器
安装samba服务器软件包:yum install samba
服务脚本:
    /etc/rc.d/init.d/nmb
    /etc/rc.d/init.d/smb

主配置文件:
    /etc/samba/smb.conf
samba用户:
    账号都是系统用户,即/etc/passwd中账号,但是密码是samba服务自有密码文件
    将系统用户添加为samba的命令:smbpasswd
启动samba服务:service nmb start;service smb start
启动后,使用netstat -tunl命令,可以看到137/udp,138/udp,139/tcp,445/tcp都开始监听了。
此时,如果是在同一个工作组中,在Windows的网上邻居中就应该看到这台Linux主机了。
samba的默认工作组是MYGROUP,而Windows工作组是WORKGROUP,修改samba的配置文件:/etc/samba/smb.conf,修改工作组名为WORKGROUP。然后重启服务。
在Windows的网络中查看:

添加samba用户:
1,useradd添加系统用户
2、smbpasswd:
    -a Sys_User:添加系统用户为samba用户
    -d : 禁用
    -e : 启用
    -x : 删除
配置文件smb.conf:
  全局设定:
[global]
    netbios name = MYSMABA1   
    server string = Samba Server Version %v
    log file = /var/log/samba/log.%m
    max log size = 50
    client signing = required
    idmap config * : backend = tdb
    cups options = raw   
  特定共享的设定
    私有家目录
[homes]
    comment = Home Directories
    read only = No
    guest ok = Yes
    browseable = No
    打印机共享
[printers]
    comment = All Printers
    path = /var/spool/samba
    printable = Yes
    print ok = Yes
    browseable = No
  自定义共享:
    [shared_name]
    path=/path/to/shared_dir
    common=xxxx
    guest ok=yes|no  是否允许来宾账号访问
    writable = yes|no 是否可写  
    read only=yes|no 是否只读
    write list = +GROUP_NAME  可写的用户或组列表
测试配置文件语法错误的命令:testparm

使用smbclient -L IP -U username可以探测samba共享的文件系统,但是我的测试出现问题:

登录共享的文件系统:

在网上查询原因,说是虚拟机的网卡设置为NAT模式了,改为桥接模式,就能解决。测试一下,修改虚拟机的网络为桥接,然后重启服务:


确实,修改为桥接模式后,可以运行了。显示了自定义的shared共享,默认的用户家目录共享。
在winxp系统的网上邻居,双击显示的主机,:

 

出现用户输入对话框,输入用户名密码后,这里使用smbuser1:

在linux上可以使用smbclient客户端登录:

对于shared共享文件系统,在配置文件中的配置是read only = no,即设置了可写权限,但是第一次登录上传数据时被拒绝,需要对共享的本地文件系统,即/shared/samba目录添加smbuser1的写权限,然后再测试上传数据,就可以了。所以权限还是共享设置的权限和文件系统权限的交集。两个权限都设置写权限,才能具有写权限。

samba共享的配置管理,还可以使用图形界面,samba提供了一个samba-swat的工具:

安装此软件包,yum install samba-swat
其是基于web完成图形界面管理的,samba-swat提供了一个自己的httpd服务器,这个服务又基于超级守护进程xinetd代为管理,因为用户量访问量很少。

安装后,在/etc/xinetd.d/目录下生成一个swat文件:

要想swat服务随着xinetd一同启动,需要配置文件中将disable设为no,可以看到,其web端口是901,only_from控制远程访问的客户端。

小结:
交互式数据访问:
# smbclient -L HOST -U USERNAME       获取到共享信息之后,登录共享文件夹
# smbclient //SERVER/shared_name -U USERNAME
基于挂载的方式访问:
# mount -t cifs //SERVER/shared_name /mount_point  -o  username=USERNAME,password=PASSWORD

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

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

相关文章

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

作者:计缘 LLM Chat 应用大家应该都不陌生,这类应用也逐渐称为了我们日常的得力助手,如果只是个人使用,那么目前市面上有很多方案可以快速的构建出一个LLM Chat应用,但是如果要用在企业生产级别的项目中,那…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

python文件自动化(4)

接上节课内容&#xff0c;在开始正式移动文件到目标文件夹之前&#xff0c;我们需要再思考一个问题。在代码运行之前&#xff0c;阿文的下载文件夹里已经存在一些分类文件夹了&#xff0c;比如图例中“PDF文件”这个文件夹就是已经存在的。这样的话&#xff0c;在程序运行时&am…

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext new ClassPathXmlApplicationContext("bean.xml"); } BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanFactory的功能相似&#xff0c;都是…

linux 安装redis

1. 更新系统和安装依赖 sudo apt update sudo apt install build-essential tcl2. 下载 Redis 源码(没有opt文件夹&#xff0c;则先创建opt文件夹) cd /opt wget http://download.redis.io/releases/redis-6.2.6.tar.gz3. 解压和编译 Redis 解压下载的文件&#xff0c;并进入…

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备&#xff0c;支持IPC和NVR&#xff0c;依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址&#xff0c;比如主码流地址、子码流地址。可对每个设备设…

深入了解以太坊

1. 以太坊编程语言和操作码 以太坊中智能合约的代码以高级语言编写&#xff0c;如 Serpent、LLL、Solidity 或 Viper,并可转换为 EVM 可以理解的字节码&#xff0c;以便执行。 Solidity 是为以太坊开发的高级语言之一&#xff0c;它具有类似 JavaScript 的语法&#xff0c;可以…

用广播星历计算卫星运动的平均角速度

用广播星历计算卫星位置 1.计算卫星运动的平均角速度 首先根据广播星历中给出的参数计算参考时刻的平均角速度: 式中&#xff0c;GM为万有引力常数G与地球总质量M之乘积&#xff0c;其值为GM3.98600510^14b m3/s2。 然后根据广播星历中给定的摄动参数计算观测时刻卫星的平均…

使用AI写WebSocket知识是一种怎么样的体验?

一、WebSocket基础知识 1. WebSocket概念 1.1 为什么会出现WebSocket 一般的Http请求我们只有主动去请求接口&#xff0c;才能获取到服务器的数据。例如前后端分离的开发场景&#xff0c;自嘲为切图仔的前端大佬找你要一个配置信息的接口&#xff0c;我们后端开发三下两下开…

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址&#xff0c;就是要重写toString()方法&#xff0c;但是我现在还不知道怎么写 修改完的代码&#xff0c;但是数据库显示&#…

ASIO网络调试助手之一:简介

多年前&#xff0c;写过几篇《Boost.Asio C网络编程》的学习文章&#xff0c;一直没机会实践。最近项目中用到了Asio&#xff0c;于是抽空写了个网络调试助手。 开发环境&#xff1a; Win10 Qt5.12.6 Asio(standalone) spdlog 支持协议&#xff1a; UDP TCP Client TCP Ser…

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略&#xff0c;该策略要求请求的域名、协议和端口必须与提供资源的服务相同。…

Linux线程管理进阶:分离,等待、终止与C++11线程接口的封装实践

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;线程终止&#x1f34d;线程等待*多线程创建&#xff0c;传自己定义的对象示例代码&#xff1a;* &#x1f34e;线程的分…

STM32(十二):DMA直接存储器存取

DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源。&#xff08;运行内存SRAM、程序存储器Flash、寄存器&#xff09; 12个独立可配置的通道&…

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2890 标注数量(xml文件个数)&#xff1a;2890 标注数量(txt文件个数)&#xff1a;2890 标注…

页面要突破手机安全区域来全屏显示(沉浸式模式显示),其他页面不需要,如何设置安全区域文字颜色

#效果图 ##思路遇到的问题 在aboutToAppear中使用window模块的 getLastWindow 和 setWindowLayoutFullScreen两个方法来处理全屏显示 设置沉浸式模式的特点&#xff1a; 在任何一个页面中设置过一次之后&#xff0c;其他页面也会跟着全屏显示 这么处理会出现问题&#xff1a…

如何使用Spoon连接data-integration-server并在服务器上执行转换

1.建立连接 2.新建转换或任务 3.右键[子服务器]&#xff0c;新建一个服务器连接(data-integration-server服务器的连接信息) 4.右键[Run configurations],新建一个执行连接,勾选相应的选项即可: 5.选择服务器运行即可! 6.最后&#xff0c;你可以通过服务器端的WEB查看执行日志…

猫眼电影字体破解(图片转码方法)

问题 随便拿一篇电影做样例。我们发现猫眼的页面数据在预览窗口中全是小方框。在当我们拿到源码以后&#xff0c;数据全是加密后的。所以我们需要想办法破解加密&#xff0c;拿到数据。 破解过程 1.源码获取问题与破解 分析 在我们刚刚请求url的时候是可以得到数据的&#xff…

【MySQL】MySQL操作介绍

MySQL操作 认识 MySQL什么是 MySQL关系型数据库的组成结构"客户端-服务器"结构 数据库的基本操作创建数据库查看数据库删除数据库使用数据库 数据类型整型浮点类型字符串类型日期类型总结 表的操作创建表查看表查看表的信息删除表 数据的基础操作插入数据指定列插入全…

Java过滤器和监听器

1. 过滤器 1.1. 过滤器 使用baseServlet的优点&#xff1a;方便进行乱码的统一处理&#xff0c;但是如果不使用servlet&#xff0c;在进行中文乱码处理时就需要在每个servlet中书写&#xff0c;比较麻烦 问题&#xff1a;重复的代码在项目中多次使用书写 解决&#xff1a;过滤…