在Ubuntu 22.04上使用NFS和CIFS

2024-05-14 15:04
文章标签 ubuntu 使用 nfs 22.04 cifs

本文主要是介绍在Ubuntu 22.04上使用NFS和CIFS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Ubuntu 22.04上使用NFS(Network File System)进行挂载,你可以按照以下步骤操作:

服务器端配置

  1. 安装NFS服务器
    首先,你需要在Ubuntu服务器上安装NFS服务器。打开终端并输入以下命令:

    bash复制代码

    sudo apt update 
    sudo apt install nfs-kernel-server

    如果系统提示需要更新,请先执行sudo apt update

  2. 创建共享目录
    创建一个你想要共享的目录。例如,在/home/username/nfsdir下创建一个目录:

    sudo mkdir -p /home/username/nfsdir

    请将username替换为你的用户名。

  3. 配置NFS
    打开NFS的配置文件/etc/exports。你可以使用任何文本编辑器,如vimgedit。这里以vim为例:

    sudo vim /etc/exports

    在文件末尾添加一行来定义你的共享目录和访问权限。例如:

    /home/username/nfsdir *(rw,sync,no_root_squash)

    这表示/home/username/nfsdir目录对所有客户端都是可读写的(rw),数据是同步写入的(sync),并且NFS客户端上的root用户具有与服务器上的root用户相同的权限(no_root_squash)。

    注意:如果你只想允许特定的IP地址或网络段访问,你可以替换*为相应的IP地址或CIDR表示法。

  4. 重启NFS服务
    保存并关闭/etc/exports文件后,重启NFS服务以使更改生效:

    sudo systemctl restart nfs-kernel-server

客户端配置

  1. 安装NFS客户端(如果尚未安装):
    在Ubuntu客户端上,你可能需要安装NFS客户端工具。不过,这些工具通常作为NFS服务器包的一部分一起安装。如果没有,你可以使用以下命令安装:

    sudo apt install nfs-common

  2. 挂载NFS共享
    现在你可以在Ubuntu客户端上挂载NFS共享了。使用mount命令并指定服务器地址、共享目录和本地挂载点。例如:

    sudo mount -t nfs server_ip:/home/username/nfsdir /mnt/nfs

    请将server_ip替换为你的NFS服务器IP地址,/mnt/nfs替换为你想要挂载到的本地目录(如果目录不存在,需要先创建它)。

  3. 验证挂载
    使用df -h命令来查看已挂载的文件系统,确认NFS共享已成功挂载:

    df -h

    你应该能在输出中看到类似于server_ip:/home/username/nfsdir的条目。

现在,你的Ubuntu客户端应该能够像访问本地文件系统一样访问NFS共享了。

如果出现报错mount.nfs: access denied by server while mounting

当您遇到 mount.nfs: access denied by server while mounting  错误时,这通常意味着NFS服务器拒绝了客户端的挂载请求。以下是几个可能的解决方案:

  1. 检查NFS导出配置
    • 确保NFS服务器的 /etc/exports 文件中包含了对应的导出目录和允许访问的客户端IP或子网。例如:
      /yww_nfs_ssd 172.26.111.0/24(rw,sync,no_root_squash)
    • 如果您使用的是NFSv4,请确保您使用的是正确的访问控制机制(如sec=syssec=krb5等)。
    • 导出目录的权限也需要是适当的,以便NFS服务可以访问它们。
  2. 重新加载NFS导出
    • 在NFS服务器上,每次更改 /etc/exports 文件后,您都需要重新加载NFS配置。可以使用以下命令:
      sudo exportfs -ra
  3. 检查NFS服务状态
    • 确保NFS服务正在运行。在大多数Linux发行版中,可以使用以下命令检查:
      sudo systemctl status nfs-server
    • 如果NFS服务没有运行,请使用以下命令启动它:
      sudo systemctl start nfs-server
  4. 检查防火墙设置
    • 确保NFS服务器和客户端的防火墙都允许NFS相关的端口。NFS通常使用111端口(rpcbind/portmapper)和一系列动态分配的端口。
    • 如果您使用的是云服务提供商的安全组或VPC设置,请确保这些设置允许NFS通信。
  5. 检查NFS版本和挂载选项
    • 如果您的NFS服务器和客户端使用的NFS版本不同,可能会出现兼容性问题。请确保它们使用相同的NFS版本(通常是NFSv3或NFSv4)。
    • 使用正确的挂载选项。例如,如果您使用的是NFSv4,您可能需要指定 sec=sys 或其他安全选项。
  6. 检查NFS客户端ID映射
    • 如果您使用的是NFSv4并且遇到了ID映射问题,请确保NFS服务器和客户端都正确配置了ID映射。
  7. 查看日志
    • 在NFS服务器和客户端上查看系统日志,以获取更多关于为什么访问被拒绝的信息。在大多数Linux系统上,您可以使用 dmesgjournalctl 或直接查看 /var/log/ 目录下的日志文件。
  8. 测试NFS连接
    • 在客户端上,使用 showmount -e 172.26.111.1 命令来查看NFS服务器上的导出列表。这可以帮助您验证NFS服务器是否可访问以及是否列出了您尝试挂载的目录。

