NFS練習題

先ping發表於2024-11-27

一、任務背景

題目:

1.開放/nfs/share目錄,提供給任意使用者只讀查詢
2.開放/nfs/upload目錄,提供給172.16.1.0/24網段內的機器上傳資料,並且要求限制上傳資料對映為nfs-upload使用者,uid和gid均為200
3.開放/home/chaoge目錄僅共享給172.16.1.41這臺機器,且只有chaoge01使用者可以完全訪問該目錄
4.新增10G硬碟,給nfs服務端/nfs-nginx-data目錄使用,且僅提供給主機名為web-7的機器使用,並且要求限制上傳資料對映為www使用者,uid、gid均為11211;並且提供html、png資源給nginx用;確保nginx可正確訪問該靜態資料。

主機列表:

# 外網地址                內網地址          主機名
192.168.122.7       172.16.1.7        web-7
192.168.122.31    172.16.1.31     nfs-31
192.168.122.41    172.16.1.41    rsync-41
192.168.122.110  172.16.1.110  client-110

二、實驗記錄

2.1.開放/nfs/share目錄,提供給任意使用者只讀查詢

2.1.1.在nfs-31機器上安裝和啟動nfs-utilsrpcbind

2.1.1.1.安裝nfs-utilsrpcbind

[root@nfs-31 ~]# yum install -y nfs-utils rpcbind
已載入外掛:fastestmirror
Determining fastest mirrors
base                                                                                                         | 3.6 kB  00:00:00     
epel                                                                                                         | 5.4 kB  00:00:00     
extras                                                                                                       | 2.9 kB  00:00:00     
updates                                                                                                      | 2.9 kB  00:00:00     
軟體包 1:nfs-utils-1.3.0-0.68.el7.2.aarch64 已安裝並且是最新版本
軟體包 rpcbind-0.2.0-49.el7.aarch64 已安裝並且是最新版本
無須任何處理

2.1.1.2.啟動rpcbind服務

[root@nfs-31 ~]# systemctl start rpcbind
[root@nfs-31 ~]# netstat -tunlp |grep rpc
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2806/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      2806/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2806/rpcbind        
udp        0      0 0.0.0.0:861             0.0.0.0:*                           2806/rpcbind        
udp6       0      0 :::111                  :::*                                2806/rpcbind        
udp6       0      0 :::861                  :::*                                2806/rpcbind     

2.1.1.3修該nfs配置檔案/etc/exports

[root@nfs-31 share]# vim /etc/exports
[root@nfs-31 share]# cat /etc/exports
/nfs/share *(ro)

2.1.1.4 建立目錄/nfs/share,並在此目錄中建立一個檔案用於測試。

[root@nfs-31 ~]# mkdir -p /nfs/share
[root@nfs-31 ~]# ll -d /nfs/share/
drwxr-xr-x 2 root root 6 11月 26 09:40 /nfs/share/
[root@nfs-31 ~]#  cd /nfs/share/
[root@nfs-31 share]# echo '這是一個測試檔案,你只能讀' > testro.txt
[root@nfs-31 share]# ll
總用量 4
-rw-r--r-- 1 root root 40 11月 26 09:42 testro.txt

2.1.1.5 啟動nfs服務

[root@nfs-31 share]# systemctl start nfs
[root@nfs-31 share]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since 二 2024-11-26 10:09:36 CST; 3s ago
  Process: 2681 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 2678 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 2677 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 7932 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 7919 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 7917 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 7919 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service
#將服務設定為開機自啟
[root@nfs-31 ~]# systemctl enable nfs
[root@nfs-31 ~]# systemctl is-enabled nfs
enabled
[root@nfs-31 ~]# systemctl is-enabled rpcbind
enabled

2.1.2在client-110進行掛載測試

2.1.2.1 安裝nfs-utils

