Lab008: CentOS - Cấu hình File Server với NFS và Samba

"Cho 2 máy ảo chạy CentOS, thiết lập cơ chế chia sẻ file thông qua hạ tầng mạng LAN"
**
**

I Dịch vụ NFS

1.1 Topo mạng và các bước thực hiện

Để mô phỏng kết nối giữa NFS-Server và NFS-Client, ta sẽ thiết lập hệ thống mạng trong đó NFS-Server và NFS-Client được kết nối thông qua 1 Switch.
  • NFS-Server có IP 10.1.1.20/24
  • NFS-Client nhận IP 10.1.1.100/24 cùng lớp mạng với Server.
Để có thể hình thành liên kết chia sẻ file qua giao thức NFS, ta cần phải thực hiện theo các bước sau:
  • NFS-Server:
    • Cài đặt gói nfs-utils 
    • Cấu hình file /etc/exports khai báo folder chia sẻ file cùng quyền hạn đối với Clients
    • Khai báo giao thức và port của NFS trên FirewallD để cho phép Clients truy cập vào folder chia sẻ file
  • NFS-Client:
    • Cài đặt gói nfs-utils 
    • Mount phân vùng được chia sẻ trên NFS-Server để sử dụng như một phân vùng sẵn có trên Client
**

1.2 Thiết lập môi trường thực hành

Trên Hyper-V, chúng ta cần tạo một Virtual Switch ở chế độ Private để có kết quả như sau:
Để có thể giao tiếp với nhau, NFS-Server và NFS-Client đều phải được kết nối với Switch Private01:

Trên NFS-Server (số hiệu CentOS8-05) cấu hình địa chỉ IP tĩnh 10.1.1.20 (Interface eth1) bằng cách chỉnh sửa file config Interface eth1 với các tham số chính sau:
sudo nvim /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.1.1.20
NETMASK=255.255.255.0
GATEWAY=10.1.1.1
Kết quả:
Tương tự, trên NFS-Client cấu hình IP tĩnh hoặc động đều được, nhưng phải cùng lớp mạng với NFS-Server. Trong trường hợp này mình lựa chọn nhận IP động từ NFS-Server (xem lại Lab006 DHCP-Server). Ví dụ NFS-Client nhận địa chỉ IP 10.1.1.100/24 trên Interface eth1:
Vậy là chúng ta đã thiét lập được hệ thống mạng theo topo để thực hiện bài Lab NFS-Server, ta có thể thử đứng trên NFS-Client ping đến NFS-Server xem có thông hay không:
sudo ping 10.1.1.20
**

1.3 Cấu hình NFS-Server

1.3.1 Khai báo thư mục chia sẻ file

Chúng ta tiến hành cài đặt gói nfs-utils:
sudo dnf install nfs-utils -y
Sau khi cài đặt gói, ta cần khởi động dịch vụ NFS và chỉ định dịch vụ này sẽ khởi động cùng HDH:
sudo systemctl start nfs-server.service
sudo systemctl enable nfs-server.service
Tạo một folder sẽ dùng để chia sẻ file, ở đây mình đã tạo và Mount một phân vùng dung lượng 2GB (sdb1) vào folder /mnt/nfs-share để có được kết quả sau. Chi tiết cách tạo và Mount ổ đĩa ảo chúng ta đã thực hiện ở Lab005.
Chúng ta sẽ khai báo folder dùng để chia sẻ file cho các Clients bằng cách chỉnh sửa file /etc/exports:
sudo nvim /etc/exports
Và khai báo theo cú pháp <đường dẫn đến phân vùng cần chia sẻ> <địa chỉ dải mạng được phép truy cập> <quyền hạn của Clients>.
/mnt/nfs-share 10.1.1.0/24(rw,sync)
Vậy chúng ta đã qui định được sẽ chia sẻ thư mực /mnt/nfs-share cho các Clients trong mạng 10.1.1.0/24 với quyền hạn đọc, ghi.
Sau khi chỉnh sửa file /etc/exports ta cần khởi động lại dịch vụ NFS để nhận cấu hình mới:
sudo systemctl restart nfs-server
**

1.3.2 Khai báo FirewallD

Để các máy Clients có thể truy cập vào thư mục chia sẻ file trên Server trong tương lai mà không bị FirewallD chặn lại, ta cần tiến hành khai báo dịch vụ NFS và port mà dịch vụ này bằng cách lần lượt nhập các câu  sau:
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-port=2049/tcp
sudo firewall-cmd --permanent --add-port=2049/udp
sudo firewall-cmd --reload
Ta có thể kiểm tra các Rules vừa được thêm:
sudo firewall-cmd --list-all
**

1.4 Cấu hình NFS-Client

1.4.1 Kiểm tra thư mục được chia sẻ

Cài đặt gói NFS bằng câu lệnh:
sudo dnf install nfs-utils -y
Kiểm tra kết nối đến thư mục được chia sẻ trên Server. Sau khi nhập lệnh, nếu kết quả trả về gồm thư mục được chia sẻ và địa chỉ dải mạng mà Client đang đứng thì tức là Client hoàn toàn có thể truy cập và sử dụng tài nguyên trong thư mực do Server chia sẻ.
showmount -e 10.1.1.20
**

1.4.2 Mount thư mục được chia sẻ

Để thuận tiện cho việc truy cập và sử dụng tài nguyên trong thư mục được chia sẻ trên Server, ta sẽ thực hiện Mount thư mục đó vào máy Client. Sau khi Mount, thư mục chia sẻ trên Server sẽ giống như một thư mục bình thường trên máy Client.
Vậy ta cần tạo một folder trên máy Client để Mount thư mục chia sẻ, ví dụ tạo một folder /mnt/nfs-client chẳng hạn:
sudo mkdir /mnt/nfs-client
Tiếp theo, chỉnh sửa file /etc/fstab để HDH tự động Mount phân vùng được chia sẻ khi khởi động:
sudo nvim /etc/fstab
Chỉnh sửa nội dung FStab với cú pháp <địa chỉ IP của Server>:<đường dẫn đến thư mục được chia sẻ> <đường dẫn đến thư mục dùng để Mount> nfs defaults 0 0 
10.1.1.20:/mnt/nfs-share /mnt/nfs-client/ nfs defaults 0 0
Và khởi động lại máy Client để FStab Mount thư mục chia sẻ trên Server vào vị trí được chỉ định trên máy Client.
**

1.5 Kiểm tra kết quả

Để kiểm tra hiệu quả của giao thức NFS, ta sẽ đứng trên Server tạo mới một file trong thư mục được chia sẻ và đứng trên Client để list các file trong phân vùng được Mount.
Tạo mới một file trong thư mục chia sẻ trên Server:
sudo touch /mnt/nfs-share/new_file
Đứng trên Client list ra các file trong phân vùng được Mount:
ls -la /mnt/nfs-client
Ở chiều ngược lại, ta thử đứng trên Client có địa chỉ IP 10.1.1.100 tạo mới một file trong phân vùng được chia sẻ:
sudo touch /mnt/nfs-client/new01
Kết quả của câu lệnh có thành công hay không sẽ tùy thuộc vào việc chúng ta cấu hình file /etc/exports trên Server, ví dụ:
/mnt/nfs-share 10.1.1.0/24(rw,sync)
Kết quả: Permission denied
/mnt/nfs-share 10.1.1.0/24(rw,sync,no_root_squash)
Kết quả: Thành công
**

II Samba

Ở phần trước, chúng ta đã thực hiện thành công việc chia sẻ file giữa các máy CentOS thông qua dịch vụ NFS. Vậy trong trường hợp Client của chúng ta chạy HDH Windows và cũng có nhu cầu truy cập vào thư mục chia sẻ file thì sao? Chúng ta sẽ sử dụng Samba để giải quyết vấn đề này.
**

2.1 Các bước thực hiện

Trước khi thực hiện bất kì điều gì trên Linux, để không bị lạc trong mê cung các câu lệnh, chúng ta sẽ dừng lại một chút để lên danh sách các thao tác cần thực hiện và thứ tự của chúng.
Đối với cấu hình dịch vụ Samba, chúng ta sẽ thực hiện theo các bước sau:
  1. Cài đặt gói Samba lên NFS-Server.
  2. Cấu hình Samba bằng cách chỉnh sửa file config. Tại bước này, ta cần qui định các tham số như dải mạng được phép truy cập thư mục chia sẻ, Interface dùng để lắng nghe yêu cầu truy cập, yêu cầu Client phải đăng nhập bằng UserNam/Password cho trước để đảm bảo tính bảo mật..
  3. Khai báo dịch vụ Samba với các công cụ bảo mật trên Linux như FirewallD, SELinux để cho phép Clients truy cập thư mục được chia sẻ
  4. Kiểm tra kết quả bằng các đứng từ Client chạy HDH Windows và truy cập vào thư mục chia sẻ.
**

2.2 Cài đặt và cấu hình

Trên NFS-Server, tiến hành cài đặt các gói Samba
sudo dnf install samba -y
Trước khi tiến hành cấu hình dịch vụ Samba, ta backup file cấu hình gốc bằng cách sửa tên nó bằng lệnh mv và copy một file cấu hình mẫu bằng lệnh cp để bắt đầu chỉnh sửa, kiểm tra lại 2 thao tác này bằng lệnh ls.
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo cp /etc/samba/smb.conf.example /etc/samba/smb.conf
Sau đó, ta bắt đầu chỉnh sửa file config:
sudo nvim /etc/samba/smb.conf
Tại mục Global setting ta thiết lập các tùy chọn chung sau:
  • security = user : tùy chọn mặc định của Samba, sau khi Clients đăng nhập với UserNamePassword vào thư mục được chia sẻ thì Samba sẽ không yêu cầu đăng nhập cho từng thao tác sau đó.
  • map to guest = bad user : đây là một lựa chọn cho phép Client truy cập vào thư mục chia sẻ mà không cần đăng nhập, chỉ dùng để test hiệu quả trong lúc cấu hình. Khi cấu hình xong, ta sẽ disable lựa chọn này để buộc Client phải đăng nhập bằng UserName/Password cho trước, đảm bảo tính bảo mật.
  • interfaces = ... : qui định các Interface được dùng để lắng nghe các yêu cầu truy cập, trong trường hợp này thì mình đưa cả 2 Interfaces eth0 192.168.1.0/24eth1 10.1.1.0/24 vào chế độ lắng nghe.
  • hosts allow = ... : qui định các dải mạng mà Clients trong đó được phép truy cập vào thư mục chia sẻ.
        workgroup = MYGROUP
        server string = Samba Server Version %v
;       netbios name = MYSERVER
        security = user
        map to guest = bad user
;       dns proxy = no
        interfaces = lo eth0 eth1 192.168.1.0/24 10.1.1.0/24
        hosts allow = 127. 192.168.1. 10.1.1.
Sau Global setting của Samba, ta cần cấu hình riêng cho dịch vụ chia sẻ file đối với Windows Clients. Tại mục Share Definitions, ta thêm các tùy chọn sau:
  • path = ... : đường dẫn đến thư mục dùng để chia sẻ file.
  • create modedirectory mode: lưu ý không sử dụng tham số yes/no trên CentOS8, thay vào đó hãy sử dụng các giá trị số được qui định trong Linux Permission Table.
[Share]
        path = /mnt/nfs-share
        writable = yes
        browsable = yes
        guest ok = yes
        guest only = no
        read only = no
        create mode = 0777
        directory mode = 0777
Nhập câu lệnh sau để kiểm tra cú pháp file config, nếu chúng ta soản thảo đúng cú pháp, kết quả sẽ như hình ảnh dưới. Nếu ta soạn thảo sai cú pháp, câu lệnh sẽ báo lỗi ở dòng thứ bao nhiêu trong file config.
Sau khi cấu hình xong, ta sẽ khởi động dịch vụ Samba và cho phép nó khởi động cùng hệ thống bằng câu lệnh systemctl:
sudo systemctl start smb
sudo systemctl enable smb
Để các Clients có thể truy cập vào thư mục chia sẻ trong tương lai, ta cần khai báo Samba với FirewallD:
sudo firewall-cmd --permanent --zone=public --add-service=samba
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Dựa vào hướng dẫn được viết trong file config của Samba, ta tiến hành khai báo SELinux và cấp quyền chỉnh sửa trong thư mục cho các Clients như sau:
sudo chcon -t samba_share_t /mnt/nfs-share
sudo chmod -R 0777 /mnt/nfs-share
Đến đây, ta có thể test hiệu quả bằng cách đứng trên một máy Windows và truy cập vào thư mục được chia sẻ bằng hộp thoại Run -> nhập địa chỉ IP của NFS-Server:
Tại đây, ta đã có thể từ trên Windows thực hiện thêm / sửa / xóa file trên thư mục chia sẻ của NFS-Server.
**

2.3 Tạo User Samba

Ở phần trước, chúng ta đã có thể đứng từ Windows để truy cập vào thư mục chia sẻ trên NFS-Server với chế độ ẩn danh (Anonymous). Ở phần này, chúng ta sẽ vô hiệu hóa chế độ ẩn danh để buộc Clients phải đăng nhập bằng UserName/Password được cấp phát bởi Samba.
sudo nvim /etc/samba/smb.conf
Khởi động lại dịch vụ Samba và thử đứng từ Windows để truy cập vào thư mục chia sẻ, chúng ta sẽ gặp phải yêu cầu đăng nhập từ NFS-Server (an ninh chưa ^^)
sudo systemctl restart smb
Trên NFS-Server, chúng ta sẽ tạo Group và User chuyên dụng để cấp cho Windows Clients truy cập vào thư mục chia sẻ. Tạo group gr_samba -> tạo user client_samba -> thêm user client_samba vào group gr_samba:
sudo groupadd gr_samba
sudo useradd -s /usr/sbin/nologin --no-create-home client_samba
sudo usermod -aG gr_samba client_samba
Trên dịch vụ Samba, đặt password cho User vừa mới tạo:
sudo smbpasswd -a client_samba
Khởi động lại dịch vụ Samba để nhận cấu hình mới:
sudo systemctl restart smb
Và đứng trên Windows Client đăng nhập vào thư mục chia sẻ bằng tài khoản được cấp phát bởi Samba:
**

2.4 Kiểm tra kết quả

Đứng trên Windows Client, ta thử truy cập thư mục được chia sẻ và tạo mới 1 file bất kì (New text document.txt chẳng hạn):
Sau đó, đứng trên NFS-Server để kiểm tra file vừa mới tạo trong thư mục chia sẻ:
sudo ls -la /mnt/nfs-share
**

Nhận xét

Bài đăng phổ biến