NFSv4 사용자 매핑 표준 적이라고 생각합니다 (리포지토리에서

이 질문은 이미 여러 번 요청 된 것으로 보이지만 다른 답변은 나에게 적용되지 않았습니다.

기본적으로 새 NFSv4 서버를 설정했는데 UID와 GID가 서버와 클라이언트간에 일치하지 않는 고전적인 문제에 직면하고 있습니다. 그러나 시나리오에서 / etc / passwd 및 / etc / group을 동기화하는 것은 불가능합니다. 두 컴퓨터에서 동일한 사용자를 보유하고 있습니다 ( 이 질문 과 반대 ).

따라서 일부 맵에 따르면 NFSv4는 사용자 이름을 보내고 (NFSv3의 동작은 UID / GID를 보내는 것과는 달리) 사용자 이름을 서버 UID / GID로 변환하는 것으로 보입니다.

그러나 이것은 필자의 경우 (아래의 설정 세부 사항)에서 작동하지 않는 것 같습니다.이 표준은 매우 표준 적이라고 생각합니다 (리포지토리에서 NFS 만 설치됨).

뭔가 빠졌습니까? LDAP 또는 Kerberos를 설정하지 않고이 작업을 수행 할 수있는 방법이 있습니까?


서버 설정

서버가 Ubuntu 16.04설치되었고 두 명의 사용자가 있습니다.

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는 repo에서 설치되었으며 테스트 폴더를 내보내도록 구성되었습니다.

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두 명의 사용자가 있지만 사용자 이름은 같지만 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

그러나 그것은 아무런 차이가없는 것으로 보입니다.



답변

NFSv4는 Kerberos 및 보안 특징을 사용하지 않을 때 생각할 수있는 UID 및 GID를 변환하지 않습니다. 그러나 그것은 당신이 설명한대로 정확하게 작동합니다. 그 이유는 NFSv4가 AUTH_SYS보안 을 사용하기 때문입니다 . 자세한 설명은 여기를 참조하십시오 .


답변