Trong môi trường mạng nội bộ, việc chia sẻ tài nguyên và dữ liệu một cách hiệu quả là yếu tố then chốt quyết định hiệu suất làm việc. Bạn đã bao giờ gặp khó khăn khi cần truy cập file từ nhiều máy tính khác nhau một cách nhanh chóng và an toàn chưa? Các phương pháp truyền thống như FTP hay Samba đôi khi phức tạp và không tối ưu cho môi trường thuần Linux. Đây chính là lúc Linux (Network File System) tỏa sáng, mang đến một giải pháp mạnh mẽ, ổn định và hiệu quả. NFS cho phép các máy tính client “mount” (gắn) các thư mục từ server vào hệ thống file của mình, sử dụng chúng như thể đó là thư mục cục bộ. Bài viết này sẽ hướng dẫn bạn từ A đến Z cách thiết lập dịch vụ NFS trên Ubuntu 20.04, giúp bạn làm chủ công nghệ chia sẻ file chuyên nghiệp này.
Giới thiệu về dịch vụ NFS và vai trò của nó trong chia sẻ file
Trong bất kỳ hệ thống mạng nào, từ văn phòng nhỏ đến các trung tâm dữ liệu lớn, nhu cầu chia sẻ file là vô cùng cần thiết. Nó cho phép các đội nhóm cộng tác trên cùng một tài liệu, các ứng dụng truy cập dữ liệu tập trung, và đơn giản hóa việc quản lý tài nguyên. Tuy nhiên, việc lựa chọn phương pháp chia sẻ phù hợp lại là một bài toán không hề đơn giản. Các phương thức truyền thống như sao chép thủ công qua USB hay gửi file qua email nhanh chóng bộc lộ những hạn chế về tốc độ, dung lượng và đặc biệt là tính bảo mật khi quy mô hệ thống lớn dần.

Đây là lúc NFS, hay Network File System, trở thành một giải pháp vượt trội. Được phát triển bởi Sun Microsystems, NFS là một giao thức cho phép chia sẻ thư mục và file qua mạng một cách liền mạch. Điểm đặc biệt của NFS là nó cho phép máy tính client truy cập vào các file trên máy chủ xa xôi như thể chúng đang nằm trên ổ cứng của chính mình. Điều này giúp loại bỏ sự phức tạp trong việc sao chép dữ liệu, đồng thời tăng cường hiệu suất và tính nhất quán. Đối với các môi trường sử dụng hệ điều hành Linux/Unix, NFS được xem là tiêu chuẩn vàng nhờ hiệu năng cao và tích hợp sâu vào nhân hệ điều hành. Trong bài viết này, chúng ta sẽ cùng nhau khám phá từng bước cụ thể để cài đặt và cấu hình NFS trên hệ điều hành phổ biến Ubuntu 20.04, biến việc chia sẻ file trở nên dễ dàng và hiệu quả hơn bao giờ hết. Để hiểu rõ hơn về cấu trúc của hệ điều hành, bạn có thể tham khảo bài Kernel Linux giúp làm rõ vai trò của nhân trong quản lý tài nguyên và điều phối các dịch vụ như NFS.
Yêu cầu hệ thống và chuẩn bị trước khi cài đặt NFS trên Ubuntu 20.04
Trước khi bắt tay vào cài đặt, việc chuẩn bị kỹ lưỡng sẽ giúp quá trình diễn ra suôn sẻ và tránh được các lỗi không đáng có. Đảm bảo hệ thống của bạn đáp ứng đủ các yêu cầu cơ bản là bước đầu tiên và quan trọng nhất. Hãy cùng AZWEB kiểm tra xem bạn cần những gì nhé.
Yêu cầu phần cứng và phần mềm
Để thiết lập môi trường NFS, bạn sẽ cần ít nhất hai máy: một máy đóng vai trò là Server (máy chủ chứa dữ liệu) và một hoặc nhiều máy đóng vai trò Client (máy khách truy cập dữ liệu). Cả hai đều cần đáp ứng các yêu cầu sau:
- Phiên bản Ubuntu: Hướng dẫn này được viết riêng cho Ubuntu 20.04 (Focal Fossa), nhưng các bước cũng có thể tương thích với các phiên bản Ubuntu khác hoặc các bản phân phối dựa trên Debian. Nếu bạn đang tìm hiểu về các bản phân phối Linux khác, bài viết Debian có thể cung cấp thêm góc nhìn so sánh hữu ích.
- Quyền truy cập: Bạn cần có quyền root hoặc quyền sử dụng `sudo` trên cả máy chủ và máy khách để cài đặt phần mềm và chỉnh sửa các file cấu hình hệ thống.
- Kết nối mạng: Điều quan trọng nhất là phải có một kết nối mạng ổn định giữa server và client. Để đạt hiệu suất tốt nhất, bạn nên sử dụng mạng có dây (Ethernet) và đảm bảo các máy có thể “nhìn thấy” nhau, ví dụ như ping thành công từ client đến server và ngược lại. Sử dụng địa chỉ IP tĩnh cho server là một khuyến nghị mạnh mẽ để tránh các vấn đề kết nối sau này.
Các bước kiểm tra và chuẩn bị ban đầu
Sau khi đã đảm bảo các yêu cầu trên, hãy thực hiện một vài bước chuẩn bị để hệ thống sẵn sàng cho việc cài đặt NFS.

