web-dev-qa-db-ja.com

NFSv4ユーザーマッピング

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

基本的に私は新しい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.04と2人のユーザー。ただし、ユーザー名は同じですが、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

しかし、それは違いを生むようには見えません。

12
matpen

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

6
Thomas

リンクはダウンしていますが、バージョンはウェイバックマシンにあります: https://web.archive.org/web/20170215124557/http://dfusion.com.au/wiki/tiki-index.php ?page = Why + NFSv4 + UID + mapping + breaks + with + AUTH_UNIX

0
JinnKo