NFSv4ユーザーマッピング


12

この質問はすでに何度も尋ねられたようですが、他の答えはどういうわけか私には当てはまりませんでした。

基本的に私は新しいNFSv4サーバーをセットアップしただけで、サーバーとクライアント間でUIDとGIDが一致しないという典型的な問題に直面しています。ただし、私のシナリオでは、/ etc / passwdと/ etc / groupを同期することはできません。両方のマシンで同じユーザーがいることに注意してください(この質問とは異なります)。

したがって、私はidmapを調査していました:一部のソースによると、NFSv4はユーザー名を送信するようであり(UID / GIDを送信するNFSv3の動作とは対照的)、idmapの役割はこれらのユーザー名をサーバーのUID / GIDに変換することです。

しかし、これは私の場合にはうまくいかないようです(以下のセットアップの詳細)。これは非常に標準的(かなり多くの場合、リポジトリからNFSのみをインストールする)と考えています。

何か不足していますか?LDAPまたはKerberosを設定せずにこれを機能させる方法はありますか?


サーバーのセットアップ

サーバーがUbuntu 16.04インストールされ、2人のユーザーがいます。

user1@server:~$ id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),27(sudo)
user1@server:~$ id user2
uid=1001(user2) gid=1001(user2) groups=1001(user2)

NFSがリポジトリからインストールされ、テストフォルダーをエクスポートするように構成されました。

user1@server:~$ sudo apt-get install nfs-kernel-server

user1@server:~$ sudo cat /proc/fs/nfsd/versions 
+2 +3 +4 +4.1 +4.2

user1@server:~$ ls -ld /srv/nfs/test/
drwxrwxrwx 2 nobody nogroup 4096 nov  2 17:34 /srv/nfs/test/

user1@server:~$ cat /etc/exports 
"/srv/nfs/test" 192.168.x.x(rw,sync,no_subtree_check)

サーバーとクライアントのホスト名が異なるため、idmapdの構成ファイルの「ドメイン」値を変更しました。それ以外の場合、ファイルはパッケージマネージャによってインストールされたものと同じです。このファイルの内容は、サーバーとクライアントの両方で同一であることに注意してください。

user1@server:~$ cat /etc/idmapd.conf
[General]

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

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

クライアントのセットアップ

クライアントにはUbuntu 16.042人のユーザーもいますが、ユーザー名は同じですが、UID / GIDが異なります

user1@client:~$ id user1
uid=1001(user1) gid=1002(user1) groups=1002(user1),27(sudo)
user1@client:~$ id user2
uid=1000(user2) gid=1000(user2) groups=1000(user2),27(sudo)

NFSはリポジトリからインストールされ、テスト共有がマウントされました。

user1@client:~$ sudo apt-get install nfs-common

user1@client:~$ mkdir ./test
user1@client:~$ sudo mount -t nfs4 192.168.x.x:/srv/nfs/test ./test

テスト中

最初にクライアントでファイルを作成しましたが、これは問題ないようです:

user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov  2 17:24 testfile

しかし、サーバーからファイルを表示すると、グループが存在しないのに、所有者が間違っていることに気付きました。

user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov  2 17:24 testfile

実験

同様の質問に対するこの回答によると、id-mappingはサーバー上で次のようにアクティブ化する必要があります(エラーに注意してください)。

user1@server:~$ sudo tee /sys/module/nfsd/parameters/nfs4_disable_idmapping <<< "N"
user1@server:~$ sudo nfsidmap -c
nfsidmap: 'id_resolver' keyring was not found.
user1@server:~$ sudo service rpcidmapd restart
Failed to restart rpcidmapd.service: Unit rpcidmapd.service not found.
user1@server:~$ sudo service nfs-kernel-server restart

クライアント上で(エラーがないことに注意してください):

user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c

しかし、結果は奇妙です:

user1@client:~$ touch test/testfile
user1@client:~$ ls -l test
total 0
-rw-rw-r-- 1 user2 4294967294 0 nov  2 19:16 testfile
user1@server:~$ ls -l /srv/nfs/project/
total 0
-rw-rw-r-- 1 user2 1002 0 nov  2 19:16 prova

別の答えは、idmapd構成を次のように修正することを提案しています(内容は両方のマシンで同じです)。

user1@server:~$ cat /etc/idmapd.conf 
[General]

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

[Translation]
   Method=static
[Static]
   user1@mydomain = user1

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

しかし、それは何の違いもないようです。

回答:


6

NFSv4は、Kerberosとセキュリティフレーバーを使用していない場合に考えられるように、UIDとGIDを変換しません。しかし、あなたが説明したとおりに機能します。その理由は、NFSv4がAUTH_SYSセキュリティを使用するためです。より詳細な説明はここにあります


2
非常に有益なあなたの答えとリンクをありがとう。しかし、それでもコンテキストに適合させることはできません...では、idmappingの目的は何ですか?rpcで動作しないのに、なぜ「rpcidmapd」と呼ばれるのですか?そして、これらのコマンドの効果は何ですか?
matpen、2016年

FWIW、AUTH_SYSこの質問ごとに使用している場合でもNFSv4 idマッピングを有効にできるようです:unix.stackexchange.com/q/438939/111905
sxc731

@ sxc731:私の経験から、本日テストを行いましたが、idmapwith を使用するとAUTH_SYS、UIDとGIDが正しく変換されます。ただし、有効な権限は変換されず、ls自分のディレクトリまたはファイルAUTH_SYSが表示されても、数値IDが一致せず、数値IDがアクセス権に使用されているため、変更を加えることができません。
トーマス

1
@Thomas正解。IDマッピングがでONに設定されているsec=sys場合、ファイルはID mappigに従って表示されますが、書き込みは、IDマッピングがまったく発生していないかのように機能します。別の参照「uid / gid番号は、上記の文字列を除いてNFSv4プロトコルでは使用されなくなりましたが、デフォルトのAUTH_SYS(sec = sys)を使用すると、RPC認証フィールドに残ります。したがって、この場合、両方のユーザー/グループ名と番号スペースは、クライアントとサーバーの間で一致していなければならない。
イルファン・ラティフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.