NFS hay Hệ thống tệp mạng là một giao thức mạng cho phép bạn gắn kết hệ thống tệp từ xa thông qua mạng. Giao thức NFS được sử dụng trong kiến trúc máy chủ-máy khách, máy chủ NFS cung cấp tất cả các thư mục hoặc phân vùng đã sẵn sàng để truy cập và gắn kết, và máy khách sử dụng giao thức rpcbind để truy cập tất cả các thư mục và hệ thống tệp thông qua kết nối mạng nội bộ.
Trạng thái hiện tại của giao thức Hệ thống tệp mạng được mô tả bên dưới.
1. NFSv2 và NFSv3 vẫn được hệ điều hành chính hỗ trợ, nhưng vì lý do bảo mật, bạn phải hạn chế quyền truy cập của máy chủ NFS vào mạng cục bộ đáng tin cậy. NFSv2 và NFSv3 được khuyến nghị cho các loại triển khai vừa và nhỏ.
2. Giao thức NFSv4 cung cấp các tính năng bảo mật cơ bản như xác thực và mã hóa, nhưng nó dựa vào Kerberos cho các phần đó. Vì vậy, bạn cần thêm cấu hình bổ sung để sử dụng NFSv4 với các tính năng bảo mật cơ bản.
Đối với hướng dẫn này, bạn sẽ học cách cài đặt và cấu hình Máy chủ NFS trên Debian 11 Bullseye mới nhất. Bạn sẽ cài đặt máy chủ NFS và bảo mật quyền truy cập bằng cách giới hạn máy chủ bằng tường lửa ufw. Sau đó, bạn sẽ học cách thiết lập máy khách để gắn các thư mục và phân vùng do máy chủ NFS cung cấp và thiết lập máy chủ NFS tự động gắn khi khởi động hệ thống thông qua cấu hình '/etc/fstab'.
- debian64 - 192.168.1.25 - làm Máy chủ NFS
- client-debian - 192.168.1.30 - làm máy khách
2. Người dùng root hoặc người dùng có quyền root. Người dùng này sẽ được sử dụng để cài đặt các gói mới và chỉnh sửa cấu hình hệ thống.
1. Thực hiện lệnh sau để cài đặt các gói nfs-server.
Gõ 'y' và nhấn 'Enter' để tiếp tục cài đặt.
2. Bây giờ hãy tạo một thư mục mới mà bạn muốn chia sẻ với các máy khách. Đối với ví dụ này, bạn sẽ chia sẻ hai thư mục '/mnt/shared' và '/srv/data' với các máy khách. Và không chia sẻ thư mục gốc mặc định '/' hoặc thư mục '/etc'.
Tạo một thư mục chia sẻ mới bằng lệnh mkdir bên dưới.
Tạo một tệp mới trên mỗi thư mục bằng cách chạy lệnh echo bên dưới.
Bây giờ hãy thay đổi quyền sở hữu của cả hai thư mục chia sẻ thành 'nobody:nogroup' bằng cách thực hiện lệnh bên dưới.
Và bạn đã sẵn sàng để cấu hình Máy chủ NFS.
3. Để cấu hình thư mục dùng chung cho nfs, hãy chỉnh sửa cấu hình '/etc/exports' bằng trình soạn thảo nano.
Dưới đây là một số cấu hình ví dụ cho một số tình huống
Chia sẻ thư mục cho máy khách lưu trữ đơn lẻ với quyền truy cập đọc-ghi.
Chia sẻ thư mục cho nhiều máy khách, bao gồm một nhóm mạng máy chủ.
Chia sẻ thư mục cho một máy khách duy nhất với quyền truy cập chỉ đọc.
Dưới đây là cấu hình ví dụ cuối cùng.
Lưu cấu hình bằng cách nhấn nút 'Ctrl+x', nhập 'y', sau đó nhấn 'Enter' để thoát.
Các tùy chọn bạn phải biết:
Bây giờ hãy kiểm tra và xác minh dịch vụ nfs-server bằng lệnh sau.
Và bạn sẽ nhận được kết quả tương tự như bên dưới.
Như có thể thấy, dịch vụ nfs-server được 'bật' và sẽ tự động chạy khi khởi động hệ thống. Và trạng thái hiện tại của nfs-service là 'active (exited)', nghĩa là dịch vụ đang chạy, nhưng systemd không tìm thấy daemon để giám sát.
1. Thực hiện lệnh apt bên dưới để cài đặt gói ufw.
Gõ 'y' và nhấn 'Enter' để xác nhận và tiếp tục cài đặt.
2. Nếu toàn bộ quá trình cài đặt đã hoàn tất, hãy thêm dịch vụ SSH vào các quy tắc tường lửa ufw bằng lệnh bên dưới.
3. Tiếp theo, thực hiện các lệnh ufw bên dưới để thêm máy chủ hoặc mạng vào tường lửa ufw của bạn.
Cho phép máy chủ có địa chỉ IP '192.168.1.30' truy cập máy chủ NFS.
Cho phép chặn một mạng truy cập máy chủ NFS.
4. Sau đó, bật tường lửa ufw bằng lệnh sau.
Gõ 'y' và nhấn 'Enter' để bắt đầu và bật tường lửa ufw.
Bây giờ hãy kiểm tra trạng thái tường lửa ufw bằng lệnh bên dưới.
Và bạn sẽ thấy đầu ra tương tự như bên dưới.
Như có thể thấy, trạng thái tường lửa ufw là 'hoạt động' và dịch vụ NFS trên cổng mặc định '2049' có sẵn trong danh sách quy tắc.
1. Trước tiên, hãy cài đặt gói 'nfs-common' bằng lệnh apt bên dưới.
Gõ 'y' và nhấn 'Enter' để xác nhận và tiếp tục cài đặt.
2. Sau khi cài đặt hoàn tất, hãy tạo một thư mục mới cho thư mục gắn kết.
3. Để gắn thư mục hoặc phân vùng nfs từ máy chủ NFS, hãy thực hiện lệnh mount bên dưới.
Lệnh mount cơ bản để truy cập NFS là chỉ định địa chỉ IP của máy chủ NFS '192.168.1.25' với đường dẫn gắn thư mục '/mnt/shared' và '/srv/data' và đường dẫn đích trên thư mục '/nfs/shared' và '/nfs/data' phía máy khách.
4. Tiếp theo, thực hiện lệnh sau để xác minh việc gắn kết NFS thành công.
Ngoài ra, bạn có thể kiểm tra các tệp mà bạn vừa tạo ở trên cùng bằng cách thực hiện các lệnh sau.
Dưới đây là kết quả bạn sẽ nhận được.
Như có thể thấy, bạn đã gắn kết thành công máy chủ NFS vào thư mục '/nfs/shared' và '/nfs/data' và bạn sẽ có thể đọc các tệp mà bạn vừa tạo ở trên cùng.
1. Thay đổi thư mục làm việc thành '/nfs/shared', kiểm tra các tệp có sẵn trong thư mục đó và hiển thị nội dung của tệp đó bằng lệnh như bên dưới.
Tiếp theo, tạo một tệp mới bằng lệnh echo bên dưới.
Nếu bạn có thể tạo tệp 'client.txt', quyền ghi vào thư mục NFS '/nfs/share' sẽ thành công, như mô tả trong cấu hình bên dưới.
2. Tiếp theo, tại cấu hình bạn đã tạo ở trên cùng, cline chỉ có quyền truy cập để đọc thư mục NFS '/nfs/data', như bạn có thể thấy trong cấu hình bên dưới.
Thay đổi thư mục làm việc thành '/nfs/data', kiểm tra các tệp trong đó, kiểm tra các tệp có sẵn trong thư mục đó và hiển thị nội dung của tệp đó bằng lệnh như bên dưới.
Tiếp theo, nếu bạn muốn tạo một tệp mới, bạn sẽ nhận được lỗi 'Hệ thống tệp chỉ đọc'. Bởi vì bạn chỉ có quyền 'chỉ đọc' như được mô tả trong cấu hình ở trên cùng.
Dưới đây là kết quả tương tự mà bạn sẽ nhận được.
Quyền đọc và ghi được khớp với cấu hình máy chủ NFS hiện tại.
1. Chỉnh sửa cấu hình '/etc/fstab' bằng trình soạn thảo nano.
Thay đổi chi tiết địa chỉ IP, thư mục chia sẻ và đường dẫn thư mục gắn kết bằng địa chỉ của riêng bạn, sau đó dán cấu hình.
Lưu cấu hình bằng cách nhấn 'Ctrl+x' và nhập 'y', sau đó nhấn 'Enter' để thoát.
2. Tiếp theo, hãy xác minh cấu hình '/etc/fstab' là chính xác bằng cách sử dụng các lệnh sau.
Umount tất cả thư mục mount bằng lệnh bên dưới.
Thực hiện lệnh sau để mount tất cả hệ thống tệp có sẵn trên tệp cấu hình '/etc/fstab'.
Đảm bảo bạn không gặp bất kỳ lỗi nào.
Bây giờ hãy chạy lệnh sau để hiển thị tất cả các hệ thống tệp đã mount.
Nếu cấu hình của bạn chính xác, bạn sẽ thấy máy chủ NFS được mount vào thư mục đích như mô tả tại cấu hình '/etc/fstab'.
3. Bạn có thể khởi động lại máy khách và đăng nhập lại, sau đó xác minh lại bằng lệnh như bên dưới.
Và bạn sẽ thấy máy chủ NFS được tự động chuyển hướng khi khởi động hệ thống trên máy khách thông qua tệp '/etc/fstab'.
Trạng thái hiện tại của giao thức Hệ thống tệp mạng được mô tả bên dưới.
1. NFSv2 và NFSv3 vẫn được hệ điều hành chính hỗ trợ, nhưng vì lý do bảo mật, bạn phải hạn chế quyền truy cập của máy chủ NFS vào mạng cục bộ đáng tin cậy. NFSv2 và NFSv3 được khuyến nghị cho các loại triển khai vừa và nhỏ.
2. Giao thức NFSv4 cung cấp các tính năng bảo mật cơ bản như xác thực và mã hóa, nhưng nó dựa vào Kerberos cho các phần đó. Vì vậy, bạn cần thêm cấu hình bổ sung để sử dụng NFSv4 với các tính năng bảo mật cơ bản.
Đối với hướng dẫn này, bạn sẽ học cách cài đặt và cấu hình Máy chủ NFS trên Debian 11 Bullseye mới nhất. Bạn sẽ cài đặt máy chủ NFS và bảo mật quyền truy cập bằng cách giới hạn máy chủ bằng tường lửa ufw. Sau đó, bạn sẽ học cách thiết lập máy khách để gắn các thư mục và phân vùng do máy chủ NFS cung cấp và thiết lập máy chủ NFS tự động gắn khi khởi động hệ thống thông qua cấu hình '/etc/fstab'.
Điều kiện tiên quyết
1. Chúng tôi sẽ sử dụng hai máy khác nhau trên cùng một mạng như bên dưới.- debian64 - 192.168.1.25 - làm Máy chủ NFS
- client-debian - 192.168.1.30 - làm máy khách
2. Người dùng root hoặc người dùng có quyền root. Người dùng này sẽ được sử dụng để cài đặt các gói mới và chỉnh sửa cấu hình hệ thống.
Cài đặt và cấu hình Máy chủ NFS
Đầu tiên, bạn sẽ cài đặt gói máy chủ nfs và thiết lập thư mục dùng chung cho máy khách.1. Thực hiện lệnh sau để cài đặt các gói nfs-server.
Mã:
apt install nfs-kernel-server rpcbind
2. Bây giờ hãy tạo một thư mục mới mà bạn muốn chia sẻ với các máy khách. Đối với ví dụ này, bạn sẽ chia sẻ hai thư mục '/mnt/shared' và '/srv/data' với các máy khách. Và không chia sẻ thư mục gốc mặc định '/' hoặc thư mục '/etc'.
Tạo một thư mục chia sẻ mới bằng lệnh mkdir bên dưới.
Mã:
mkdir -p /mnt/shared
mkdir -p /srv/data
Mã:
echo "test file nfs server" > /mnt/shared/test-file.txt
echo "test file nfs server" > /srv/data/test-file.txt
Mã:
chown nobody:nogroup /mnt/shared /srv/data
Và bạn đã sẵn sàng để cấu hình Máy chủ NFS.
3. Để cấu hình thư mục dùng chung cho nfs, hãy chỉnh sửa cấu hình '/etc/exports' bằng trình soạn thảo nano.
Mã:
nano /etc/exports
Chia sẻ thư mục cho máy khách lưu trữ đơn lẻ với quyền truy cập đọc-ghi.
Mã:
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check)
Mã:
/srv/data 172.16.1.0/24(rw,sync,no_root_squash,no_subtree_check) 10.11.12.0/24(rw,no_subtree_check)
Mã:
/srv/data 192.168.1.30(ro)
Mã:
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check)
/srv/data 172.16.1.0/24(rw,sync,no_root_squash,no_subtree_check) 10.11.12.0/24(rw,no_subtree_check)
/srv/data 192.168.1.30(ro,no_root_squash)
Các tùy chọn bạn phải biết:
- rw : cho phép truy cập đọc và ghi cho cả máy chủ và máy khách NFS vào ổ đĩa/thư mục.
- ro : cho phép máy khách truy cập chỉ đọc.
- sync : chỉ trả lời các yêu cầu sau khi các thay đổi đã được cam kết lưu trữ ổn định. Tùy chọn này được bật theo mặc định.
- async : cho phép máy chủ NFS vi phạm giao thức NFS và trả lời các yêu cầu trước khi bất kỳ thay đổi nào do yêu cầu đó thực hiện đã được cam kết lưu trữ ổn định.
- subtree_check : cho phép và bật kiểm tra cây con. Tùy chọn này được bật theo mặc định.
- no_subtree_check : vô hiệu hóa kiểm tra cây con, có tác động nhẹ đến bảo mật nhưng có thể cải thiện độ tin cậy trong một số trường hợp.
- root_squash : Ánh xạ các yêu cầu từ uid/gid 0 sang uid/gid ẩn danh. Lưu ý rằng điều này không áp dụng cho bất kỳ uid hoặc gid nào khác có thể nhạy cảm như vậy, chẳng hạn như bin người dùng hoặc nhóm staff.
- no_root_sqash : vô hiệu hóa root squashing. Tùy chọn này chủ yếu hữu ích cho các máy khách không có đĩa.
Mã:
systemctl restart nfs-server
Mã:
systemctl is-enabled nfs-server
systemctl status nfs-server
Như có thể thấy, dịch vụ nfs-server được 'bật' và sẽ tự động chạy khi khởi động hệ thống. Và trạng thái hiện tại của nfs-service là 'active (exited)', nghĩa là dịch vụ đang chạy, nhưng systemd không tìm thấy daemon để giám sát.
Bảo mật máy chủ NFS bằng tường lửa UFW
Đối với giai đoạn này, bạn sẽ cài đặt tường lửa ufw và hạn chế quyền truy cập vào máy chủ NFS chỉ dành cho các máy chủ và mạng cụ thể.1. Thực hiện lệnh apt bên dưới để cài đặt gói ufw.
Mã:
apt install ufw
2. Nếu toàn bộ quá trình cài đặt đã hoàn tất, hãy thêm dịch vụ SSH vào các quy tắc tường lửa ufw bằng lệnh bên dưới.
Mã:
ufw allow ssh
Cho phép máy chủ có địa chỉ IP '192.168.1.30' truy cập máy chủ NFS.
Mã:
ufw allow from 192.168.1.30 to any port nfs
Mã:
ufw allow from 172.16.1.0/24 to any port nfs
ufw allow from 10.11.12.0/24 to any port nfs
4. Sau đó, bật tường lửa ufw bằng lệnh sau.
Mã:
ufw enable
Bây giờ hãy kiểm tra trạng thái tường lửa ufw bằng lệnh bên dưới.
Mã:
ufw status
Như có thể thấy, trạng thái tường lửa ufw là 'hoạt động' và dịch vụ NFS trên cổng mặc định '2049' có sẵn trong danh sách quy tắc.
Thiết lập Máy khách NFS
Đối với bước này, bạn sẽ định cấu hình máy khách để truy cập thư mục và phân vùng được chia sẻ trên máy chủ NFS.1. Trước tiên, hãy cài đặt gói 'nfs-common' bằng lệnh apt bên dưới.
Mã:
apt install nfs-common
2. Sau khi cài đặt hoàn tất, hãy tạo một thư mục mới cho thư mục gắn kết.
Mã:
mkdir -p /nfs/shared; mkdir -p /nfs/data
Mã:
mount 192.168.1.25:/mnt/shared /nfs/shared
mount 192.168.1.25:/srv/data /nfs/data
4. Tiếp theo, thực hiện lệnh sau để xác minh việc gắn kết NFS thành công.
Mã:
df -h
Mã:
cat /nfs/shared/test-file.txt
cat /nfs/data/test-file.txt
Như có thể thấy, bạn đã gắn kết thành công máy chủ NFS vào thư mục '/nfs/shared' và '/nfs/data' và bạn sẽ có thể đọc các tệp mà bạn vừa tạo ở trên cùng.
Xác minh quyền truy cập đọc và ghi vào máy chủ NFS
Trong giai đoạn này, bạn sẽ xác minh quyền truy cập đọc và ghi vào thư mục máy chủ NFS.1. Thay đổi thư mục làm việc thành '/nfs/shared', kiểm tra các tệp có sẵn trong thư mục đó và hiển thị nội dung của tệp đó bằng lệnh như bên dưới.
Mã:
cd /nfs/shared
ls
cat test-file.txt
Mã:
echo "Tệp này từ nfs-client" > client.txt
cat client.txt
Mã:
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check)
2. Tiếp theo, tại cấu hình bạn đã tạo ở trên cùng, cline chỉ có quyền truy cập để đọc thư mục NFS '/nfs/data', như bạn có thể thấy trong cấu hình bên dưới.
Mã:
/srv/data 192.168.1.30(ro,no_root_squash)
Mã:
cd /nfs/data
ls
cat test-file.txt
Mã:
echo "Đây là tệp từ máy khách đến dữ liệu" > client-data.txt
Quyền đọc và ghi được khớp với cấu hình máy chủ NFS hiện tại.
Gắn NFS khi khởi động
Trong giai đoạn này, bạn sẽ học cách gắn thư mục/phân vùng NFS khi khởi động/khởi động hệ thống thông qua cấu hình '/etc/fstab'.1. Chỉnh sửa cấu hình '/etc/fstab' bằng trình soạn thảo nano.
Mã:
nano /etc/fstab
Mã:
192.168.1.25:/mnt/shared /nfs/shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.1.25:/srv/data /nfs/data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
2. Tiếp theo, hãy xác minh cấu hình '/etc/fstab' là chính xác bằng cách sử dụng các lệnh sau.
Umount tất cả thư mục mount bằng lệnh bên dưới.
Mã:
umount -R /nfs/shared
umount -R /nfs/data
Mã:
mount -a
Bây giờ hãy chạy lệnh sau để hiển thị tất cả các hệ thống tệp đã mount.
Mã:
df -h
3. Bạn có thể khởi động lại máy khách và đăng nhập lại, sau đó xác minh lại bằng lệnh như bên dưới.
Mã:
df -h