AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1682950
Accepted
Bart Friederichs
Bart Friederichs
Asked: 2021-10-21 23:51:03 +0800 CST2021-10-21 23:51:03 +0800 CST 2021-10-21 23:51:03 +0800 CST

如何在 NFS 共享上映射用户 ID?

  • 772

我已成功将 NFS 共享从远程计算机安装到本地。但是,我想在远程机器上编辑的文件都归root.

如何挂载我的 NFS 驱动器,以便我的本地用户可以编辑这些文件?

我尝试了该idmap.conf文件,但我不知道是否应该在本地或远程机器上编辑它,以及我应该重新启动哪些服务(再次,本地或远程)以产生任何影响。

从过去,我记得uid=X,gid=X做这样的事情的选项,但我现在在这些选项上得到这个错误:

mount.nfs: an incorrect mount option was specified

我使用 Fedora 34 作为本地和 CentOS 7.6 远程。

linux mount
  • 2 2 个回答
  • 11727 Views

2 个回答

  • Voted
  1. Best Answer
    user1686
    2021-10-22T01:09:00+08:002021-10-22T01:09:00+08:00

    对于所有基于文件的网络文件系统,文件权限由服务器强制执行。说您ls -l可以对文件执行的操作不一定与您实际可以使用该文件执行的操作相匹配。例如,如果您使用 SSHFS 并以“bart”身份进行身份验证,您可以让 SSHFS 客户端报告任何内容,但即使您是本地 root,您在服务器上也只会拥有用户“bart”的权限 - 本地uid=选项不会对您的 SSHFS 帐户被允许执行的操作产生任何影响。

    但与 SSHFS(使用一个连接和一组凭据)不同,NFS 最初被设计为“系统范围”的功能,其中不同的用户可以使用相同的挂载,每个用户都有自己的权限 - 它被设计为与 NIS/YP 一起在同构环境中工作,NIS/YP 是一个确保相同帐户在每台机器上具有相同 UID 的系统。大多数 NFS 客户端功能(或缺乏)仍然反映了这一点。

    因此,考虑到这一点,UID 在 NFS 中有两种完全不同且独立的用法:服务器报告的所有权数据和客户端报告的身份验证凭据。

    • 服务器报告的所有权信息(例如 中的数据ls -l)作为 NFS 本身的一部分进行处理。

      (这是uid=相关的选项,但 Linux NFS 客户端没有它们,尽管其他一些文件系统有。)

      在 NFSv4 中,所有权信息可以使用“idmap”进行转换:服务器将 UID 转换为 username@domain,客户端将该用户名转换回其本地 UID。您需要确保双方使用相同的 idmap 域(由 报告nfsidmap -d)——如果不同,请在 idmap.conf 中进行设置。然而,这并不能真正让你对那个文件做任何事情——它主要是视觉的。

      在 NFSv3 中,只能报告一个数字 UID,并且没有映射它的工具——客户端总是看到存储在服务器上的 UID。

    • 但是,实际有效权限依赖于客户端报告的信息,因为它们是在服务器端强制执行的,而不仅仅是在客户端。这是在 SunRPC 级别处理的,因此与 NFS 版本没有关系。

      由于 NFS 客户端被设计为多用户,其默认的身份验证机制是简单地将访问用户的 UID 报告给服务器。因此,如果您使用sec=sys(默认)导出和挂载 NFS 共享,则客户端始终将您的真实 UID 报告给服务器,并且服务器无需任何验证即可信任它。

      不幸的是,虽然理论上可以在将 UID报告给服务器之前将其映射到此处,但 Linux NFS 客户端中根本没有这样的功能,它总是报告您的真实 UID。

      要解决这个问题,您需要在所有系统中同步您帐户的 UID,或者通过sec=krb5. 这需要设置 Kerberos KDC 服务器。

    所以简而言之,

    1. 确保您使用的是 NFS v4。

    2. 运行nfsidmap -d并验证两个系统是否使用相同的 idmap 域。默认情况下,这是从系统的 FQDN ( hostname -f) 中猜测的,但也可以在/etc/idmapd.conf. 该值不需要是真正的 DNS 域,只要是任意字符串即可。这应该修复由 显示的所有者ls。

    3. 强烈考虑设置 Kerberos,在您的服务器上运行 KDC(它可能是同一台服务器或不同的服务器),并将 NFS 切换为 sec=krb5。(特别是如果您在 Internet 上使用 NFS!)您不需要相关组件,如 LDAP、Active Directory 或 IPA。

      (同样的 Kerberos 也可以通过“GSSAPIAuthentication”用于 SSH 身份验证,而不仅仅是 NFS。)

    4. 如果这不是一个选项,那么您将需要在一个系统上更改您帐户的 UID 以匹配另一个系统。通常只需以 root 身份登录并执行usermod -u操作(这也包含整个主目录)。

    • 7
  2. Christian
    2021-10-22T00:00:03+08:002021-10-22T00:00:03+08:00

    您是本地计算机上的哪个用户?如果您也是 root,您应该能够编辑这些文件。如果您是 root 但无法编辑,请查看您的服务器/etc/exports文件,因为您的 root 用户可能会被压缩。

    root_squash 将请求从 uid/gid 0 映射到匿名 uid/gid。请注意,这不适用于可能同样敏感的任何其他 uid 或 gid,例如用户 bin 或组人员。

       no_root_squash
              Turn off root squashing. This option is mainly useful for
              diskless clients.
    
       all_squash
              Map all uids and gids to the anonymous user. Useful for
              NFS-exported public FTP directories, news spool
              directories, etc. The opposite option is no_all_squash,
              which is the default setting.
    
       anonuid and anongid
              These options explicitly set the uid and gid of the
              anonymous account.  This option is primarily useful for
              PC/NFS clients, where you might want all requests appear
              to be from one user. As an example, consider the export
              entry for /home/joe in the example section below, which
              maps all requests to uid 150 (which is supposedly that of
              user joe).
    

    除此之外,您应该在远程和本地机器上拥有相同的用户 ID。但是没有可供家庭使用的易于维护的解决方案。

    如果您不是root 用户,则无法实现您的目标,因为不应允许任何人在远程计算机上编辑 root 用户的文件!

    • 0

相关问题

  • 如何让我的 Linux 机器看起来像是在运行 Windows?

  • 对于 cp 或 mv,是否有等同于 cd - 的东西?

  • 以 root 身份运行 docker 容器

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 如何在CentOS 7 中将Ctrl+C 永久更改为Ctrl+K?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve