Cách thiết lập NFS Mount trên Ubuntu 18.04
NFS, hay Hệ thống file mạng, là một giao thức hệ thống file phân tán cho phép bạn gắn các folder từ xa trên server của bạn . Điều này cho phép bạn quản lý không gian lưu trữ ở một vị trí khác và ghi vào không gian đó từ nhiều client . NFS cung cấp một cách tương đối nhanh chóng và dễ dàng để truy cập các hệ thống từ xa qua mạng và hoạt động tốt trong các tình huống phải truy cập thường xuyên các tài nguyên được chia sẻ.Trong hướng dẫn này, ta sẽ giới thiệu cho các bạn cách cài đặt các thành phần cần thiết cho chức năng NFS, cấu hình mount NFS và ngắt kết nối chia sẻ NFS từ xa.
Yêu cầu
Ta sẽ sử dụng hai server trong hướng dẫn này, với một phần chia sẻ hệ thống file của nó với phần còn lại. Để làm theo, bạn cần :
- Hai server Ubuntu 18.04. Mỗi người trong số này phải có một user không phải root với các quyền - sudocấu hình , một firewall đơn giản được cài đặt với UFW và mạng riêng, nếu nó khả dụng cho bạn.-  Để được hỗ trợ  cài đặt   user  không phải root với các  quyền  sudovà firewall , hãy làm theo hướng dẫn Cài đặt Server Ban đầu với Ubuntu 18.04 của ta .
- Để được trợ giúp cài đặt mạng riêng tư, hãy xem Cách cài đặt và sử dụng mạng riêng DigitalOcean .
 
-  Để được hỗ trợ  cài đặt   user  không phải root với các  quyền  
Trong suốt hướng dẫn này, ta đề cập đến server chia sẻ các folder của nó với quyền là server và server mount các folder này với quyền là máy khách . Để giữ cho chúng luôn ổn định, ta sẽ sử dụng các địa chỉ IP sau làm chỗ đứng cho các giá trị server và máy khách :
-   Server  : 203.0.113.0
-  Máy khách : 203.0.113.24
Khi các địa chỉ IP này xuất hiện trong các lệnh và file cấu hình, bạn cần thay thế chúng bằng địa chỉ IP server và máy khách tương ứng của bạn .
Bước 1 - Download và cài đặt các thành phần
Ta sẽ bắt đầu bằng cách cài đặt các thành phần cần thiết trên mỗi server .
Trên server
 Trên  server  lưu trữ , hãy cài đặt gói nfs-kernel-server , gói này sẽ cho phép bạn chia sẻ các folder   của bạn . Vì đây là thao tác đầu tiên bạn thực hiện với apt trong phiên này, hãy  cập nhật OS  local  của bạn trước khi cài đặt:
- sudo apt update 
- sudo apt install nfs-kernel-server 
Một khi các gói được cài đặt, chuyển sang server của khách hàng.
Trên khách hàng
 Trên  server  khách hàng ,  ta  cần cài đặt một gói có tên nfs-common , gói này cung cấp chức năng NFS mà không bao gồm các thành phần  server  không cần thiết.   , hãy  cập nhật OS  local  trước khi cài đặt  đảm bảo  rằng bạn có thông tin cập nhật:
- sudo apt update 
- sudo apt install nfs-common 
Bây giờ cả hai server đều có các gói cần thiết, ta có thể bắt đầu cấu hình chúng.
Bước 2 - Tạo Thư mục Chia sẻ trên Server lưu trữ
Ta sẽ chia sẻ hai folder riêng biệt, với các cài đặt cấu hình khác nhau, để minh họa hai cách chính mà các ngàm NFS có thể được cấu hình liên quan đến quyền truy cập siêu user .
Superusers có thể làm bất cứ điều gì ở bất cứ đâu trên hệ thống của họ. Tuy nhiên, các folder được gắn với NFS không phải là một phần của hệ thống mà chúng được gắn, vì vậy theo mặc định, server NFS từ chối thực hiện các hoạt động yêu cầu quyền của user siêu cấp. Hạn chế mặc định này nghĩa là superuser trên máy khách không thể ghi file dưới dạng root , gán lại quyền sở hữu hoặc thực hiện bất kỳ tác vụ superuser nào khác trên NFS mount.
Tuy nhiên, đôi khi có những user tin cậy trên hệ thống máy khách cần thực hiện các hành động này trên hệ thống file được mount nhưng họ không cần quyền truy cập siêu user trên server . Bạn có thể cấu hình server NFS để cho phép điều này cho phép điều này, mặc dù nó dẫn đến một yếu tố rủi ro, vì như vậy user có thể giành được quyền truy cập root vào toàn bộ hệ thống server .
Ví dụ 1: Xuất một Giá đỡ Mục đích Chung
Trong ví dụ đầu tiên, ta sẽ tạo một mount NFS có mục đích chung sử dụng hành vi NFS mặc định để gây khó khăn cho user có quyền root trên máy khách tương tác với server bằng các quyền siêu user của máy khách đó. Bạn có thể sử dụng thông tin như thế này để lưu trữ các file được tải lên bằng hệ thống quản lý nội dung hoặc để tạo không gian cho user dễ dàng chia sẻ file dự án.
 Đầu tiên, tạo một folder  chia sẻ có tên là nfs :
