NFS (Network File System) là một giao thức chia sẻ file cho phép người dùng truy cập tới hệ thống file trên một máy khách được chia sẻ thông qua một mạng máy tính. Bài viết dưới đây của Vietnix sẽ hướng dẫn bạn cách cài đặt NFS trên Ubuntu 20.04 và cấu hình NFS mount trên một server và một client, cách mount và unmount các chia sẻ từ xa.
Yêu cầu chuẩn bị để thiết lập NFS trên Ubuntu 20.04
Trong hướng dẫn này cần sử dụng hai máy chủ Ubuntu 20.04, một máy sẽ có chức năng chia sẻ phần file hệ thống với máy khác. Đồng thời, mỗi máy nên có một user non-root với quyền sudo
, tường lửa được thiết lập với UFW và sử dụng mạng private.
Lưu ý, trong hướng dẫn dưới đây, server chia sẻ thư mục sẽ được gọi là host và server mount thư mục được gọi là client. Bạn cần biết địa chỉ IP của cả hai máy chủ này, các bước dưới đây sẽ đề cập đến địa chỉ IP của hai máy là host_ip
và client_ip
. Bạn hãy thay thế IP của máy chủ tương ứng khi thực hiện theo hướng dẫn.
Nếu chưa sở hữu máy chủ hoặc đang tìm kiếm giải pháp máy chủ tiết kiệm chi phí thì có thể tham khảo thuê VPS tại Vietnix. Lúc này, bạn sẽ sở hữu máy chủ với toàn quyền quản trị để thiết lập NFS mà không tốn kém nhiều chi phí. Bạn có thể dễ dàng chọn lựa máy chủ theo nhu cầu sử dụng, từ Cloud VPS, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU. Nếu băn khoăn, hãy liên hệ với Vietnix để được tư vấn nhanh chóng và chi tiết nhất.
Các bước cài đặt và cấu hình NFS trên Ubuntu 20.04
Khi đã chuẩn bị đầy đủ các yêu cầu trên, bạn có thể bắt đầu tiến hành cài đặt và cấu hình NFS trên máy chủ Ubuntu 20.04 với các bước sau đây:
Bước 1: Tải xuống và cấu hình các thành phần
Đầu tiên, bạn cần cài đặt các thành phần cần thiết trên cả hai máy chủ.
Trên Host
Trên host server, bạn cần cài gói nfs-kernel-server
để hỗ trợ việc chia sẻ các thư mục. Do đây là lần đầu tiên thực hiện với apt
trong phiên làm việc nên bạn cần cập nhật lại local package index trước khi cài đặt.
host:$ sudo apt update
host:$ sudo apt install nfs-kernel-server
Sau khi cài xong gói này, bạn chuyển sang cài trên client server.
Trên Client
Trên client server, bạn cần cài đặt gói nfs-common
, cung cấp chức năng NFS không bao gồm bất kỳ thành phần máy chủ nào. Tương tự, hãy cập nhật local package index để có thông tin mới nhất:
client:$ sudo apt update
client:$ sudo apt install nfs-common
Bây giờ, cả hai server đã có các gói cần thiết để bắt đầu cấu hình.
Bước 2: Tạo các thư mục chia sẻ trên Host
Dưới đây là 2 cách tạo thư mục chia sẻ với các cấu hình khác nhau để minh họa hai cách chính mà các NFS được cấu hình phù hợp với quyền truy cập superuser.
Lưu ý: Superuser có thể thực hiện mọi hành động tại bất cứ vị trí nào trên hệ thống. Tuy nhiên các thư mục được mount bằng NFS không thuộc hệ thống mà chúng được mount. Do đó mặc định máy chủ NFS từ chối thực hiện các hoạt động được yêu cầu từ superuser. Điều này có nghĩa là superuser trên client không thể viết file với tư cách root, phân quyền sở hữu hoặc thực hiện bất cứ thao tác superuser nào khác trên NFS mount.
Tuy nhiên, đôi lúc vẫn có những user đáng tin cậy trên client system muốn thực hiện những hành động trên mà không cần quyền truy cập superuser trên host. Bạn sẽ cần cấu hình NFS server để cho phép điều này nhưng cần đề phòng các rủi ro do người dùng có thể truy cập root vào toàn bộ host system.
Ví dụ 1: Xuất một mount đa dụng
Trong ví dụ đầu tiên, bạn sẽ được hướng dẫn cách tạo một mount NFS đa dụng sử dụng hành vi mặc định của NFS để giới hạn quyền tương tác của user root client khi tương tác với server host. Điều này cũng có thể được thực hiện nếu muốn lưu trữ các file đã được upload bằng hệ thống quản lý nội dung hoặc muốn tạo không gian làm việc cho user chia sẻ file project dễ dàng.
Đầu tiên, hãy tạo thư mục chia sẻ:
host:$ sudo mkdir /var/nfs/general -p
Do bạn đang tạo thư mục với quyền sudo
nên thư mục này thuộc sở hữu của root user trên host.
host:$ ls -la /var/nfs/general
Output
drwxr-xr-x 2 root root 4096 May 14 18:36 .
NFS sẽ chuyển tất cả tác vụ của root trên client thành thông tin đăng nhập nobody:nogroup
như một biện pháp bảo mật. Do đó, bạn cần thay đổi quyền sở hữu thư mục để phù hợp với thông tin đăng nhập này.
host:$ sudo chown nobody:nogroup /var/nfs/general
Như vậy, bạn đã sẵn sàng để xuất thư mục này.
Ví dụ 2: Chia sẻ thư mục Home
Trong ví dụ thứ hai, mục tiêu thực hiện là để chia sẻ các thư mục home của người dùng được lưu trữ trên host cho các client server. Đồng thời cho phép các administrator đáng tin cậy trên các client server truy cập dễ dàng để quản lý người dùng.
Để làm điều này, bạn cần chia sẻ thư mục /home
. Vì thư mục này đã tồn tại nên bạn không cần phải tạo mới. Bạn cũng không cần thay đổi quyền truy cập bởi nếu làm vậy sẽ gây khó khăn cho bất kỳ người dùng nào có thư mục home trên host.
Bước 3: Cấu hình NFS Export trên Host server
Tiếp theo, bạn cần đi đến file cấu hình NFS để thiết lập chia sẻ tài nguyên. Trên server host, mở file /etc/exports
bằng trình soạn thảo văn bản với quyền root:
host:$ sudo nano /etc/exports
File chứa các comment hiển thị cấu trúc chung của mỗi dòng cấu hình. Cú pháp như sau:
directory_to_share client(share_option1,...,share_optionN)
Bạn cần tạo một dòng cho mỗi thư mục dự định chia sẻ. Lưu ý thay thế client_ip
bằng địa chỉ IP cụ thể của bạn:
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Ở đây, bạn sẽ sử dụng các tùy chọn cấu hình giống nhau cho cả hai thư mục, trừ no_root_squash
. Ý nghĩa của các tùy chọn như sau:
rw
: Tùy chọn này cho phép máy client đọc và ghi vào volume.sync
: Tùy chọn cho phép máy client ghi các thay đổi vào ổ đĩa trước khi phản hồi. Điều này giúp cho môi trường ổn định và nhất quán hơn nhờ việc phản ánh trạng thái thực tế của ổ đĩa từ xa. Tuy nhiên nó cũng làm giảm tốc độ hoạt động của các file.no_subtree_check
: Tùy chọn này ngăn chặn việc kiểm tra nhánh con (subtree checking), quá trình mà host phải thực hiện để xem file có còn thực sự khả dụng trong cây thư mục đã xuất không. Điều này có thể gây ra nhiều vấn đề khi file được đổi tên trong khi client đang mở nó. Tốt nhất trong các trường hợp, bạn nên tắt subtree checking.no_root_squash
: Mặc định, NFS dịch các yêu cầu từ root user từ xa thành non-privileged user trên server. Đây là một tính năng bảo mật để ngăn chặn tài khoản root trên client sử dụng file system của host như root. Lệnhno_root_squash
sẽ vô hiệu hóa hành vi này cho một số phần chia sẻ.
Khi bạn hoàn tất các thay đổi, nhấn lưu và đóng file. Sau đó, để các client đã cấu hình có thể truy cập vào những phần đã chia sẻ, bạn tiến hành khởi động lại máy chủ NFS bằng lệnh sau:
host:$ sudo systemctl restart nfs-kernel-server
Trước khi sử dụng các phần này, bạn cần đảm bảo rằng lưu lượng truy cập đã được cho phép trong các quy tắc firewall.
Bước 4: Điều chỉnh firewall trên Host
Trước hết, hãy kiểm tra trạng thái hiện tại của firewall đã bật hay chưa. Nếu firewall đang bật, kiểm tra xem các hoạt động nào được cho phép:
host:$ sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Như kết quả ở trên cho thấy, hiện chỉ có truy cập SSH được cấp phép. Do đó bạn cần thêm một số rule cho NFS traffic.
Đối với các ứng dụng khác, bạn có thể dùng lệnh sudo ufw app list
và kích hoạt qua tên, còn đối với nfs
không thể làm như thế. Tuy nhiên, do ufw
cũng kiểm tra /etc/services
để tìm cổng và giao thức của dịch vụ nên bạn vẫn có thể thêm NFS bằng tên. Để đảm bảo an toàn tốt nhất, bạn nên kích hoạt quy tắc hạn chế và chỉ cho phép các truy cập mong muốn cụ thể thay vì cho phép tất cả.
Sử dụng lệnh sau để mở cổng 2049
trên host, nhớ thay địa chỉ IP client của bạn:
host:$ sudo ufw allow from client_ip to any port nfs
Xác nhận thay đổi bằng cách nhập lệnh:
host:$ sudo ufw status
Kết quả trả về cần hiển thị lưu lượng được phép truy cập từ cổng 2049:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
Điều này cho thấy UFW chỉ cho phép NFS truy cập trên cổng 2049
từ client.
Bước 5: Tạo mount point và mount thư mục trên Client
Bây giờ trên host đã được cấu hình và có sẵn các phần chia sẻ, bước tiếp theo bạn cần thiết lập một số cài đặt trên client. Bạn sẽ cần mount các thư mục trên host muốn chia sẻ đến các thư mục trống trên client.
Lưu ý, nếu tồn tại file và thự mục trong mount point, chúng sẽ bị ẩn ngay sau khi mount NFS share. Để tránh mất các file quan trọng, bạn cần kiểm tra và đảm bảo thư mục được mount phải là thư mục trống.
Bạn cần tạo hai thư mục:
client:$ sudo mkdir -p /nfs/general
client:$ sudo mkdir -p /nfs/home
Bây giờ bạn đã có nơi để lưu trữ các file từ xa và đã mở firewall. Bạn có thể mount file chia sẻ bằng cách sử dụng địa chỉ IP của host server:
client:$ sudo mount host_ip:/var/nfs/general /nfs/general
client:$ sudo mount host_ip:/home /nfs/home
Các lệnh trên sẽ mount các file chia sẻ từ máy host đến các máy client. Để kiểm tra xem mount đã thực hiện thành công chưa, bạn có thể dùng lệnh mount
hoặc findmnt
. Tuy nhiên nếu dùng df -h
thì kết quả trả về sẽ dễ đọc hơn:
client:$ df -h
Output
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general
10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home
Cả hai file chia sẻ đã mount sẽ xuất hiện ở cuối danh sách. Do chúng được mount từ cùng một file system nên kết quả hiển thị với ổ đĩa giống nhau. Để kiểm tra có bao nhiêu không gian đang được sử dụng với mỗi mount point, sử dụng lệnh du
và đường dẫn của mount. Tùy chọn -s
cung cấp tóm tắt sử dụng cho mỗi file. Tùy chọn -h
giúp in kết quả để bạn dễ đọc hơn.
Ví dụ:
client:$ du -sh /nfs/home
Output
36K /nfs/home
Output trên cho biết nội dung toàn bộ thư mục home chỉ sử dụng 36K.
Bước 6: Kiểm tra truy cập NFS
Tiếp theo, bạn cần kiểm tra truy cập vào các folder share bằng cách ghi một số thông tin vào mỗi folder.
Ví dụ 1: Share dùng chung
Đầu tiên, hãy ghi một file kiểm tra vào /var/nfs/general
:
client:$ sudo touch /nfs/general/general.test
Sau đó kiểm tra quyền sở hữu file:
client:$ ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
Do bạn mount volume này mà không thay đổi hành vi mặc định của NFS, đồng thời tạo file dưới dạng root user của client thông qua lệnh sudo
, cho nên quyền sử hữu của file vẫn mặc định là nobody:nogroup
. Client superuser sẽ không thể thực hiện các hoạt động quản trị tính năng thông thường như thay đổi chủ sở hữu file hoặc tạo thư mục mới cho một nhóm user trên folder share được mount bằng NFS này.
Ví dụ 2: Share thư mục home
Để so sánh quyền hạn của share dùng chung và share thư mục home, bạn tạo một file trong /nfs/home
tương tự:
client:$ sudo touch /nfs/home/home.test
Sau đó kiểm tra quyền sở hữu file:
client:$ ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
Bạn đã tạo home.test
với quyền root bằng cách sử dụng lệnh sudo
tương tự như cách tạo file general.test
. Tuy nhiên trong trường hợp này, home.test được sở hữu bởi root do bạn đã ghi đè lệnh hành vi mặc định khi chỉ định tùy chọn no_root_squash
trên mount này. Điều này cho phép người dùng root trên client thao tác như root và giúp việc quản trị tài khoản người dùng thuận tiện hơn. Bạn cũng không cần phải cấp quyền truy cập root cho người dùng trên host nữa.
Bước 7: Mount các thư mục NFS từ xa khi khởi động
Bạn có thể mount các thư mục NFS từ xa khi khởi động bằng cách thêm vào file /etc/fstab
trên client.
Mở file với quyền root trên trình soạn thảo văn bản:
client:$ sudo nano /etc/fstab
Ở cuối file, thêm một dòng cho mỗi folder share:
. . .
host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Lưu ý, bạn có thể tìm hiểu thêm thông tin về các tùy chọn này trong NFS man page. Truy cập bằng câu lệnh sau:
$ man nfs
Client sẽ tự động mount các phân vùng từ xa khi khởi động, sẽ mất vài giây để thiết lập kết nối và để các folder share sẵn sàng.
Bước 8: Ngắt kết nối NFS remote share
Nếu muốn loại bỏ thư mục từ xa trên hệ thống, bạn có thể ngắt kết nối bằng cách di chuyển nó khỏi cấu trúc thư mục của folder share và ngắt kết nối bằng cách sau:
client:$ cd ~
client:$ sudo umount /nfs/home
client:$ sudo umount /nfs/general
Lưu ý, lệnh được đặt tên là umount
chứ không phải unmount
. Lệnh này sẽ giúp gỡ bỏ các chia sẻ từ xa, chỉ giữ lại các lưu trữ cục bộ.
client:$ df -h
Output
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Nếu bạn muốn ngăn cản việc các folder sẽ được kết nối lại vào lần khởi động tiếp theo, hãy chỉnh sửa /etc/fstab
và xóa dòng đó hoặc đặt dấu #
ở đầu dòng để chú thích. Hoặc là bạn có thể loại bỏ tùy chọn auto
, cách này vẫn cho phép bạn thực hiện mount thủ công.
Vietnix là nhà cung cấp giải pháp VPS với hơn 10 năm kinh nghiệm trong lĩnh vực. Trong thời gian này, Vietnix đã phục vụ cho hơn 50.000 khách hàng cá nhân và doanh nghiệp, bao gồm GTV, UB Group, iVIVU, Vietnamworks, SEOSONA và SAGO Media và kích hoạt hơn 100.000 dịch vụ. Đặc biệt, Vietnix càng tự hào hơn khi tỷ lệ khách hàng giới thiệu dịch vụ lên đến 97% sau khi sử dụng.
Năm 2022, Vietnix đã đạt được giải thưởng Thương hiệu Việt Nam xuất sắc. Đây là minh chứng cho chất lượng dịch vụ và sự tin tưởng của khách hàng với chúng tôi. Hãy để Vietnix trở thành người đồng hành cùng bạn trên con đường kinh doanh trực tuyến.
Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Hotline: 1800 1093.
- Email: sales@vietnix.com.vn.
Lời kết
Trong hướng dẫn trên về cách thiết lập NFS trên Ubuntu 20.04, Vietnix đã chỉ ra các bước tạo một NFS host, thực hiện một số hành vi NFS quan trọng thông qua việc tạo 2 NFS mount khác nhau và chia sẻ chúng với một NFS client. Trong trường hợp bạn muốn triển khai NFS không thông qua mạng riêng, hãy sử dụng một VPN hoặc một kênh mã hóa để bảo vệ dữ liệu một cách an toàn. Chúc các bạn thành công.