NFSv4 사용자 매핑


12

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

기본적으로 새 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

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

답변:


6

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


2
귀하의 답변과 링크에 매우 감사합니다. 그러나 여전히 문맥에 맞출 수는 없습니다 ... 그래서 idmapping의 목적은 무엇입니까? rpc에서 작동하지 않는 경우 왜 "rpcidmapd"라고 불리는가? 그리고 효과 것입니다 이러한 명령은?
matpen

FWIW, AUTH_SYS이 질문에 따라 사용할 때도 NFSv4 ID 매핑을 활성화하는 것이 가능합니다 . unix.stackexchange.com/q/438939/111905
sxc731

@ sxc731 : 내 경험을 바탕으로 오늘 테스트를 수행 idmap했으며 with를 사용 AUTH_SYS하여 UID 및 GID를 올바르게 변환합니다. 그러나 유효 권한은 변환되지 않으며 ls디렉토리 나 파일을 소유 하고 있음에도 불구하고 숫자 ID가 일치하지 않고 AUTH_SYS숫자 ID 와 함께 액세스 권한에 사용 되므로 변경을 수행 할 수 없습니다 .
Thomas

1
@Thomas가 맞습니다. 로 ID 매핑을 설정하면 ID sec=sysmappig에 따라 파일이 표시되지만 ID 매핑이 전혀없는 것처럼 쓰기가 작동합니다. 다른 참조 : "위의 문자열을 제외하고는 uid / gid 번호가 NFSv4 프로토콜에서 더 이상 사용되지 않지만 AUTH_SYS (sec = sys)를 사용할 때 RPC 인증 필드에 그대로 있습니다. 기본값은 다음과 같습니다. 이 경우 모두 사용자 / 그룹 이름과 번호 공간은 클라이언트와 서버 사이의 일치해야합니다. "
이르판 라티프
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.