Tôi đã có một chút bận tâm bởi NFS4 trên Linux. Một số thông tin 'ngoài kia' dường như mâu thuẫn với thông tin khác và thông tin khác có vẻ khó tìm. Vì vậy, đây là một vài điều thu hút sự chú ý của tôi, hy vọng ai đó ngoài kia có thể làm sáng tỏ điều này.
Câu hỏi này tập trung hoàn toàn vào NFS4 mà không có Kerberos, v.v.
1. Xuất khẩu
Có thông tin mơ hồ trong exports
trang chủ về cấu trúc của / etc / export.
Để trích dẫn từ exports(5)
:
Ngoài ra, mỗi dòng có thể có một hoặc nhiều thông số kỹ thuật cho các tùy chọn mặc định sau tên đường dẫn, dưới dạng dấu gạch ngang ("-") theo sau là danh sách tùy chọn.
Danh sách tùy chọn chỉ được sử dụng cho tất cả các lần xuất tiếp theo trên dòng đó.
"Chỉ xuất khẩu tiếp theo trên dòng đó" có nghĩa là gì?
1.2 fsid=0
không cần thiết nữa?
Tôi đã tìm kiếm fsid khi tôi tìm thấy một nhận xét về danh sách linux-nfs nói rằng fsid = 0 không còn cần thiết nữa. Bây giờ tôi chỉ bối rối, tôi có cần nó với nfs4 hay không?!
2. Thư mục không xuất vẫn có thể gắn kết
Nói rằng tôi có cây sau:
/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
Và tôi có các mục sau trong mục fstab này:
/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
Và xuất khẩu của tôi là chính xác này:
/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
Và exportfs -arv
cho thấy:
exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
Vậy thì tại sao tôi có thể làm điều này và không gặp lỗi nào trên máy khách:
mount -t nfs4 server:/exp/users /tmp/test
Mặc dù /exp/users
không được xuất khẩu? Tôi đã không xuất thư mục này và trong khi tôi không thấy nội dung /dev/disk/by-label/users
trừ khi tôi chỉ định crossmnt
, tôi vẫn có thể ghi vào thư mục. Tất cả mọi thứ tôi viết ở đó đều đi đến thư mục cơ bản /exp/users
có thể nhìn thấy khi tôi umount /exp/users; ls /exp/users
..
3. Trường hợp kỳ lạ của showmount -d server
Như đã nêu rpc.mountd(8)
, lệnh này sẽ hiển thị các thư mục hiện đang được gắn bởi máy khách hoặc các mục cũ trong /var/lib/nfs/rmtab
, như có thể được đọc:
Trình nền rpc.mountd đăng ký mọi yêu cầu MNT thành công bằng cách thêm một mục vào tệp / var / lib / nfs / rmtab. Khi Nhận yêu cầu UMNT từ máy khách NFS, rpc.mountd chỉ cần xóa mục nhập phù hợp khỏi / var / lib / nfs / rmtab, miễn là danh sách kiểm soát truy cập cho xuất đó cho phép người gửi đó truy cập vào xuất.
(...)
Tuy nhiên, lưu ý rằng có rất ít để đảm bảo rằng nội dung của / var / lib / nfs / rmtab là chính xác. Một khách hàng có thể tiếp tục truy cập xuất ngay cả sau khi gọi UMNT. Nếu máy khách khởi động lại mà không gửi yêu cầu UMNT, các mục cũ vẫn còn cho máy khách đó trong / var / lib / nfs / rmtab.
Sau khi đọc xong, tôi chắc chắn tự hỏi:
- Không phải là quá an toàn khi chỉ để lộ loại thông tin khách hàng này;
- Các quản trị viên máy chủ không biết rằng bị ràng buộc phải có một rmtab với rất nhiều khách hàng cũ;
- Đây có phải là lý do mà các máy khách gắn kết các thư mục nfs4 với
mount -v
để xem đầu ra như "không có gì được gắn kết" ngay cả khi một cái gì đó được gắn kết?
Tôi có rất nhiều câu hỏi khác liên quan đến nfs4, nhưng tôi sẽ giữ nó tại thời điểm này .. :)