1. Cập nhật hệ thống: Luôn là một thói quen tốt khi cập nhật danh sách gói và nâng cấp các phần mềm hiện có lên phiên bản mới nhất. Điều này giúp đảm bảo tính tương thích và vá các lỗ hổng bảo mật. Mở terminal trên cả server và client và chạy các lệnh sau. Việc này cũng tương tự như các bước cập nhật bạn thường thực hiện trên Cài đặt Ubuntu:
“`bash
sudo apt update
sudo apt upgrade
“`
2. Kiểm tra trạng thái firewall: Firewall (tường lửa) là một lớp bảo vệ quan trọng nhưng cũng có thể chặn kết nối NFS nếu không được cấu hình đúng. Trên Ubuntu, UFW (Uncomplicated Firewall) thường được sử dụng. Hãy kiểm tra trạng thái của nó:
“`bash
sudo ufw status
“`
Nếu firewall đang hoạt động (`status: active`), bạn sẽ cần mở các port cần thiết cho NFS. Chúng ta sẽ thực hiện việc này ở các bước sau, nhưng việc nhận biết trạng thái của nó ngay từ đầu là rất quan trọng.
3. Chuẩn bị thư mục chia sẻ: Trên máy chủ NFS, bạn cần quyết định thư mục nào sẽ được chia sẻ cho các client. Bạn có thể tạo một thư mục mới hoặc sử dụng một thư mục hiện có. Ví dụ, để tạo một thư mục chia sẻ có tên `shared_data` trong thư mục `/srv` (một vị trí phổ biến cho dữ liệu dịch vụ), bạn có thể dùng lệnh:
“`bash
sudo mkdir -p /srv/shared_data
“`
Sau khi hoàn tất các bước chuẩn bị này, hệ thống của bạn đã sẵn sàng để tiến hành cài đặt NFS Server và Client.
Các bước cài đặt NFS server và client trên Ubuntu 20.04
Khi đã hoàn tất khâu chuẩn bị, chúng ta sẽ tiến hành cài đặt các gói phần mềm cần thiết. Quá trình này được chia thành hai phần rõ rệt: cài đặt trên máy chủ (NFS Server) nơi lưu trữ dữ liệu và cài đặt trên máy khách (NFS Client) nơi sẽ truy cập dữ liệu đó.
Cài đặt NFS Server
Máy chủ NFS là trái tim của hệ thống, chịu trách nhiệm lắng nghe các yêu cầu từ client và cung cấp quyền truy cập vào các thư mục được chia sẻ. Gói phần mềm chính cần thiết cho việc này là `nfs-kernel-server`.
1. Cài đặt gói `nfs-kernel-server`: Mở terminal trên máy chủ của bạn và chạy lệnh sau. Lệnh này sẽ tải và cài đặt tất cả các công cụ và dịch vụ cần thiết để biến máy Ubuntu của bạn thành một máy chủ NFS. Thao tác cài đặt phần mềm này tương tự như khi bạn cài đặt Fedora hoặc các bản phân phối Linux khác.
“`bash
sudo apt install nfs-kernel-server
“`

Hệ thống sẽ yêu cầu bạn xác nhận việc cài đặt, hãy nhấn `Y` và Enter để tiếp tục.
2. Khởi động và bật dịch vụ NFS server: Sau khi cài đặt hoàn tất, dịch vụ NFS server thường sẽ tự động khởi động. Tuy nhiên, để chắc chắn, bạn nên kiểm tra và kích hoạt nó để tự động chạy mỗi khi hệ thống khởi động lại. Điều này đảm bảo rằng các thư mục chia sẻ của bạn sẽ luôn sẵn sàng mà không cần can thiệp thủ công.
Sử dụng các lệnh `systemctl` sau:
“`bash
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
“`
Bạn có thể kiểm tra trạng thái của dịch vụ để xác nhận nó đang chạy ổn định bằng lệnh:
“`bash
sudo systemctl status nfs-kernel-server
“`
Nếu bạn thấy dòng `active (running)` màu xanh lá, xin chúc mừng, bạn đã cài đặt thành công NFS Server!
Cài đặt NFS Client
Trên mỗi máy khách muốn truy cập vào thư mục chia sẻ từ server, bạn cần cài đặt một gói phần mềm khác. Gói này chứa các công cụ cần thiết để giao tiếp với NFS server và mount các thư mục mạng.
1. Cài đặt gói `nfs-common`: Mở terminal trên máy client và chạy lệnh sau:
“`bash
sudo apt install nfs-common
“`
Gói `nfs-common` cung cấp các tiện ích như `mount.nfs` mà hệ thống cần để thực hiện việc mount các chia sẻ NFS. Đây là phần mềm chuẩn cho các client trong hệ sinh thái Linux/Unix, tương tự những gì bạn sẽ thấy trong bài Embedded Linux về ứng dụng các hệ thống Linux chuyên biệt.
2. Thiết lập mount điểm: “Mount điểm” (mount point) là một thư mục trống trên máy client, nơi thư mục được chia sẻ từ server sẽ được “gắn” vào. Ví dụ, chúng ta có thể tạo một thư mục tên là `nfs_share` trong thư mục `/mnt`:
“`bash
sudo mkdir -p /mnt/nfs_share
“`
Sau bước này, cả server và client đều đã được cài đặt các phần mềm cần thiết. Bước tiếp theo và cũng là bước quan trọng nhất là cấu hình server để chỉ định thư mục nào được chia sẻ và client nào được phép truy cập.
Cấu hình chia sẻ thư mục qua NFS
Sau khi cài đặt xong phần mềm trên cả server và client, trái tim của việc thiết lập NFS nằm ở việc cấu hình máy chủ. Bạn cần chỉ định rõ ràng thư mục nào sẽ được chia sẻ và cấp quyền truy cập cho những client nào. Tất cả những cấu hình này được quản lý trong một file duy nhất trên server: /etc/exports.
Thiết lập file /etc/exports trên Server
File /etc/exports hoạt động như một danh sách kiểm soát truy cập (Access Control List). Mỗi dòng trong file này định nghĩa một thư mục chia sẻ và các quy tắc truy cập cho nó. Cú pháp chung của một dòng như sau:
/path/to/directory client_ip(option1,option2,...)
/path/to/directory: Đường dẫn tuyệt đối đến thư mục bạn muốn chia sẻ.client_ip: Địa chỉ IP của máy client được phép truy cập. Bạn cũng có thể sử dụng dải IP (ví dụ:192.168.1.0/24) hoặc tên hostname.(option1,option2,...): Các tùy chọn xác định quyền truy cập. Một số tùy chọn phổ biến bao gồm:rw: Cho phép client cả quyền đọc (read) và ghi (write).ro: Chỉ cho phép client quyền đọc (read-only).sync: Bắt buộc ghi dữ liệu vào đĩa trước khi trả lời yêu cầu (an toàn hơn nhưng chậm hơn một chút).no_subtree_check: Tắt kiểm tra cây thư mục con, có thể cải thiện hiệu suất.
Ví dụ cấu hình cụ thể:
Giả sử bạn muốn chia sẻ thư mục /srv/shared_data mà chúng ta đã tạo trước đó cho một máy client có địa chỉ IP là 192.168.1.101 với quyền đọc và ghi. Mở file /etc/exports bằng một trình soạn thảo văn bản như nano:
“`bash
sudo nano /etc/exports
“`

Thêm dòng sau vào cuối file:
“`
/srv/shared_data 192.168.1.101(rw,sync,no_subtree_check)
“`
Nếu bạn muốn chia sẻ cho toàn bộ dải mạng 192.168.1.x, bạn có thể viết:
“`
/srv/shared_data 192.168.1.0/24(rw,sync,no_subtree_check)
“`
Sau khi thêm cấu hình, lưu file và thoát khỏi trình soạn thảo (trong nano, nhấn Ctrl + X, sau đó Y, và Enter).
Áp dụng cấu hình và khởi động lại dịch vụ
Mỗi khi bạn thay đổi file /etc/exports, bạn cần thông báo cho NFS server biết về những thay đổi này. Bạn có thể làm điều này mà không cần khởi động lại toàn bộ máy chủ.
1. Sử dụng lệnh exportfs: Lệnh exportfs được dùng để quản lý bảng các thư mục chia sẻ của NFS. Tùy chọn -a sẽ đọc lại file /etc/exports và áp dụng các thay đổi.
“`bash
sudo exportfs -a
“`

2. Khởi động lại dịch vụ nfs-kernel-server: Để đảm bảo mọi thứ được áp dụng một cách triệt để, bạn cũng nên khởi động lại dịch vụ NFS.
“`bash
sudo systemctl restart nfs-kernel-server
“`
3. Kiểm tra trạng thái chia sẻ: Bạn có thể kiểm tra xem server đã thực sự export (xuất) thư mục của bạn hay chưa bằng cách chạy lệnh exportfs mà không có tham số nào, hoặc với tùy chọn -v để xem chi tiết hơn.
“`bash
sudo exportfs -v
“`
Kết quả sẽ hiển thị danh sách các thư mục đang được chia sẻ và các tùy chọn đi kèm. Nếu bạn thấy thư mục /srv/shared_data của mình trong danh sách này, bạn đã cấu hình thành công phía server! Giờ là lúc chuyển qua máy client để kiểm tra kết nối.
Kiểm tra và xác nhận kết nối NFS
Sau khi đã cấu hình xong máy chủ, bước tiếp theo là xác thực từ phía máy khách để đảm bảo mọi thứ hoạt động như mong đợi. Quá trình này bao gồm việc kiểm tra xem client có “nhìn thấy” thư mục chia sẻ hay không, sau đó tiến hành mount thư mục đó và kiểm tra quyền đọc/ghi.
1. Kiểm tra mount từ client bằng lệnh showmount:
Trước khi cố gắng mount, bạn nên kiểm tra xem máy client có thể kết nối và thấy được danh sách các thư mục được chia sẻ từ server hay không. Lệnh showmount là công cụ hoàn hảo cho việc này. Trên máy client, mở terminal và chạy lệnh sau, thay [server_ip] bằng địa chỉ IP của máy chủ NFS của bạn:
“`bash
showmount -e [server_ip]
“`
Ví dụ, nếu IP của server là 192.168.1.100:
“`bash
showmount -e 192.168.1.100
“`

Nếu kết nối thành công, bạn sẽ thấy một danh sách các thư mục được export từ server, ví dụ:
“`
Export list for 192.168.1.100:
/srv/shared_data 192.168.1.101
“`
Nếu lệnh này báo lỗi “Connection timed out” hoặc “RPC: Unable to receive”, khả năng cao là do firewall trên server đang chặn kết nối. Bạn cần quay lại server và mở port cho NFS, tham khảo cách mở port bằng UFW tương tự như WSL là gì để hiểu rõ hơn về cách hoạt động của tầng mạng trong Linux.
2. Mount thư mục chia sẻ thủ công:
Khi đã xác nhận client có thể thấy thư mục chia sẻ, bạn có thể tiến hành mount nó vào hệ thống file của client. Sử dụng lệnh mount với cú pháp sau:
“`bash
sudo mount [server_ip]:/path/to/shared/folder /path/to/mount/point
“`
Tiếp tục với ví dụ trên, chúng ta sẽ mount thư mục /srv/shared_data từ server 192.168.1.100 vào thư mục /mnt/nfs_share trên client:
“`bash
sudo mount 192.168.1.100:/srv/shared_data /mnt/nfs_share
“`
Nếu lệnh thực thi mà không có thông báo lỗi nào, nghĩa là bạn đã mount thành công. Bạn có thể kiểm tra lại bằng lệnh df -h để xem danh sách các ổ đĩa và mount point. Bạn sẽ thấy một dòng tương tự như sau, xác nhận rằng thư mục mạng đã được gắn vào:
“`
192.168.1.100:/srv/shared_data … … … … /mnt/nfs_share
“`

