Hệ thống tập tin NFS. Hệ thống tệp mạng UNIX

Xin chào quý độc giả và quý khách. Có một thời gian nghỉ rất dài giữa các bài đăng, nhưng tôi đã hoạt động trở lại). Trong bài viết hôm nay tôi sẽ xem xét Hoạt động giao thức NFS, Và thiết lập máy chủ NFS và máy khách NFS trên Linux.

Giới thiệu về NFS

NFS (Hệ thống tệp mạng - hệ thống tập tin mạng) theo ý kiến ​​​​của tôi - một giải pháp lý tưởng trên mạng cục bộ, nơi cần trao đổi dữ liệu nhanh (nhanh hơn so với SAMBA và ít tốn tài nguyên hơn so với các hệ thống tệp từ xa có mã hóa - sshfs, SFTP, v.v.) tính bảo mật hàng đầu của thông tin được truyền đi. Giao thức NFS cho phép gắn hệ thống tập tin từ xa qua mạng vào cây thư mục cục bộ, như thể nó là một hệ thống tập tin đĩa được gắn. Điều này cho phép các ứng dụng cục bộ hoạt động với hệ thống tệp từ xa như thể chúng là hệ thống cục bộ. Nhưng bạn cần phải cẩn thận (!) với thiết lập NFS, bởi vì với một cấu hình nhất định, có thể đóng băng hệ điều hành của máy khách để chờ I/O vô tận. Giao thức NFS dựa trên công việc Giao thức RPC, điều này vẫn nằm ngoài tầm hiểu biết của tôi)) nên nội dung trong bài viết sẽ hơi mơ hồ... Trước khi có thể sử dụng NFS, dù là máy chủ hay máy khách, bạn phải đảm bảo rằng kernel của bạn có hỗ trợ cho tệp NFS hệ thống. Bạn có thể kiểm tra xem kernel có hỗ trợ hệ thống tệp NFS hay không bằng cách xem sự hiện diện của các dòng tương ứng trong tệp /proc/hệ thống tập tin:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

Nếu các dòng được chỉ định trong tệp /proc/hệ thống tập tin không xuất hiện thì bạn cần cài đặt các gói được mô tả bên dưới. Điều này rất có thể sẽ cho phép bạn cài đặt các mô-đun hạt nhân phụ thuộc để hỗ trợ các hệ thống tệp được yêu cầu. Nếu sau khi cài đặt các gói, hỗ trợ NFS không được hiển thị trong tệp đã chỉ định thì bạn sẽ cần phải kích hoạt chức năng này.

Câu chuyện Hệ thống tệp mạng

Giao thức NFSđược phát triển bởi Sun Microsystems và có 4 phiên bản trong lịch sử. NFSv1được phát triển vào năm 1989 và được thử nghiệm, chạy trên giao thức UDP. Phiên bản 1 được mô tả trong . NFSv2được phát hành vào cùng năm 1989, được mô tả bởi cùng RFC1094 và cũng dựa trên giao thức UDP, đồng thời cho phép đọc không quá 2GB từ một tệp. NFSv3được hoàn thiện vào năm 1995 và được mô tả trong . Những cải tiến chính của phiên bản thứ ba là hỗ trợ các tệp lớn, hỗ trợ thêm cho giao thức TCP và các gói TCP lớn, giúp tăng tốc đáng kể hiệu suất của công nghệ. NFSv4được hoàn thiện vào năm 2000 và được mô tả trong RFC 3010, được sửa đổi vào năm 2003 và được mô tả trong . Phiên bản thứ tư bao gồm các cải tiến về hiệu suất, hỗ trợ các phương tiện xác thực khác nhau (đặc biệt là Kerberos và LIPKEY sử dụng giao thức RPCSEC GSS) và danh sách kiểm soát truy cập (cả loại POSIX và Windows). Phiên bản NFS v4.1đã được IESG phê duyệt vào năm 2010 và nhận được số . Một cải tiến quan trọng trong phiên bản 4.1 là đặc điểm kỹ thuật của pNFS - Parallel NFS, một cơ chế cho phép máy khách NFS song song truy cập dữ liệu từ nhiều máy chủ NFS phân tán. Sự hiện diện của một cơ chế như vậy trong tiêu chuẩn hệ thống tệp mạng sẽ giúp xây dựng các hệ thống thông tin và lưu trữ “đám mây” phân tán.

máy chủ NFS

Vì chúng tôi có NFS- Cái này mạng hệ thống tập tin, sau đó cần thiết. (Bạn cũng có thể đọc bài viết). Tiếp theo là cần thiết. Trên Debian đây là một gói nfs-kernel-servernfs-chung, trong RedHat đây là một gói nfs-utils. Ngoài ra, bạn cần cho phép daemon chạy ở các mức thực thi hệ điều hành được yêu cầu (lệnh trong RedHat - /sbin/chkconfig nfs bật, trong Debian - /usr/sbin/update-rc.d mặc định nfs-kernel-server).

Các gói đã cài đặt trong Debian được khởi chạy theo thứ tự sau:

ARCHIV ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx 1 root root 20/10/18 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 27/10/22 01:23 S16nfs-kernel-server -> ../init.d /nfs-kernel-server

Tức là nó bắt đầu trước nfs-chung, thì chính máy chủ nfs-kernel-server. Trong RedHat, tình huống tương tự, ngoại trừ duy nhất là tập lệnh đầu tiên được gọi nfslock và máy chủ được gọi đơn giản nfs. Về nfs-chung Trang web debian cho chúng ta biết nguyên văn điều này: các tệp được chia sẻ cho máy khách và máy chủ NFS, gói này phải được cài đặt trên máy sẽ hoạt động như máy khách hoặc máy chủ NFS. Gói này bao gồm các chương trình: lockd, statd, showmount, nfsstat, gssd và idmapd. Xem nội dung của tập lệnh khởi chạy /etc/init.d/nfs-common bạn có thể theo dõi trình tự công việc sau: tập lệnh kiểm tra sự hiện diện của tệp nhị phân thực thi /sbin/rpc.statd, kiểm tra sự hiện diện trong tập tin /etc/default/nfs-common, /etc/fstab/etc/xuất khẩu các tham số yêu cầu chạy daemon idmapd gssd , khởi động daemon /sbin/rpc.statd , sau đó trước khi ra mắt /usr/sbin/rpc.idmapd/usr/sbin/rpc.gssd kiểm tra sự hiện diện của các tệp nhị phân thực thi này, sau đó tìm daemon /usr/sbin/rpc.idmapd kiểm tra phòng trống sunrpc, nfsnfsd, cũng như hỗ trợ hệ thống tập tin rpc_pipefs trong kernel (nghĩa là có nó trong tệp /proc/hệ thống tập tin), nếu mọi thứ thành công, nó sẽ bắt đầu /usr/sbin/rpc.idmapd . Ngoài ra, đối với con quỷ /usr/sbin/rpc.gssd Séc mô-đun hạt nhân rpcsec_gss_krb5 và khởi động daemon.

Nếu bạn xem nội dung Kịch bản khởi động máy chủ NFS trên Debian ( /etc/init.d/nfs-kernel-server), thì bạn có thể làm theo trình tự sau: khi khởi động, tập lệnh sẽ kiểm tra sự tồn tại của tệp /etc/xuất khẩu, Khả dụng nfsd, sự sẵn có của sự hỗ trợ Hệ thống tập tin NFS trong (nghĩa là trong tập tin /proc/hệ thống tập tin), nếu mọi thứ đều ổn thì daemon sẽ bắt đầu /usr/sbin/rpc.nfsd , sau đó kiểm tra xem tham số có được chỉ định không NEED_SVCGSD(được đặt trong tệp cài đặt máy chủ /etc/default/nfs-kernel-server) và, nếu được, sẽ khởi động daemon /usr/sbin/rpc.svcgssd , khởi chạy daemon lần cuối /usr/sbin/rpc.mountd . Từ kịch bản này rõ ràng là Hoạt động của máy chủ NFS bao gồm daemon rpc.nfsd, rpc.mountd và nếu xác thực Kerberos được sử dụng thì daemon rcp.svcgssd. Trong chiếc mũ đỏ, daemon rpc.rquotad và nfslogd vẫn đang chạy (Vì lý do nào đó trong Debian, tôi không tìm thấy thông tin về daemon này và lý do vắng mặt, có vẻ như nó đã bị xóa...).

Từ đó trở nên rõ ràng rằng Máy chủ Hệ thống tệp mạng bao gồm các quy trình sau (đọc: daemon), nằm trong thư mục /sbin và /usr/sbin:

Trong NFSv4, khi sử dụng Kerberos, các daemon bổ sung sẽ được khởi động:

  • rpc.gssd- Daemon NFSv4 cung cấp các phương thức xác thực thông qua GSS-API (xác thực Kerberos). Hoạt động trên máy khách và máy chủ.
  • rpc.svcgssd- Trình nền máy chủ NFSv4 cung cấp xác thực ứng dụng khách phía máy chủ.

portmap và giao thức RPC (Sun RPC)

Ngoài các gói trên cần có gói bổ sung để NFSv2 và v3 hoạt động chính xác sơ đồ cổng(được thay thế trong các bản phân phối mới hơn bằng cách đổi tên thành rpcbind). Gói này thường được cài đặt tự động với NFS như một gói phụ thuộc và thực hiện hoạt động của máy chủ RPC, nghĩa là nó chịu trách nhiệm phân công động các cổng cho một số dịch vụ được đăng ký trong máy chủ RPC. Theo nghĩa đen, theo tài liệu, đây là một máy chủ chuyển đổi số chương trình RPC (Cuộc gọi thủ tục từ xa) thành số cổng TCP/UDP. portmap hoạt động trên một số thực thể: Cuộc gọi hoặc yêu cầu RPC, Cổng TCP/UDP,phiên bản giao thức(tcp hoặc udp), số chương trìnhphiên bản phần mềm. Daemon portmap được khởi chạy bởi tập lệnh /etc/init.d/portmap trước khi dịch vụ NFS khởi động.

Nói tóm lại, công việc của máy chủ RPC (Cuộc gọi thủ tục từ xa) là xử lý các cuộc gọi RPC (còn gọi là thủ tục RPC) từ các quy trình cục bộ và từ xa. Bằng cách sử dụng các cuộc gọi RPC, các dịch vụ sẽ tự đăng ký hoặc tự xóa khỏi/từ trình ánh xạ cổng (còn gọi là trình ánh xạ cổng, hay còn gọi là portmap, hay còn gọi là portmapper, hay còn gọi là trong các phiên bản mới, rpcbind) và khách hàng sử dụng các lệnh gọi RPC để gửi yêu cầu đến trình ánh xạ cổng để nhận thông tin cần thiết . Tên thân thiện với người dùng của các dịch vụ chương trình và số tương ứng của chúng được xác định trong tệp /etc/rpc. Ngay sau khi bất kỳ dịch vụ nào gửi yêu cầu tương ứng và tự đăng ký trên máy chủ RPC trong trình ánh xạ cổng, máy chủ RPC sẽ chỉ định, ánh xạ tới dịch vụ các cổng TCP và UDP mà dịch vụ bắt đầu và lưu trữ trong kernel thông tin tương ứng về dịch vụ đang chạy (tên), dịch vụ số duy nhất (theo /etc/rpc), về giao thức và cổng mà dịch vụ chạy trên đó cũng như về phiên bản của dịch vụ và cung cấp thông tin được chỉ định cho khách hàng theo yêu cầu. Bản thân bộ chuyển đổi cổng có số chương trình (100000), số phiên bản - 2, cổng TCP 111 và cổng UDP 111. Ở trên, khi chỉ định thành phần của daemon máy chủ NFS, tôi đã chỉ ra các số chương trình RPC chính. Có lẽ tôi đã làm bạn bối rối một chút với đoạn này, vì vậy tôi sẽ nói một cụm từ cơ bản để làm rõ mọi thứ: chức năng chính của trình ánh xạ cổng là trả về, theo yêu cầu của khách hàng đã cung cấp số chương trình RPC ( hoặc số chương trình RPC) và phiên bản cho anh ta (máy khách) cổng mà chương trình được yêu cầu đang chạy. Theo đó, nếu client cần truy cập RPC bằng một số chương trình cụ thể, trước tiên nó phải liên hệ với tiến trình portmap trên máy chủ và xác định số cổng giao tiếp với dịch vụ RPC mà nó cần.

Hoạt động của máy chủ RPC có thể được biểu diễn bằng các bước sau:

  1. Bộ chuyển đổi cổng sẽ khởi động trước, thường là khi hệ thống khởi động. Điều này tạo ra một điểm cuối TCP và mở cổng TCP 111. Nó cũng tạo ra một điểm cuối UDP chờ gói dữ liệu UDP đến trên cổng UDP 111.
  2. Khi khởi động, một chương trình chạy qua máy chủ RPC sẽ tạo điểm cuối TCP và điểm cuối UDP cho mỗi phiên bản chương trình được hỗ trợ. (Máy chủ RPC có thể hỗ trợ nhiều phiên bản. Máy khách chỉ định phiên bản được yêu cầu khi thực hiện cuộc gọi RPC.) Số cổng được gán động được gán cho mỗi phiên bản của dịch vụ. Máy chủ ghi lại từng chương trình, phiên bản, giao thức và số cổng bằng cách thực hiện lệnh gọi RPC thích hợp.
  3. Khi chương trình máy khách RPC cần lấy thông tin cần thiết, nó sẽ gọi quy trình phân giải cổng để lấy số cổng được gán động cho chương trình, phiên bản và giao thức đã chỉ định.
  4. Để đáp ứng yêu cầu này, phía bắc trả về số cổng.
  5. Máy khách gửi thông báo yêu cầu RPC tới số cổng thu được ở bước 4. Nếu sử dụng UDP, máy khách chỉ cần gửi một gói dữ liệu UDP chứa thông báo thách thức RPC tới số cổng UDP mà dịch vụ được yêu cầu đang chạy trên đó. Để phản hồi, dịch vụ sẽ gửi một gói dữ liệu UDP chứa thông báo phản hồi RPC. Nếu TCP được sử dụng, máy khách sẽ chủ động mở số cổng TCP của dịch vụ mong muốn và sau đó gửi thông báo thách thức RPC qua kết nối đã thiết lập. Máy chủ phản hồi bằng thông báo phản hồi RPC trên kết nối.

