Ánh xạ người dùng NFSv4


12

Câu hỏi này dường như đã được hỏi nhiều lần rồi, nhưng những câu trả lời khác bằng cách nào đó không áp dụng cho tôi.

Về cơ bản tôi chỉ thiết lập một máy chủ NFSv4 mới và tôi đang đối mặt với vấn đề kinh điển trong đó UID và GID không khớp giữa máy chủ và máy khách. Tuy nhiên, syncronizing / etc / passwd và / etc / group là không khả thi trong kịch bản của tôi. Lưu ý rằng tôi có cùng một người dùng trên cả hai máy (trái ngược với câu hỏi này ).

Do đó, tôi đã xem xét idmap: theo một số nguồn, có vẻ như NFSv4 gửi tên người dùng (trái ngược với hành vi của NFSv3 để gửi UID / GID) và vai trò của idmap sẽ là dịch các tên người dùng này sang UID / GID của máy chủ.

Tuy nhiên, điều này dường như không hoạt động trong trường hợp của tôi (chi tiết thiết lập bên dưới), mà tôi cho là rất chuẩn (khá nhiều chỉ cài đặt NFS từ repo).

Tui bỏ lỡ điều gì vậy? Có cách nào để thực hiện công việc này mà không cần thiết lập LDAP hoặc Kerberos không?


Thiết lập máy chủ

Máy chủ đã Ubuntu 16.04được cài đặt và hai người dùng.

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 đã được cài đặt từ repo và được cấu hình để xuất một thư mục thử nghiệm.

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)

Vì máy chủ và máy khách có tên máy chủ khác nhau, tôi đã thay đổi giá trị "Miền" trong tệp cấu hình của idmapd. Mặt khác, tệp giống hệt với tệp được cài đặt bởi trình quản lý gói. Xin lưu ý rằng nội dung của tệp này là giống hệt nhau trên cả máy chủ và máy khách.

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

Thiết lập máy khách

Máy khách cũng có Ubuntu 16.04và hai người dùng, tuy nhiên có cùng tên người dùng nhưng UID / GID khác nhau .

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 đã được cài đặt từ repo và chia sẻ thử nghiệm đã được gắn kết.

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

Kiểm tra

Đầu tiên tôi tạo một tệp trên máy khách và điều này có vẻ ổn:

user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov  2 17:24 testfile

Nhưng khi tôi xem tệp từ máy chủ, tôi nhận thấy rằng chủ sở hữu là sai, trong khi nhóm không tồn tại.

user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov  2 17:24 testfile

Thí nghiệm

Theo câu trả lời này cho một câu hỏi tương tự, ánh xạ id nên được kích hoạt như sau, trên máy chủ (thông báo lỗi):

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

Trong khi trên máy khách (chú ý không có lỗi):

user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c

Nhưng kết quả thật kỳ lạ:

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

Một câu trả lời khác đề nghị sửa đổi cấu hình idmapd như sau (nội dung giống nhau trên cả hai máy):

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

Nhưng điều đó dường như không làm cho bất kỳ sự khác biệt.

Câu trả lời:


6

NFSv4 sẽ không dịch UID và GID như bạn nghĩ khi không sử dụng Kerberos và hương vị bảo mật. Nhưng nó chính xác hoạt động như bạn mô tả. Lý do là NFSv4 sẽ sử dụng AUTH_SYSbảo mật. Một mô tả chi tiết hơn có thể được tìm thấy ở đây .


2
Cảm ơn bạn đã trả lời của bạn và các liên kết, rất nhiều thông tin. Nhưng vẫn không thể phù hợp với bối cảnh ... vậy mục đích của việc lập bản đồ là gì? Tại sao nó được gọi là "rpcidmapd" nếu nó không hoạt động với rpc? Và tác dụng của các lệnh này là gì?
matpen

FWIW, dường như có thể kích hoạt ánh xạ id NFSv4 ngay cả khi sử dụng AUTH_SYScho câu hỏi này: unix.stackexchange.com/q/438939/111905
sxc731 23/07/19

@ sxc731: từ kinh nghiệm của tôi và tôi đã làm một bài kiểm tra hôm nay, sử dụng idmapvới AUTH_SYSdịch UID và GID chính xác. Nhưng các quyền hiệu quả không được dịch và ngay cả khi lsnó hiển thị các thư mục hoặc tệp riêng của bạn, bạn sẽ không thể thay đổi vì ID số không khớp và với AUTH_SYSID số được sử dụng cho quyền truy cập.
Thomas

1
@Thomas đúng. Khi ánh xạ ID được bật ON sec=sys, các tệp sẽ xuất hiện theo bản đồ ID nhưng việc viết sẽ hoạt động như thể không có ánh xạ ID nào xảy ra. Một tham chiếu khác : "Mặc dù số uid / gid không còn được sử dụng trong giao thức NFSv4 ngoại trừ tùy chọn trong các chuỗi trên, chúng vẫn sẽ nằm trong các trường xác thực RPC khi sử dụng AUTH_SYS (sec = sys), là mặc định. trong trường hợp này, cả tên người dùng / nhóm và không gian số phải nhất quán giữa máy khách và máy chủ. "
Irfan Latif
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.