3. Kiểm tra quyền truy cập và khả năng đọc/ghi:
Bước cuối cùng là kiểm tra thực tế. Hãy thử tạo một file trong thư mục vừa mount để xem quyền ghi có hoạt động không.
“`bash
touch /mnt/nfs_share/test_file.txt
“`
Nếu lệnh này thành công, hãy thử xem nội dung thư mục:
“`bash
ls -l /mnt/nfs_share
“`
Bạn sẽ thấy test_file.txt vừa được tạo. Bây giờ, hãy quay lại máy chủ và kiểm tra thư mục /srv/shared_data, bạn cũng sẽ thấy file này xuất hiện ở đó. Điều này chứng tỏ kết nối NFS đã được thiết lập thành công và hoạt động hai chiều! Nếu bạn muốn tìm hiểu sâu hơn về các lệnh và thao tác trong Linux, bài viết Lệnh cd trong Linux cung cấp thêm kiến thức cơ bản cũng rất hữu ích cho việc điều hướng thư mục sau khi mount.
Phân quyền truy cập và bảo mật khi sử dụng dịch vụ NFS
Thiết lập NFS thành công mới chỉ là một nửa chặng đường. Đảm bảo hệ thống của bạn an toàn và chỉ những người được phép mới có thể truy cập dữ liệu là yếu tố cực kỳ quan trọng. NFS, đặc biệt là các phiên bản cũ, vốn không được thiết kế với ưu tiên hàng đầu về bảo mật, vì vậy bạn cần chủ động áp dụng các biện pháp bảo vệ.
1. Thiết lập quyền truy cập chi tiết trong /etc/exports:
File /etc/exports là tuyến phòng thủ đầu tiên và quan trọng nhất. Thay vì cấp quyền truy cập cho toàn bộ mạng, hãy luôn tuân thủ nguyên tắc “đặc quyền tối thiểu”.
- Chỉ định IP cụ thể: Luôn ưu tiên sử dụng địa chỉ IP cụ thể của từng client thay vì một dải mạng rộng. Ví dụ,
192.168.1.101(rw)an toàn hơn nhiều so với192.168.1.0/24(rw). - Sử dụng quyền
ro(read-only): Nếu một client chỉ cần đọc dữ liệu mà không cần chỉnh sửa, hãy cấp cho nó quyềnro. Điều này ngăn chặn việc thay đổi hoặc xóa dữ liệu ngoài ý muốn. - Kết hợp nhiều quy tắc: Bạn có thể định nghĩa các quy tắc khác nhau cho các client khác nhau trên cùng một thư mục. Ví dụ:
“`
# Cấp quyền đọc/ghi cho máy của admin
/srv/shared_data 192.168.1.101(rw,sync,no_subtree_check)
# Cấp quyền chỉ đọc cho các máy còn lại trong mạng
/srv/shared_data 192.168.1.0/24(ro,sync,no_subtree_check)
“`
2. Sử dụng firewall để giới hạn kết nối NFS:
Firewall là một lớp bảo vệ mạnh mẽ, giúp chặn các kết nối không mong muốn ngay từ bên ngoài. Bạn nên cấu hình tường lửa trên server để chỉ cho phép các kết nối NFS từ những địa chỉ IP của client đã được tin cậy.
Với UFW trên Ubuntu, bạn có thể thực hiện việc này một cách dễ dàng. Lệnh sau sẽ cho phép client có IP 192.168.1.101 kết nối đến cổng NFS (cổng 2049) trên server:
“`bash
sudo ufw allow from 192.168.1.101 to any port nfs
“`