Để lấy thông tin từ máy chủ RPC, hãy sử dụng tiện ích rpcinfo. Khi xác định tham số -p máy chủ chương trình hiển thị danh sách tất cả các chương trình RPC đã đăng ký trên máy chủ. Không chỉ định máy chủ, chương trình sẽ hiển thị các dịch vụ trên localhost. Ví dụ:

ARCHIV ~ # rpcinfo -p prog-ma vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 59451 trạng thái 100024 1 tcp 60872 trạng thái 100021 1 udp 44310 nlockmgr 10002 1 3 udp 44310 nlockmgr 100021 4 udp 44310 nlockmgr 100021 1 tcp 44851 nlockmgr 100021 3 tcp 44851 nlockmgr 100021 4 tcp 44851 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100005 1 udp 51306 mountd 100005 1 tcp 41405 mountd 100005 2 udp 51306 mountd 100005 2 tcp 41405 mountd 100005 3 udp 51306 mountd 100005 3 tcp 41405 mountd

Như bạn có thể thấy, rpcinfo hiển thị (theo cột từ trái sang phải) số chương trình, phiên bản, giao thức, cổng và tên đã đăng ký. Sử dụng rpcinfo, bạn có thể xóa đăng ký chương trình hoặc nhận thông tin về một dịch vụ RPC cụ thể (nhiều tùy chọn hơn trong man rpcinfo). Như bạn có thể thấy, portmapper daemon phiên bản 2 được đăng ký trên cổng udp và tcp, rpc.statd phiên bản 1 trên cổng udp và tcp, trình quản lý khóa NFS phiên bản 1,3,4, nfs server daemon phiên bản 2,3,4. như phiên bản mount daemon 1,2,3.

Máy chủ NFS (chính xác hơn là daemon rpc.nfsd) nhận yêu cầu từ máy khách dưới dạng gói dữ liệu UDP trên cổng 2049. Mặc dù NFS hoạt động với trình phân giải cổng, cho phép máy chủ sử dụng các cổng được gán động, cổng UDP 2049 là được mã hóa cứng thành NFS trong hầu hết các triển khai.

Hoạt động giao thức hệ thống tệp mạng

Gắn NFS từ xa

Quá trình gắn hệ thống tệp NFS từ xa có thể được biểu diễn bằng sơ đồ sau:

Mô tả giao thức NFS khi gắn thư mục từ xa:

  1. Một máy chủ RPC được khởi chạy trên máy chủ và máy khách (thường là lúc khởi động), được phục vụ bởi quy trình portmapper và được đăng ký trên cổng tcp/111 và udp/111.
  2. Các dịch vụ được khởi chạy (rpc.nfsd, rpc.statd, v.v.), được đăng ký trên máy chủ RPC và được đăng ký trên các cổng mạng tùy ý (nếu cổng tĩnh không được chỉ định trong cài đặt dịch vụ).
  3. lệnh mount trên máy khách gửi yêu cầu tới kernel để gắn thư mục mạng, cho biết loại hệ thống tệp, máy chủ và thư mục; kernel gửi và tạo yêu cầu RPC tới quy trình portmap trên máy chủ NFS trên cổng udp /111 (nếu tùy chọn hoạt động qua tcp không được đặt trên máy khách)
  4. Nhân máy chủ NFS truy vấn RPC về sự hiện diện của daemon rpc.mountd và trả về kernel máy khách cổng mạng mà daemon đang chạy trên đó.
  5. mount gửi yêu cầu RPC tới cổng mà rpc.mountd đang chạy. Máy chủ NFS hiện có thể xác thực máy khách dựa trên địa chỉ IP và số cổng của nó để xem liệu máy khách có thể gắn hệ thống tệp được chỉ định hay không.
  6. Trình nền gắn kết trả về mô tả về hệ thống tệp được yêu cầu.
  7. Lệnh mount của máy khách thực hiện lệnh gọi hệ thống mount để liên kết phần xử lý tệp thu được ở bước 5 với điểm gắn kết cục bộ trên máy chủ của máy khách. Trình xử lý tệp được lưu trữ trong mã NFS của máy khách và từ giờ trở đi, mọi quyền truy cập của quy trình người dùng vào các tệp trên hệ thống tệp của máy chủ sẽ sử dụng trình xử lý tệp làm điểm bắt đầu.

Giao tiếp giữa máy khách và máy chủ NFS

Một quyền truy cập điển hình vào hệ thống tập tin từ xa có thể được mô tả như sau:

Mô tả quá trình truy cập tệp nằm trên máy chủ NFS:

  1. Máy khách (quy trình người dùng) không quan tâm liệu nó đang truy cập tệp cục bộ hay tệp NFS. Hạt nhân tương tác với phần cứng thông qua các mô-đun hạt nhân hoặc các lệnh gọi hệ thống tích hợp.
  2. mô-đun hạt nhân hạt nhân/fs/nfs/nfs.ko, thực hiện các chức năng của máy khách NFS, gửi các yêu cầu RPC đến máy chủ NFS thông qua mô-đun TCP/IP. NFS thường sử dụng UDP, tuy nhiên các triển khai mới hơn có thể sử dụng TCP.
  3. Máy chủ NFS nhận yêu cầu từ máy khách dưới dạng gói dữ liệu UDP trên cổng 2049. Mặc dù NFS có thể hoạt động với trình phân giải cổng, cho phép máy chủ sử dụng các cổng được gán động, cổng UDP 2049 được mã hóa cứng thành NFS trong hầu hết các triển khai.
  4. Khi máy chủ NFS nhận được yêu cầu từ máy khách, nó sẽ được chuyển đến quy trình truy cập tệp cục bộ, quy trình này cung cấp quyền truy cập vào đĩa cục bộ trên máy chủ.
  5. Kết quả truy cập đĩa được trả về cho máy khách.

Thiết lập máy chủ NFS

Điều chỉnh máy chủ nói chung bao gồm việc chỉ định các thư mục cục bộ được phép gắn kết bởi các hệ thống từ xa trong một tệp /etc/xuất khẩu. Hành động này được gọi là phân cấp thư mục xuất khẩu. Nguồn thông tin chính về danh mục được xuất là các tệp sau:

  • /etc/xuất khẩu- tệp cấu hình chính lưu trữ cấu hình của các thư mục đã xuất. Được sử dụng khi khởi động NFS và bởi tiện ích importfs.
  • /var/lib/nfs/xtab- chứa danh sách các thư mục được gắn bởi các máy khách từ xa. Được sử dụng bởi trình nền rpc.mountd khi máy khách cố gắng gắn kết một hệ thống phân cấp (một mục gắn kết được tạo).
  • /var/lib/nfs/etab- danh sách các thư mục có thể được gắn kết bởi các hệ thống từ xa, cho biết tất cả các tham số của các thư mục đã xuất.
  • /var/lib/nfs/rmtab- danh sách các thư mục hiện chưa được xuất.
  • /proc/fs/nfsd- một hệ thống tệp đặc biệt (kernel 2.6) để quản lý máy chủ NFS.
    • xuất khẩu- danh sách các hệ thống phân cấp được xuất đang hoạt động và khách hàng mà chúng được xuất, cũng như các tham số. Hạt nhân lấy thông tin này từ /var/lib/nfs/xtab.
    • chủ đề- chứa số lượng chủ đề (cũng có thể thay đổi)
    • bằng cách sử dụng filehandle bạn có thể lấy một con trỏ tới một tập tin
    • và vân vân...
  • /proc/net/rpc- chứa số liệu thống kê "thô", có thể lấy được bằng nfsstat, cũng như các bộ nhớ đệm khác nhau.
  • /var/run/portmap_mapping- thông tin về các dịch vụ được đăng ký trong RPC

Ghi chú: Nói chung trên Internet có rất nhiều cách giải thích và công thức về mục đích của các file xtab, etab, rmtab, không biết nên tin ai, kể cả trên http://nfs.sourceforge.net/ cách giải thích là không rõ ràng.

Thiết lập tệp /etc/exports

Trong trường hợp đơn giản nhất, tệp /etc/exports là tệp duy nhất yêu cầu chỉnh sửa để định cấu hình máy chủ NFS. Tệp này kiểm soát các khía cạnh sau:

  • Những loại khách hàng nào có thể truy cập các tập tin trên máy chủ
  • Những thứ bậc nào? các thư mục trên máy chủ có thể được truy cập bởi mỗi khách hàng
  • Tên khách hàng tùy chỉnh sẽ như thế nào được hiển thị tới tên người dùng cục bộ

Mỗi dòng của tệp xuất có định dạng sau:

import_point client1 (tùy chọn) [client2(tùy chọn) ...]

Ở đâu điểm xuất khẩu đường dẫn tuyệt đối của hệ thống phân cấp thư mục đã xuất, khách hàng1 - n tên của một hoặc nhiều máy khách hoặc địa chỉ IP, cách nhau bằng dấu cách, được phép gắn kết điểm xuất khẩu . Tùy chọn mô tả các quy tắc gắn kết cho khách hàng, được chỉ định trước tùy chọn .

Đây là một điển hình ví dụ về cấu hình tệp xuất khẩu:

ARCHIV ~ # cat /etc/exports /archiv1 files(rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

Trong ví dụ này, các tệp máy tính và 10.0.0.1 được phép truy cập vào điểm xuất /archiv1, trong khi các tệp máy chủ có quyền truy cập đọc/ghi, còn máy chủ 10.0.0.1 và mạng con 10.0.230.1/24 có quyền truy cập chỉ đọc.

Mô tả máy chủ trong /etc/exports được phép ở định dạng sau:

  • Tên của các nút riêng lẻ được mô tả dưới dạng tệp hoặc tệp.DOMAIN.local.
  • Mặt nạ miền được mô tả theo định dạng sau: *DOMAIN.local bao gồm tất cả các nút của miền DOMAIN.local.
  • Mạng con được chỉ định dưới dạng cặp địa chỉ/mặt nạ IP. Ví dụ: 10.0.0.0/255.255.255.0 bao gồm tất cả các nút có địa chỉ bắt đầu bằng 10.0.0.
  • Chỉ định tên của nhóm mạng @myclients có quyền truy cập vào tài nguyên (khi sử dụng máy chủ NIS)

Các tùy chọn chung để xuất phân cấp thư mục