[root@client-110 ~]# yum install -y nfs-utils
已載入外掛:fastestmirror
Loading mirror speeds from cached hostfile
...
...
完畢!

2.1.2.1 查詢nfs伺服器上開放的目錄

[root@client-110 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs/share *

2.1.2.2 新建一個目錄作為掛載點進行掛載

[root@client-110 ~]# mkdir -p  /mnt/nfs/share
[root@client-110 ~]# mount -t nfs 
anaconda-ks.cfg  .bash_logout     .bashrc          network_init.sh  .viminfo         
.bash_history    .bash_profile    .cshrc           .tcshrc          
[root@client-110 ~]# mount -t nfs 172.16.1.31:/nfs/share /mnt/nfs/share/
[root@client-110 ~]# df -h | grep nfs
172.16.1.31:/nfs/share    17G  1.8G   16G   11% /mnt/nfs/share

2.1.2.3 測試掛載是否是隻讀

[root@client-110 ~]# cd /mnt/nfs/share/
[root@client-110 share]# ll
總用量 4
-rw-r--r-- 1 root root 40 11月 26 09:42 testro.txt
[root@client-110 share]# cat testro.txt 
這是一個測試檔案,你只能讀
[root@client-110 share]# echo '我偏要寫入'>> testro.txt 
bash: testro.txt: 只讀檔案系統
[root@client-110 share]# touch 我偏要rw.txt
touch: 無法建立"我偏要rw.txt": 只讀檔案系統
[root@client-110 share]# mkdir test
mkdir: 無法建立目錄"test": 只讀檔案系統
[root@client-110 share]# 

測試達到題目要求。

2.2.開放/nfs/upload目錄,提供給172.16.1.0/24網段內的機器上傳資料,並且要求限制上傳資料對映為nfs-upload使用者,uidgid均為200

2.2.1.在nfs-31機器上配置和過載nfs

2.2.1.2 .新建nfs-upload使用者,uidgid均為200

[root@nfs-31 share]# useradd nfs-upload -M -u 200 -g 200 -s /sbin/nologin
useradd:“200”組不存在
[root@nfs-31 share]# useradd nfs-upload -M -u 200  -s /sbin/nologin
[root@nfs-31 share]# grep  200 /etc/passwd 
nfs-upload:x:200:1001::/home/nfs-upload:/sbin/nologin
[root@nfs-31 share]# groupmod -g 200 nfs-upload
[root@nfs-31 share]# grep  200 /etc/passwd 
nfs-upload:x:200:200::/home/nfs-upload:/sbin/nologin

2.2.1.3 .修該nfs配置檔案/etc/exports

開放/nfs/upload目錄,提供給172.16.1.0/24網段內的機器上傳資料,並且要求限制上傳資料對映為nfs-upload使用者

[root@nfs-31 share]# vim /etc/exports
[root@nfs-31 share]# cat /etc/exports
/nfs/share *(ro)
/nfs/upload 172.16.1.0/24(rw,sync,all_squash,anonuid=200,anongid=200)

2.2.1.4.新建目錄/nfs/upload,修改其屬性。

[root@nfs-31 share]# mkdir -p /nfs/upload
[root@nfs-31 share]# ll -d  /nfs/upload/
drwxr-xr-x 2 root root 6 11月 26 13:06 /nfs/upload/
[root@nfs-31 ~]# chown -R nfs-upload:nfs-upload /nfs/upload 
[root@nfs-31 ~]# ll -d /nfs/upload/
drwxr-xr-x 2 nfs-upload nfs-upload 6 11月 26 13:06 /nfs/upload/

2.2.1.5.過載nfs服務,檢視nfs開放情況

[root@nfs-31 share]# systemctl reload nfs
[root@nfs-31 share]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs/share  *
/nfs/upload 172.16.1.0/24

2.2.2.在client-110進行掛載和測試

2.2.2.1.查詢nfs伺服器上開放的目錄

[root@client-110 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:
/nfs/share  *
/nfs/upload 172.16.1.0/24

2.2.2.2.新建一個目錄作為掛載點進行掛載

[root@client-110 ~]# mkdir -p /mnt/nfs/upload
[root@client-110 ~]# ll -d /mnt/nfs/upload/
drwxr-xr-x 2 root root 6 11月 26 15:03 /mnt/nfs/upload/
[root@client-110 ~]# mount -t nfs 172.16.1.31:/nfs/upload /mnt/nfs/upload
[root@client-110 ~]# df -h | grep nfs
172.16.1.31:/nfs/share    17G  1.8G   16G   11% /mnt/nfs/share
172.16.1.31:/nfs/upload   17G  1.8G   16G   11% /mnt/nfs/upload

2.2.2.3.進入掛載點進行測試

[root@client-110 upload]# echo '我上傳檔案試試'>> upload.txt
[root@client-110 upload]# ll
總用量 4
-rw-r--r-- 1 200 200 22 11月 26 15:26 upload.txt

2.2.2.3.在nfs-31上進入開放目錄檢視上傳的檔案

[root@nfs-31 ~]# ll /nfs/
share/  upload/ 
[root@nfs-31 ~]# ll /nfs/upload/
總用量 4
-rw-r--r-- 1 nfs-upload nfs-upload 22 11月 26 15:26 upload.txt
[root@nfs-31 ~]# cat /nfs/upload/upload.txt 
我上傳檔案試試

測試達到題目要求。

2.3.開放/home/chaoge目錄僅共享給172.16.1.41這臺機器,且只有chaoge01使用者可以完全訪問該目錄

2.3.1 .在nfs-31機器上配置和過載nfs

2.3.1.1.新建chaoge01使用者,指定使用者主目錄為/home/chaoge
[root@nfs-31 ~]# useradd -d /home/chaoge chaoge01 
[root@nfs-31 ~]# grep chaoge01 /etc/passwd
chaoge01:x:1001:1001::/home/chaoge:/bin/bash
[root@nfs-31 ~]# ll -d /home/chaoge
drwx------ 2 chaoge01 chaoge01 62 11月 26 16:05 /home/chaoge

可以看到,chaoge01uidgid都為1001,且只有chaoge01使用者可以完全訪問該目錄

2.3.1.2.修該nfs配置檔案/etc/exports
[root@nfs-31 ~]# vim /etc/exports
[root@nfs-31 ~]# cat /etc/exports
/nfs/share *(ro)
/nfs/upload 172.16.1.0/24(rw,sync,all_squash,anonuid=200,anongid=200)
/home/chaoge 172.16.1.41(rw,sync,all_squash,anonuid=1001,anongid=1001)
2.3.1.3.過載nfs服務和檢視開放情況
[root@nfs-31 ~]# systemctl reload nfs
[root@nfs-31 ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfs/share   *
/nfs/upload  172.16.1.0/24
/home/chaoge 172.16.1.41

2.3.2.在rsync-41機器上進行掛載和測試

2.3.2.1.安裝nfs-utils,並檢視nfs-31上的開放情況
[root@rsync-41 ~]# yum install -y nfs-utils
[root@rsync-41 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs/share   *
/nfs/upload  172.16.1.0/24
/home/chaoge 172.16.1.41
2.3.2.2.新建掛載點目錄/mnt/nfs/chaoge01,進行掛載測試
[root@rsync-41 ~]# mkdir -p /mnt/nfs/chaoge01
[root@rsync-41 ~]# mount -t nfs 172.16.1.31:/home/chaoge /mnt/nfs/chaoge01
[root@rsync-41 ~]# df -h | grep nfs
172.16.1.31:/home/chaoge   17G  1.8G   16G   11% /mnt/nfs/chaoge01
[root@rsync-41 ~]# echo '我是超哥'> /mnt/nfs/chaoge01/chaoge.txt
[root@rsync-41 ~]# ll /mnt/nfs/chaoge01/
總用量 4
-rw-r--r-- 1 1001 1001 13 11月 26 16:51 chaoge.txt

測試達到題目要求。

2.4.新增10G硬碟,給nfs服務端/nfs-nginx-data目錄使用,且僅提供給主機名為web-7的機器使用,並且要求限制上傳資料對映為www使用者,uidgid均為11211;並且提供html、png資源給nginx用;確保nginx可正確訪問該靜態資料。

2.4.1.在nfs-31新增硬碟並按要求進行配置

2.4.1.1.新增硬碟為/dev/sdb,並進行掛載

檢視磁碟/dev/sdb

[root@nfs-31 ~]# lsblk | grep sdb
sdb               8:16   0   10G  0 disk 

對磁碟進行分割槽格式化

[root@nfs-31 ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁碟識別符號 0x2f483f1b 建立新的 DOS 磁碟標籤。

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分割槽號 (1-4,預設 1):
起始 扇區 (2048-20971519,預設為 2048):
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-20971519,預設為 20971519):
將使用預設值 20971519
分割槽 1 已設定為 Linux 型別,大小設為 10 GiB

命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁碟。
[root@nfs-31 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  10G  0 disk 
└─sdb1   8:17   0  10G  0 part 
[root@nfs-31 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成                            
檔案系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
第一個資料塊=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: 完成                            
正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

新建掛載點/nfs-nginx-data,並掛載

[root@nfs-31 ~]# mkdir /nfs-nginx-data
[root@nfs-31 ~]# mount  /dev/sdb1 /nfs-nginx-data/
[root@nfs-31 ~]# mount -l |grep sdb1
/dev/sdb1 on /nfs-nginx-data type ext4 (rw,relatime)
[root@nfs-31 ~]# 

2.4.1.2.新建www使用者,uidgid均為11211

[root@nfs-31 ~]# useradd www -u 11211 -U -s /sbin/nologin
[root@nfs-31 ~]# grep www /etc/passwd
www:x:11211:11211::/home/www:/sbin/nologin
[root@nfs-31 ~]# grep www /etc/group
www:x:11211:
[root@nfs-31 ~]# 

2.4.1.3 配置/etc/exports,並過載nfs

[root@nfs-31 ~]# vim /etc/exports
[root@nfs-31 ~]# cat /etc/exports
/nfs/share *(ro)
/nfs/upload 172.16.1.0/24(rw,sync,all_squash,anonuid=200,anongid=200)
/home/chaoge 172.16.1.41(rw,sync,all_squash,anonuid=1001,anongid=1001)
/nfs-nginx-data 172.16.1.7(rw,sync,all_squash,anonuid=11211,anongid=11211)
[root@nfs-31 ~]# systemctl reload nfs
[root@nfs-31 ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfs/share      *
/nfs/upload     172.16.1.0/24
/nfs-nginx-data 172.16.1.7
/home/chaoge    172.16.1.41

2.4.1.4 進入/nfs-nginx-data目錄,準備好index檔案等資源。

[root@nfs-31 nfs-nginx-data]# wget -O stop.png https://img3.chinadaily.com.cn/images/202411/25/67441c40a310b5910b7eef9e.png
--2024-11-26 22:41:47--  https://img3.chinadaily.com.cn/images/202411/25/67441c40a310b5910b7eef9e.png
正在解析主機 img3.chinadaily.com.cn (img3.chinadaily.com.cn)... 110.40.23.137, 118.112.19.103, 2407:3740:0:3::68, ...
正在連線 img3.chinadaily.com.cn (img3.chinadaily.com.cn)|110.40.23.137|:443... 已連線。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:84479 (82K) [image/png]
正在儲存至: “stop.png”

100%[============================================================>] 84,479      --.-K/s 用時 0.007s  

2024-11-26 22:41:47 (11.3 MB/s) - 已儲存 “stop.png” [84479/84479])

[root@nfs-31 nfs-nginx-data]# ll
總用量 100
drwx------ 2 root root 16384 11月 26 22:05 lost+found
-rw-r--r-- 1 root root 84479 11月 25 14:42 stop.png
[root@nfs-31 nfs-nginx-data]# vim index.html
[root@nfs-31 nfs-nginx-data]# cat index.html 
<h1>這是一個網頁</h1>
<img src="stop.png" alt="這是一個示例圖片">
[root@nfs-31 nfs-nginx-data]# 

2.4.1.5 修改/nfs-nginx-data目錄屬性

[root@nfs-31 nfs-nginx-data]# chown -R www.www /nfs-nginx-data/

2.4.2.在web-7機器上部署nginx,並掛載nfs上的資料。

2.4.2.1.新建www使用者

[root@web-7 ~]# useradd -u 11211 -U -s /sbin/nologin -M www
[root@web-7 ~]# grep www /etc/passwd
www:x:11211:11211::/home/www:/sbin/nologin

2.4.2.2.部署nginx服務,修改nginx使用者。

[root@web-7 ~]#  yum install -y nginx

[root@web-7 ~]# vim /etc/nginx/nginx.conf
[root@web-7 ~]# grep -n '^user' /etc/nginx/nginx.conf
5:user www;

2.4.2.3.啟動nginx服務,測試網頁。

[root@web-7 ~]# systemctl start nginx
[root@web-7 ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2024-11-27 09:46:20 CST; 13s ago
  Process: 18446 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 18443 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 18441 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 18448 (nginx)
   CGroup: /system.slice/nginx.service
           ├─18448 nginx: master process /usr/sbin/nginx
           ├─18449 nginx: worker process
           └─18450 nginx: worker process

11月 27 09:46:19 web-7 systemd[1]: Starting The nginx HTTP and reverse proxy server...
11月 27 09:46:20 web-7 nginx[18443]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
11月 27 09:46:20 web-7 nginx[18443]: nginx: configuration file /etc/nginx/nginx.conf test is s...sful
11月 27 09:46:20 web-7 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@web-7 ~]# netstat -tunlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      18448/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      18448/nginx: master 

[root@web-7 ~]# ps -ef | grep nginx
root     18448     1  0 09:46 ?        00:00:00 nginx: master process /usr/sbin/nginx
www      18449 18448  0 09:46 ?        00:00:00 nginx: worker process
www      18450 18448  0 09:46 ?        00:00:00 nginx: worker process
root     18756 18079  0 10:01 pts/0    00:00:00 grep --color=auto nginx

測試網頁能開啟

2.4.2.4.安裝nfs-utils,掛載nfs

[root@web-7 ~]#  yum install nfs-utils -y

檢視nfs-31上開放情況

[root@web-7 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs/share      *
/nfs/upload     172.16.1.0/24
/nfs-nginx-data 172.16.1.7
/home/chaoge    172.16.1.41

掛載

[root@web-7 ~]# mount -t nfs 172.16.1.31:/nfs-nginx-data /usr/share/nginx/html
[root@web-7 ~]# df -h | grep nfs
172.16.1.31:/nfs-nginx-data  9.8G   37M  9.2G    1% /usr/share/nginx/html
[root@web-7 ~]# ll /usr/share/nginx/html/
總用量 104
-rw-r--r-- 1 www www    80 11月 26 22:49 index.html
drwx------ 2 www www 16384 11月 26 22:05 lost+found
-rw-r--r-- 1 www www 84479 11月 25 14:42 stop.png
[root@web-7 ~]# 

2.4.2.5.重新整理網頁,已能訪問nfs上的資源


修改網頁再次重新整理

[root@web-7 ~]# echo '<p>-----我是底部---</p>' >> /usr/share/nginx/html/index.html 


至此已完成題目。