在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

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3