Tệp xuất sử dụng các tùy chọn chung sau(các tùy chọn được sử dụng theo mặc định trong hầu hết các hệ thống được liệt kê đầu tiên, các tùy chọn không mặc định trong ngoặc):

  • auth_nlm (no_auth_nlm) hoặc safe_locks (không an toàn_locks)- chỉ định rằng máy chủ phải yêu cầu xác thực các yêu cầu khóa (sử dụng giao thức Trình quản lý khóa NFS).
  • không ẩn (ẩn)- nếu máy chủ xuất hai hệ thống phân cấp thư mục, với một hệ thống được lồng (gắn kết) bên trong hệ thống kia. Máy khách cần gắn kết rõ ràng hệ thống phân cấp thứ hai (con), nếu không điểm gắn kết của hệ thống phân cấp con sẽ xuất hiện dưới dạng một thư mục trống. Tùy chọn nohide dẫn đến hệ thống phân cấp thư mục thứ hai mà không có sự gắn kết rõ ràng. ( ghi chú: Tôi không thể làm cho tùy chọn này hoạt động...)
  • ro(rw)- Chỉ cho phép đọc (ghi) các yêu cầu. (Cuối cùng, việc có thể đọc/ghi hay không được xác định dựa trên quyền của hệ thống tệp và máy chủ không thể phân biệt yêu cầu đọc tệp với yêu cầu thực thi nên cho phép đọc nếu người dùng đã đọc hoặc thực thi quyền.)
  • an toàn (không an toàn)- yêu cầu các yêu cầu NFS đến từ các cổng an toàn (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • cây con_check (no_subtree_check)- Nếu một thư mục con của hệ thống tệp được xuất chứ không phải toàn bộ hệ thống tệp thì máy chủ sẽ kiểm tra xem tệp được yêu cầu có nằm trong thư mục con được xuất hay không. Việc tắt xác minh làm giảm tính bảo mật nhưng lại tăng tốc độ truyền dữ liệu.
  • đồng bộ hóa (không đồng bộ)- chỉ định rằng máy chủ chỉ phản hồi các yêu cầu sau khi những thay đổi do các yêu cầu đó thực hiện đã được ghi vào đĩa. Tùy chọn không đồng bộ yêu cầu máy chủ không đợi thông tin được ghi vào đĩa, điều này cải thiện hiệu suất nhưng làm giảm độ tin cậy vì Trong trường hợp ngắt kết nối hoặc lỗi thiết bị, thông tin có thể bị mất.
  • wdelay (no_wdelay)- hướng dẫn máy chủ trì hoãn việc thực hiện các yêu cầu ghi nếu yêu cầu ghi tiếp theo đang chờ xử lý, ghi dữ liệu theo khối lớn hơn. Điều này cải thiện hiệu suất khi gửi hàng đợi lệnh ghi lớn. no_wdelay chỉ định không trì hoãn việc thực thi lệnh ghi, điều này có thể hữu ích nếu máy chủ nhận được một số lượng lớn các lệnh không liên quan.

Xuất các liên kết tượng trưng và tập tin thiết bị. Khi xuất hệ thống phân cấp thư mục chứa các liên kết tượng trưng, ​​​​đối tượng liên kết phải có thể truy cập được đối với hệ thống máy khách (từ xa), nghĩa là một trong các quy tắc sau phải đúng:

Tệp thiết bị thuộc về giao diện. Khi bạn xuất file thiết bị, giao diện này sẽ được xuất. Nếu hệ thống máy khách không có thiết bị cùng loại thì thiết bị được xuất sẽ không hoạt động. Trên hệ thống máy khách, khi gắn các đối tượng NFS, bạn có thể sử dụng tùy chọn gật đầu để các tệp thiết bị trong thư mục được gắn không được sử dụng.

Các tùy chọn mặc định có thể khác nhau giữa các hệ thống và có thể được tìm thấy trong /var/lib/nfs/etab. Sau khi mô tả thư mục đã xuất trong /etc/exports và khởi động lại máy chủ NFS, tất cả các tùy chọn bị thiếu (đọc: tùy chọn mặc định) sẽ được phản ánh trong tệp /var/lib/nfs/etab.

Tùy chọn hiển thị ID người dùng (khớp)

Để hiểu rõ hơn về những điều sau đây, tôi khuyên bạn nên đọc bài viết. Mỗi người dùng Linux có UID và GID chính riêng, được mô tả trong các tệp /etc/passwd/etc/nhóm. Máy chủ NFS giả định rằng hệ điều hành của máy chủ từ xa đã xác thực người dùng và gán cho họ UID và GID chính xác. Việc xuất tệp cung cấp cho người dùng hệ thống máy khách quyền truy cập tương tự vào các tệp đó như thể chúng được ghi trực tiếp trên máy chủ. Theo đó, khi một máy khách NFS gửi yêu cầu đến máy chủ, máy chủ sẽ sử dụng UID và GID để nhận dạng người dùng trên hệ thống cục bộ, điều này có thể dẫn đến một số vấn đề:

  • một người dùng có thể không có cùng số nhận dạng trên cả hai hệ thống và do đó có thể truy cập vào tệp của người dùng khác.
  • bởi vì Nếu ID của người dùng root luôn là 0 thì người dùng này sẽ được ánh xạ tới người dùng cục bộ tùy thuộc vào các tùy chọn được chỉ định.

Các tùy chọn sau đây đặt quy tắc hiển thị người dùng từ xa ở địa phương:

  • root_squash (no_root_squash)- Với tùy chọn được chỉ định root_squash, các yêu cầu từ người dùng root sẽ được ánh xạ tới uid/gid ẩn danh hoặc tới người dùng được chỉ định trong tham số anonuid/anongid.
  • no_all_squash (all_squash)- Không thay đổi UID/GID của người dùng kết nối. Lựa chọn all_squashđặt hiển thị TẤT CẢ người dùng (không chỉ root) là ẩn danh hoặc được chỉ định trong tham số anonuid/anongid.
  • anonuid= UID anongid= GID - Đặt rõ ràng UID/GID cho người dùng ẩn danh.
  • bản đồ_static= /etc/file_maps_users - Chỉ định một tệp trong đó bạn có thể đặt ánh xạ UID/GID từ xa thành UID/GID cục bộ.

Ví dụ về việc sử dụng tệp ánh xạ người dùng:

ARCHIV ~ # cat /etc/file_maps_users # Ánh xạ người dùng # nhận xét cục bộ từ xa uid 0-50 1002 # ánh xạ người dùng với UID từ xa 0-50 tới UID cục bộ 1002 gid 0-50 1002 # ánh xạ người dùng với/kéo dài GID từ xa 0-50 tới GID địa phương 1002

Quản lý máy chủ NFS

Máy chủ NFS được quản lý bằng các tiện ích sau:

  • nfsstat
  • gắn kết showmsecure (không an toàn)

nfsstat: Thống kê NFS và RPC

Tiện ích nfsstat cho phép bạn xem số liệu thống kê của máy chủ RPC và NFS. Các tùy chọn lệnh có thể được tìm thấy trong man nfsstat.

showmount: Hiển thị thông tin trạng thái NFS

tiện ích showmount truy vấn daemon rpc.mountd trên máy chủ từ xa về hệ thống tệp được gắn. Theo mặc định, một danh sách khách hàng đã được sắp xếp sẽ được trả về. Phím:

  • --tất cả- một danh sách các máy khách và các điểm gắn kết được hiển thị cho biết nơi máy khách gắn kết thư mục. Thông tin này có thể không đáng tin cậy.
  • --thư mục- một danh sách các điểm gắn kết được hiển thị
  • --xuất khẩu- danh sách các hệ thống tệp đã xuất được hiển thị theo quan điểm của nfsd

Khi bạn chạy showmount không có đối số, thông tin về hệ thống được phép mount sẽ được in ra console địa phương danh mục. Ví dụ: máy chủ ARCHIV cung cấp cho chúng tôi danh sách các thư mục được xuất với địa chỉ IP của máy chủ được phép gắn kết các thư mục được chỉ định:

FILES ~ # showmount --exports archive Xuất danh sách để lưu trữ: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

Nếu bạn chỉ định tên máy chủ/IP trong đối số, thông tin về máy chủ này sẽ được hiển thị:

ARCHIV ~ # showmount files clnt_create: RPC: Chương trình chưa được đăng ký # thông báo này cho chúng ta biết rằng daemon NFSd không chạy trên máy chủ FILES

importfs: quản lý các thư mục đã xuất

Lệnh này phục vụ các thư mục đã xuất được chỉ định trong tệp /etc/xuất khẩu, sẽ chính xác hơn nếu viết rằng nó không phục vụ mà đồng bộ hóa với tệp /var/lib/nfs/xtab và xóa những cái không tồn tại khỏi xtab. importfs được thực thi khi daemon nfsd được khởi động với đối số -r. Tiện ích importfs ở chế độ kernel 2.6 giao tiếp với daemon rpc.mountd thông qua các tệp trong thư mục /var/lib/nfs/ và không giao tiếp trực tiếp với kernel. Không có tham số, hiển thị danh sách các hệ thống tệp hiện được xuất.

thông số xuất khẩu:

  • [client:directory-name] - thêm hoặc xóa hệ thống tệp được chỉ định cho ứng dụng khách được chỉ định)
  • -v - hiển thị thêm thông tin
  • -r - tái xuất tất cả các thư mục (đồng bộ hóa /etc/exports và /var/lib/nfs/xtab)
  • -u - xóa khỏi danh sách đã xuất
  • -a - thêm hoặc xóa tất cả các hệ thống tập tin
  • -o - các tùy chọn được phân tách bằng dấu phẩy (tương tự như các tùy chọn được sử dụng trong /etc/exports; tức là bạn có thể thay đổi các tùy chọn của hệ thống tệp đã được gắn)
  • -i - không sử dụng /etc/exports khi thêm, chỉ sử dụng các tùy chọn dòng lệnh hiện tại
  • -f - đặt lại danh sách các hệ thống đã xuất trong kernel 2.6;

Máy khách NFS

Trước khi truy cập một tệp trên hệ thống tệp từ xa, máy khách (hệ điều hành máy khách) phải gắn kết nó và nhận từ máy chủ con trỏ tới nó. Gắn kết NFS có thể được thực hiện bằng hoặc sử dụng một trong các công cụ gắn kết tự động đang phát triển nhanh chóng (amd, autofs, automount, supermount, superpupermount). Quá trình cài đặt được thể hiện rõ trong hình minh họa ở trên.

TRÊN Khách hàng NFS không cần chạy bất kỳ daemon nào, chức năng khách hàng thực thi một mô-đun hạt nhân kernel/fs/nfs/nfs.ko, được sử dụng khi gắn hệ thống tệp từ xa. Các thư mục đã xuất từ ​​máy chủ có thể được gắn trên máy khách theo các cách sau:

  • thủ công bằng lệnh mount
  • tự động khi khởi động, khi gắn hệ thống tệp được mô tả trong /etc/fstab
  • tự động sử dụng daemon autofs

Tôi sẽ không xem xét phương pháp thứ ba với autofs trong bài viết này do lượng thông tin khổng lồ của nó. Có lẽ sẽ có mô tả riêng trong các bài viết sau.

Gắn hệ thống tệp mạng bằng lệnh mount

Một ví dụ về việc sử dụng lệnh mount được trình bày trong bài viết. Ở đây tôi sẽ xem một ví dụ về lệnh mount để gắn hệ thống tệp NFS:

FILES ~ # mount -t nfs archive:/archiv-small /archivs/archiv-small FILES ~ # mount -t nfs -o ro archive:/archiv-big /archivs/archiv-big FILES ~ # mount..... .. archive:/archiv-small trên /archivs/archiv-small loại nfs (rw,addr=10.0.0.6) archivev:/archiv-big trên /archivs/archiv-big loại nfs (ro,addr=10.0.0.6)

Lệnh đầu tiên gắn kết thư mục đã xuất /archiv-nhỏ trên máy chủ lưu trữđến điểm gắn kết cục bộ /archivs/archiv-nhỏ với các tùy chọn mặc định (tức là đọc và viết). Mặc dù lệnh gắn kết trong các bản phân phối mới nhất, nó có thể hiểu loại hệ thống tệp nào được sử dụng ngay cả khi không chỉ định loại nhưng vẫn chỉ ra tham số -t nfs mong muốn. Lệnh thứ hai gắn kết thư mục đã xuất /archiv-big trên máy chủ lưu trữ vào thư mục cục bộ /archivs/archiv-big với tùy chọn chỉ đọc ( ro). lệnh gắn kết không có thông số, nó hiển thị rõ ràng cho chúng ta kết quả lắp đặt. Ngoài tùy chọn chỉ đọc (ro), có thể chỉ định khác Các tùy chọn cơ bản khi mount NFS:

  • nosuid- Tùy chọn này cấm thực thi các chương trình từ thư mục được gắn.
  • gật đầu(không có thiết bị - không phải thiết bị) - Tùy chọn này cấm sử dụng ký tự và chặn các tệp đặc biệt làm thiết bị.
  • khóa (nolock)- Cho phép khóa NFS (mặc định). nolock vô hiệu hóa khóa NFS (không khởi động daemon lockd) và rất hữu ích khi làm việc với các máy chủ cũ không hỗ trợ khóa NFS.
  • mounthost=tên- Tên của máy chủ nơi trình nền gắn kết NFS đang chạy - mountd.
  • mountport=n - Cổng được sử dụng bởi daemon gắn kết.
  • cổng=n- cổng được sử dụng để kết nối với máy chủ NFS (mặc định là 2049 nếu daemon rpc.nfsd chưa được đăng ký trên máy chủ RPC). Nếu n=0 (mặc định), thì NFS sẽ truy vấn sơ đồ cổng trên máy chủ để xác định cổng.
  • rsize=n(đọc kích thước khối - đọc kích thước khối) - Số byte được đọc tại một thời điểm từ máy chủ NFS. Tiêu chuẩn - 4096.
  • wsize=n(write block size - write block size) - Số byte được ghi một lần vào máy chủ NFS. Tiêu chuẩn - 4096.
  • tcp hoặc udp- Để mount NFS, sử dụng giao thức TCP hoặc UDP tương ứng.
  • bg- Nếu bạn mất quyền truy cập vào máy chủ, hãy thử lại ở chế độ nền để không chặn quá trình khởi động hệ thống.
  • fg- Nếu bạn mất quyền truy cập vào máy chủ, hãy thử lại ở chế độ ưu tiên. Tùy chọn này có thể chặn quá trình khởi động hệ thống bằng cách lặp lại các lần thử gắn kết. Vì lý do này, tham số fg được sử dụng chủ yếu để gỡ lỗi.

Các tùy chọn ảnh hưởng đến bộ nhớ đệm thuộc tính trên các mount NFS

Thuộc tính tệp, được lưu trữ trong (inodes), chẳng hạn như thời gian sửa đổi, kích thước, liên kết cứng, chủ sở hữu, thường thay đổi không thường xuyên đối với các tệp thông thường và thậm chí ít thay đổi hơn đối với các thư mục. Nhiều chương trình, chẳng hạn như ls, truy cập các tệp chỉ đọc và không thay đổi thuộc tính hoặc nội dung tệp mà gây lãng phí tài nguyên hệ thống cho các hoạt động mạng tốn kém. Để tránh lãng phí tài nguyên, bạn có thể lưu trữ các thuộc tính này. Kernel sử dụng thời gian sửa đổi của tệp để xác định xem bộ đệm có bị lỗi thời hay không bằng cách so sánh thời gian sửa đổi trong bộ đệm và thời gian sửa đổi của chính tệp đó. Bộ đệm thuộc tính được cập nhật định kỳ theo các tham số đã chỉ định:

  • ac (noac) (bộ đệm thuộc tính- bộ nhớ đệm thuộc tính) - Cho phép bộ nhớ đệm thuộc tính (mặc định). Mặc dù tùy chọn noac làm chậm máy chủ nhưng nó tránh được tình trạng cứng nhắc của thuộc tính khi nhiều máy khách đang tích cực ghi thông tin vào một hệ thống phân cấp chung.
  • acdirmax=n (tập tin thư mục bộ đệm thuộc tính tối đa- bộ nhớ đệm thuộc tính tối đa cho một tệp thư mục) - Số giây tối đa mà NFS đợi trước khi cập nhật thuộc tính thư mục (mặc định là 60 giây)
  • acdirmin=n (tập tin thư mục bộ đệm thuộc tính tối thiểu- bộ nhớ đệm thuộc tính tối thiểu cho một tệp thư mục) - Số giây tối thiểu mà NFS đợi trước khi cập nhật thuộc tính thư mục (mặc định là 30 giây)
  • acregmax=n (bộ đệm thuộc tính tập tin thông thường tối đa- bộ nhớ đệm thuộc tính tối đa cho một tệp thông thường) - Số giây tối đa mà NFS đợi trước khi cập nhật các thuộc tính của một tệp thông thường (mặc định là 60 giây)
  • acregmin=n (bộ đệm thuộc tính tập tin thông thường tối thiểu- bộ nhớ đệm thuộc tính tối thiểu cho một tệp thông thường) - Số giây tối thiểu mà NFS đợi trước khi cập nhật các thuộc tính của tệp thông thường (mặc định là 3 giây)
  • hoạt động=n (hết thời gian chờ bộ đệm thuộc tính- hết thời gian lưu bộ nhớ đệm thuộc tính) - Thay thế các giá trị cho tất cả các tùy chọn trên. Nếu atimeo không được chỉ định thì các giá trị trên sẽ lấy giá trị mặc định.

Tùy chọn xử lý lỗi NFS

Các tùy chọn sau đây kiểm soát những gì NFS thực hiện khi không có phản hồi từ máy chủ hoặc khi xảy ra lỗi I/O:

  • fg(bg) (vấn đề xung quanh- vấn đề xung quanh, lý lịch- nền) - Cố gắng gắn NFS bị lỗi ở nền trước/nền sau.
  • cứng (mềm)- hiển thị thông báo "máy chủ không phản hồi" trên bảng điều khiển khi hết thời gian chờ và tiếp tục cố gắng gắn kết. Với tùy chọn được đưa ra mềm mại- trong thời gian chờ, thông báo cho chương trình đã gọi thao tác đó về lỗi I/O. (không nên sử dụng tùy chọn mềm)
  • nointr (intr) (không bị gián đoạn- không làm gián đoạn) - Không cho phép tín hiệu làm gián đoạn hoạt động của tệp trong hệ thống phân cấp thư mục được gắn cứng khi đạt đến thời gian chờ lớn. nội tâm- cho phép gián đoạn.
  • truyền lại=n (giá trị truyền lại- giá trị truyền lại) - Sau n thời gian chờ nhỏ, NFS tạo ra thời gian chờ lớn (mặc định 3). Thời gian chờ lớn sẽ ngừng hoạt động hoặc in thông báo "máy chủ không phản hồi" tới bảng điều khiển, tùy thuộc vào việc tùy chọn cứng/mềm có được chỉ định hay không.
  • thử lại=n (giá trị thử lại- giá trị thử lại) - Số phút dịch vụ NFS sẽ lặp lại các thao tác gắn kết trước khi từ bỏ (mặc định là 10000).
  • thời gian=n (giá trị thời gian chờ- giá trị thời gian chờ) - Số phần mười giây mà dịch vụ NFS đợi trước khi truyền lại trong trường hợp RPC hoặc thời gian chờ nhỏ (mặc định là 7). Giá trị này tăng theo mỗi lần hết thời gian chờ lên tới tối đa 60 giây hoặc cho đến khi xảy ra thời gian chờ lớn. Nếu mạng bận, máy chủ chậm hoặc yêu cầu đi qua nhiều bộ định tuyến hoặc cổng, việc tăng giá trị này có thể cải thiện hiệu suất.

Tự động gắn NFS khi khởi động (mô tả hệ thống tệp trong /etc/fstab)

Bạn có thể chọn thời gian tối ưu cho một giá trị cụ thể của gói được truyền (giá trị rsize/wsize) bằng lệnh ping:

FILES ~ # ping -s 32768 archive PING archive.DOMAIN.local (10.0.0.6) 32768(32796) byte dữ liệu. 32776 byte từ archive.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0,931 ms 32776 byte từ Archiv.domain.local (10.0.0.6): icmp_req=2 ttl=64 time=0,958 ms 32776 byte từ archive.domain.local (10.0.0.6): icmp_req=3 ttl=64 time=1,03 ms 32776 byte từ archive.domain.local (10.0.0.6): icmp_req=4 ttl=64 time=1,00 ms 32776 byte từ kho lưu trữ .domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1,08 ms ^C --- archive.DOMAIN.local ping stats --- 5 gói được truyền, 5 gói đã nhận, mất gói 0%, thời gian 4006 ms rtt tối thiểu/trung bình/tối đa/mdev = 0,931/1,002/1,083/0,061 mili giây

Như bạn có thể thấy, khi gửi một gói có kích thước 32768 (32Kb), thời gian di chuyển của nó từ máy khách đến máy chủ và quay lại khoảng 1 mili giây. Nếu thời gian này vượt quá 200 mili giây thì bạn nên nghĩ đến việc tăng giá trị thời gian để nó vượt quá giá trị trao đổi từ ba đến bốn lần. Theo đó, nên thực hiện kiểm tra này khi tải mạng nặng.

Khởi chạy NFS và thiết lập Tường lửa

Ghi chú được sao chép từ blog http://bog.pp.ru/work/NFS.html, cảm ơn rất nhiều!!!

Chạy máy chủ NFS, gắn kết, chặn, hạn ngạch và trạng thái với các cổng "chính xác" (đối với tường lửa)

  • Trước tiên nên ngắt kết nối tất cả tài nguyên trên máy khách
  • dừng và vô hiệu hóa rpcidmapd khi bắt đầu nếu bạn không định sử dụng NFSv4: chkconfig --level 345 rpcidmapd off service rpcidmapd stop
  • nếu cần, hãy cho phép các dịch vụ portmap, nfs và nfslock khởi động: chkconfig --levels 345 portmap/rpcbind on chkconfig --levels 345 nfs on chkconfig --levels 345 nfslock on
  • nếu cần, hãy dừng các dịch vụ nfslock và nfs, khởi động portmap/rpcbind, dỡ bỏ các mô-đun dịch vụ nfslock dừng dịch vụ nfs dừng dịch vụ portmap start # dịch vụ rpcbind bắt đầu umount /proc/fs/nfsd dịch vụ rpcidmapd dừng rmmod nfsd dịch vụ autofs dừng # ở đâu đó sau đó phải được khởi chạy rmmod nfs rmmod nfs_acl rmmod lockd
  • mở cổng trong
    • cho RPC: UDP/111, TCP/111
    • cho NFS: UDP/2049, TCP/2049
    • cho rpc.statd: UDP/4000, TCP/4000
    • cho khóa: UDP/4001, TCP/4001
    • cho mountd: UDP/4002, TCP/4002
    • cho rpc.rquota: UDP/4003, TCP/4003
  • đối với máy chủ rpc.nfsd, hãy thêm dòng RPCNFSDARGS="--port 2049" vào /etc/sysconfig/nfs
  • đối với máy chủ gắn kết, hãy thêm dòng MOUNTD_PORT=4002 vào /etc/sysconfig/nfs
  • để định cấu hình rpc.rquota cho các phiên bản mới, bạn cần thêm dòng RQUOTAD_PORT=4003 vào /etc/sysconfig/nfs
  • để định cấu hình rpc.rquota, cần có các phiên bản cũ hơn (tuy nhiên, bạn phải có gói hạn ngạch 3.08 hoặc mới hơn) thêm vào /etc/services rquotad 4003/tcp rquotad 4003/udp
  • sẽ kiểm tra tính đầy đủ của /etc/exports
  • chạy các dịch vụ rpc.nfsd, mountd và rpc.rquota (rpcsvcgssd và rpc.idmapd được khởi chạy cùng lúc, nếu bạn nhớ xóa chúng) service nfsd start hoặc trong các phiên bản mới service nfs start
  • đối với máy chủ chặn cho các hệ thống mới, hãy thêm dòng LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 vào /etc/sysconfig/nfs
  • đối với máy chủ khóa dành cho các hệ thống cũ hơn, hãy thêm trực tiếp vào /etc/modprobe[.conf]: options lockd nlm_udpport=4001 nlm_tcpport=4001
  • liên kết máy chủ trạng thái rpc.statd với cổng 4000 (đối với các hệ thống cũ hơn, hãy chạy rpc.statd bằng khóa chuyển -p 4000 trong /etc/init.d/nfslock) STATD_PORT=4000
  • bắt đầu dịch vụ lockd và rpc.statd dịch vụ nfslock bắt đầu
  • đảm bảo rằng tất cả các cổng được liên kết bình thường bằng cách sử dụng "lsof -i -n -P" và "netstat -a -n" (một số cổng được sử dụng bởi các mô-đun hạt nhân mà lsof không nhìn thấy)
  • nếu trước khi "xây dựng lại" máy chủ đã được khách hàng sử dụng và chúng không thể được kết nối, thì bạn sẽ phải khởi động lại dịch vụ gắn kết tự động trên máy khách (am-utils, autofs)

Ví dụ về cấu hình máy chủ và máy khách NFS

Cấu hình máy chủ

Nếu bạn muốn đặt thư mục chia sẻ NFS của mình ở chế độ công khai và có thể ghi, bạn có thể sử dụng tùy chọn all_squash kết hợp với các lựa chọn vô cảmanongid. Ví dụ: để đặt quyền cho người dùng "không ai" trong nhóm "không ai", bạn có thể làm như sau:

ARCHIV ~ # cat /etc/exports # Quyền truy cập đọc và ghi cho máy khách trên 192.168.0.100, với quyền truy cập rw cho người dùng 99 với gid 99 /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99) ) # Quyền truy cập đọc và ghi cho máy khách trên 192.168.0.100, với quyền truy cập rw cho người dùng 99 với gid 99 /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Điều này cũng có nghĩa là nếu bạn muốn cho phép truy cập vào thư mục được chỉ định thì không ai.nobody phải là chủ sở hữu của thư mục dùng chung:

người đàn ông gắn kết
xuất khẩu đàn ông
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/nfs_perf.htm - Hiệu suất NFS của IBM.

Trân trọng, McSim!

1.4 Hệ thống tập tin mạng

Hệ thống tệp CIFS thống trị thị trường hệ thống tệp mạng dành cho nền tảng Windows. Trên nền tảng UNIX, nền tảng chính là Hệ thống tệp mạng (NFS). Ngoài ra, NFS được coi là hệ thống tệp được áp dụng rộng rãi đầu tiên, có từ giữa những năm 1980. Tuy nhiên, mặc dù có một số chức năng chung giữa CIFS và NFS (hệ thống tệp mạng cho phép máy khách truy cập tài nguyên máy chủ), các hệ thống này có các đặc điểm kiến ​​trúc hoàn toàn khác nhau. Với việc phát hành NFS phiên bản 4, một số khác biệt đã được sửa đổi.
Giao thức CIFS lưu trữ dữ liệu dịch vụ cụ thể cho từng khách hàng. Trước phiên bản 3, hệ thống tệp NFS không giữ lại trạng thái máy khách, trạng thái này đã thay đổi trong phiên bản 4.
Máy khách NFS không "thương lượng" với máy chủ NFS để thiết lập phiên. Các biện pháp bảo mật được thực hiện cho toàn bộ phiên hoặc từng giao tiếp giữa máy khách và máy chủ. Tùy chọn thứ hai cực kỳ tốn kém để triển khai, vì vậy NFS giao trách nhiệm bảo mật cho khách hàng. Máy chủ "giả định" rằng ID người dùng trên hệ thống máy khách và máy chủ giống nhau (và máy khách đã xác minh danh tính của người dùng trước khi cho phép anh ta đăng ký theo ID được chỉ định). Ngoài ra, NFS còn cung cấp một mức độ bảo mật nhất định bằng cách kiểm soát danh sách các hệ thống tệp mà máy khách có thể gắn kết. Mỗi khi máy khách CIFS mở một tệp, nhận một phần xử lý tệp (nghĩa là dữ liệu dịch vụ mà máy chủ phải lưu trữ) và sử dụng nó để thực hiện các hoạt động đọc hoặc ghi phía máy khách, máy chủ NFS sẽ truy vấn máy chủ và trả về tệp xử lý. Bộ mô tả tệp này được xử lý bởi các máy khách hỗ trợ tiêu chuẩn NFS 3 và NFS 2. Máy khách lưu trữ bộ mô tả tệp kết quả và mong muốn bộ mô tả luôn trỏ đến cùng một tệp.
Đối với những người quen thuộc với UNIX, bộ mô tả tệp thường bao gồm số inode, số lượng tạo inode và ID tệp được liên kết với phân vùng đĩa. Chỉ cần nói rằng inode là một cấu trúc dữ liệu cực kỳ quan trọng được sử dụng trong các hệ thống tệp UNIX. Thông tin đầy đủ được lưu trữ để loại bỏ các bộ điều khiển được khách hàng lưu vào bộ đệm ẩn nếu tệp tương ứng cho bộ điều khiển đã thay đổi và bộ điều khiển phải trỏ đến một tệp khác. Ví dụ: nếu một tệp bị xóa và một tệp cùng tên được sao chép vào vị trí của nó, bộ đếm tạo inode sẽ bị thay đổi và bộ mô tả tệp được máy khách lưu vào bộ đệm sẽ không hợp lệ. Hệ thống tệp NFS 4 có sự khác biệt trong cách triển khai.
Một số máy khách NFS thực hiện bộ nhớ đệm phía máy khách bằng cách lưu trữ dữ liệu trên đĩa, tương tự như bộ nhớ đệm CIFS. Ngoài ra, một số máy khách NFS thay đổi giá trị thời gian chờ tùy thuộc vào thời gian phản hồi của máy chủ. Máy chủ phản hồi càng chậm thì giá trị thời gian chờ càng lớn và ngược lại.
Hệ thống tệp NFS được thiết kế để vận chuyển độc lập và ban đầu sử dụng giao thức truyền tải UDP. Các loại NFS khác nhau có thể sử dụng TCP và các giao thức khác.

1.4.1 Hệ thống tệp mạng phiên bản 3

Hệ thống tệp NFS 3 cải thiện hiệu suất, đặc biệt đối với các tệp lớn, bằng cách cho phép máy khách và máy chủ tự động chọn lượng dữ liệu tối đa được truyền trong một phần tử gói logic khi ghi hoặc đọc. Trong hệ thống tệp NFS 2, kích thước gói được giới hạn ở 8 KB. Nói cách khác, máy khách có thể gửi tối đa 8 KB trong yêu cầu ghi và máy chủ có thể gửi tối đa 8 KB trong phản hồi yêu cầu đọc. Ngoài ra, NFS 3 đã xác định lại độ lệch tệp và kích thước dữ liệu. Hiện tại đây là các giá trị 64 bit, thay vì 32 bit trong NFS 2.
Dưới đây là một số tính năng của NFS 3.
■ Bộ mô tả tập tin trong NFS 3 có kích thước thay đổi; kích thước tối đa của chúng là 64 bit.
■ Hệ thống tệp NFS 3 cho phép máy khách và máy chủ chọn kích thước tối đa cho tên tệp và thư mục.
■ NFS 3 xác định danh sách các lỗi mà máy chủ có thể trả về cho máy khách. Máy chủ phải trả về một trong các lỗi được chỉ định hoặc không có lỗi nào cả.
■ Trong NFS 3, máy chủ được phép lưu vào bộ đệm dữ liệu mà máy khách đã gửi cùng với yêu cầu ghi. Máy chủ có thể lưu trữ dữ liệu vào bộ đệm và gửi phản hồi yêu cầu đến máy khách trước khi dữ liệu được ghi vào đĩa. Lệnh COMMIT cũng đã được thêm vào, cho phép khách hàng đảm bảo rằng tất cả dữ liệu đã gửi đã được ghi vào đĩa. Điều này giúp có thể đạt được sự cân bằng giữa việc cải thiện hiệu suất và duy trì tính toàn vẹn dữ liệu.
■ NFS 3 giảm số lượng thao tác yêu cầu/phản hồi giữa máy khách và máy chủ. Để thực hiện việc này, dữ liệu thuộc tính tệp sẽ được gửi cùng với yêu cầu ban đầu. Trong NFS 2, máy khách được yêu cầu lấy tên tệp và bộ mô tả cho mỗi tệp, chỉ sau đó các thuộc tính tệp mới được truyền đi.

1.4.2 Hệ thống tệp mạng phiên bản 4

NFS 4 đã đại tu hoàn toàn các nguyên tắc cơ bản và triển khai nhiều tính năng dành riêng cho CIFS, điều này khiến một số người ủng hộ NFS rất khó chịu. Nếu nhìn vào lịch sử của các hệ thống file mạng, bạn có thể thấy rằng NFS đã trở nên phổ biến. Hệ thống tệp SMB được thiết kế để tính đến các điểm mạnh và điểm yếu của NFS và hiện nay, ít nhất là trong số các khách hàng, CIFS/SMB phổ biến hơn và NFS đang phát triển để tính đến các ưu điểm và nhược điểm của CIFS/SMB. Các tính năng nổi bật sau đây đã được thêm vào NFS 4 để cải thiện hiệu suất, bảo mật và khả năng tương tác với CIFS.
■ NFS 4 đã giới thiệu yêu cầu COMPOUND, cho phép bạn đóng gói nhiều yêu cầu thành một yêu cầu duy nhất và nhiều phản hồi thành một phản hồi duy nhất. Sự đổi mới này được thiết kế để cải thiện hiệu suất bằng cách giảm tải mạng và giảm độ trễ khi các yêu cầu và phản hồi truyền qua mạng. Nếu điều này nghe có vẻ giống tính năng CIFS AndX SMB (xem Phần 3.3.5.1), thì đó có thể không phải là một sự trùng hợp đơn giản.
■ Hệ thống tệp mạng phiên bản 4 mượn một số tính năng từ WebNFS của Sun. Đặc biệt, NFS 4 hỗ trợ một số giao thức phụ trong đặc tả cơ sở, giúp NFS phù hợp hơn khi sử dụng với tường lửa. NFS 3 trở về trước đã sử dụng một giao thức đặc biệt để gắn kết chia sẻ máy chủ vào cây hệ thống tệp cục bộ. Vì dịch vụ giao thức mount không được chỉ định cổng TCP hoặc UDP nên trước tiên, máy khách sẽ gửi yêu cầu tới daemon portmapper, nơi cung cấp số cổng mà dịch vụ mount lắng nghe các yêu cầu. Do đó, ngoài NFS, các giao thức gắn kết và ánh xạ cổng cũng tham gia vào quá trình này. Hơn nữa, vì dịch vụ gắn kết có thể sử dụng một cổng tùy ý nên việc định cấu hình tường lửa trở nên rất khó khăn. Trong NFS 4, giao thức ánh xạ cổng và mount đã bị xóa. Ngoài ra, khóa đã được bao gồm trong đặc tả giao thức NFS cơ sở và giao thức NLM (Trình quản lý khóa mạng), được sử dụng trong các phiên bản NFS trước đó, đã vĩnh viễn không được dùng nữa.
■ Hệ thống tệp NFS 4 yêu cầu sử dụng giao thức truyền tải cung cấp khả năng phát hiện tắc nghẽn mạng. Điều này có nghĩa là máy khách và máy chủ NFS sẽ dần dần chuyển sang TCP thay vì UDP, thường được sử dụng với NFS 3.
■ NFS 2 và NFS 3 cho phép sử dụng bộ ký tự Hoa Kỳ. ASCII hoặc ISO Latin 1. Điều này gây ra sự cố khi máy khách sử dụng một bộ ký tự tạo một tệp và tệp đó được máy khách truy cập bằng bộ ký tự khác. NFS 4 sử dụng bộ ký tự UTF-8, hỗ trợ nén nhỏ gọn các ký tự 16 và 32 bit để truyền qua mạng. Ngoài ra, bộ ký tự UTF-8 chứa đủ thông tin để tránh sự cố khi tạo tệp bằng một bộ ký tự và truy cập tệp bằng bộ ký tự khác.
■ Hệ thống tệp NFS 4 yêu cầu máy khách xử lý các bộ mô tả tệp riêng biệt. Trong NFS 3, máy khách có thể lưu bộ điều khiển vào bộ đệm dưới dạng một đối tượng, trong khi máy chủ đảm bảo rằng bộ điều khiển luôn trỏ đến một tệp. NFS 4 định nghĩa hai loại mô tả tệp. Một cái được gọi là bộ mô tả tệp liên tục và có khả năng của bộ mô tả tệp từ NFS 3. Bộ mô tả tệp tạm thời thứ hai, giả định rằng bộ mô tả hết hạn sau một khoảng thời gian hoặc sự kiện nhất định. Đây là tính năng dành cho các máy chủ có hệ thống tệp (chẳng hạn như NTFS) không thể cung cấp ánh xạ nhất quán giữa các tệp được hiển thị và các thẻ điều khiển.
■ NFS 4 bổ sung hỗ trợ cho các hoạt động OPEN và CLOSE, ngữ nghĩa của chúng cho phép tương tác với các máy khách CIFS. Lệnh OPEN tạo dữ liệu trạng thái trên máy chủ.
■ Hỗ trợ yêu cầu OPEN của NFS 4 cho phép khách hàng đưa ra yêu cầu mở tệp có cấu trúc tương tự như yêu cầu mở ứng dụng Windows. Lựa chọn chia sẻ tệp với các ứng dụng khách khác hoặc quyền truy cập độc quyền vào tệp cũng được hỗ trợ.

1.4.2.1 Bảo mật NFS 4

Hệ thống tệp NFS 4 cho phép bạn tăng cường tính bảo mật của dữ liệu được lưu trữ. Đặc biệt, NFS 4 bổ sung thêm hỗ trợ cho nhiều thuộc tính tệp hơn. Một trong những thuộc tính này là danh sách kiểm soát truy cập kiểu Windows NT (ACL). Điều này cho phép cải thiện khả năng tương tác giữa các hệ thống tệp và cấu trúc bảo mật mạnh mẽ hơn.
Trong khi ở NFS 2 và NFS 3, việc sử dụng các tính năng bảo mật chỉ được khuyến nghị thì ở NFS 4, việc sử dụng này đã trở thành bắt buộc. Hệ thống tệp NFS 4 yêu cầu triển khai cơ chế bảo mật bằng giao diện RPCSEC_GSS (Dịch vụ bảo mật chung) nói chung và giao thức Kerberos 5/LIPKEY nói riêng. Lưu ý rằng RPCSEC_GSS chỉ hoạt động như một API và cơ chế truyền tải cho các nhãn và dữ liệu liên quan đến bảo mật. Hệ thống tệp NFS 4 cho phép thực hiện nhiều sơ đồ xác thực và bảo mật cũng như khả năng chọn sơ đồ thích hợp cho máy khách và máy chủ.
Chúng ta hãy chú ý nghiên cứu công nghệ LIPKEY, công nghệ này sử dụng kết hợp mã hóa đối xứng và bất đối xứng. Máy khách mã hóa dữ liệu người dùng và mật khẩu bằng khóa 128 bit được tạo ngẫu nhiên. Mã hóa được thực hiện bằng thuật toán đối xứng, tức là. cùng một khóa phải được sử dụng để giải mã. Vì máy chủ cần khóa này để giải mã tin nhắn nên một khóa được tạo ngẫu nhiên phải được gửi đến máy chủ. Máy khách mã hóa khóa (được tạo ngẫu nhiên) bằng khóa chung của máy chủ. Máy chủ giải mã dữ liệu bằng khóa riêng của nó, trích xuất khóa đối xứng và giải mã dữ liệu và mật khẩu người dùng.
Khách hàng có thể xác thực máy chủ bằng chứng chỉ máy chủ và các dịch vụ của cơ quan cấp chứng chỉ được sử dụng để xác minh chứng chỉ. Một trong những phương pháp hack phổ biến là chặn các gói dữ liệu “ngoài hành tinh” rồi gửi đi sau một khoảng thời gian nhất định. Khi sử dụng Kerberos, hệ thống tệp NFS sẽ thêm dấu thời gian vào mỗi gói. Máy chủ ghi lại dấu thời gian nhận được gần đây và so sánh chúng với dấu thời gian của các gói RPC mới. Nếu dấu thời gian của gói cũ hơn dấu thời gian mà máy chủ nhận được trước đó, máy chủ sẽ bỏ qua các gói đã nhận

1.5 Vấn đề truy cập khi sử dụng nhiều giao thức

Một số công ty đã bắt đầu cung cấp các hệ thống hỗ trợ đồng thời CIFS, NFS và các máy khách hệ thống tệp mạng khác. Các nhà cung cấp đã thực hiện rất nhiều công việc để cố gắng vượt qua những thách thức kỹ thuật phát sinh từ việc khách hàng có khả năng sử dụng các hệ điều hành và hệ thống tệp khác nhau. Xin lưu ý rằng vấn đề không phát sinh với chính dữ liệu mà với siêu dữ liệu của tệp. Một thử nghiệm đơn giản cho những vấn đề như vậy là sao chép một tệp từ máy chủ sang máy khách và quay lại máy chủ (hoặc ngược lại). Khi tệp được đặt vào tài nguyên ban đầu, siêu dữ liệu sẽ chứa các giá trị cơ sở, tức là. Quyền truy cập tệp và dấu thời gian không được thay đổi. Nếu điều này không đúng thì vấn đề đã được phát hiện.
Sau đây là ví dụ về một số vấn đề kỹ thuật có thể xảy ra.
■ Các hệ điều hành khác nhau sử dụng các phương pháp khác nhau để theo dõi quyền truy cập của người dùng và nhóm.
■ Các hệ điều hành và hệ thống tệp khác nhau có ngữ nghĩa khác nhau để mở và khóa tệp.
■ Quy ước đặt tên tập tin được xử lý theo nhiều cách khác nhau. Các hệ thống tệp khác nhau có cách thể hiện khác nhau về kích thước tối đa của tên tệp, giá trị viết hoa của tên tệp và bộ ký tự được phép trong tên.
■ Dữ liệu và cấu trúc của chúng khác nhau trong các hệ thống tập tin khác nhau; ví dụ: một số hệ thống tệp theo dõi hai dấu thời gian, trong khi các hệ thống khác theo dõi ba dấu thời gian (thời gian truy cập tệp lần cuối, tệp được sửa đổi lần cuối và tệp được tạo). Ngay cả khi cả hai hệ thống tệp đều theo dõi hai dấu thời gian thì đơn vị đo lường có thể khác nhau. Một ví dụ khác là đơn vị đo độ lệch trong tệp. Một số hệ thống tệp hỗ trợ độ lệch 32 bit và một số hỗ trợ độ lệch 16 hoặc 64 bit.
■ Các vấn đề về địa chỉ của các ổ khóa được hiển thị. Máy chủ CIFS thực thi khóa: nếu một máy khách đã khóa một vùng của tệp thì mọi thao tác ghi vào vùng tệp đó của một máy khách khác sẽ dẫn đến lỗi. Tuy nhiên, khóa bắt buộc không được máy chủ NFS hỗ trợ. Do đó, bạn phải chọn xem khóa có được thực thi hay không, điều này sẽ dẫn đến thông báo lỗi được gửi đến máy khách NFS.

Dịch vụ mạng

Bài giảng 10

Tập hợp các bộ phận máy chủ và máy khách của HĐH cung cấp quyền truy cập vào một loại tài nguyên máy tính cụ thể qua mạng được gọi là dịch vụ mạng. Phần máy khách thực hiện các yêu cầu mạng tới phần máy chủ của một máy tính khác. Phần máy chủ đáp ứng các yêu cầu về tài nguyên máy chủ cục bộ. Phần client hoạt động, phần server thụ động.

Trong giao tiếp mạng, quyền truy cập mạng vào hệ thống tệp đóng một vai trò quan trọng. Trong trường hợp này, các phần máy khách và máy chủ, cùng với hệ thống tệp mạng, tạo thành dịch vụ tập tin

Thành phần chính của hệ điều hành phân tán là hệ thống tệp mạng. Một hệ thống tệp mạng được hỗ trợ bởi một hoặc nhiều máy tính lưu trữ tệp (máy chủ tập tin)

Khách hàng máy tính đính kèm hoặc gắn kết các hệ thống tệp này vào hệ thống tệp cục bộ của chúng

Dịch vụ tập tin bao gồm các chương trình máy chủ và chương trình máy khách tương tác qua mạng bằng giao thức.

Dịch vụ tệp bao gồm chính dịch vụ tệp (thao tác tệp) và dịch vụ thư mục (quản lý thư mục)

Mô hình dịch vụ tệp mạng bao gồm các thành phần sau:

Hệ thống tệp cục bộ (FAT, NTFS)

Giao diện hệ thống tệp cục bộ (Cuộc gọi hệ thống)

Máy chủ hệ thống tệp mạng

Máy khách hệ thống tệp mạng (Windows Explorer, UNIX shell, v.v.)

Giao diện hệ thống tệp mạng (lặp lại các cuộc gọi hệ thống tệp cục bộ)

Hệ thống tệp mạng Giao thức máy khách-máy chủ (Khối thông báo máy chủ SMB cho Windows, NFS (Hệ thống tệp mạng) và FTP (Giao thức truyền tệp) cho UNIX)

Giao diện hệ thống tệp mạng

Có một số loại giao diện, được đặc trưng bởi:

Cấu trúc tập tin. Hầu hết các hệ thống tệp mạng đều hỗ trợ tệp phẳng

Khả năng sửa đổi tệp. Hầu hết các hệ thống tệp mạng đều có khả năng sửa đổi một tệp. Một số hệ thống tập tin phân tán cấm các hoạt động sửa đổi. Chỉ có thể tạo và đọc. Đối với các tệp như vậy, việc tổ chức bộ nhớ đệm và sao chép sẽ dễ dàng hơn.

Ngữ nghĩa phân tách tập tin:

Ngữ nghĩa UNIX (tập trung). Nếu một lần đọc theo sau nhiều lần ghi, bản cập nhật mới nhất sẽ được đọc. Nguyên tắc này cũng có thể áp dụng được trong hệ thống tệp phân tán, miễn là có một máy chủ tệp và không có bộ nhớ đệm tệp trên máy khách.

Ngữ nghĩa phiên. Các thay đổi bắt đầu sau khi tệp được mở và hoàn tất sau khi tệp được đóng. Nói cách khác, đối với các quy trình khác, các thay đổi chỉ hiển thị sau khi đóng tệp. Trong trường hợp này, có vấn đề khi chia sẻ tệp. Ngữ nghĩa của các tập tin bất biến. Tập tin chỉ có thể được tạo và đọc. Bạn cũng có thể tạo lại tệp dưới một tên khác. Do đó, tệp không thể được sửa đổi nhưng có thể được thay thế bằng một tệp mới. Không có vấn đề chia sẻ.



Cơ chế giao dịch.Đây là cách làm việc với file chia sẻ sử dụng cơ chế giao dịch (các thao tác không thể phân chia)

Kiểm soát truy cập. Ví dụ, đối với Windows NT/2000 có hai cơ chế: ở cấp thư mục (đối với FAT) và ở cấp độ tệp (NTFS)

