Parece que essa pergunta já foi feita muitas vezes, mas as outras respostas de alguma forma não se aplicavam a mim.
Basicamente, acabei de configurar 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. Observe que eu tenho os mesmos usuários nas duas máquinas (em oposição a esta pergunta ).
Portanto, eu estava olhando para o idmap: de acordo com algumas fontes, parece que o NFSv4 envia nomes de usuários (em oposição ao comportamento do NFSv3 para enviar UID / GID) e o papel do idmap seria traduzir esses nomes de usuário nos UID / GIDs do servidor.
No entanto, isso parece não funcionar no meu caso (detalhes de configuração abaixo), que considero muito padrão (praticamente apenas o NFS instalado no repo).
Estou esquecendo de algo? Existe uma maneira de fazer isso funcionar sem configurar o LDAP ou o Kerberos?
Configuração do servidor
O servidor está 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 repositório 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 "Domínio" 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 UID / GIDs diferentes .
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, crio um arquivo no cliente, e isso parece bom:
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 visualizo o arquivo no 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 mapeamento de identificação deve ser ativado da seguinte maneira, 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 estiver 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 alterar a configuração do idmapd da seguinte maneira (o conteúdo é o mesmo nas duas 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.