Mapeamento do usuário do NFSv4

8

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.

    
por matpen 02.11.2016 / 20:19

2 respostas

2

O NFSv4 não irá traduzir os UIDs e GIDs como você pode pensar quando não estiver usando o Kerberos e o sabor de segurança. Mas ele age exatamente como você descreveu. O motivo é que o NFSv4 usará AUTH_SYS security. Uma descrição mais detalhada pode ser encontrada aqui .

    
por 02.11.2016 / 21:38
0

O link está desativado, mas uma versão pode ser encontrada no waybackmachine: link

    
por 10.03.2018 / 21:22

Tags