Đơn vị truy cập. Mô hình tải lên/tải xuống tệp đầy đủ (FTP). Mô hình thứ hai là việc sử dụng các thao tác trên tập tin.

Giao thức Network File Server (NFS) là một tiêu chuẩn mở để cung cấp cho người dùng quyền truy cập từ xa vào hệ thống tệp. Các hệ thống tệp tập trung được xây dựng trên đó giúp thực hiện các tác vụ hàng ngày như sao lưu hoặc quét vi-rút dễ dàng hơn và các phân vùng đĩa hợp nhất dễ bảo trì hơn nhiều phân vùng phân tán, nhỏ hơn.

Ngoài việc cung cấp khả năng lưu trữ tập trung, NFS đã được chứng minh là rất hữu ích cho các ứng dụng khác, bao gồm máy khách không cần đĩa và máy khách mỏng, phân cụm mạng và cộng tác phần mềm trung gian.

Việc hiểu rõ hơn về bản thân giao thức cũng như các chi tiết thực hiện của nó sẽ giúp giải quyết các vấn đề thực tế dễ dàng hơn. Bài viết này dành riêng cho NFS và bao gồm hai phần logic: đầu tiên, nó mô tả chính giao thức và các mục tiêu đặt ra trong quá trình phát triển nó, sau đó là việc triển khai NFS trong Solaris và UNIX.

Ở ĐÂU TẤT CẢ BẮT ĐẦU...

Giao thức NFS được Sun Microsystems phát triển và xuất hiện trên Internet vào năm 1989 với tên RFC 1094 với tiêu đề sau: Đặc tả giao thức hệ thống tệp mạng (NFS). Thật thú vị khi lưu ý rằng chiến lược của Novell vào thời điểm đó là nhằm cải thiện hơn nữa các dịch vụ tệp. Cho đến gần đây, trước khi phong trào nguồn mở bùng nổ, Sun vẫn miễn cưỡng chia sẻ bí mật về các giải pháp mạng của mình, nhưng ngay cả khi đó công ty vẫn hiểu tầm quan trọng của khả năng tương tác với các hệ thống khác.

RFC 1094 chứa hai thông số kỹ thuật ban đầu. Vào thời điểm xuất bản, Sun đã phát triển phiên bản thứ ba tiếp theo của thông số kỹ thuật, được nêu trong RFC 1813 “Đặc tả giao thức NFS Phiên bản 3”. Phiên bản 4 của giao thức này được xác định trong RFC 3010, Giao thức NFS Phiên bản 4.

NFS được sử dụng rộng rãi trên tất cả các loại máy chủ UNIX, trên mạng Microsoft và Novell cũng như trên các giải pháp của IBM như AS400 và OS/390. Mặc dù chưa được biết đến bên ngoài vương quốc mạng, nhưng NFS có lẽ là hệ thống tệp mạng độc lập với nền tảng phổ biến nhất.

UNIX LÀ GENESIS

Mặc dù NFS là một hệ thống độc lập với nền tảng nhưng tổ tiên của nó là UNIX. Nói cách khác, kiến ​​trúc phân cấp của kiến ​​trúc và các phương pháp truy cập tệp, bao gồm cấu trúc hệ thống tệp, cách xác định người dùng và nhóm cũng như các kỹ thuật xử lý tệp, đều rất giống với hệ thống tệp UNIX. Ví dụ: hệ thống tệp NFS, có cấu trúc giống hệt hệ thống tệp UNIX, được gắn trực tiếp vào nó. Khi làm việc với NFS trên các hệ điều hành khác, các tham số nhận dạng người dùng và quyền truy cập tệp phải được ánh xạ.

NFS

NFS được thiết kế để sử dụng trong kiến ​​trúc client-server. Máy khách truy cập hệ thống tệp được máy chủ NFS xuất thông qua một điểm gắn kết trên máy khách. Quyền truy cập này thường trong suốt đối với ứng dụng khách.

Không giống như nhiều hệ thống máy khách-máy chủ, NFS sử dụng Cuộc gọi thủ tục từ xa (RPC) để trao đổi thông tin. Thông thường, máy khách sẽ thiết lập kết nối đến một cổng đã biết trước đó và sau đó, theo giao thức, sẽ gửi yêu cầu để thực hiện một hành động cụ thể. Trong trường hợp các cuộc gọi thủ tục từ xa, máy khách tạo một cuộc gọi thủ tục và sau đó gửi nó đến máy chủ để thực hiện. Một mô tả chi tiết về NFS sẽ được trình bày dưới đây.

Ví dụ: giả sử một máy khách đã gắn thư mục usr2 trên hệ thống tệp gốc cục bộ:

/root/usr2/ -> từ xa:/root/usr/

Nếu một ứng dụng khách cần tài nguyên từ thư mục này, nó chỉ cần gửi yêu cầu tới hệ điều hành về nó và tên tệp, cấp quyền truy cập thông qua ứng dụng khách NFS. Ví dụ, hãy xem xét lệnh cd UNIX đơn giản, lệnh này “không biết gì” về các giao thức mạng. Đội

CD /root/usr2/

sẽ đặt thư mục làm việc trên một hệ thống tệp từ xa, “mà không hề nhận ra” (người dùng cũng không cần điều này) rằng hệ thống tệp đó ở xa.

Sau khi nhận được yêu cầu, máy chủ NFS sẽ kiểm tra xem người dùng có quyền thực hiện hành động được yêu cầu hay không và nếu câu trả lời là tích cực thì sẽ thực hiện nó.

HÃY BIẾT TỐT HƠN

Theo quan điểm của khách hàng, quy trình gắn cục bộ một hệ thống tệp từ xa bằng NFS bao gồm một số bước. Như đã đề cập, máy khách NFS sẽ đưa ra lệnh gọi thủ tục từ xa để thực thi trên máy chủ. Lưu ý rằng trong UNIX, máy khách là một chương trình duy nhất (lệnh mount), trong khi máy chủ thực sự được triển khai dưới dạng một số chương trình với tập hợp tối thiểu sau: dịch vụ ánh xạ cổng, trình nền gắn kết và máy chủ NFS. .

Lệnh client mount trước tiên giao tiếp với dịch vụ dịch cổng của máy chủ, dịch vụ này lắng nghe các yêu cầu trên cổng 111. Hầu hết việc triển khai lệnh client mount đều hỗ trợ nhiều phiên bản NFS, điều này làm tăng khả năng tìm thấy phiên bản giao thức chung cho máy khách và máy chủ. Việc tìm kiếm được thực hiện bắt đầu từ phiên bản cao nhất nên khi tìm thấy phiên bản chung, nó sẽ tự động trở thành phiên bản mới nhất được máy khách và máy chủ hỗ trợ.

(Tài liệu được trình bày tập trung vào phiên bản thứ ba của NFS, vì đây là phiên bản phổ biến nhất hiện nay. Phiên bản thứ tư chưa được hầu hết các triển khai hỗ trợ.)

Dịch vụ dịch cổng của máy chủ phản hồi các yêu cầu dựa trên giao thức được hỗ trợ và cổng mà trình nền gắn kết đang chạy. Chương trình mount client trước tiên thiết lập kết nối tới daemon mount của máy chủ và sau đó đưa ra lệnh mount tới nó thông qua RPC. Nếu quy trình này thành công thì ứng dụng khách sẽ kết nối với máy chủ NFS (cổng 2049) và sử dụng một trong 20 quy trình từ xa được xác định trong RFC 1813 và được liệt kê trong Bảng 1, sẽ có quyền truy cập vào hệ thống tệp từ xa.

Ý nghĩa của hầu hết các lệnh đều mang tính trực quan và không gây khó khăn gì cho người quản trị hệ thống. Danh sách sau đây, thu được bằng cách sử dụng tcdump, minh họa lệnh đọc được tạo bởi lệnh UNIX cat để đọc tệp có tên test-file:

10:30:16.012010 eth0 > 192.168.1.254. 3476097947 > 192.168.1.252.2049: 144 tra cứu fh 32.0/ 224145 "tệp kiểm tra" 10:30:16.012010 eth0 > 192.168.1.254. 3476097947 > 192.168.1.252.2049: 144 tra cứu fh 32.0/ 224145 "tệp kiểm tra" 10:30:16.012729 eth0 192.168.1.254.3476097947: trả lời ok 128 tra cứu fh 32.0/2243 07 (DF) 10:30: 16.012729 eth0 192.168 .1.254.3476097947: trả lời ok 128 tra cứu fh 32.0/224307 (DF) 10:30:16.013124 eth0 > 192.168.1.254. 3492875163 > 192.168.1.252.2049: 140 đọc fh 32.0/ 224307 4096 byte @ 0 10:30:16.013124 eth0 > 192.168.1.254. 3492875163 > 192.168.1.252.2049: 140 đọc fh 32.0/ 224307 4096 byte @ 0 10:30:16.013650 eth0 192.168.1.254.3492875163: trả lời ok 108 đọc (DF) 10:30 : 16.013650 eth0 192.168.1.254.3492875163 : trả lời được 108 đã đọc (DF)

NFS theo truyền thống được triển khai qua UDP. Tuy nhiên, một số phiên bản NFS hỗ trợ TCP (hỗ trợ TCP được xác định trong đặc tả giao thức). Ưu điểm chính của TCP là cơ chế truyền lại hiệu quả hơn trong các mạng không đáng tin cậy. (Với UDP, nếu xảy ra lỗi, thông báo RPC hoàn chỉnh, bao gồm một số gói UDP, sẽ được gửi lại. Với TCP, chỉ đoạn bị hỏng mới được gửi lại.)

TRUY CẬP NFS

Việc triển khai NFS thường hỗ trợ bốn cách để cấp quyền truy cập: thông qua thuộc tính người dùng/tệp, ở cấp tài nguyên được chia sẻ, ở cấp nút chính và dưới dạng kết hợp các phương thức truy cập khác.

Phương pháp đầu tiên dựa trên hệ thống cấp phép tệp có sẵn của UNIX cho từng người dùng hoặc nhóm. Để đơn giản hóa việc bảo trì, nhận dạng người dùng và nhóm phải nhất quán trên tất cả máy khách và máy chủ NFS. Bảo mật phải được xem xét cẩn thận: NFS có thể vô tình cung cấp quyền truy cập vào các tệp không được dự định khi chúng được tạo.

Quyền truy cập ở cấp độ chia sẻ cho phép bạn hạn chế các quyền để chỉ cho phép một số hành động nhất định, bất kể quyền sở hữu tệp hoặc đặc quyền UNIX. Ví dụ: làm việc với hệ thống tệp NFS có thể bị giới hạn ở chế độ chỉ đọc. Hầu hết việc triển khai NFS cho phép bạn hạn chế hơn nữa quyền truy cập ở cấp tài nguyên được chia sẻ đối với những người dùng và/hoặc nhóm cụ thể. Ví dụ: nhóm Nhân sự được phép xem thông tin và không có gì hơn.

Quyền truy cập ở cấp độ nút chính cho phép bạn chỉ gắn hệ thống tệp trên các nút cụ thể, đây thường là một ý tưởng hay vì hệ thống tệp có thể dễ dàng được tạo trên bất kỳ nút hỗ trợ NFS nào.

Quyền truy cập kết hợp chỉ đơn giản là kết hợp các loại trên (ví dụ: quyền truy cập ở cấp độ chia sẻ với quyền truy cập được cấp cho một người dùng cụ thể) hoặc cho phép người dùng chỉ truy cập NFS từ một nút cụ thể.

NFS THEO PHONG CÁCH PENGUIN

Tài liệu liên quan đến Linux dựa trên Red Hat 6.2 với phiên bản kernel 2.4.9, đi kèm với phiên bản nfs-utils 0.1.6. Ngoài ra còn có các phiên bản mới hơn: tại thời điểm viết bài, bản cập nhật mới nhất cho gói nfs-utils là 0.3.1. Nó có thể được tải xuống từ: .

Gói nfs-utils chứa các tệp thực thi sau: importfs, lockd, mountd, nfsd, nfsstat, nhfsstone, rquotad, showmount và statd.

Thật không may, việc hỗ trợ NFS đôi khi gây nhầm lẫn cho các quản trị viên Linux vì tính khả dụng của một tính năng cụ thể phụ thuộc trực tiếp vào số phiên bản của cả kernel và gói nfs-utils. May mắn thay, mọi thứ đang được cải thiện trong lĩnh vực này, với các bản phân phối mới nhất bao gồm cả phiên bản mới nhất của cả hai. Đối với các bản phát hành trước, Phần 2.4 của NFS-Howto cung cấp danh sách đầy đủ các chức năng hệ thống có sẵn cho mỗi tổ hợp gói kernel và nfs-utils. Các nhà phát triển duy trì khả năng tương thích ngược của gói với các phiên bản trước đó, đặc biệt chú ý đến việc đảm bảo tính bảo mật và loại bỏ các lỗi phần mềm.

Hỗ trợ NFS nên được bắt đầu trong quá trình biên dịch kernel. Nếu cần, nên thêm khả năng hoạt động với NFS phiên bản 3 vào kernel.

Đối với các bản phân phối hỗ trợ linuxconf, thật dễ dàng để định cấu hình các dịch vụ NFS cho cả máy khách và máy chủ. Tuy nhiên, cách nhanh chóng để cài đặt NFS bằng linuxconf không cung cấp thông tin về những tệp nào đã được tạo hoặc chỉnh sửa, điều này rất quan trọng để quản trị viên biết tình huống trong trường hợp hệ thống bị lỗi. Kiến trúc NFS trên Linux được kết nối lỏng lẻo với phiên bản BSD, do đó các quản trị viên chạy BSD, Sun OS 2.5 hoặc các phiên bản NFS cũ hơn có thể dễ dàng tìm thấy các tệp và chương trình hỗ trợ cần thiết.