- sudo mkdir /var/nfs/general -p 
Vì  ta  đang tạo nó bằng sudo , nên folder  thuộc sở hữu của  user  root trên  server  .
- ls -la /var/nfs/general 
Output4 drwxr-xr-x  2 root   root    4096 Jul 25 15:26 . NFS sẽ dịch bất kỳ hoạt động gốc nào trên máy khách sang thông tin đăng nhập nobody:nogroup như một biện pháp bảo mật. Do đó,  ta  cần thay đổi quyền sở hữu folder  để phù hợp với các thông tin đăng nhập đó.
- sudo chown nobody:nogroup /var/nfs/general 
Đến đây bạn đã sẵn sàng để xuất folder này.
Ví dụ 2: Xuất Danh mục Trang chủ
Trong ví dụ thứ hai của ta , mục tiêu là làm cho các folder chủ của user được lưu trữ trên server lưu trữ sẵn có trên các server khách hàng , đồng thời cho phép administrator tin cậy của các máy chủ khách đó có quyền truy cập mà họ cần để quản lý user một cách thuận tiện.
 Để làm điều này,  ta  sẽ xuất folder  /home . Vì nó đã tồn tại nên  ta  không cần tạo nó.  Ta  cũng sẽ không thay đổi các quyền. Nếu  ta  làm vậy , nó có thể dẫn đến một loạt vấn đề cho bất kỳ ai có folder  chính trên  server  .
Bước 3 - Cấu hình xuất NFS trên Server lưu trữ
Tiếp theo, ta sẽ đi sâu vào file cấu hình NFS để cài đặt việc chia sẻ các tài nguyên này.
 Mở file  /etc/exports trong editor  của bạn với  quyền  root :
