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.04
và 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.