この質問はすでに何度も尋ねられたようですが、他の答えはどういうわけか私には当てはまりませんでした。
基本的に私は新しい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
しかし、それは何の違いもないようです。