Lệnh này rõ ràng và an toàn hơn nhiều so với việc mở cổng NFS cho toàn bộ mạng (sudo ufw allow nfs). Hãy lặp lại lệnh này cho mỗi IP của client mà bạn muốn cấp quyền.
3. Lưu ý về bảo mật NFS và các cải tiến:
Phiên bản mặc định của NFS (thường là v3 hoặc v4) truyền dữ liệu qua mạng dưới dạng văn bản thuần túy (plain text), có nghĩa là bất kỳ ai có thể “nghe lén” trên mạng đều có thể đọc được dữ liệu. Trong một mạng nội bộ được tin cậy, điều này có thể chấp nhận được, nhưng trong các môi trường yêu cầu bảo mật cao hơn, bạn nên cân nhắc các giải pháp nâng cao:
- Sử dụng NFSv4 với Kerberos: NFS phiên bản 4 hỗ trợ các cơ chế xác thực mạnh mẽ hơn như Kerberos, giúp mã hóa việc xác thực và đảm bảo danh tính của người dùng. Việc thiết lập Kerberos khá phức tạp nhưng mang lại mức độ bảo mật cao nhất.
- VPN hoặc SSH Tunneling: Nếu bạn cần truy cập NFS qua một mạng không tin cậy (như Internet), tuyệt đối không nên mở cổng NFS trực tiếp. Thay vào đó, hãy thiết lập một mạng riêng ảo (VPN) hoặc sử dụng kỹ thuật SSH Tunneling để tạo một kênh giao tiếp được mã hóa an toàn cho lưu lượng NFS. Bạn có thể tham khảo thêm về các công nghệ ảo hóa và mạng như KVM là gì để hiểu rõ hơn về tích hợp dịch vụ trong môi trường Linux.
Bằng cách kết hợp việc cấu hình /etc/exports cẩn thận và sử dụng firewall một cách thông minh, bạn có thể tạo ra một hệ thống chia sẻ file NFS vừa hiệu quả vừa an toàn.
Xử lý sự cố thường gặp khi thiết lập NFS
Mặc dù việc thiết lập NFS khá đơn giản, nhưng đôi khi bạn vẫn có thể gặp phải một số lỗi phổ biến. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức. Dưới đây là hai vấn đề thường gặp nhất và cách giải quyết chúng.
Lỗi không mount được thư mục NFS
Đây là lỗi phổ biến nhất, thường xảy ra khi bạn chạy lệnh mount trên client và nhận được thông báo lỗi như “Connection timed out” hoặc “mount.nfs: access denied by server”.
Nguyên nhân và cách khắc phục:
-
Firewall chặn kết nối: Đây là nguyên nhân hàng đầu. Firewall trên server có thể đang chặn các yêu cầu đến từ client.
- Cách khắc phục: Đăng nhập vào server và thêm quy tắc cho phép kết nối NFS từ IP của client. Ví dụ với UFW:
sudo ufw allow from [client_ip] to any port nfs. Sau đó, hãy chắc chắn rằng bạn đã tải lại UFW:sudo ufw reload. Việc cấu hình firewall này tương tự như trong bài WSL là gì giúp bạn hiểu lớp bảo mật mạng trong Linux.
- Cách khắc phục: Đăng nhập vào server và thêm quy tắc cho phép kết nối NFS từ IP của client. Ví dụ với UFW:
-
Sai địa chỉ IP hoặc hostname: Bạn có thể đã nhập sai địa chỉ IP của server trong lệnh
mounthoặc trong file cấu hình.- Cách khắc phục: Kiểm tra kỹ lại địa chỉ IP của server. Từ client, hãy thử
ping [server_ip]để đảm bảo kết nối mạng cơ bản đang hoạt động.
- Cách khắc phục: Kiểm tra kỹ lại địa chỉ IP của server. Từ client, hãy thử
-
Dịch vụ NFS trên server chưa chạy: Có thể dịch vụ
nfs-kernel-serverđã bị dừng hoặc chưa được khởi động.- Cách khắc phục: Trên server, chạy lệnh
sudo systemctl status nfs-kernel-serverđể kiểm tra. Nếu nó không hoạt động, hãy khởi động lại bằngsudo systemctl restart nfs-kernel-server.
- Cách khắc phục: Trên server, chạy lệnh
-
Cấu hình
/etc/exportskhông chính xác: Sai cú pháp, sai đường dẫn thư mục, hoặc IP của client không khớp với quy tắc nào trong file/etc/exports.- Cách khắc phục: Mở file
/etc/exportstrên server và kiểm tra lại từng dòng. Sau mỗi lần chỉnh sửa, đừng quên chạysudo exportfs -ađể áp dụng thay đổi.
- Cách khắc phục: Mở file
![]()
Vấn đề phân quyền truy cập
Một vấn đề khác là bạn có thể mount thư mục thành công, nhưng khi cố gắng tạo hoặc sửa file, bạn nhận được lỗi “Permission denied”.
Nguyên nhân và cách khắc phục:
-
Quyền truy cập hệ thống file trên Server: NFS tôn trọng quyền sở hữu và quyền truy cập của hệ thống file Linux trên server. Nếu thư mục chia sẻ (
/srv/shared_data) thuộc sở hữu củarootvà chỉrootcó quyền ghi, thì người dùng thông thường trên client sẽ không thể ghi vào đó.- Cách khắc phục: Thay đổi quyền sở hữu (ownership) và quyền truy cập (permission) trên thư mục được chia sẻ ở phía server. Ví dụ, để cho phép mọi người đều có thể đọc, ghi, và thực thi trong thư mục đó (lưu ý: cách này không an toàn cho môi trường production), bạn có thể dùng:
sudo chown nobody:nogroup /srv/shared_datavàsudo chmod 777 /srv/shared_data.nobody:nogrouplà cặp user/group mặc định mà NFS thường sử dụng cho các truy cập không xác định.
- Cách khắc phục: Thay đổi quyền sở hữu (ownership) và quyền truy cập (permission) trên thư mục được chia sẻ ở phía server. Ví dụ, để cho phép mọi người đều có thể đọc, ghi, và thực thi trong thư mục đó (lưu ý: cách này không an toàn cho môi trường production), bạn có thể dùng:
-
Tùy chọn
ro(read-only) trong/etc/exports: Bạn có thể đã cấu hình client chỉ với quyền đọc trong file/etc/exports.- Cách khắc phục: Trên server, mở file
/etc/exportsvà đảm bảo rằng client của bạn được cấp quyềnrw(read-write). Sau đó, chạysudo exportfs -a.
- Cách khắc phục: Trên server, mở file
-
Vấn đề
root_squash: Mặc định, NFS sẽ ngăn người dùngroottrên client có quyềnroottrên thư mục chia sẻ. Đây là một cơ chế bảo mật gọi là “root squashing”, nó sẽ ánh xạ người dùngrootcủa client thành người dùngnobody.- Cách khắc phục: Nếu bạn thực sự cần quyền
root(hãy cẩn thận!), bạn có thể thêm tùy chọnno_root_squashvào file/etc/exports. Ví dụ:/srv/shared_data 192.168.1.101(rw,sync,no_root_squash). Tuy nhiên, việc này có thể gây ra rủi ro bảo mật lớn.
- Cách khắc phục: Nếu bạn thực sự cần quyền
Bằng cách kiểm tra tuần tự các nguyên nhân trên, bạn có thể nhanh chóng xác định và giải quyết hầu hết các vấn đề phát sinh khi làm việc với NFS. Nếu muốn mở rộng kiến thức về hệ điều hành tương tự, bài Unix là gì sẽ giúp bạn so sánh và hiểu thêm về môi trường Linux/Unix.
Best Practices khi sử dụng NFS
Để hệ thống chia sẻ file NFS của bạn không chỉ hoạt động ổn định mà còn hiệu quả và an toàn trong dài hạn, việc tuân thủ các thực hành tốt nhất (best practices) là vô cùng cần thiết. Dưới đây là những khuyến nghị từ AZWEB giúp bạn vận hành NFS một cách chuyên nghiệp.
1. Cập nhật thường xuyên hệ thống và dịch vụ NFS: Giống như bất kỳ phần mềm nào khác, các gói nfs-kernel-server và nfs-common cũng có thể có các bản cập nhật bảo mật và sửa lỗi. Hãy duy trì thói quen chạy sudo apt update và sudo apt upgrade định kỳ trên cả server và client để đảm bảo hệ thống luôn được bảo vệ và hoạt động với hiệu suất tốt nhất.
2. Sử dụng IP cố định hoặc hostname trong cấu hình exports: Việc sử dụng địa chỉ IP động (DHCP) cho NFS server có thể gây ra sự cố khi IP thay đổi, khiến client không thể kết nối. Luôn cấu hình một địa chỉ IP tĩnh cho NFS server. Trong file /etc/exports, ưu tiên sử dụng địa chỉ IP cụ thể của client thay vì hostname để tránh các vấn đề liên quan đến phân giải DNS.
3. Giới hạn quyền truy cập cụ thể cho từng client: Áp dụng nguyên tắc “đặc quyền tối thiểu”. Đừng cấp quyền rw (đọc-ghi) một cách bừa bãi. Nếu một client chỉ cần đọc dữ liệu, hãy cấp cho nó quyền ro (chỉ đọc). Cấu hình quyền truy cập càng chi tiết và chặt chẽ, hệ thống của bạn càng an toàn.
4. Kiểm tra log system và NFS để sớm phát hiện lỗi: Hệ thống log là người bạn đồng hành đắc lực của mọi quản trị viên. Thường xuyên kiểm tra các file log như /var/log/syslog hoặc dùng lệnh journalctl -u nfs-kernel-server trên server để theo dõi các hoạt động, cảnh báo và lỗi liên quan đến NFS. Việc phát hiện sớm các dấu hiệu bất thường có thể giúp bạn ngăn chặn các sự cố lớn hơn.
5. Tránh chia sẻ các thư mục chứa dữ liệu quan trọng không cần thiết: Không bao giờ chia sẻ các thư mục hệ thống nhạy cảm như /etc, /bin, hoặc /root. Chỉ chia sẻ những thư mục thực sự cần thiết cho công việc. Việc tạo ra một thư mục riêng biệt chuyên dùng để chia sẻ (ví dụ: /srv/share hoặc /var/nfs) là một thực hành tốt, giúp bạn dễ dàng quản lý quyền và sao lưu dữ liệu.
6. Cân nhắc sử dụng tùy chọn hard và intr khi mount: Khi mount trên client, bạn có thể sử dụng các tùy chọn bổ sung. Tùy chọn hard (mặc định) sẽ khiến client thử kết nối lại vô thời hạn nếu server không phản hồi, đảm bảo tính toàn vẹn dữ liệu. Kết hợp với intr sẽ cho phép bạn ngắt tiến trình đang chờ nếu cần. Việc này giúp các ứng dụng không bị “treo” vĩnh viễn khi server gặp sự cố.
Bằng cách áp dụng những thực hành này, bạn không chỉ xây dựng một hệ thống NFS mạnh mẽ mà còn đảm bảo nó có thể mở rộng và duy trì một cách bền vững, an toàn.
Kết luận
Qua bài hướng dẫn chi tiết này, chúng ta đã cùng nhau đi qua toàn bộ quá trình thiết lập dịch vụ NFS trên Ubuntu 20.04, từ các bước chuẩn bị ban đầu, cài đặt server và client, cho đến cấu hình chia sẻ, bảo mật và xử lý sự cố. Việc triển khai thành công NFS không chỉ giúp tối ưu hóa việc chia sẻ file trong mạng nội bộ mà còn mang lại hiệu suất vượt trội và sự tích hợp liền mạch, đặc biệt trong các môi trường làm việc dựa trên Linux. Nó cho phép dữ liệu được quản lý tập trung, dễ dàng truy cập từ nhiều máy trạm, và là nền tảng vững chắc cho các tác vụ như sao lưu tự động hay triển khai ứng dụng phân tán.
AZWEB hy vọng rằng với những hướng dẫn cụ thể và các thực hành tốt nhất được chia sẻ, bạn có thể tự tin áp dụng NFS để nâng cao hiệu suất làm việc cho đội nhóm và hệ thống của mình. Đừng ngần ngại bắt đầu từ những chia sẻ đơn giản và dần mở rộng quy mô khi đã quen thuộc. Các bước tiếp theo bạn có thể tìm hiểu bao gồm việc thiết lập tự động mount thư mục NFS khi client khởi động bằng cách chỉnh sửa file /etc/fstab, hoặc khám phá các công cụ như VirtualBox là gì để test môi trường NFS ảo, cũng như Garuda Linux với hiệu năng mạnh mẽ để chạy các dịch vụ phân tán. Việc làm chủ NFS chắc chắn sẽ là một kỹ năng quý giá trong hành trang của bất kỳ quản trị viên hệ thống nào.