Tệp /etc/exports, như trong các phiên bản trước của BSD, xác định hệ thống tệp mà máy khách NFS được phép truy cập. Ngoài ra, nó còn chứa một số tính năng bổ sung liên quan đến các vấn đề quản lý và bảo mật, cung cấp cho quản trị viên phương tiện để tinh chỉnh. Đây là một tệp văn bản bao gồm các mục, dòng trống hoặc dòng nhận xét (nhận xét bắt đầu bằng ký hiệu #).

Giả sử chúng tôi muốn cấp cho khách hàng quyền truy cập chỉ đọc vào thư mục /home trên nút Lefty. Điều này sẽ tương ứng với mục sau trong /etc/exports:

/nhà (ro)

Ở đây, chúng ta cần cho hệ thống biết những thư mục nào chúng ta sẽ cho phép truy cập bằng cách sử dụng trình nền gắn kết rpc.mountd:

#exportfs -r importfs: Không có tên máy chủ nào được chỉ định trong /home(ro), nhập *(ro) để tránh cảnh báo #

Khi chạy, lệnh importfs đưa ra cảnh báo rằng /etc/exports không hạn chế quyền truy cập vào một nút cụ thể và tạo một mục nhập tương ứng trong /var/lib/nfs/etab từ /etc/exports cho biết tài nguyên nào có thể được xem bằng cat :

# cat /var/lib/nfs/etab /home (ro,async,wdelay,hide,secure,root_squash, no_all_squash,subtree_check, safe_locks, maps=identity,anonuid= -2,anongid=-2)

Các tùy chọn khác được liệt kê trong etab bao gồm các giá trị mặc định được NFS sử dụng. Các chi tiết sẽ được mô tả dưới đây. Để cung cấp quyền truy cập vào thư mục /home, bạn phải khởi động các dịch vụ NFS thích hợp:

# portmap # rpc.mountd # rpc.nfsd # rpc.statd # rpc.rquotad

Bất cứ lúc nào sau khi khởi động trình nền gắn kết (rpc.mountd), bạn có thể xem các tệp riêng lẻ có sẵn để xuất bằng cách xem nội dung của tệp /proc/fs/nfs/exports:

# cat /proc/fs/nfs/exports # Phiên bản 1.0 # Path Client(Flags) # IP /home 192.168.1.252(ro,root_squash,async, wdelay) # 192.168.1.252 #

Điều tương tự có thể được xem bằng lệnh showmount với tham số -e:

# showmount -e Xuất danh sách cho người thuận tay trái: /home (mọi người) #

Tiếp tục một chút, lệnh showmount cũng có thể được sử dụng để xác định tất cả các hệ thống tệp được gắn, hay nói cách khác, để tìm ra nút nào là máy khách NFS cho hệ thống đang chạy lệnh showmount. Lệnh showmount -a sẽ liệt kê tất cả các điểm gắn kết máy khách:

# showmount -a Tất cả các điểm gắn kết ở bên trái: 192.168.1.252:/home #

Như đã nêu ở trên, hầu hết việc triển khai NFS đều hỗ trợ các phiên bản khác nhau của giao thức này. Việc triển khai Linux cho phép bạn giới hạn danh sách các phiên bản NFS có thể được khởi chạy bằng cách chỉ định khóa chuyển -N cho trình nền gắn kết. Ví dụ: để chạy NFS phiên bản 3 và chỉ phiên bản 3, hãy nhập lệnh sau:

# rpc.mountd -N 1 -N 2

Người dùng thường xuyên có thể thấy bất tiện khi daemon NFS (rpc.nfsd) của Linux chờ các gói phiên bản 1 và phiên bản 2, mặc dù điều này có tác dụng mong muốn là không hỗ trợ giao thức tương ứng. Hãy hy vọng rằng các nhà phát triển các phiên bản trong tương lai sẽ thực hiện những chỉnh sửa cần thiết và có thể đạt được tính nhất quán cao hơn giữa các thành phần của gói so với các phiên bản khác nhau của giao thức.

"Bơi cùng chim cánh cụt"

Quyền truy cập vào Lefty được định cấu hình ở trên, hệ thống tệp có thể xuất NFS dựa trên Linux, tùy thuộc vào hệ điều hành máy khách. Kiểu cài đặt cho hầu hết các hệ điều hành dòng UNIX giống với kiểu cài đặt của hệ thống Sun OS và BSD gốc hoặc Solaris mới hơn. Vì bài viết này nói về cả Linux và Solaris, chúng ta hãy xem xét cấu hình máy khách Solaris 2.6 từ quan điểm thiết lập kết nối với phiên bản NFS Linux mà chúng tôi đã mô tả ở trên.

Nhờ các tính năng kế thừa từ Solaris 2.6, nó có thể được cấu hình dễ dàng để hoạt động như một máy khách NFS. Điều này chỉ cần một lệnh:

# mount -F nfs 192.168.1.254:/home /tmp/tmp2

Giả sử lệnh mount trước đó thành công thì lệnh mount không có tham số sẽ xuất ra kết quả như sau:

# mount / on /dev/dsk/c0t0d0s0 read/write/setuid/ bigfiles vào Thứ Hai ngày 3 tháng 9 10:17:56 2001 ... ... /tmp/tmp2 ngày 192.168.1.254:/home read/write/remote on Thứ hai ngày 3 tháng 9 23:19:25 2001

Hãy phân tích đầu ra tcpdump nhận được trên nút Lefty sau khi người dùng đưa ra lệnh ls /tmp/tmp2 trên nút Sunny:

# tcpdump Host lefty và Host sunny -s512 06:07:43.490583 sunny.2191983953 > lefty.mcwrite.n.nfs: 128 getattr fh Unknown/1 (DF) 06:07:43.490678 lefty.mcwrite.n.nfs > sunny. 2191983953: trả lời ok 112 getattr DIR 40755 id 0/0 sz 0x000001000 (DF) 06:07:43.491397 sunny.2191983954 > lefty.mcwrite.n.nfs: 132 truy cập fh Unknown/10001 (DF) 06:07:4 3.49 1463 cánh tả .mcwrite.n.nfs > sunny.2191983954: trả lời ok 120 truy cập c0001 (DF) 06:07:43.492296 sunny.2191983955 > lefty.mcwrite.n.nfs: 152 readdirplus fh 0,1/16777984 1048 byte @ 0x00000 0000 (DF) 06:07:43.492417 lefty.mcwrite.n.nfs > sunny.2191983955: trả lời ok 1000 readdirplus (DF)

Chúng tôi thấy rằng nút Sunny yêu cầu một tệp xử lý (fh) cho ls, nút nào Lefty phản hồi bằng OK và trả về cấu trúc thư mục. Sunny sau đó kiểm tra quyền truy cập vào nội dung của thư mục (truy cập 132 fh) và nhận được phản hồi cấp phép từ Lefty. Sau đó, nút Sunny sẽ đọc toàn bộ nội dung của thư mục bằng quy trình readdirplus. Cuộc gọi thủ tục từ xa được mô tả trong RFC 1813 và được liệt kê ở đầu bài viết này.

Mặc dù trình tự lệnh để truy cập hệ thống tệp từ xa rất đơn giản nhưng một số trường hợp có thể dẫn đến hệ thống không được gắn chính xác. Trước khi gắn một thư mục, điểm gắn kết phải tồn tại, nếu không nó phải được tạo bằng lệnh mkdir. Thông thường nguyên nhân gây ra lỗi duy nhất ở phía máy khách là do thiếu thư mục mount cục bộ. Hầu hết các sự cố liên quan đến NFS là do sự không khớp giữa máy khách và máy chủ hoặc cấu hình máy chủ không chính xác.

Cách dễ nhất để khắc phục sự cố trên máy chủ là từ nút mà máy chủ đang chạy. Tuy nhiên, khi người khác quản lý máy chủ cho bạn thì điều này không phải lúc nào cũng thực hiện được. Một cách nhanh chóng để đảm bảo rằng các dịch vụ máy chủ phù hợp được cấu hình chính xác là sử dụng lệnh rpcinfo với tùy chọn -p. Từ máy chủ Solaris Sunny, bạn có thể xác định quy trình RPC nào được đăng ký trên máy chủ Linux:

# rpcinfo -p 192.168.1.254 chương trình so với dịch vụ cổng proto 100000 2 tcp 111 rpcbind 100000 2 udp 111 rpcbind 100024 1 udp 692 trạng thái 100024 1 tcp 694 trạng thái 100005 3 udp 1024 mountd /10000 5 3 tcp 1024 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1026 nlockmgr 100021 3 udp 1026 nlockmgr 100021 4 udp 1026 nlockmgr #

Lưu ý rằng thông tin phiên bản cũng được cung cấp ở đây, điều này khá hữu ích khi hệ thống yêu cầu hỗ trợ nhiều giao thức NFS khác nhau. Nếu bất kỳ dịch vụ nào không chạy trên máy chủ thì tình trạng này phải được khắc phục. Nếu quá trình gắn kết không thành công, lệnh rpcinfo -p sau sẽ giúp bạn xác định rằng dịch vụ mountd trên máy chủ không chạy:

# rpcinfo -p 192.168.1.254 chương trình so với dịch vụ cổng proto 100000 2 tcp 111 rpcbind ... ... 100021 4 udp 1026 nlockmgr #

Lệnh rpcinfo rất hữu ích trong việc tìm hiểu xem một tiến trình từ xa cụ thể có đang hoạt động hay không. Tham số -p là tham số quan trọng nhất trong các switch. Để xem tất cả các tính năng của rpcinfo, hãy xem trang man.

Một công cụ hữu ích khác là lệnh nfsstat. Với sự trợ giúp của nó, bạn có thể tìm hiểu xem liệu máy khách có thực sự truy cập vào hệ thống tệp đã xuất hay không, đồng thời hiển thị thông tin thống kê theo phiên bản giao thức.

Cuối cùng, một công cụ khá hữu ích khác để xác định nguyên nhân gây ra lỗi hệ thống là tcpdump:

# tcpdump Host lefty và Host sunny -s512 tcpdump: đang nghe trên eth0 06:29:51.773646 sunny.2191984020 > lefty.mcwrite.n.nfs: tra cứu 140 fh Unknown/1"test.c" (DF) 06:29:51.773819 lefty.mcwrite.n.nfs > sunny.2191984020: trả lời ok 116 tra cứu LỖI: Không có tập tin hoặc thư mục như vậy (DF) 06:29:51.774593 sunny.2191984021 > lefty.mcwrite.n.nfs: 128 getattr fh Unknown/1 ( DF) 06:29:51.774670 lefty.mcwrite.n.nfs > sunny.2191984021: trả lời ok 112 getattr DIR 40755 ids 0/0 sz 0x000001000 (DF) 06:29:51.775289 sunny.2191984022 > lefty.m cwrite.n. nfs: tra cứu 140 fh Unknown/1"test.c" (DF) 06:29:51.775357 lefty.mcwrite.n.nfs > sunny.2191984022: trả lời ok tra cứu 116 LỖI: Không có tệp hoặc thư mục như vậy (DF) 06:29 : 51.776029 sunny.2191984023 > lefty.mcwrite.n.nfs: 184 tạo fh Unknown/1 "test.c" (DF) 06:29:51.776169 lefty.mcwrite.n.nfs > sunny.2191984023: trả lời ok 120 tạo LỖI : Quyền bị từ chối (DF)

Danh sách trên, được tạo bằng cách thực thi câu lệnh touch test.c, hiển thị chuỗi hành động sau: đầu tiên, lệnh touch cố gắng truy cập vào tệp có tên test.c, sau đó nó tìm kiếm một thư mục có cùng tên và sau những lần thử không thành công nó cố gắng tạo một tệp test.c , điều này cũng không dẫn đến thành công.

Nếu hệ thống tệp được gắn kết, hầu hết các lỗi phổ biến đều liên quan đến quyền UNIX thông thường. Sử dụng uid hoặc NIS+ trên Sun giúp tránh việc đặt quyền trên toàn cầu trên tất cả các hệ thống tệp. Một số quản trị viên thực hành các thư mục "mở", trong đó quyền truy cập đọc được trao cho "toàn bộ thế giới". Tuy nhiên, điều này nên tránh vì lý do an toàn. Bỏ qua những lo ngại về bảo mật, cách tiếp cận này vẫn là một phương pháp tồi, vì người dùng hiếm khi tạo dữ liệu với mục đích làm cho mọi người có thể đọc được dữ liệu đó.

Quyền truy cập của người dùng đặc quyền (root) vào hệ thống tệp NFS được gắn được xử lý khác nhau. Để tránh cấp cho người dùng đặc quyền quyền truy cập không giới hạn, các yêu cầu từ người dùng đặc quyền sẽ được xử lý như thể chúng không đến từ người dùng nào cả. Cơ chế mạnh mẽ này giới hạn quyền truy cập đặc quyền của người dùng vào các tệp có thể đọc và ghi trên toàn cầu.

PHIÊN BẢN NFS MÁY CHỦ SOLARIS

Việc định cấu hình Solaris để hoạt động như một máy chủ NFS cũng dễ dàng như với Linux. Tuy nhiên, các lệnh và vị trí tệp hơi khác nhau. Khi Solaris khởi động, khi đạt cấp độ chạy 3, các dịch vụ NFS sẽ tự động khởi động và tất cả hệ thống tệp sẽ được xuất. Để bắt đầu các quá trình này một cách thủ công, hãy nhập lệnh:

#/usr/lib/nfs/mountd

Để khởi động trình nền gắn kết và máy chủ NFS, hãy nhập:

#/usr/lib/nfs/nfsd

Bắt đầu từ phiên bản 2.6, Solaris không còn sử dụng tệp xuất để chỉ định hệ thống tệp nào sẽ xuất. Các tập tin hiện được xuất bằng lệnh chia sẻ. Giả sử chúng ta muốn cho phép các máy chủ từ xa gắn kết /export/home. Để thực hiện việc này, hãy nhập lệnh sau:

Chia sẻ -F nfs /export/home

Các biện pháp an ninh

BẢO MẬT TRONG LINUX

Một số dịch vụ hệ thống NFS dựa trên Linux có cơ chế hạn chế truy cập bổ sung thông qua danh sách hoặc bảng điều khiển. Ở cấp độ nội bộ, cơ chế này được triển khai bằng thư viện tcp_wrapper, thư viện này sử dụng hai tệp để tạo danh sách kiểm soát truy cập: /etc/hosts.allow và /etc/hosts/deny. Tổng quan đầy đủ về các quy tắc làm việc với tcp_wrapper nằm ngoài phạm vi của bài viết này, nhưng nguyên tắc cơ bản như sau: việc so sánh trước tiên được thực hiện với etc/hosts.allow, sau đó là với /etc/hosts. từ chối. Nếu không tìm thấy quy tắc thì dịch vụ hệ thống được yêu cầu sẽ không được hiển thị. Để giải quyết yêu cầu cuối cùng này và cung cấp mức độ bảo mật rất cao, bạn có thể thêm mục sau vào cuối /etc/hosts.deny:

Tất cả

Sau này, bạn có thể sử dụng /etc/hosts.allow để đặt một hoặc một chế độ vận hành khác. Ví dụ: tệp /etc/hosts. allow, mà tôi đã sử dụng khi viết bài này, chứa các dòng sau:

Lockd:192.168.1.0/255.255.255.0 mountd:192.168.1.0/255.255.255.0 portmap:192.168.1.0/255.255.255.0 rquotad:192.168.1.0/255.255.255.0 statd:192.16 8.1.0/255.255.255.0

Điều này cho phép một loại quyền truy cập cụ thể vào máy chủ trước khi cấp quyền truy cập ở cấp ứng dụng. Trên Linux, quyền truy cập ở cấp độ ứng dụng được kiểm soát bởi tệp /etc/exports. Nó bao gồm các mục theo định dạng sau:

Xuất thư mục (dấu cách) máy chủ|mạng (tùy chọn)

"Thư mục xuất" là thư mục mà daemon nfsd được phép xử lý các yêu cầu. "Nút|mạng" là nút hoặc mạng có quyền truy cập vào hệ thống tệp đã xuất và "tùy chọn" xác định các hạn chế mà trình nền nfsd áp đặt đối với việc sử dụng tài nguyên được chia sẻ này - quyền truy cập chỉ đọc hoặc ánh xạ id người dùng. .

Ví dụ sau cung cấp cho toàn bộ miền mcwrite.net quyền truy cập chỉ đọc vào /home/mcwrite.net:

/home/mcwrite.net *.mcwrite.net(ro)

Nhiều ví dụ khác có thể được tìm thấy trong trang xuất khẩu.

BẢO MẬT NFS TRONG SOLARIS

Trong Solaris, khả năng cung cấp quyền truy cập vào NFS tương tự như Linux, nhưng trong trường hợp này, các hạn chế được đặt bằng cách sử dụng các tham số nhất định trong lệnh chia sẻ bằng khóa chuyển -o. Ví dụ sau đây cho thấy cách bật tính năng gắn /export/mcwrite.net ở chế độ chỉ đọc trên bất kỳ máy chủ nào trong miền mcwrite.net:

#share -F nfs -o ro=.mcwrite.net/export/ mcwrite.net

Trang hướng dẫn chi tiết về share_nfs cấp quyền truy cập bằng danh sách kiểm soát trên Solaris.

Tài nguyên Internet

NFS và RPC không phải là không có lỗ hổng. Nói chung, không nên sử dụng NFS khi lướt Internet. Bạn không thể chọc thủng tường lửa để cho phép bất kỳ loại truy cập nào thông qua NFS. Điều quan trọng là phải theo dõi chặt chẽ mọi bản vá RPC và NFS mới nổi và nhiều nguồn thông tin bảo mật có thể trợ giúp. Hai nguồn phổ biến nhất là Bugtraq và CERT:

Cái đầu tiên có thể được xem thường xuyên để tìm kiếm thông tin cần thiết hoặc bằng cách đăng ký nhận bản tin định kỳ. Trang thứ hai có lẽ cung cấp thông tin không nhanh chóng như những trang khác, nhưng với khối lượng khá đầy đủ và không có sắc thái giật gân đặc trưng của một số trang web dành riêng cho bảo mật thông tin.

Thành phần quan trọng nhất của bất kỳ hệ thống phân tán nào là hệ thống tệp, trong trường hợp này cũng được phân phối. Giống như trong các hệ thống tập trung, chức năng của hệ thống tệp là lưu trữ các chương trình, dữ liệu và cung cấp quyền truy cập cho máy khách. Một hệ thống tệp phân tán được duy trì bởi một hoặc nhiều máy tính lưu trữ tệp. Máy chủ tệp thường chứa các hệ thống tệp phân cấp, mỗi hệ thống có một thư mục gốc và các thư mục cấp thấp hơn. Trong nhiều hệ thống tệp mạng, máy khách có thể đính kèm và gắn các hệ thống tệp này vào hệ thống tệp cục bộ của nó, cung cấp cho người dùng quyền truy cập thuận tiện vào các thư mục và tệp từ xa. Trong trường hợp này, dữ liệu của các tệp được gắn sẽ không di chuyển vật lý đi bất cứ đâu mà vẫn ở trên máy chủ.

Từ quan điểm phần mềm, hệ thống tệp phân tán (FS) là một dịch vụ mạng bao gồm các chương trình máy chủ và chương trình máy khách tương tác với nhau bằng một giao thức cụ thể. Dịch vụ tệp trong các hệ thống tệp phân tán có hai phần riêng biệt về mặt chức năng: bản thân dịch vụ tệp và dịch vụ thư mục hệ thống tệp. Phần đầu tiên xử lý các thao tác trên các tệp riêng lẻ, chẳng hạn như đọc, ghi hoặc thêm (sửa đổi) và phần thứ hai xử lý việc tạo và quản lý thư mục, thêm và xóa tệp khỏi thư mục, v.v.

Trong một hệ thống phân tán được tổ chức tốt, người dùng không biết hệ thống tệp được triển khai như thế nào (có bao nhiêu máy chủ tệp, chúng được đặt ở đâu, chúng hoạt động như thế nào). Lý tưởng nhất, đối với người dùng, hệ thống tệp mạng phải trông giống như của chính họ trên máy tính của họ, nghĩa là hoàn toàn trong suốt. Tuy nhiên, trên thực tế, các hệ thống tệp mạng vẫn chưa đáp ứng đầy đủ lý tưởng này.

Một hệ thống tệp mạng thường bao gồm các thành phần sau:

Hệ thống tập tin cục bộ;

Giao diện hệ thống tập tin cục bộ;

Máy chủ hệ thống tệp mạng;

Máy khách hệ thống tệp mạng;

Giao diện hệ thống tập tin mạng;

Hệ thống tập tin mạng giao thức client-server.

Máy khách Network FS là các chương trình chạy trên nhiều máy tính được kết nối với mạng. Các chương trình này phục vụ các yêu cầu ứng dụng truy cập các tệp được lưu trữ trên máy tính từ xa. Máy khách FS mạng truyền các yêu cầu qua mạng tới một thành phần phần mềm khác - máy chủ FS mạng đang chạy trên một máy tính từ xa. Máy chủ, khi nhận được yêu cầu, có thể tự thực thi yêu cầu đó hoặc phổ biến hơn là chuyển yêu cầu đến hệ thống tệp cục bộ để xử lý. Sau khi nhận được phản hồi từ FS cục bộ, máy chủ sẽ truyền nó qua mạng__

Máy khách và máy chủ FS của mạng tương tác với nhau qua mạng bằng một giao thức cụ thể. Nếu giao diện FS mạng và cục bộ trùng nhau thì giao thức này có thể khá đơn giản. Một cơ chế được sử dụng cho mục đích này có thể là cơ chế RPC.

Trong hệ điều hành Windows, dịch vụ tệp mạng chính là giao thức SMB (Khối tin nhắn máy chủ), được Microsoft, Intel và IBM cùng phát triển. Các phiên bản mở rộng mới nhất của nó được gọi là Common Internet File System, CIFS.

Giao thức hoạt động ở lớp ứng dụng của mô hình OSI. SMB sử dụng các giao thức truyền tải khác nhau để truyền tải thông điệp của mình qua mạng. Trong lịch sử, giao thức đầu tiên như vậy là NetBIOS (và phiên bản NetBEUI sau này), nhưng hiện nay các tin nhắn SMB có thể được truyền bằng các giao thức khác (TCP/UDP và IPX).

SMB thuộc lớp giao thức hướng kết nối. Công việc của nó bắt đầu bằng việc máy khách gửi một tin nhắn đặc biệt đến máy chủ yêu cầu kết nối. Nếu máy chủ sẵn sàng thiết lập kết nối, nó sẽ phản hồi bằng thông báo xác nhận. Sau khi kết nối được thiết lập, máy khách có thể liên hệ với máy chủ bằng cách gửi lệnh để thao tác với các tệp và thư mục trong tin nhắn SMB. Trong quá trình hoạt động, một số tình huống có thể phát sinh ảnh hưởng đến hiệu quả truy cập file từ xa:

1. Lỗi máy tính chạy máy chủ hệ thống tệp mạng trong phiên giao tiếp với máy khách. FS cục bộ ghi nhớ trạng thái của các hoạt động liên tiếp mà ứng dụng thực hiện trên cùng một tệp bằng cách duy trì một bảng nội bộ của các tệp đang mở (các lệnh gọi hệ thống mở, đọc, ghi sẽ thay đổi trạng thái của bảng này). Khi hệ thống gặp sự cố, bảng các tệp đang mở sẽ bị mất sau khi máy chủ khởi động lại. Trong trường hợp này, ứng dụng chạy trên máy khách không thể tiếp tục hoạt động với các tệp đã mở trước khi gặp sự cố.

Một giải pháp cho vấn đề này dựa trên việc chuyển giao chức năng duy trì và lưu trữ một bảng các tệp đang mở từ máy chủ sang máy khách. Với tổ chức này, giao thức máy khách-máy chủ được đơn giản hóa vì việc khởi động lại máy chủ chỉ dẫn đến việc tạm dừng dịch vụ.

2. Dịch vụ có độ trễ lớn do yêu cầu mạng và máy chủ tệp khởi động lại khi một số lượng lớn máy khách kết nối. Giải pháp cho vấn đề này có thể là lưu các tệp vào bộ nhớ đệm (một phần hoặc toàn bộ) ở phía máy khách. Tuy nhiên, trong trường hợp này, giao thức phải tính đến khả năng hình thành một số bản sao của cùng một tệp, có thể được sửa đổi độc lập bởi những người dùng khác nhau, tức là giao thức phải đảm bảo tính nhất quán giữa các bản sao của tệp có sẵn trên các máy tính khác nhau.

3. Mất dữ liệu và phá hủy tính toàn vẹn của hệ thống tệp trong trường hợp máy tính đóng vai trò máy chủ tệp bị lỗi. Để tăng khả năng chịu lỗi của FS mạng, bạn có thể lưu trữ một số bản sao của mỗi tệp (hoặc toàn bộ FS) trên một số máy chủ. Những bản sao như vậy của tập tin được gọi là bản sao.

Sao chép tệp không chỉ cải thiện khả năng chịu lỗi mà còn giải quyết vấn đề làm quá tải máy chủ tệp bằng cách phân phối các yêu cầu tệp trên nhiều máy chủ, giúp cải thiện hiệu suất hệ thống tệp.

4. Việc xác thực được thực hiện trên một máy tính, chẳng hạn như trên máy khách, và việc ủy ​​quyền, tức là kiểm tra quyền truy cập vào các thư mục hoặc tệp, được thực hiện trên một máy tính khác, hoạt động như một máy chủ tệp. Vấn đề chung này của tất cả các dịch vụ mạng phải được tính đến bởi giao thức liên lạc giữa máy khách và máy chủ dịch vụ tệp.

Các vấn đề được liệt kê được giải quyết một cách toàn diện bằng cách tạo ra một dịch vụ để xác thực tập trung, sao chép, lưu vào bộ đệm, v.v. Các dịch vụ bổ sung này được phản ánh trong giao thức tương tác giữa máy khách và máy chủ, do đó các giao thức khác nhau thuộc loại này được tạo ra để hỗ trợ một hoặc một tập hợp các chức năng bổ sung khác. Do đó, đối với cùng một FS cục bộ có thể có các giao thức FS mạng khác nhau (Hình 5.30). Do đó, ngày nay hệ thống tệp NTFS có thể được truy cập bằng SMB, NCP (NetWare Control Protocol) và NFS (Network File System - giao thức hệ thống tệp mạng của Sun Microsystems, được sử dụng trong nhiều phiên bản khác nhau của hệ điều hành UNIX).

Mặt khác, bằng cách sử dụng cùng một giao thức, có thể thực hiện truy cập từ xa vào các hệ thống tệp cục bộ thuộc các loại khác nhau. Ví dụ: giao thức SMB được sử dụng để truy cập không chỉ các hệ thống tệp FAT mà còn cả hệ thống tệp NTFS và HPFS (Hình 5.31). Các hệ thống tệp này có thể được đặt trên các máy tính khác nhau hoặc trên cùng một máy tính.__

Câu hỏi kiểm tra Chương 5

1. Mạng có lợi thế gì so với việc sử dụng máy tính riêng biệt?

2. Cấu trúc liên kết mạng vật lý và logic có luôn giống nhau không?

3. Mạng lưới được phân loại như thế nào theo quy mô vùng phủ sóng?

4. Máy tính nào có thể đóng vai trò là máy chủ trên mạng?

5. File server và print server là gì?

6. Máy chủ đăng ký thực hiện những chức năng gì?

7. Máy chủ truy cập từ xa thực hiện những chức năng gì?

8. Máy chủ proxy là gì?

9. Liệt kê các máy khách có thể có của mạng máy tính.

10. Máy khách “dày” và “mỏng” trong mạng máy tính là gì?

11. Bạn hiểu thuật ngữ “phân đoạn” mạng như thế nào?

12. Địa chỉ MAC là gì?

13. Hệ điều hành phân tán khác hệ điều hành nối mạng như thế nào? Các hệ thống mạng phân tán thực sự có tồn tại ngày nay không?

14. Liệt kê các thành phần chính của hệ điều hành mạng. Dịch vụ mạng là gì? Bạn có thể kể tên những dịch vụ mạng nào?

15. Một số dịch vụ mạng không nhắm đến người dùng mà nhắm đến quản trị viên. Đây là những dịch vụ gì?

16. Hệ điều hành mạng đầu tiên là gì? Những cách tiếp cận nào để tạo ra hệ điều hành mạng hiện đang được sử dụng?

17. Kể tên các đặc điểm đặc trưng của mạng ngang hàng. Đặc điểm chính của mạng đa ngang hàng là gì?

18. Hệ điều hành máy chủ là gì? Họ là ai? Hệ điều hành máy chủ khác với hệ điều hành máy khách như thế nào?

19. Có bao nhiêu biến thể của sơ đồ hai tầng được sử dụng để xử lý ứng dụng phân tán?

20. Việc xử lý ứng dụng hai tầng có gì tốt khi máy chủ và máy khách hợp tác?

21. Sơ đồ xử lý ứng dụng ba tầng có ưu điểm gì không?

22. Các tiến trình có thể tương tác như thế nào trong các hệ thống phân tán?

23. Các nguyên hàm chính được sử dụng trong hệ thống truyền tải OS mạng là gì?

24. Việc đồng bộ hóa các tiến trình trên mạng được tổ chức như thế nào?

25. Lời gọi thủ tục từ xa có ý nghĩa gì?