Thứ năm, 04/08/2016 | 00:00 GMT+7

Cách thiết lập NFS Mount trên Ubuntu 16.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 mà các tài nguyên được chia sẻ sẽ được truy cập thường xuyên.

Trong hướng dẫn này, ta sẽ trình bày cách cấu hình các ngàm NFS.

Yêu cầu

Ta sẽ sử dụng hai server trong hướng dẫn này: một server sẽ chia sẻ một phần hệ thống file của nó với server kia.
Để làm theo, bạn cần :

Trong suốt hướng dẫn, ta đề cập đến server chia sẻ các folder của nó với quyền là server lưu trữ 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à client :

  • Server : 203.0.113.0
  • Máy khách : 203.0.113.256

Bạn nên thay thế các giá trị này bằng địa chỉ ip server và client 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ữ, ta sẽ cài đặt gói nfs-kernel-server , gói này sẽ cho phép ta chia sẻ các folder của bạn . Vì đây là thao tác đầu tiên mà ta thực hiện với apt trong phiên này, ta sẽ cập nhật OS local của bạn trước khi cài đặt:

  • sudo apt-get update
  • sudo apt-get install nfs-kernel-server

Sau khi các gói này được cài đặt, hãy chuyển sang server .

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 , 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. , ta sẽ cập nhật OS local trước khi cài đặt đảm bảo rằng ta có thông tin cập nhật:

  • sudo apt-get update
  • sudo apt-get 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 client không thể ghi file dưới dạng root, chuyển nhượng lại quyền sở hữu hoặc thực hiện bất kỳ tác vụ superuser nào trên NFS mount.

Tuy nhiên, đôi khi có những user tin cậy trên hệ thống client cần có khả năng thực hiện những việc này trên hệ thống file được mount nhưng không cần quyền truy cập superuser trên server . Server NFS có thể được cấu hình để 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ể 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 client tương tác với server bằng các quyền siêu user của client đó. 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 được sở hữu bởi root ở đây trên server .

  • ls -la /var/nfs/general
Output
4 drwxr-xr-x 2 root root 4096 Jul 25 15:26 .

NFS sẽ dịch bất kỳ hoạt động root nào trên client 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

Thư mục này hiện đã sẵn sàng để xuất.

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 nhà 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 server khách đó 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ó sẽ gây ra tất cả các loại 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à:

/ etc / export
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.256 , các dòng của ta sẽ giống như sau. Đảm bảo thay đổi các IP để phù hợp với khách hàng của bạn:

/ etc / export
/var/nfs/general    203.0.113.256(rw,sync,no_subtree_check) /home       203.0.113.256(rw,sync,no_root_squash,no_subtree_check) 

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 . Ta hãy xem ý nghĩa của từng loại.

  • 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.
  • đồng bộ hóa : 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 root trên client sử dụng hệ thống file của server làm account root . no_root_squash vô 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 có thể sử dụng các lượt chia sẻ mới, bạn cần đảm bảo lưu lượng truy cập vào các lượt chia sẻ được các luật firewall cho phép

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 phép:

  • sudo ufw status
Output
Status: 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, 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ố đó. 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.256 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ả :

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.256 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ừ client của ta .

Bước 5 - Tạo điểm mount 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 ứng dụng client của bạn .

Để làm cho các chia sẻ từ xa khả dụng trên client , ta cần gắn folder server trên một folder client trống.

Lưu ý: Nếu có file và folder trong điểm mount của bạn, ngay sau khi bạn mount phần chia sẻ NFS, chúng sẽ bị ẩn. Đả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ước 6 - Gắn các folder vào client

Bây giờ ta đã có một số nơi để đặt các chia sẻ từ xa và ta đã mở firewall , ta có thể mount các chia sẻ bằng cách định địa chỉ server lưu trữ của ta , trong hướng dẫn này là 203.0.113.0 , như thế này:

  • 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 client . 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 sẽ cung cấp cho bạn kết quả dễ đọc hơn của con người, minh họa cách sử dụng đĩa được hiển thị khác nhau đối với chia sẻ nfs:

  • df -h
Output
Filesystem 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 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 sẽ in kết quả có thể đọc được của con người.

Ví dụ:

  • du -sh /nfs/home
Output
36K /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 20K không gian có sẵn.

Bước 7 - 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 root của client thông qua sudo , quyền sở hữu file được mặc định cho không ai: nogroup. 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 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 thông qua 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 user root của ta trên client hoạt động với quyền 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 8 - 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 client .

Mở file này với quyền root trong editor của bạn:

  • sudo nano /etc/fstab

Ở cuối file , ta sẽ thêm một dòng cho mỗi chia sẻ của ta . Chúng sẽ trông như thế này:

/ etc / fstab
. . . 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ấy thêm thông tin về các tùy chọn mà ta đang chỉ định ở đây trong trang man mô tả việc gắn NFS trong fstab bằng lệnh 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 vài phút để kết nối được thực hiện và chia sẻ khả dụng.

Bước 9 - 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 client 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 đó 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 nghiêm trọng. 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á.


Tags:

Các tin liên quan

Cách cài đặt và sử dụng Byobu để quản lý thiết bị đầu cuối trên Ubuntu 16.04
2016-08-04
Cách cài đặt và cấu hình Ansible trên Ubuntu 16.04
2016-07-22
Cách cài đặt và cấu hình Sphinx trên Ubuntu 16.04
2016-07-22
Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.04
2016-07-18
Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.04
2016-07-13
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.04
2016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19
Cách cài đặt và sử dụng Composer trên Ubuntu 16.04
2016-05-17
Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
2016-05-16
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.04
2016-05-04