- sudo nano /etc/exports 
Tệp có chú thích thể hiện cấu trúc chung của từng dòng cấu hình. Cú pháp về cơ bản là:
directory_to_share    client(share_option1,...,share_optionN)  Ta   cần  tạo một dòng cho từng folder  mà  ta  định chia sẻ. Vì  ứng dụng client  mẫu của  ta  có IP là 203.0.113.24 , các dòng của  ta  sẽ giống như sau. Đảm bảo thay đổi địa chỉ IP hiển thị ở đây thành địa chỉ IP của khách hàng của bạn:
/var/nfs/general    203.0.113.24(rw,sync,no_subtree_check) /home       203.0.113.24(rw,sync,no_root_squash,no_subtree_check) Ở đây,  ta  đang sử dụng các tùy chọn cấu hình giống nhau cho cả hai folder  ngoại trừ no_root_squash . Hãy xem mỗi tùy chọn này có ý nghĩa gì:
-  rw: Tùy chọn này cung cấp cho máy tính khách quyền truy cập cả đọc và ghi vào ổ đĩa.
-  sync: Tùy chọn này buộc NFS ghi các thay đổi vào đĩa trước khi trả lời. Điều này dẫn đến một môi trường ổn định và nhất quán hơn vì câu trả lời phản ánh trạng thái thực tế của âm lượng từ xa. Tuy nhiên, nó cũng làm giảm tốc độ hoạt động của file .
-  no_subtree_check: Tùy chọn này ngăn chặn việc kiểm tra cây con, đây là một quá trình mà server lưu trữ phải kiểm tra xem file có thực sự còn trong cây được xuất cho mọi yêu cầu hay không. Điều này có thể gây ra nhiều vấn đề khi một file được đổi tên trong khi khách hàng đã mở nó. Trong hầu hết mọi trường hợp, tốt hơn hết là bạn nên tắt tính năng kiểm tra cây con.
-  no_root_squash: Theo mặc định, NFS dịch các yêu cầu từ user root từ xa thành user không có quyền trên server . Đây được coi là tính năng bảo mật để ngăn account gốc trên máy khách sử dụng hệ thống file của server làm account gốc .no_root_squashvô hiệu hóa hành vi này đối với một số chia sẻ nhất định.
Khi bạn thực hiện xong các thay đổi, hãy lưu file . Sau đó, để chia sẻ có sẵn cho các client mà bạn đã cấu hình, hãy khởi động lại server NFS bằng lệnh sau:
- sudo systemctl restart nfs-kernel-server 
Tuy nhiên, trước khi bạn có thể sử dụng các chia sẻ mới, bạn cần phải đảm bảo lưu lượng truy cập vào các chia sẻ được cho phép bởi các luật firewall .
Bước 4 - Điều chỉnh Tường lửa trên Server
Trước tiên, hãy kiểm tra trạng thái firewall để xem nó có được bật hay không và nếu có, để xem những gì hiện được cho phép:
- sudo ufw status 
OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere OpenSSH (v6)               ALLOW       Anywhere (v6) Trên hệ thống của ta , chỉ lưu lượng SSH mới được phép thông qua, vì vậy ta cần thêm luật cho lưu lượng NFS.
 Với nhiều ứng dụng, bạn có thể sử sudo ufw app list dụng sudo ufw app list và kích hoạt chúng theo tên, nhưng nfs không phải là một trong số đó. Tuy nhiên, vì ufw cũng kiểm tra /etc/services cho cổng và giao thức của một dịch vụ,  ta  vẫn có thể thêm NFS theo tên. Phương pháp hay nhất khuyên bạn nên bật  luật  hạn chế nhất sẽ vẫn cho phép lưu lượng truy cập bạn muốn cho phép, vì vậy thay vì chỉ cho phép lưu lượng truy cập từ bất kỳ đâu,  ta  sẽ nói cụ thể.
 Sử dụng lệnh sau để mở cổng 2049 trên  server  , đảm bảo thay thế địa chỉ IP của khách hàng của bạn:
- sudo ufw allow from 203.0.113.24 to any port nfs 
Bạn có thể kiểm tra thay đổi bằng lệnh :
- sudo ufw status 
Bạn sẽ thấy lưu lượng cho phép từ cổng 2049 trong  kết quả :
OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere                  2049                       ALLOW       203.0.113.24         OpenSSH (v6)               ALLOW       Anywhere (v6) Điều này  xác nhận  UFW sẽ chỉ cho phép lưu lượng NFS trên cổng 2049 từ máy khách của  ta .
Bước 5 - Tạo điểm mount và gắn folder trên client
Bây giờ server lưu trữ đã được cấu hình và phục vụ chia sẻ của nó, ta sẽ chuẩn bị cho máy khách của bạn .
Để làm cho các chia sẻ từ xa có sẵn trên máy khách , ta cần gắn các folder trên server lưu trữ mà ta muốn chia sẻ vào các folder trống trên máy khách .
 Lưu ý: Nếu có các file  và folder  trong điểm  mount  của bạn, chúng sẽ bị ẩn ngay sau khi bạn gắn phần chia sẻ NFS. Để tránh mất các file  quan trọng, hãy  đảm bảo  nếu bạn  mount  trong một folder  đã tồn tại mà folder  đó trống.
Ta sẽ tạo hai folder cho các mount của ta :
- sudo mkdir -p /nfs/general 
- sudo mkdir -p /nfs/home 
Bây giờ  ta  có một vị trí để đặt các chia sẻ từ xa và  ta  đã mở firewall ,  ta  có thể  mount  các chia sẻ bằng cách địa chỉ  server  lưu trữ của  ta , trong hướng dẫn này là 203.0.113.0 :
- sudo mount 203.0.113.0:/var/nfs/general /nfs/general 
- sudo mount 203.0.113.0:/home /nfs/home 
Các lệnh này sẽ gắn các chia sẻ từ máy tính chủ vào máy khách . Bạn có thể kiểm tra lại xem chúng đã  mount  thành công hay chưa bằng một số cách. Bạn  có thể kiểm tra  bằng lệnh mount hoặc findmnt đơn giản, nhưng df -h cung cấp  kết quả  dễ đọc hơn minh họa cách sử dụng đĩa được hiển thị khác nhau đối với chia sẻ NFS:
- df -h 
OutputFilesystem                Size  Used Avail Use% Mounted on udev                      238M     0  238M   0% /dev tmpfs                      49M  628K   49M   2% /run /dev/vda1                  20G  1.2G   18G   7% / tmpfs                     245M     0  245M   0% /dev/shm tmpfs                     5.0M     0  5.0M   0% /run/lock tmpfs                     245M     0  245M   0% /sys/fs/cgroup tmpfs                      49M     0   49M   0% /run/user/0 203.0.113.0:/home      20G  1.2G   18G   7% /nfs/home 203.0.113.0:/var/nfs/general   20G  1.2G   18G   7% /nfs/general Cả hai cổ phiếu  ta  đã  mount  đều xuất hiện ở dưới cùng. Bởi vì chúng được  mount  từ cùng một hệ thống file , chúng hiển thị mức sử dụng đĩa giống nhau. Để xem có bao nhiêu dung lượng thực sự đang được sử dụng dưới mỗi điểm  mount , hãy sử dụng lệnh sử dụng đĩa du và đường dẫn của điểm  mount . Cờ -s cung cấp một bản tóm tắt về việc sử dụng thay vì hiển thị việc sử dụng cho mọi file . -h in ra  kết quả  mà con người có thể đọc được.
Ví dụ:
- du -sh /nfs/home 
Output36K /nfs/home Điều này cho ta thấy rằng nội dung của toàn bộ folder chính chỉ sử dụng 36K không gian có sẵn.
Bước 6 - Kiểm tra quyền truy cập NFS
Tiếp theo, hãy kiểm tra quyền truy cập vào các chia sẻ bằng cách viết một cái gì đó cho mỗi người trong số họ.
Ví dụ 1: Chia sẻ Mục đích Chung
 Đầu tiên, hãy ghi một file  thử nghiệm vào /var/nfs/general share:
- sudo touch /nfs/general/general.test 
Sau đó, hãy kiểm tra quyền sở hữu của nó:
- ls -l /nfs/general/general.test 
Output-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test Vì  ta  đã gắn ổ đĩa này mà không thay đổi hành vi mặc định của NFS và tạo file   với quyền  là  user  gốc của máy khách thông qua sudo , quyền sở hữu file  được mặc định cho nobody:nogroup . những người quản lý cấp trên client  sẽ không thể thực hiện các hành động quản trị điển hình, như thay đổi chủ sở hữu của file  hoặc tạo folder  mới cho một  group   user , trên phần chia sẻ được gắn với NFS này.
Ví dụ 2: Chia sẻ Thư mục Trang chủ
Để so sánh quyền của phần chia sẻ Mục đích chung với phần chia sẻ Thư mục gia đình, hãy tạo file Thư mục chính theo cách tương tự:
- sudo touch /nfs/home/home.test 
Sau đó, hãy xem quyền sở hữu của file :
- ls -l /nfs/home/home.test 
Output-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test  Ta  đã tạo home.test dưới dạng root bằng cách sử dụng sudo , giống hệt như cách  ta  tạo file  general.test . Tuy nhiên, trong trường hợp này, nó thuộc sở hữu của root vì  ta  ghi no_root_squash hành vi mặc định khi  ta  chỉ định tùy chọn no_root_squash trên mount này. Điều này cho phép người sử dụng gốc của  ta  trên máy khách hàng để đóng  role  như là  user root  và làm cho việc quản lý account   user  thuận tiện hơn nhiều. Đồng thời, điều đó  nghĩa là   ta  không phải cấp cho những  user  này quyền truy cập root trên  server  .
Bước 7 - Gắn các folder NFS từ xa khi khởi động
  Ta  có thể gắn các chia sẻ NFS từ xa tự động khi khởi động bằng cách thêm chúng vào file  /etc/fstab trên máy khách .
Mở file này với quyền root trong editor của bạn:
- sudo nano /etc/fstab 
Ở cuối file , thêm một dòng cho mỗi chia sẻ của ta . Chúng sẽ trông như thế này:
. . . 203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 203.0.113.0:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0  Lưu ý: Bạn có thể tìm thêm thông tin về các tùy chọn mà ta chỉ định ở đây trong trang người đàn ông NFS. Bạn có thể truy cập điều này bằng cách chạy lệnh sau:
- man nfs 
Server khách hàng sẽ tự động mount các phân vùng từ xa khi khởi động, mặc dù có thể mất một vài phút để cài đặt kết nối và chia sẻ khả dụng.
Bước 8 - Ngắt kết nối chia sẻ từ xa NFS
Nếu bạn không muốn mount folder từ xa trên hệ thống của bạn nữa, bạn có thể ngắt kết nối nó bằng cách di chuyển ra khỏi cấu trúc folder của chia sẻ và ngắt kết nối, như sau:
- cd ~ 
- sudo umount /nfs/home 
- sudo umount /nfs/general 
Điều này sẽ xóa các chia sẻ từ xa, chỉ để lại bộ nhớ local của bạn có thể truy cập được:
- df -h 
Output Filesystem      Size  Used Avail Use% Mounted on /dev/vda         59G  1.3G   55G   3% / none            4.0K     0  4.0K   0% /sys/fs/cgroup udev            2.0G   12K  2.0G   1% /dev tmpfs           396M  320K  396M   1% /run none            5.0M     0  5.0M   0% /run/lock none            2.0G     0  2.0G   0% /run/shm none            100M     0  100M   0% /run/user Nếu bạn cũng muốn ngăn chúng bị đếm lại trong lần khởi động lại tiếp theo, hãy chỉnh sửa /etc/fstab và xóa dòng hoặc  comment  nó bằng cách đặt ký hiệu # ở đầu dòng. Bạn cũng có thể ngăn tự động gắn bằng cách loại bỏ tùy chọn auto , tùy chọn này sẽ cho phép bạn gắn nó theo cách thủ công.
Kết luận
Trong hướng dẫn này, ta đã tạo một server NFS và minh họa một số hành vi NFS chính bằng cách tạo hai giá đỡ NFS khác nhau, ta đã chia sẻ với máy khách NFS của bạn . Nếu bạn đang tìm cách triển khai NFS trong production , điều quan trọng cần lưu ý là bản thân giao thức không được mã hóa. Trong trường hợp bạn đang chia sẻ các file nhằm mục đích có thể truy cập , điều này không gây ra bất kỳ vấn đề nghiêm trọng nào.
Tuy nhiên, nếu bạn đang sử dụng NFS cho dữ liệu riêng tư, bạn cần quyết định cách bạn muốn bảo vệ dữ liệu đó. Bạn có thể định tuyến NFS qua SSH hoặc kết nối VPN để tạo trải nghiệm an toàn hơn, nhưng điều này thường đi kèm với việc giảm hiệu suất đáng kể. Nếu hiệu suất là một vấn đề, hãy xem xét SSHFS . Nó hơi chậm hơn so với lưu lượng NFS không được mã hóa, nhưng thường nhanh hơn nhiều so với NFS có tunnel . Mã hóa được xác thực Kerberos cho NFS là một tùy chọn khác để khám phá.
Các tin liên quan
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 18.042018-07-05
Cách thiết lập firewall với UFW trên Ubuntu 18.04
2018-07-05
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 18.04
2018-07-05
Cách cài đặt và cấu hình ownCloud trên Ubuntu 18.04
2018-07-05
Cách thêm không gian swap trên Ubuntu 18.04
2018-07-05
Triển khai các ứng dụng React với Webhooks và Slack trên Ubuntu 16.04
2018-06-20
Cách đảm bảo chất lượng mã bằng SonarQube trên Ubuntu 16.04
2018-06-14
Cách cài đặt Webmin trên Ubuntu 18.04
2018-05-17
Cách thiết lập chia sẻ Samba cho tổ chức nhỏ trên Ubuntu 16.04
2018-05-11
Cách tự động hóa triển khai Elixir-Phoenix với Distillery và edeliver trên Ubuntu 16.04
2018-05-03
 

