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
    • 最新
    • 标签
主页 / server / 问题 / 915119
Accepted
Alessandro Perucchi
Alessandro Perucchi
Asked: 2018-06-05 08:47:36 +0800 CST2018-06-05 08:47:36 +0800 CST 2018-06-05 08:47:36 +0800 CST

Debian Stretch 上的 NFSv4 映射 UID 和 GID

  • 772

我使用以下设置:

NFS 服务器(Ubuntu 16.04 LTS)

  • nfs-common 1:1.2.8-6ubuntu1.2
  • nfs 内核服务器 1:1.2.8-6ubuntu1.2
  • 用户:测试(uid=1300)

NFS 客户端

  • nfs 通用 1:1.3.4-2.1
  • 用户:testmf (uid=1350)

在客户端,用户test存在与服务器端相同的 UID。但我需要使用用户testmf而不是那个test。

我已经阅读了很多文档,以及来自 StackOverflow/StackExchange 的答案,但由于某些原因,我没有任何用处。

众多答案之一是更改文件/etc/idmapd.conf。

所以这里是两边:

服务器

[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]    
Nobody-User = nobody
Nobody-Group = nogroup

在客户端:

[General]
Verbosity = 9
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if it differs from FQDN minus hostname
# Domain = localdomain
Domain = example.com

[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

[Translation]
Method = static

[Static]
[email protected] = testmf
[email protected] = testmf
test@nfsserver = testmf

我使用这样的命令在客户端上挂载目录:

mount 192.168.0.1:/home/test/my_exp_dir /home/testmf/my_imp_dir

当我这样做时,ls -l /home/testmf/my_imp_dir我会得到类似的东西:

-rw-r--r-- 1 test test  326025780 May  9  2017 allCountries.zip

并不是

-rw-r--r-- 1 testmf testmf  326025780 May  9  2017 allCountries.zip

如果我这样做,touch testfile我会明白:

-rw-r--r-- 1 test test  326025780 May  9  2017 allCountries.zip
-rw-r--r-- 1 testmf testmf      0 Jun  9  18:57 testfile

或者ls -ln

-rw-r--r-- 1 1300 1300  326025780 May  9  2017 allCountries.zip
-rw-r--r-- 1 1350 1350          0 Jun  9  18:57 testfile

我试图提高详细程度,但在我的日志中,我看不到用户从一个 UID 到另一个 UID 的映射,就像我在某些答案中看到的那样。我可以看到的两件事是内核设置/sys/module/nfs/parameters/nfs4_disable_idmapping被设置为Y,即使更改为N,似乎也没有任何效果。

我发现的第二件事是我的客户端服务器上不存在 2 个条目:

  • /proc/net/rpc/nfs4.nametoid
  • /proc/net/rpc/nfs4.idtoname

而且我不知道如何添加它,尤其是在 nfsidmap 不可用的情况下。

我已经读到我还需要idmapd在更改后重新启动服务。但是在 Debian 9 中这是不可能的......或者至少我还没有找到如何去做......

我还更改了文件/etc/default/nfs-common以设置变量NEED_IDMAPD=yes,即使重新启动后它也没有做任何事情......

所以我的问题可能很愚蠢,但是如何在 Debian Stretch 上激活 nfsidmapd?我真的没有选择,搜索关键字和 Debian 的官方文档在这里并没有真正的帮助,除非我完全失明!

预先感谢您的帮助。

nfs
  • 2 2 个回答
  • 7166 Views

2 个回答

  • Voted
  1. kofemann
    2018-06-08T01:58:54+08:002018-06-08T01:58:54+08:00

    nfs id 映射存在很大的混淆。当字符串形式的主体(如 [email protected])必须转换为数字 id 时使用的映射,反之亦然。但是,当您使用 sec=sys 挂载时,您显然会这样做,然后所有请求都使用客户端的本地 UID 和 GID 进行身份验证。IOW,客户端进程的触摸UID 将是服务器上的文件所有者。

    第二个困惑是Static可用于定义静态映射。根据手册页:

    “静态”转换方法使用 GSS 认证名称到本地用户名的静态列表。

    从字面上看,它需要 GSS-Authenticated 主体:

     if (strcmp(secname, "krb5") != 0 && strcmp(secname, "spkm3") != 0)
         return -EINVAL;
    

    http://git.linux-nfs.org/?p=trondmy/libnfsidmap.git;a=blob;f=static.c;h=fffd4580847d2577d3fb9638a246069bdb8f12b5;hb=HEAD#l118

    由于太多人需要静态映射,这可能必须修复,但是,您无法修复进程 UID 的使用。

    要以 NFS 友好的方式解决它,最好的选择是使用 kerberos 并使用 sec=krb5 进行挂载。在这种情况下,您的进程可以为一个用户使用 kerberos 票证运行,但在本地仍具有不同的 UID。在这种情况下,可以使用静态映射来避免使用 LDAP。

    • 7
  2. Best Answer
    Alessandro Perucchi
    2018-06-19T07:09:22+08:002018-06-19T07:09:22+08:00

    好吧,这就是我的答案,也许不是我想要的,但至少它解决了我的问题,我继续。

    基本上我已经确保每个用户都属于同一个组,在所有涉及的服务器上具有相同的 GID。然后我设置了共享目录中所有目录的组 ID:

    find /share-dir -type d -exec chmod g+s {} \;
    

    我还检查了 umask 设置为 007 而不是 022、027。

    • 1

相关问题

  • 在 NFS 文件服务器上获取不规则时间戳

  • 过时的 NFS 句柄

  • sh 脚本:如果未安装远程文件系统,如何安装它?

  • 分析 Linux NFS 服务器性能

  • NFS 缓存导致间歇性滞后

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve