Esta pergunta parece ter sido feita muitas vezes, mas as outras respostas não se aplicam a mim.
Basicamente eu apenas configurei um novo servidor NFSv4 e estou enfrentando o problema clássico em que UIDs e GIDs não correspondem entre servidor e cliente. No entanto, a sincronização de / etc / passwd e / etc / group não é viável no meu cenário. Note que eu tenho os mesmos usuários em ambas as máquinas (ao contrário de esta questão ).
Portanto, eu estava olhando para o idmap: de acordo com algumas fontes, parece que o NFSv4 envia nomes de usuário (em oposição ao comportamento do NFSv3 para enviar UID / GID) e o papel do idmap seria traduzir esses nomes de usuário para o servidor UID / GIDs.
No entanto, isso parece não funcionar no meu caso (detalhes de configuração abaixo), que eu considero muito padrão (praticamente só instalado NFS de repo).
Estou faltando alguma coisa? Existe uma maneira de fazer isso funcionar sem configurar o LDAP ou o Kerberos?
Configuração do servidor
O servidor tem Ubuntu 16.04
instalado e dois usuários.
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)
O NFS foi instalado a partir do repo e configurado para exportar uma pasta de teste.
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)
Como o servidor e o cliente têm nomes de host diferentes, alterei o valor "Domain" no arquivo de configuração do idmapd. Caso contrário, o arquivo é idêntico ao instalado pelo gerenciador de pacotes. Observe que o conteúdo deste arquivo é idêntico no servidor e no cliente.
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
Configuração do cliente
O cliente também tem Ubuntu 16.04
e dois usuários, que, no entanto, têm os mesmos nomes de usuário , mas diferentes UID / GIDs .
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)
O NFS foi instalado a partir do repositório e o compartilhamento de teste foi montado.
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
Teste
Primeiro eu crio um arquivo no cliente, e isso parece bem:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
Mas quando vejo o arquivo do servidor, percebo que o proprietário é o errado, enquanto o grupo não existe.
user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
Experiências
De acordo com esta resposta a uma pergunta semelhante, o id-mapping deve ser ativado da seguinte forma, no servidor (observe os erros ):
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
Enquanto no cliente (observe a ausência de erros):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c
Mas os resultados são estranhos:
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
Outra resposta sugere a alteração da configuração de idmapd da seguinte forma (o conteúdo é o mesmo em ambas as máquinas):
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
Mas isso não parece fazer nenhuma diferença.