在Ubuntu 22.04中使用CIFS挂载共享文件夹,你可以按照以下步骤操作:

  1. 安装cifs-utils软件包
    首先,你需要安装cifs-utils软件包,该软件包包含CIFS挂载工具。在终端中执行以下命令进行安装:

    sudo apt update 
    sudo apt install cifs-utils

  2. 创建本地挂载点
    你需要在Ubuntu上创建一个本地目录,用于挂载共享文件夹。你可以在任何位置创建这个目录,但通常建议选择一个容易访问的位置。例如,在/mnt目录下创建一个名为share的目录:

    sudo mkdir /mnt/share

  3. 挂载共享文件夹
    使用mount命令来挂载共享文件夹。你需要提供共享服务器的IP地址、共享名称、本地挂载点以及你的用户名和密码。以下是一个示例命令的基本结构:

    sudo mount -t cifs //共享服务器IP地址/共享名称 /本地挂载点 -o 用户名=你的用户名,密码=你的密码,iocharset=utf8,sec=ntlm
    

    将命令中的共享服务器IP地址共享名称本地挂载点你的用户名你的密码替换为实际的值。例如:

    sudo mount -t cifs //192.168.1.100/myshare /mnt/share -o username=myuser,password=mypassword,iocharset=utf8,sec=ntlm

    输入你的用户密码以确认挂载操作。如果成功,你将能够在/mnt/share目录下访问共享文件夹的内容。

  4. (可选)自动挂载
    如果你希望在系统启动时自动挂载共享文件夹,可以编辑/etc/fstab文件并添加相应的条目。但是,请注意,将密码明文存储在/etc/fstab中可能存在安全风险。因此,建议仅在了解风险并接受其后果的情况下使用此方法。

    如果你选择使用/etc/fstab进行自动挂载,并希望避免在文件中明文存储密码,你可以考虑使用其他方法(如密钥环或凭证助手)来安全地存储和管理凭据。

完成上述步骤后,你就应该能够在Ubuntu 22.04上成功使用CIFS挂载共享文件夹了。

如果出现如下错误

mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)

使用命令

tail -f /var/log/kern.log

 

这个错误消息是在警告你,使用SMB/CIFS协议的不太安全的版本(vers=1.0)通常是不被推荐的,除非你需要访问非常旧的服务器。SMB 1.0(也被称为CIFS 1.0)由于存在一些已知的安全漏洞,因此在许多现代环境中已经被禁用或不再推荐使用。

如果你确实需要访问一个只支持SMB 1.0的服务器,并且没有其他选择,你可以继续使用这个版本,但你应该非常清楚你正在承担的安全风险。

然而,如果可能的话,你应该尝试以下步骤来解决问题:

  1. 更新服务器:如果可能的话,尝试更新SMB服务器到支持更安全的SMB版本(如SMB 2.0、SMB 2.1、SMB 3.0等)。

  2. 使用更安全的SMB版本:在挂载命令中指定一个更安全的SMB版本。例如,使用vers=2.0vers=3.0(取决于服务器支持的版本)。

    sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0

    注意:在上面的命令中,我移除了sec=ntlm或类似的参数,因为当你指定一个较新的SMB版本时,通常不需要明确指定安全选项,除非服务器有特殊需求。

当你看到错误消息 "CIFS: VFS: bad security option: ntlm" 时,这通常意味着你尝试在挂载CIFS共享时使用了不被支持的安全选项ntlm。虽然NTLM曾经是一个常见的SMB认证协议,但随着时间的推移,它被认为是不够安全的,并且在现代Linux发行版中,默认可能不再支持或推荐使用。

要解决这个问题,你可以尝试以下几种方法:

  1. 使用ntlmv2ntlmssp
    尝试使用NTLMv2或NTLM Session Security Package(ntlmssp)代替NTLM。这些是NTLM的更新和更安全的版本。

    例如:

    sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0,sec=ntlmv2

    或者

    sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0,sec=ntlmssp
  2. 检查服务器配置
    确保SMB服务器支持你想要使用的安全选项。如果服务器只支持NTLM,并且你的Linux发行版不再支持NTLM,你可能需要更新服务器配置以使用更新的认证方法。

  3. 查看mount.cifs文档
    使用man mount.cifs命令查看mount.cifs的文档,了解可用的安全选项和其他挂载选项。

这篇关于在Ubuntu 22.04上使用NFS和CIFS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989066

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意