08-27-周三_17-09-29
1579
Linux服务/Apache.md
Normal file
BIN
Linux服务/Apache/Alias访问测试.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Linux服务/Apache/EtQ1EU4TU7FKwsJT.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Linux服务/Apache/HTTPS请求过程.png
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
Linux服务/Apache/LAMP架构.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
Linux服务/Apache/event工作模式.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
Linux服务/Apache/image-20211106110832539.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
Linux服务/Apache/image-20211106110937420.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
Linux服务/Apache/image-20211106111051847.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
Linux服务/Apache/image-20211106111537070.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
Linux服务/Apache/image-20211106111631222.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
Linux服务/Apache/image-20211106112000231.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
Linux服务/Apache/image-20211106112120529.png
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
Linux服务/Apache/image-20211106112150188.png
Normal file
After Width: | Height: | Size: 294 KiB |
BIN
Linux服务/Apache/image-20211106112228058.png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
Linux服务/Apache/image-20211106112349552.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
Linux服务/Apache/image-20211106112629934.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Linux服务/Apache/image-20211106113531819.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
Linux服务/Apache/image-20211106113600091.png
Normal file
After Width: | Height: | Size: 469 KiB |
BIN
Linux服务/Apache/image-20240715152308932.png
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
Linux服务/Apache/image-20240719230216883.png
Normal file
After Width: | Height: | Size: 371 KiB |
BIN
Linux服务/Apache/image-20240719231005306.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
Linux服务/Apache/image-20240719231237537.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
Linux服务/Apache/image-20240719231636758.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
Linux服务/Apache/image-20240719231744450.png
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
Linux服务/Apache/image-20240719232259490.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
Linux服务/Apache/image-20250118215910240.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
Linux服务/Apache/image-20250118220523743.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
Linux服务/Apache/image-20250118220724260.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
Linux服务/Apache/image-20250118220953285.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Linux服务/Apache/image-20250118221026614.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
Linux服务/Apache/image-20250118221109186.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
Linux服务/Apache/image-20250118221202018.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
Linux服务/Apache/image-20250118221344667.png
Normal file
After Width: | Height: | Size: 605 KiB |
BIN
Linux服务/Apache/image-20250118221414487.png
Normal file
After Width: | Height: | Size: 283 KiB |
BIN
Linux服务/Apache/image-20250118221502963.png
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
Linux服务/Apache/image-20250118221634385.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Linux服务/Apache/image-20250118221843976.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
Linux服务/Apache/image-20250118221920089.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
Linux服务/Apache/image-20250118221921263.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
Linux服务/Apache/image-20250118221924563.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
Linux服务/Apache/image-20250118221958932.png
Normal file
After Width: | Height: | Size: 371 KiB |
BIN
Linux服务/Apache/image-20250118224232388.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
Linux服务/Apache/p4rlw3TfUa4CiBVt.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Linux服务/Apache/prefork模式.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
Linux服务/Apache/web_server_top.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
Linux服务/Apache/worker工作模式.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
Linux服务/Apache/别名模块测试验证截图.png
Normal file
After Width: | Height: | Size: 23 KiB |
405
Linux服务/FTP文件服务器.md
Normal file
@@ -0,0 +1,405 @@
|
||||
# FTP (File Transfer Protocol)
|
||||
|
||||
FTP(File Transfer Protocol)是用于在计算机网络中进行文件传输的协议。它使用客户端-服务器模式,允许文件在客户端和服务器之间上传或下载。FTP 服务通常用于在不同主机间传输大容量文件,特别是在网络环境中需要频繁进行文件交换时。
|
||||
|
||||
FTP 运行在 OSI 模型的应用层,并利用传输协议 TCP 在不同的主机之间提供可靠的数据传输。并且在文件传输中 FTP 还支持断点续传功能,可以大幅度减少 CPU 网络带宽的开销。
|
||||
|
||||
## 工作原理
|
||||
|
||||
FTP 使用客户端与服务器之间的通信来传输文件。它通过两条连接来工作:一条用于命令传输(控制连接),另一条用于数据传输(数据连接)。
|
||||
|
||||
## 相关端口
|
||||
|
||||
**控制连接端口**:21
|
||||
|
||||
- **功能**:FTP 的控制连接使用端口 21。这条连接用于客户端与服务器之间交换命令和响应。当你在 FTP 客户端中输入命令(例如 `LIST`、`RETR`、`STOR`)时,这些命令是通过端口 21 发送的。
|
||||
- **数据流向**:控制连接是全双工的,客户端和服务器都可以发送消息,但所有数据传输操作(如文件上传、下载)都不会通过控制连接进行。
|
||||
|
||||
**数据连接端口**:20
|
||||
|
||||
- **功能**:端口 20 在 FTP 协议中用于数据传输连接,特别是在 **主动模式**(PORT 模式)下。它用于通过数据连接传输实际的文件数据。
|
||||
- **数据流向**:当 FTP 客户端在主动模式下与服务器建立连接时,服务器通过端口 20 向客户端的指定端口发起数据连接。这条连接用于传输文件内容。
|
||||
|
||||
# FTP 工作模式
|
||||
|
||||
FTP 支持两种不同的模式:主动模式(PORT)和被动模式(PASV)。
|
||||
|
||||
## 主动模式(Active Mode)
|
||||
|
||||
在主动模式下,客户端向服务器发起连接请求,服务器在数据传输时主动连接客户端。具体来说,客户端使用端口 21 与服务器建立控制连接,而数据连接则由服务器从端口 20 发起到客户端的指定端口。
|
||||
|
||||
### 连接过程
|
||||
|
||||
1. **建立控制连接**:客户端通过任意端口(例如随机的高端口,通常是 1024 以上的端口)向服务器的 **端口 21** 发起连接,建立 **控制连接**。这个连接用于发送 FTP 命令和接收响应。例如:客户端使用端口 1025,连接到服务器的端口 21(控制连接)。
|
||||
|
||||
2. **客户端发送命令**:客户端通过控制连接发送 FTP 命令(如 `USER`、`PASS`、`LIST` 等),请求服务器执行操作。
|
||||
|
||||
3. **客户端告诉服务器监听的端口**:当客户端希望传输文件时,它会告诉服务器自己希望通过哪个端口进行数据传输。这是通过 **PORT 命令** 完成的。客户端指定了一个端口(例如 1026)供服务器使用。
|
||||
|
||||
4. **服务器发起数据连接**:服务器收到客户端的 **PORT 命令** 后,会使用 **端口 20** 连接到客户端指定的端口(例如 1026)。这条连接用于传输数据,如文件内容或目录列表。
|
||||
|
||||
5. **数据传输**:当服务器与客户端的指定端口建立数据连接后,数据传输就开始了。文件会通过这个数据连接进行传输。
|
||||
|
||||
6. **断开数据连接**:数据传输完成后,数据连接会关闭,控制连接保持打开,直到用户结束会话(通过 `QUIT` 命令)。
|
||||
|
||||
### 优缺点
|
||||
|
||||
**优点**:服务器主动发起数据连接,因此客户端无需配置其防火墙以允许入站连接。
|
||||
|
||||
**缺点**:如果客户端位于 NAT 或防火墙后面,客户端很难接受来自服务器的入站连接。由于 NAT 会改变客户端的 IP 地址和端口,服务器可能无法正确连接到客户端。
|
||||
|
||||
## 被动模式(Passive Mode)
|
||||
|
||||
在被动模式下,服务器不会主动连接客户端,而是客户端主动与服务器建立数据连接。服务器会提供一个端口范围,客户端可以通过控制连接(端口 21)请求服务器提供一个可用端口,客户端再通过这个端口与服务器建立数据连接。
|
||||
|
||||
### 连接过程
|
||||
|
||||
1. **建立控制连接**:客户端首先向服务器的 **端口 21** 发起连接,建立控制连接。这个过程和主动模式相同。
|
||||
2. **客户端请求服务器进入被动模式**:客户端发送 **PASV 命令**,请求服务器进入被动模式。此时,服务器会选择一个高端口(通常在 1024 以上),并向客户端返回该端口的信息。例如,服务器可能返回 `227 Entering Passive Mode (192,168,1,2 120,232)`,这意味着服务器的 IP 地址是 `192.168.1.2`,并且它希望客户端连接到端口 `29832`。
|
||||
3. **客户端连接到服务器的被动端口**:客户端接收到服务器返回的 IP 地址和端口信息后,会从任意端口连接到服务器提供的被动端口(例如 29832)。这条连接用于文件数据的传输。
|
||||
4. **数据传输**:一旦数据连接建立,客户端和服务器就可以通过该连接传输文件数据或目录列表。
|
||||
5. **断开数据连接**:数据传输完成后,数据连接会关闭。控制连接仍然保持打开,直到用户结束会话(通过 `QUIT` 命令)。
|
||||
|
||||
### 优缺点
|
||||
|
||||
**优点**:被动模式解决了客户端处于 NAT 或防火墙后面时的问题,因为客户端只需要发起对服务器的外向连接,不需要接受来自服务器的入站连接。
|
||||
|
||||
**缺点**:服务器需要预先开放一个端口范围,并且在某些情况下,如果服务器的防火墙配置不当,仍然可能会遇到问题。
|
||||
|
||||
# FTP 常用服务软件
|
||||
|
||||
许多操作系统和第三方软件都提供 FTP 服务的实现。常见的 FTP 服务器软件有:
|
||||
|
||||
- **vsftpd**(Very Secure FTP Daemon):在 Linux 上广泛使用的高安全性 FTP 服务器。
|
||||
- **ProFTPD**:功能丰富的 FTP 服务,支持多种认证机制。
|
||||
- **Pure-FTPd**:简单易用的 FTP 服务器,适用于 Unix/Linux 系统。
|
||||
- **FileZilla Server**:在 Windows 上使用的开源 FTP 服务器。
|
||||
|
||||
# Vsftpd
|
||||
|
||||
## 相关介绍
|
||||
|
||||
- 软件包:vsftpd
|
||||
- 服务类型:由Systemd启动的守护进程
|
||||
- 配置单元:`/usr/lib/systemd/system/vsftpd.service`
|
||||
- 守护进程:`/usr/sbin/vsftpd`
|
||||
- 端口:`21(ftp)`,`20(ftp‐data)`
|
||||
- 主配置文件:`/etc/vsftpd/vsftpd.conf`
|
||||
- 用户访问控制配置文件:`/etc/vsftpd/ftpusers /etc/vsftpd/user_list`
|
||||
- 日志文件:`/etc/logrotate.d/vsftpd`
|
||||
|
||||
配置文件参数
|
||||
|
||||
| 参数 | 作用 |
|
||||
| :---| :--- |
|
||||
| listen=NO | 是否以独立运行的方式监听服务 |
|
||||
| listen_address=ip地址 | 设置要监听的IP地址 |
|
||||
| listen_port=21 | 设置FTP服务的监听端口 |
|
||||
| download_enable=YES | 是否允许下载文件 |
|
||||
| userlist_enable=YES | 设置用户列表为"允许" |
|
||||
| userlist_deny=YES | 设置用户列表为"禁止" |
|
||||
| max_clients=0 | 最大客户端连接数,0为不限制 |
|
||||
| max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
|
||||
| anonymous_enable=YES | 是否允许匿名用户访问 |
|
||||
| anon_upload_enable=YES | 是否允许匿名用户上传文件 |
|
||||
| anon_umask | 匿名用户上传文件的umask |
|
||||
| anon_root=/var/ftp | 匿名用户的ftp根目录 |
|
||||
| anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
|
||||
| anon_other_write_enable=YES | 是否开放匿名用户的其他写入权限(重命名、删除等) |
|
||||
| anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
|
||||
| local_enable=yes | 是否允许本地用户登录 |
|
||||
| local_umask=022 | 本地用户上传文件的umask值 |
|
||||
| local_root=/vat/ftp | 本地用户的ftp根目录 |
|
||||
| chroot_local_user=YES | 是否将用户权限禁锢在ftp目录,以确保安全 |
|
||||
| local_max_rate=0 | 本地用户的最大传输速率,0为不限制 |
|
||||
|
||||
## 基本操作
|
||||
|
||||
* 安装vsftpd软件
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# yum -y install vsftpd
|
||||
```
|
||||
|
||||
* 准备共享分发的文件
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# touch /var/ftp/test.txt # /var/ftp/ 是默认的共享目录
|
||||
[root@localhost ~]# echo "hello ftp server" > /var/ftp/test.txt
|
||||
```
|
||||
|
||||
- 配置文件中开启匿名用户登录
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
|
||||
......
|
||||
anonymous_enable=YES
|
||||
......
|
||||
```
|
||||
|
||||
- 启动服务
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# systemctl start vsftpd
|
||||
[root@localhost ~]# systemctl enable vsftpd
|
||||
```
|
||||
|
||||
* 关闭防火墙
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# systemctl stop firewalld
|
||||
[root@localhost ~]# setenforce 0
|
||||
```
|
||||
|
||||
到此,我们的FTP服务端就部署完成了。接下来我们应该通过一些客户端软件来连接到服务端上,进行文件的传输。
|
||||
|
||||
## 客户端工具
|
||||
|
||||
### Linux
|
||||
|
||||
* 第一种
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# ftp 192.168.88.10
|
||||
Connected to 192.168.88.10 (192.168.88.10).
|
||||
220 (vsFTPd 3.0.5)
|
||||
Name (192.168.88.10:root): anonymous # 匿名用户anonymous
|
||||
331 Please specify the password.
|
||||
Password: # 直接回车
|
||||
230 Login successful. # 看到successful说明连接成功
|
||||
Remote system type is UNIX.
|
||||
Using binary mode to transfer files.
|
||||
ftp>
|
||||
|
||||
# 退出的话,执行exit命令
|
||||
```
|
||||
|
||||
* 第二种
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# lftp 192.168.88.10 # 默认使用匿名账户登录
|
||||
lftp 192.168.88.10:~> ls
|
||||
drwxr-xr-x 2 0 0 6 Nov 06 17:49 pub
|
||||
-rw-r--r-- 1 0 0 17 Jan 04 01:39 test.txt
|
||||
```
|
||||
|
||||
**区别:**
|
||||
|
||||
* ftp 工具是一定要输入用户名称和密码的,登录成功或者失败会给出提示。
|
||||
* lftp 不会直接给出登录成功或者失败的提示,需要输入 ls 工具才可以发现是否连接成功,优点在于连接更加方便
|
||||
|
||||
**注意:**
|
||||
|
||||
FTP 有个名单列表。里面会有一些用户名。配合配置文件中的 userlist配置,如果是userlist_enable=YES 表示允许该名单的用户登录(白名单),反之,如果是 userlist_deny=YES 表示拒绝名单里的用户登录(黑名单)。
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# cat /etc/vsftpd/user_list
|
||||
# vsftpd userlist
|
||||
# If userlist_deny=NO, only allow users in this file
|
||||
# If userlist_deny=YES (default), never allow users in this file, and
|
||||
# do not even prompt for a password.
|
||||
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
|
||||
# for users that are denied.
|
||||
root
|
||||
bin
|
||||
...
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
**第一种:**
|
||||
|
||||
可以在资源管理器或者运行窗口中输入 `ftp://192.168.88.10` 去连接到 ftp 服务器,如果我们想连接共享目录下面的具体某个目录,比如默认存在的pub目录,我们可以通过 `ftp://192.168.88.10/pub` 这样的方式来连接。
|
||||
|
||||
<img src="FTP文件服务器/FTP客户端连接01.png" alt="image-FTP客户端连接01" style="zoom:80%;" />
|
||||
|
||||
**第二种:**
|
||||
|
||||
可以打开 cmd 窗口,在 cmd 中通过 `ftp 192.168.88.10` 访问即可,跟 Linux 中使用 ftp 工具连接时的操作一致。
|
||||
|
||||
<img src="FTP文件服务器/FTP客户端连接02.png" alt="image-FTP客户端连接02" style="zoom: 80%;" />
|
||||
|
||||
# 主被动模式配置
|
||||
|
||||
## 主动模式
|
||||
|
||||
在主动模式下,客户端告诉服务器使用哪个端口进行数据传输,服务器通过主动连接客户端的指定端口进行数据传输。
|
||||
|
||||
修改 `vsftpd` 配置文件
|
||||
|
||||
```bash
|
||||
# 主动模式配置
|
||||
connect_from_port_20=YES
|
||||
```
|
||||
|
||||
## 被动模式
|
||||
|
||||
在被动模式下,服务器告诉客户端使用哪个端口传输数据,客户端会主动连接到这些端口。被动模式更适合穿越防火墙的网络环境。
|
||||
|
||||
修改`vsftpd`配置文件,添加以下内容
|
||||
|
||||
```bash
|
||||
# 被动模式配置
|
||||
pasv_enable=YES
|
||||
pasv_min_port=30000
|
||||
pasv_max_port=31000 # 随机端口范围(但是会有些许误差)
|
||||
```
|
||||
|
||||
## 主被动切换测试
|
||||
|
||||
通过user01或者anonymous用户从客户端连接上来以后,通过passive切换主被动模式
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# ftp 192.168.88.10
|
||||
Connected to 192.168.88.10 (192.168.88.10).
|
||||
220 (vsFTPd 3.0.5)
|
||||
Name (192.168.88.10:root): user01
|
||||
331 Please specify the password.
|
||||
Password:
|
||||
230 Login successful.
|
||||
Remote system type is UNIX.
|
||||
Using binary mode to transfer files.
|
||||
ftp> dir
|
||||
227 Entering Passive Mode (192,168,88,10,120,145). # 默认是被动模式,192,168,88,10,120,145 这里表示随机端口
|
||||
150 Here comes the directory listing.
|
||||
226 Directory send OK.
|
||||
ftp> passive # 通过passive切换主被动
|
||||
Passive mode off.
|
||||
ftp> dir
|
||||
200 PORT command successful. Consider using PASV. # 主动模式使用20做为数据端口,所以没有提示端口
|
||||
150 Here comes the directory listing.
|
||||
226 Directory send OK.
|
||||
ftp>
|
||||
|
||||
```
|
||||
|
||||
# 案例分析01
|
||||
|
||||
自定义匿名用户访问目录,能够上传和下载文件
|
||||
|
||||
**服务端配置**
|
||||
|
||||
```shell
|
||||
# 准备匿名用户访问的目录和文件
|
||||
[root@server ~]# mkdir /share/pub && chmod 777 /share/pub && chown ftp:ftp /share/pub
|
||||
[root@server ~]# echo "anonymous Test download..." > download.txt
|
||||
# 修改相关配置
|
||||
[root@server ~]# echo "anon_root=/share" >> /etc/vsftpd/vsftpd.conf
|
||||
[root@server ~]# echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd.conf
|
||||
[root@server ~]# systemctl restart vsftpd.service
|
||||
```
|
||||
|
||||
**客户端测试验证**
|
||||
|
||||
```shell
|
||||
[root@client ~]# echo "anonymous Test upload..." > upload.txt
|
||||
# 访问、上传和下载测试
|
||||
[root@client ~]# lftp 172.16.175.129
|
||||
lftp 172.16.175.129:~> cd pub
|
||||
cd 成功, 当前目录=/pub
|
||||
lftp 172.16.175.129:/pub> ls
|
||||
lftp 172.16.175.129:/pub> get download.txt
|
||||
lftp 172.16.175.129:/pub> put upload.txt
|
||||
```
|
||||
|
||||
# 案例分析02
|
||||
|
||||
使用本地用户成功登录以后,默认的访问目录为该用户的家目录
|
||||
|
||||
**服务端配置**
|
||||
|
||||
```shell
|
||||
# 确保local_enable是否开启
|
||||
[root@server share]# grep 'local_enable' /etc/vsftpd/vsftpd.conf
|
||||
local_enable=YES
|
||||
|
||||
# 新建用户和测试文件
|
||||
[root@server ~]# useradd user01
|
||||
[root@server ~]# echo 123 | passwd --stdin user01
|
||||
[root@server ~]# su - user01
|
||||
[user01@server ~]$ echo "user01 Test download..." > download.txt
|
||||
|
||||
```
|
||||
|
||||
**客户端测试验证**
|
||||
|
||||
```shell
|
||||
[root@client ~]# echo "user01 Test upload..." > upload.txt
|
||||
# 访问,上传和下载测试
|
||||
[root@client ~]# ftp lftp -u user01 172.16.175.129
|
||||
密码:
|
||||
lftp user01@172.16.175.129:~> ls
|
||||
-rw-r--r-- 1 1000 1000 13 Jul 08 17:41 download.txt
|
||||
lftp user01@172.16.175.129:~> get download.txt
|
||||
13 bytes transferred
|
||||
lftp user01@172.16.175.129:~> put upload.txt
|
||||
2686 bytes transferred
|
||||
```
|
||||
|
||||
# 案例分析03
|
||||
|
||||
虚拟用户访问控制:虚拟用户为 eagleslab001 和 eagleslab002,服务端本地代理用户为 vuser;eagleslab001 默认访问 `/home/vsftpd/eagleslab01` 且能够创建/删除/上传/下载文件,eagleslab002 不做额外配置。
|
||||
|
||||
**服务端配置**
|
||||
|
||||
```shell
|
||||
# 创建用于进行FTP认证的用户数据库,其中奇数行为用户名,偶数行为密码
|
||||
[root@server ~]$ cat << EOF > /etc/vsftpd/vuser.list
|
||||
eagleslab001
|
||||
00123456
|
||||
eagleslab002
|
||||
00234567
|
||||
EOF
|
||||
# HASH哈希工具(db_load):将明文信息转为密文
|
||||
[root@localhost ~]# yum install -y libdb-utils
|
||||
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db
|
||||
# 查看文件描述以及修改权限 & 删除明文信息
|
||||
[root@localhost ~]# file /etc/vsftpd/vuser.db
|
||||
/etc/vsftpd/vuser.db: Berkeley DB (Hash, version 9, native byte-order)
|
||||
[root@localhost ~]# chmod 600 /etc/vsftpd/vuser.db
|
||||
[root@localhost ~]# rm -rf vuser.list
|
||||
# 创建虚拟用户的本地代理用户 & 用户目录
|
||||
[root@localhost ~]# useradd -d /home/vsftpd -s /sbin/nologin vuser
|
||||
[root@localhost ~]# mkdir -p /home/vsftpd/{eagleslab001,eagleslab002}
|
||||
[root@localhost ~]# chmod -Rf 755 /home/vsftpd/
|
||||
# 新建用于虚拟用户认证的PAM文件
|
||||
[root@localhost ~]# cat << EOF > /etc/pam.d/vsftpd_vuser
|
||||
auth required pam_userdb.so db=/etc/vsftpd/vuser
|
||||
account required pam_userdb.so db=/etc/vsftpd/vuser
|
||||
EOF
|
||||
# 更新配置文件
|
||||
[root@localhost ~]# cat << EOF >> /etc/vsftpd/vsftpd.conf
|
||||
pam_service_name=vsftpd_vuser
|
||||
userlist_enable=YES
|
||||
guest_enable=YES
|
||||
guest_username=vuser
|
||||
allow_writeable_chroot=YES
|
||||
chroot_local_user=YES
|
||||
user_config_dir=/etc/vsftpd/conf.d
|
||||
EOF
|
||||
# 针对 eagleslabl001 设置不同权限
|
||||
[root@localhost ~]# cat << EOF > /etc/vsftpd/conf.d/eagleslab001
|
||||
local_root=/home/vsftpd/eagleslab001
|
||||
anon_upload_enable=YES
|
||||
anon_mkdir_write_enable=YES
|
||||
anon_other_write_enable=YES
|
||||
EOF
|
||||
# 重启服务
|
||||
[root@localhost ~]# systemctl restart vsftpd
|
||||
|
||||
# 准备一些测试文件
|
||||
[user01@server ~]$ echo "eagleslab001 Test download..." > /home/vsftpd/eagleslab001/download001.txt
|
||||
[user01@server ~]$ echo "eagleslab002 Test download..." > /home/vsftpd/eagleslab002/download002.txt
|
||||
```
|
||||
|
||||
**客户端测试验证**
|
||||
|
||||
```shell
|
||||
# eagleslab001
|
||||
[root@client ~]# lftp -u eagleslab001,00123456 172.16.175.129
|
||||
...
|
||||
# eagleslab002 put: 访问失败: 550 Permission denied.
|
||||
[root@client ~]# lftp -u eagleslab002,00234567 172.16.175.129
|
||||
|
||||
|
||||
```
|
BIN
Linux服务/FTP文件服务器/FTP客户端连接01.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Linux服务/FTP文件服务器/FTP客户端连接02.png
Normal file
After Width: | Height: | Size: 41 KiB |
181
Linux服务/HTTP协议.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# HTTP 协议介绍
|
||||
|
||||
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在客户端(通常是浏览器)和服务器之间传输超文本(如HTML)的应用层协议。它是无状态的、面向请求-响应的协议,基于TCP/IP传输。
|
||||
|
||||
HTTP有不同版本号,不同版本号区别如下
|
||||
|
||||
- HTTP0.9:仅支持 GET 方法,仅能访问 HTML 格式的资源
|
||||
- HTTP1.0:增加 POST 和 HEAD 方法,MIME 支持多种数据格式,开始支持 Cache,支持 tcp 短连接
|
||||
- HTTP1.1:支持持久连接(长连接),一个 TCP 连接允许多个请求,新增 PUT、PATCH、DELETE 等
|
||||
- HTTP2.0:性能大幅提升,新的二进制格式,多路复用,header 压缩,服务端推送
|
||||
|
||||
# HTTP 工作原理
|
||||
|
||||
HTTP的工作过程可以总结为以下几个步骤:
|
||||
|
||||
1. **建立连接:** 客户端(如浏览器)与服务器之间通过TCP三次握手建立连接。
|
||||
2. **发送请求:** 客户端向服务器(Apache、Nginx、IIS服务器)发送HTTP请求报文,请求资源或操作。
|
||||
3. **服务器处理请求:** HTTP服务器接收到请求后,处理请求并生成响应。
|
||||
4. **返回响应:** 服务器将响应报文返回给客户端。
|
||||
5. **断开连接:** 通常在响应完成后关闭TCP连接(HTTP/1.0默认短连接,HTTP/1.1支持长连接)。
|
||||
|
||||
# URL 与 URI
|
||||
|
||||
## URI(Uniform Resource Identifier)
|
||||
|
||||
URI 是统一资源标识符,用于标识互联网上的资源。URI 分为两种
|
||||
|
||||
- **URL(Uniform Resource Locator):** 统一资源定位符,用于描述资源的地址。
|
||||
|
||||
- **URN(Uniform Resource Name):** 统一资源名称,用于标识资源的名称,不依赖物理位置
|
||||
|
||||
## URL(Uniform Resource Locator
|
||||
|
||||
HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL 是一种特殊类型的URI,包含了用于查找某个资源的足够的信息
|
||||
|
||||
URL 全称是 UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:
|
||||
|
||||
```shell
|
||||
http://iproute.cn:80/news/search?keyword=123&enc=utf8#name=321
|
||||
```
|
||||
|
||||
从上面的URL可以看出,一个完整的URL包括以下几部分:
|
||||
|
||||
1. **协议部分:** 该URL的协议部分为 `http:`,这代表网页使用的是HTTP 协议。在 Internet 中可以使用多种协议,如 HTTP,FTP 等等本例中使用的是 HTTP 协议。在 `http:` 后面的 `//` 为分隔符
|
||||
2. **域名(主机)部分:** 该 URL 的域名部分为 `iproute.cn`。一个URL 中,也可以使用 IP 地址作为域名使用
|
||||
3. **端口部分:** 跟在域名后面的是端口,域名和端口之间使用 `:` 作为分隔符。端口不是一个 URL 必须的部分,如果省略端口部分,将采用默认端口
|
||||
4. **虚拟目录部分:** 从域名后的第一个 `/` 开始到最后一个 `/` 为止,是虚拟目录部分。虚拟目录也不是一个 URL 必须的部分。本例中的虚拟目录是 `/news/`
|
||||
5. **文件名部分:** 从域名后的最后一个 `/` 开始到 `?` 为止,是文件名部分,如果没有 `?` ,则是从域名后的最后一个 `/` 开始到 `#` 为止,是文件部分,如果没有 `?` 和 `#`,那么从域名后的最后一个 `/` 开始到结束,都是文件名部分。本例中的文件名是 `search` 。文件名部分也不是一个 URL 必须的部分,如果省略该部分,则使用默认的文件名
|
||||
6. **参数部分:** 从 `?` 开始到 `#` 为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为 `keyword=123&enc=utf8`。参数可以允许有多个参数,参数与参数之间用 `&` 作为分隔符
|
||||
7. **锚部分:** 从 `#` 开始到最后,都是锚部分。本例中的锚部分是`name`。锚部分也不是一个 URL 必须的部分
|
||||
|
||||
# HTTP 注意事项
|
||||
|
||||
1. HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
|
||||
2. HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。
|
||||
3. HTTP 是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
|
||||
|
||||
# HTTP 消息结构
|
||||
|
||||
- HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
|
||||
- HTTP 客户端是一个应用程序(Web 浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。
|
||||
- HTTP 服务端是一个应用程序(通常是一个 Web 服务,如 Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送 HTTP 响应数据。
|
||||
- HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
|
||||
- HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
|
||||
|
||||

|
||||
|
||||
## HTTP 请求报文
|
||||
|
||||
客户端发送一个 HTTP 请求到服务器的请求消息包括以下格式:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## POST 和 GET 请求方法区别
|
||||
|
||||
- 提交的过程
|
||||
- GET 提交,请求的数据会附在URL之后(就是把数据放置在 HTTP 协议头中),以?分割URL和传输数据,多个参数用&连接
|
||||
- POST 提交:把提交的数据放置在是HTTP包的包体中
|
||||
- 传输数据的大小
|
||||
- 首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP 协议规范也没有对URL长度进行限制
|
||||
- GET 提交,特定浏览器和服务器对URL长度有限制
|
||||
- POST 提交,由于不是通过URL传值,理论上数据不受限
|
||||
- 安全性
|
||||
- POST 的安全性要比 GET 的安全性高
|
||||
- 登录页面有可能被浏览器缓存,而缓存的是 URL
|
||||
- 其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码
|
||||
- 使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击
|
||||
|
||||
|
||||
## 常见请求报文头部属性
|
||||
|
||||
- Accpet
|
||||
- 告诉服务端,客户端接收什么类型的响应
|
||||
- Referer
|
||||
- 表示这是请求是从哪个URL进来的,比如想在网上购物,但是不知道选择哪家电商平台,你就去问百度,说哪家电商的东西便宜啊,然后一堆东西弹出在你面前,第一给就是某宝,当你从这里进入某宝的时候,这个请求报文的Referer 就是 `http://www.baidu.com`
|
||||
- Cache-Control
|
||||
- 对缓存进行控制,如一个请求希望响应的内容在客户端缓存一年,或不被缓可以通过这个报文头设置
|
||||
- Accept-Encoding
|
||||
- 这个属性是用来告诉服务器能接受什么编码格式,包括字符编码,压缩格式
|
||||
- Host
|
||||
- 指定要请求的资源所在的主机和端口
|
||||
- User-Agent
|
||||
- 告诉服务器,客户端使用的操作系统、浏览器版本和名称
|
||||
|
||||
|
||||
## HTTP 响应报文
|
||||
|
||||
服务的相应信息格式如下:
|
||||
|
||||

|
||||
|
||||
<img src="HTTP协议/响应报文示例.png" alt="img-响应报文示例" style="zoom:80%;" />
|
||||
|
||||
## 常见响应报文头部属性
|
||||
|
||||
- Cache-Control
|
||||
- 响应输出到客户端后,服务端通过该属性告诉客户端该怎么控制响应内容的缓存
|
||||
- ETag
|
||||
- 表示客户端请求资源的版本,如果该资源发生了变化,那么这个属性也会跟着变
|
||||
- Location
|
||||
- 在重定向中或者创建新资源时使用
|
||||
- Set-Cookie
|
||||
- 服务端可以设置客户端的 cookie
|
||||
-
|
||||
# HTTP 状态码
|
||||
|
||||
- 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
|
||||
- 1xx:指示信息--表示请求已接收,继续处理
|
||||
- 2xx:成功--表示请求已被成功接收、理解、接受
|
||||
- 3xx:重定向--要完成请求必须进行更进一步的操作
|
||||
- 4xx:客户端错误--请求有语法错误或请求无法实现
|
||||
- 5xx:服务器端错误--服务器未能实现合法的请求
|
||||
- 常见状态码
|
||||
|
||||
```xml
|
||||
200 OK //客户端请求成功
|
||||
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
|
||||
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
|
||||
403 Forbidden //服务器收到请求,但是拒绝提供服务
|
||||
404 Not Found //请求资源不存在,eg:输入了错误的URL
|
||||
500 Internal Server Error //服务器发生不可预期的错误
|
||||
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
|
||||
```
|
||||
|
||||
|
||||
# HTTP 请求方法
|
||||
|
||||
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
|
||||
|
||||
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
|
||||
|
||||
HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
|
||||
|
||||
- GET:请求指定的页面信息,并返回实体主体。
|
||||
- HEAD:类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
|
||||
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
|
||||
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
|
||||
- DELETE:请求服务器删除指定的页面。
|
||||
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
|
||||
- OPTIONS:允许客户端查看服务器的性能。
|
||||
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
|
||||
|
||||
|
||||
# 长连接与短连接
|
||||
|
||||
HTTP1.1 规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
|
||||
|
||||
在实际使用中,HTTP 头部有了 Keep-Alive 这个值并不代表一定会使用长连接,客户端和服务器端都可以无视这个值,也就是不按标准来。毕竟 TCP 是一个双向连接的协议,双方都可以决定是不是主动断开。
|
||||
|
||||
客户端的长连接不可能无限期的拿着,会有一个超时时间,服务器有时候会告诉客户端超时时间。下图中的 Keep-Alive: timeout=20,表示这个TCP通道可以保持20秒
|
||||
|
||||

|
||||
|
||||
# 课后作业
|
||||
|
||||
- [扩展]了解更多请求/响应报文头属性
|
||||
- [扩展]了解更多响应状态码
|
||||
|
||||
|
BIN
Linux服务/HTTP协议/CS架构.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
Linux服务/HTTP协议/Keep-Alive报文.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Linux服务/HTTP协议/响应报文格式.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
Linux服务/HTTP协议/响应报文示例.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
Linux服务/HTTP协议/请求报文格式.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
Linux服务/HTTP协议/请求报文示例.png
Normal file
After Width: | Height: | Size: 46 KiB |
631
Linux服务/NFS网络文件共享.md
Normal file
@@ -0,0 +1,631 @@
|
||||
# NFS网络文件共享
|
||||
|
||||
NFS(Network File System)是一种分布式文件系统协议,最初由Sun Microsystems在1984年开发。NFS允许计算机在网络上共享文件和目录,就像这些文件和目录位于本地计算机上一样。它广泛应用于UNIX和类UNIX系统中,但也可以在其他操作系统上使用,如Windows和macOS。
|
||||
|
||||
## NFS简介与RPC简介
|
||||
|
||||
### NFS服务介绍
|
||||
|
||||
NFS是一种网络协议,NFS依赖RPC才能工作。
|
||||
|
||||
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。可以理解为把一个电脑上的硬盘挂载到另一个电脑上使用,另一个电脑能够像使用自己本地硬盘使用挂载的硬盘。
|
||||
|
||||
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。
|
||||
|
||||
### RPC协议介绍
|
||||
|
||||
RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。其工作在TCP/UDP的111端口。建立在Socket之上的,主要是简化编程的工作在底层提供网络之间的通信。
|
||||
|
||||
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
|
||||
|
||||
#### RPC 远程过程调度
|
||||
|
||||
* NFS 协议本身并没有网络传输功能,而是基于远程过程调用协议实现的
|
||||
* 提供一个面向过程的远程服务的接口
|
||||
* 可以通过网络从远程主机程序上请求服务,而不需要了解底层网络技术的协议
|
||||
* 工作在 OSI 模型的会话层,它可以为遵从 RPC 协议应用层协议提供端口注册功能
|
||||
* 事实上,有很多服务(NFS 和 NIS 等)都可以向 RPC 注册端口
|
||||
* RPC 使用网络端口 111 来监听客户端的请求
|
||||
|
||||
#### RPC 协议模型
|
||||
|
||||
1. 基于 rpc 的服务(此处是指 nfs 服务,在别处有可能是代表其他服务)在启动时向 portmapper 注册端口
|
||||
2. 基于 rpc 的客户端联系服务端 portmapper 询问服务的端口号
|
||||
3. portmapper 告知客户端基于 rpc 服务使用的端口号
|
||||
4. 基于 rpc 的客户端访问被告知单某基于 rpc 服务的端口
|
||||
5. 基于 rpc 的服务响应客户端的请求
|
||||
|
||||

|
||||
|
||||
### NFS工作流程
|
||||
|
||||
1. 首先服务器端启动RPC服务,并开启111端口
|
||||
2. 然后还需要服务器端启动NFS服务,并向RPC注册端口信息
|
||||
3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
|
||||
4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
|
||||
5. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
|
||||
|
||||
<img src="NFS%E7%BD%91%E7%BB%9C%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB/VgPgforTeyQakK6L.png!thumbnail" alt="img" />
|
||||
|
||||
### 挂载原理/过程
|
||||
|
||||
当我们在NFS服务器设置好一个共享目录/opt 后,其他人是有权访问/opt这个共享目录的,NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点(这个挂载点可以自己定义),路径不同也可以;如下图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/opt下的所有数据。
|
||||
|
||||
<img src="NFS%E7%BD%91%E7%BB%9C%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB/image-20250109102300565.png" alt="image-20250109102300565" style="zoom:80%;" />
|
||||
|
||||
# NFS共享实战
|
||||
|
||||
## 准备工作
|
||||
|
||||
一、服务器信息:
|
||||
|
||||
```bash
|
||||
主机 IP 服务 端口
|
||||
服务端: 192.168.88.10 nfs rpc 2049 111
|
||||
客户端: 192.168.88.20 nfs rpc 2049 111
|
||||
```
|
||||
|
||||
二、关闭防火墙
|
||||
|
||||
```bash
|
||||
# 关闭防火墙
|
||||
systemctl stop firewalld
|
||||
# 禁止防火墙开机自启
|
||||
systemctl disable firewalld
|
||||
```
|
||||
|
||||
如果必须开启防火墙,我们可以通过firewalld放行nfs和rpc服务
|
||||
|
||||
```bash
|
||||
# 开启nfs和rpc服务
|
||||
firewall-cmd --permanent --add-service=nfs
|
||||
firewall-cmd --permanent --add-service=rpc-bind
|
||||
|
||||
# 重载防火墙规则
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
三、关闭SELinux
|
||||
|
||||
```bash
|
||||
setenforce 0
|
||||
```
|
||||
|
||||
四、检查内核是否支持
|
||||
|
||||
```bash
|
||||
modinfo nfs
|
||||
```
|
||||
|
||||
## NFS软件介绍
|
||||
|
||||
相关软件包:nfs-utils、rpcbind
|
||||
|
||||
端口:2049(nfsd),其它端口由 portmap(111)分配。CentOS 6 开始 portmap 进程由 rpcbind 代替
|
||||
|
||||
NFS 服务主要进程:
|
||||
|
||||
* rpc.nfsd 最主要的 NFS 进程, 管理客户端是否可登录
|
||||
* rpc.mountd 挂载和卸载 NFS 文件系统,包括权限管理
|
||||
* rpc.lockd 非必要,管理文件锁,避免同时写出错
|
||||
* rpc.statd 非必要, 检查文件-致性, 可修复文件
|
||||
* 日志:/var/lib/nfs
|
||||
|
||||
配置文件:
|
||||
|
||||
* /etc/exports
|
||||
* /etc/exports.d/*.exports
|
||||
|
||||
## NFS部署
|
||||
|
||||
一、安装rpcbind和nfs服务
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# yum -y install rpcbind nfs-utils
|
||||
```
|
||||
|
||||
二、启动服务
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# systemctl enable --now rpcbind
|
||||
[root@localhost ~]# systemctl enable --now nfs-server
|
||||
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
|
||||
```
|
||||
|
||||
三、验证服务
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# systemctl status rpcbind
|
||||
● rpcbind.service - RPC Bind
|
||||
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; preset: enabled)
|
||||
Active: active (running) since Thu 2025-01-09 10:54:21 CST; 51s ago
|
||||
TriggeredBy: ● rpcbind.socket
|
||||
Docs: man:rpcbind(8)
|
||||
Main PID: 26847 (rpcbind)
|
||||
Tasks: 1 (limit: 10888)
|
||||
Memory: 1.6M
|
||||
CPU: 28ms
|
||||
CGroup: /system.slice/rpcbind.service
|
||||
└─26847 /usr/bin/rpcbind -w -f
|
||||
|
||||
Jan 09 10:54:21 localhost.localdomain systemd[1]: Starting RPC Bind...
|
||||
Jan 09 10:54:21 localhost.localdomain systemd[1]: Started RPC Bind.
|
||||
[root@localhost ~]# systemctl status nfs-server
|
||||
● nfs-server.service - NFS server and services
|
||||
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: disabled)
|
||||
Active: active (exited) since Thu 2025-01-09 10:54:39 CST; 42s ago
|
||||
Docs: man:rpc.nfsd(8)
|
||||
man:exportfs(8)
|
||||
Process: 27817 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
|
||||
Process: 27818 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
|
||||
Process: 27836 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, st>
|
||||
Main PID: 27836 (code=exited, status=0/SUCCESS)
|
||||
CPU: 35ms
|
||||
|
||||
Jan 09 10:54:38 localhost.localdomain systemd[1]: Starting NFS server and services...
|
||||
Jan 09 10:54:39 localhost.localdomain systemd[1]: Finished NFS server and services.
|
||||
|
||||
# 端口号验证
|
||||
[root@localhost ~]# ss -nlt
|
||||
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
|
||||
LISTEN 0 64 0.0.0.0:2049 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:56973 0.0.0.0:*
|
||||
LISTEN 0 64 0.0.0.0:46725 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:20048 0.0.0.0:*
|
||||
LISTEN 0 64 [::]:2049 [::]:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 4096 [::]:111 [::]:*
|
||||
LISTEN 0 64 [::]:35931 [::]:*
|
||||
LISTEN 0 4096 [::]:35405 [::]:*
|
||||
LISTEN 0 4096 [::]:20048 [::]:*
|
||||
```
|
||||
|
||||
### NFS配置文件格式
|
||||
|
||||
```shell
|
||||
/dir 主机 1(opt1,opt2) 主机 2(opt1,opt2)
|
||||
```
|
||||
|
||||
* 主机格式
|
||||
* 单个主机: ipv4, ipv6, FQDN
|
||||
* IP networks: 两种掩码格式均支持
|
||||
* 172.18.0.0/255.255.0.0
|
||||
* 172.18.0.0/16
|
||||
* wildcards:主机名通配,例如*.iproute.cn,IP 不可以
|
||||
* netgroups: NIS 域的主机组,@group_ name
|
||||
* anonymous:表示使用*通配所有客户端
|
||||
* 选项格式
|
||||
* 默认选项
|
||||
* (ro,sync,root_squash, no_all_squash)
|
||||
* ro, rw
|
||||
* 只读和读写
|
||||
* async
|
||||
* 异步,数据变化后不立即写磁盘,等磁盘空闲时再写入,性能高
|
||||
* sync
|
||||
* 同步(1.0.0 后为默认),数据在请求时立即写入共享存储磁盘
|
||||
* root_squash
|
||||
* 远程 root 映射为 nfsnobody(默认),UID 为 65534,Centos8 为 nobody, 早期版本是 4294967294 (nfsnobody)
|
||||
* no_root_squash
|
||||
* 远程 root 映射成 root 用户
|
||||
* all_squash
|
||||
* 所有远程用户(包括 root)都变成 nfsnobody , Centos8 为 nobody
|
||||
* no_all_squash
|
||||
* 保留共享文件的 UID 和 GID (默认)
|
||||
* anonuid 和 anongid
|
||||
* 指明匿名用户映射为特定用户 UID 和组 GID,而非 nfsnobody ,可配合 all_squash 使用
|
||||
|
||||
### NFS相关工具
|
||||
|
||||
#### rpcinfo
|
||||
|
||||
rpcinfo 工具可以查看 RPC 相关信息
|
||||
|
||||
查看注册在指定主机的 RPC 程序
|
||||
|
||||
```shell
|
||||
rpcinfo -p hostname
|
||||
```
|
||||
|
||||
查看 rpc 注册程序
|
||||
|
||||
```shell
|
||||
rpcinfo -s hostname
|
||||
```
|
||||
|
||||
#### exportfs
|
||||
|
||||
可用于管理 NFS 导出的文件系统
|
||||
|
||||
常见选项:
|
||||
|
||||
* **-v**:查看本机所有 NFS 共享
|
||||
* **-r**:重读配置文件,并共享目录
|
||||
* **-a**:输出本机所有共享
|
||||
* **-au**:停止本机所有共享
|
||||
|
||||
#### showmount
|
||||
|
||||
常见用法:
|
||||
|
||||
```shell
|
||||
showmount -e hostname
|
||||
```
|
||||
|
||||
### 配置共享目录
|
||||
|
||||
服务端上创建共享目录;这里我们要挂载的目录是`/myshare`
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# mkdir -p /myshare
|
||||
```
|
||||
|
||||
### 手动挂载案例
|
||||
|
||||
```bash
|
||||
# 服务端
|
||||
[root@localhost ~]# vim /etc/exports
|
||||
/myshare 192.168.88.0/24
|
||||
[root@localhost ~]# cd /myshare
|
||||
[root@localhost myshare]# echo "hello" > file
|
||||
[root@localhost ~]# systemctl stop firewalld
|
||||
[root@localhost ~]# setenforce 0
|
||||
|
||||
# 客户端:
|
||||
[root@localhost ~]# yum install -y nfs-utils rpcbind
|
||||
[root@localhost ~]# showmount -e 192.168.88.10
|
||||
Export list for 192.168.88.10:
|
||||
# 虽然我们自己配置共享了,但是没有重读配置文件,所以读不到
|
||||
|
||||
# 服务端:
|
||||
[root@localhost myshare]# exportfs -r
|
||||
exportfs: No options for /myshare 192.168.88.0/24: suggest 192.168.88.0/24(sync) to avoid warning
|
||||
[root@localhost myshare]# exportfs -v
|
||||
/myshare 192.168.88.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
|
||||
|
||||
# 客户端:
|
||||
[root@localhost ~]# showmount -e 192.168.88.10
|
||||
Export list for 192.168.88.10:
|
||||
/myshare 192.168.88.0/24
|
||||
[root@localhost ~]# mkdir /mnt/nfs
|
||||
[root@localhost ~]# mount -t nfs 192.168.88.10:/myshare /mnt/nfs
|
||||
[root@localhost ~]# df -h
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
devtmpfs 4.0M 0 4.0M 0% /dev
|
||||
tmpfs 872M 0 872M 0% /dev/shm
|
||||
tmpfs 349M 5.2M 344M 2% /run
|
||||
/dev/mapper/rl-root 17G 1.7G 16G 10% /
|
||||
/dev/nvme0n1p1 960M 261M 700M 28% /boot
|
||||
tmpfs 175M 0 175M 0% /run/user/0
|
||||
192.168.88.10:/myshare 17G 1.7G 16G 10% /mnt/nfs
|
||||
[root@localhost ~]# cd /mnt/nfs/
|
||||
[root@localhost nfs]# ls
|
||||
file
|
||||
[root@localhost nfs]# cat file
|
||||
hello
|
||||
[root@localhost ~]# rm -f file
|
||||
rm: cannot remove 'file': Read-only file system
|
||||
[root@localhost ~]# umount /mnt/nfs
|
||||
# 现在是只读模式,想要修改模式要去改配置文件,先卸载挂载
|
||||
|
||||
# 服务端:
|
||||
[root@localhost ~]# vim /etc/exports
|
||||
/myshare 192.168.88.0/24(rw,sync,root_squash,no_all_squash)
|
||||
[root@localhost myshare]# exportfs -v
|
||||
/myshare 192.168.88.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
|
||||
[root@localhost myshare]# exportfs -r
|
||||
[root@localhost myshare]# exportfs -v
|
||||
/myshare 192.168.88.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
|
||||
|
||||
# 客户端:
|
||||
[root@localhost ~]# showmount -e 192.168.88.10
|
||||
Export list for 192.168.88.10:
|
||||
/myshare 192.168.88.0/24
|
||||
[root@localhost ~]# mount -t nfs 192.168.88.10:/myshare /mnt/nfs
|
||||
[root@localhost ~]# df -h
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
devtmpfs 4.0M 0 4.0M 0% /dev
|
||||
tmpfs 872M 0 872M 0% /dev/shm
|
||||
tmpfs 349M 5.2M 344M 2% /run
|
||||
/dev/mapper/rl-root 17G 1.7G 16G 10% /
|
||||
/dev/nvme0n1p1 960M 261M 700M 28% /boot
|
||||
tmpfs 175M 0 175M 0% /run/user/0
|
||||
192.168.88.10:/myshare 17G 1.7G 16G 10% /mnt/nfs
|
||||
[root@localhost ~]# cd /mnt/nfs/
|
||||
[root@localhost nfs]# rm -f file
|
||||
rm: cannot remove 'file': Permission denied
|
||||
# 虽然给了rw权限,但是目录权限被linux控制
|
||||
|
||||
# 服务端:
|
||||
[root@localhost myshare]# ll -d /myshare/
|
||||
drwxr-xr-x. 2 root root 18 Jan 9 15:59 /myshare/
|
||||
[root@localhost myshare]# chmod a+w /myshare/
|
||||
|
||||
# 客户端:
|
||||
[root@localhost nfs]# rm -f file
|
||||
[root@localhost nfs]# echo "Hello, This is server2" > file
|
||||
[root@localhost nfs]# ll
|
||||
total 4
|
||||
-rw-r--r--. 1 nobody nobody 23 Jan 9 16:14 file
|
||||
[root@localhost nfs]# su - user01
|
||||
[user01@localhost ~]$ cd /mnt/nfs/
|
||||
[user01@localhost nfs]$ touch file1
|
||||
[user01@localhost nfs]$ ll
|
||||
总用量 4
|
||||
-rw-r--r-- 1 nfsnobody nfsnobody 6 7月 16 22:08 file
|
||||
-rw-rw-r-- 1 user01 user01 0 7月 16 22:11 file1
|
||||
|
||||
# 服务端:
|
||||
[root@localhost myshare]# ll
|
||||
总用量 4
|
||||
-rw-r--r--. 1 nfsnobody nfsnobody 6 7月 16 22:08 file
|
||||
-rw-rw-r--. 1 1000 1000 0 7月 16 22:11 file1
|
||||
[root@localhost myshare]# useradd -u1000 zhangsan
|
||||
[root@localhost myshare]# ll
|
||||
总用量 4
|
||||
-rw-r--r--. 1 nfsnobody nfsnobody 6 7月 16 22:08 file
|
||||
-rw-rw-r--. 1 zhangsan zhangsan 0 7月 16 22:11 file1
|
||||
[root@localhost ~]# vim /etc/exports
|
||||
/myshare 192.168.88.0/24(rw,sync,no_root_squash,all_squash)
|
||||
[root@localhost myshare]# exportfs -r
|
||||
[root@localhost myshare]# exportfs -v
|
||||
/myshare 192.168.88.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,all_squash)
|
||||
|
||||
# 客户端:
|
||||
[root@localhost ~]# umount /mnt/nfs/
|
||||
[root@localhost ~]# mount -t nfs 192.168.88.10:/myshare /mnt/nfs
|
||||
[root@localhost ~]# df -h
|
||||
[root@localhost ~]# cd /mnt/nfs/
|
||||
[root@localhost ~]# touch file{2,3}
|
||||
[root@localhost nfs]# ll
|
||||
总用量 4
|
||||
-rw-r--r-- 1 nfsnobody nfsnobody 6 7月 16 22:08 file
|
||||
-rw-rw-r-- 1 user01 user01 0 7月 16 22:11 file1
|
||||
-rw-r--r-- 1 nfsnobody nfsnobody 0 7月 16 22:26 file2
|
||||
-rw-r--r-- 1 nfsnobody nfsnobody 0 7月 16 22:26 file3
|
||||
```
|
||||
|
||||
## mount.nfs挂载选项
|
||||
|
||||
客户端 NFS 挂载
|
||||
|
||||
NFS 相关的挂载选项:`man 5 nfs`
|
||||
|
||||
* **fg**:(默认)前台挂载,失败直接退出
|
||||
* **bg**:后台挂载,失败后会再次尝试
|
||||
* **hard**:(默认)持续请求
|
||||
* **soft**:非持续请求
|
||||
* **intr 和 hard 配合**:请求可中断
|
||||
* **rsize 和 wsize**:一次读和写数据最大字节数,rsize=32768
|
||||
* **nosuid**:忽略文件的suid特殊权限
|
||||
* **_netdev**:提示标志,表示挂载的是网络设备,启动时候先简历网络连接,再挂载设备
|
||||
* **noexec**:表示不允许执行
|
||||
|
||||
提示:基于安全考虑,建议使用`nosuid,_netdev,noexec`挂载选项
|
||||
|
||||
范例:临时挂载 NFS 共享
|
||||
|
||||
```shell
|
||||
mount -o rw,nosuid,fg,hard,intr 192.168.88.10:/myshare /mnt/nfs
|
||||
```
|
||||
|
||||
范例:开机挂载
|
||||
|
||||
```shell
|
||||
vim /etc/fstab
|
||||
192.168.88.10:/myshare /mnt/nfs nfs defaults,_netdev 0 0
|
||||
```
|
||||
|
||||
# 自动挂载
|
||||
|
||||
由于NFS的应用场景,需要我们挂载远程硬盘本地使用,所以我们可以使用autofs服务按需要挂载外围设备,NFS共享等,并在空闲5分钟后后自动卸载。
|
||||
|
||||
主要用于客户端上,在客户端上自动挂载服务端提供的共享目录。
|
||||
|
||||
## 相关包和文件
|
||||
|
||||
* 软件包: autofs
|
||||
* 服务文件: /usr/lib/systemd/system/autofs.service
|
||||
* 配置文件: /etc/auto.master
|
||||
|
||||
客户端安装:
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# yum install -y autofs
|
||||
[root@localhost ~]# systemctl enable --now autofs
|
||||
```
|
||||
|
||||
## 配置autofs
|
||||
|
||||
`autofs` 的主要配置分为 **主配置文件** 和 **挂载映射文件**。
|
||||
|
||||
### **主配置文件 **
|
||||
|
||||
`/etc/auto.master` 是 `autofs` 的主配置文件,用于定义挂载点及其对应的映射文件。
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
/mnt/nfs /etc/auto.nfs --timeout=300
|
||||
```
|
||||
|
||||
配置说明:
|
||||
|
||||
- `/mnt/nfs`:挂载点的根目录。
|
||||
- `/etc/auto.nfs`:挂载点对应的映射文件。
|
||||
- `--timeout=300`:挂载超时时间(单位为秒),300 秒后未访问的挂载点将自动卸载。
|
||||
|
||||
**注意**:修改 `/etc/auto.master` 后需要重新加载 `autofs` 服务。
|
||||
|
||||
```bash
|
||||
systemctl reload autofs
|
||||
```
|
||||
|
||||
### 挂载映射文件 `/etc/auto.nfs`
|
||||
|
||||
挂载映射文件定义了具体的 NFS 挂载规则。
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
share1 -fstype=nfs4,rw,soft nfs-server:/export/share1
|
||||
share2 -fstype=nfs4,ro,hard nfs-server:/export/share2
|
||||
```
|
||||
|
||||
#### 配置说明:
|
||||
|
||||
- `share1` 和 `share2`:挂载点名称,最终挂载路径为 `/mnt/nfs/share1` 和 `/mnt/nfs/share2`。
|
||||
- `-fstype=nfs4`: 指定文件系统类型为 NFSv4。
|
||||
- `rw`/`ro`:挂载权限,`rw` 表示读写,`ro` 表示只读。
|
||||
- soft/hard:
|
||||
- **soft**:如果 NFS 服务器未响应,客户端将返回错误。
|
||||
- **hard**:客户端将无限期尝试连接,直到服务器恢复正常。
|
||||
- `nfs-server:/export/share1`:NFS 服务器地址及其共享路径。
|
||||
|
||||
**注意**:修改挂载映射文件后无需重启服务,`autofs` 会动态加载。
|
||||
|
||||
## 挂载案例
|
||||
|
||||
一、创建挂载点目录
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# mkdir /mnt/nfs
|
||||
```
|
||||
|
||||
二、配置autofs自动挂载
|
||||
|
||||
```bash
|
||||
# 编辑auto.master主配置文件
|
||||
[root@localhost ~]# vim /etc/auto.master
|
||||
/mnt/nfs /etc/auto.nfs
|
||||
[root@localhost ~]# systemctl restart autofs
|
||||
|
||||
# 编辑挂载映射文件
|
||||
[root@localhost ~]# vim /etc/auto.nfs
|
||||
share -fstype=nfs4,rw,soft 192.168.88.10:/myshare
|
||||
```
|
||||
|
||||
三、验证挂载
|
||||
|
||||
```bash
|
||||
# 访问挂载点以触发自动挂载
|
||||
[root@localhost ~]# ls /mnt/nfs/share
|
||||
dir file file1
|
||||
[root@localhost ~]# cd /mnt/nfs/share/
|
||||
[root@localhost share]# ls
|
||||
dir file file1
|
||||
[root@localhost share]# cat file
|
||||
Hello, This is server2
|
||||
```
|
||||
|
||||
### 其他配置选项
|
||||
|
||||
在挂载映射文件中可以使用多种选项,以下是常用参数的详细说明:
|
||||
|
||||
#### 文件系统类型选项 (`-fstype=`)
|
||||
|
||||
- **nfs**:适用于 NFSv3 文件系统。
|
||||
- **nfs4**:适用于 NFSv4 文件系统。
|
||||
|
||||
#### 挂载选项
|
||||
|
||||
- **rw**:读写权限。
|
||||
- **ro**:只读权限。
|
||||
- **soft**:允许客户端在超时后返回错误。
|
||||
- **hard**:客户端会一直尝试连接,直到服务器恢复正常。
|
||||
- **intr**:允许中断挂载操作(NFSv3 使用)。
|
||||
- **timeo=<value>**:超时时间(默认 600 分钟)。
|
||||
- **bg**:后台挂载操作。
|
||||
|
||||
### 变量支持
|
||||
|
||||
映射文件中可以使用变量。例如:
|
||||
|
||||
```bash
|
||||
* -fstype=nfs4,rw 192.168.88.10:/myshare/&
|
||||
```
|
||||
|
||||
在此配置中,`*` 代表通配符,`&` 将被替换为对应挂载点名称。例如,访问 `/mnt/nfs/test` 时将挂载 `192.168.88.10:/myshare/test`
|
||||
|
||||
# 实战案例
|
||||
|
||||
将NFS的共享目录,通过autofs 发布出来,做为远程主机用户的家目录
|
||||
|
||||
<img src="NFS%E7%BD%91%E7%BB%9C%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB/image-20250110151646824.png" alt="image-20250110151646824" style="zoom:80%;" />
|
||||
|
||||
## 环境准备
|
||||
|
||||
将server1中的用户家目录共享出来,server2在登录相同用户的时候,看到的家目录下的文件是一致的
|
||||
|
||||
## 实验过程
|
||||
|
||||
一、NFS服务器(server1)创建用户和对应的目录,将用户user01的家目录共享出来
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# mkdir /data
|
||||
[root@localhost ~]# useradd -d /data/user01 user01
|
||||
[root@localhost ~]# id user01
|
||||
uid=1000(user01) gid=1000(user01) groups=1000(user01)
|
||||
[root@localhost ~]# vim /etc/exports
|
||||
[root@localhost ~]# cat /etc/exports
|
||||
# /myshare 192.168.88.0/24(rw,sync,root_squash,no_all_squash)
|
||||
/data/user01 192.168.88.0/24(rw,sync,anonuid=1000,anongid=1000,all_squash)
|
||||
[root@localhost ~]# exportfs -r
|
||||
[root@localhost ~]# exportfs -v
|
||||
/data/user01 192.168.88.0/24(sync,wdelay,hide,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)
|
||||
```
|
||||
|
||||
二、在NFS客户端(server2)中配置autofs
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# vim /etc/auto.master
|
||||
/- /etc/auto.user
|
||||
[root@localhost ~]# vim /etc/auto.user
|
||||
[root@localhost ~]# cat /etc/auto.user
|
||||
/data/user01 -fstype=nfs4,rw,soft 192.168.88.10:/data/user01
|
||||
[root@localhost ~]# systemctl restart autofs
|
||||
```
|
||||
|
||||
三、在server2中创建user01用户
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# useradd -d /data/user01 -u 1000 user01
|
||||
useradd: warning: the home directory /data/user01 already exists.
|
||||
useradd: Not copying any file from skel directory into it.
|
||||
```
|
||||
|
||||
四、测试
|
||||
|
||||
```bash
|
||||
# 在server1中,登录到user01用户创建一个文件
|
||||
[root@localhost ~]# su - user01
|
||||
[user01@localhost ~]$ echo "The file is created by server1-user01" > file
|
||||
|
||||
# 在server2中,登录到user01用户查看是否共享了该文件
|
||||
[root@localhost ~]# su - user01
|
||||
[user01@localhost ~]$ ls
|
||||
file
|
||||
[user01@localhost ~]$ cat file
|
||||
The file is created by server1-user01
|
||||
[user01@localhost ~]$ pwd
|
||||
/data/user01
|
||||
|
||||
# 检查server2中挂载情况
|
||||
[user01@localhost ~]$ df -h
|
||||
df: /mnt/nfs/share: Stale file handle
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
devtmpfs 4.0M 0 4.0M 0% /dev
|
||||
tmpfs 872M 0 872M 0% /dev/shm
|
||||
tmpfs 349M 6.6M 343M 2% /run
|
||||
/dev/mapper/rl-root 17G 1.7G 16G 10% /
|
||||
/dev/nvme0n1p1 960M 261M 700M 28% /boot
|
||||
tmpfs 175M 0 175M 0% /run/user/0
|
||||
192.168.88.10:/data/user01 17G 1.7G 16G 10% /data/user01
|
||||
```
|
||||
|
||||
五、总结
|
||||
|
||||
从该实验结果中可以看出,我们通过nfs和autofs工具的配合使用,实现了两台主机共享同一个目录的效果。
|
||||
|
||||
NFS工具主要目的在于将远程存储设备共享出来,其他主机能够将分享出来的目录进行挂载。达到跟使用自己本地硬盘一样的效果。有效的解决了本地硬盘空间不足,部分文件需要共享,数据存储持久化等问题。是目前企业里使用较多的文件共享服务器最佳实践方案。
|
BIN
Linux服务/NFS网络文件共享/VgPgforTeyQakK6L.png!thumbnail
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Linux服务/NFS网络文件共享/image-20250109102300565.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
Linux服务/NFS网络文件共享/image-20250110151646824.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Linux服务/NFS网络文件共享/re3f2X3JWT0K4foH.png!thumbnail
Normal file
After Width: | Height: | Size: 27 KiB |
1689
Linux服务/Nginx.md
Normal file
BIN
Linux服务/Nginx/HTTP请求包处理流程.png
Normal file
After Width: | Height: | Size: 227 KiB |
BIN
Linux服务/Nginx/LNMP工作流程01.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
Linux服务/Nginx/LNMP工作流程02.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Linux服务/Nginx/Nginx架构.png
Normal file
After Width: | Height: | Size: 308 KiB |
BIN
Linux服务/Nginx/Nginx进程模型.png
Normal file
After Width: | Height: | Size: 231 KiB |
BIN
Linux服务/Nginx/Nginx进程模型工作细节01.png
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
Linux服务/Nginx/Nginx进程模型工作细节02.png
Normal file
After Width: | Height: | Size: 230 KiB |
BIN
Linux服务/Nginx/Nginx进程间通信.png
Normal file
After Width: | Height: | Size: 248 KiB |
BIN
Linux服务/Nginx/https测试验证.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
Linux服务/Nginx/image-20250118221202018.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
Linux服务/Nginx/image-20250118221344667.png
Normal file
After Width: | Height: | Size: 605 KiB |
BIN
Linux服务/Nginx/image-20250118221414487.png
Normal file
After Width: | Height: | Size: 283 KiB |
BIN
Linux服务/Nginx/image-20250118221502963.png
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
Linux服务/Nginx/image-20250118221634385.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Linux服务/Nginx/image-20250118221843976.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
Linux服务/Nginx/image-20250118221920089.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
Linux服务/Nginx/image-20250118221958932.png
Normal file
After Width: | Height: | Size: 371 KiB |
BIN
Linux服务/Nginx/image-20250207194355266.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
Linux服务/Nginx/image-20250207195739347.png
Normal file
After Width: | Height: | Size: 124 KiB |
BIN
Linux服务/Nginx/image-20250207200242332.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Linux服务/Nginx/image-20250207200300668.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Linux服务/Nginx/image-20250207200725398.png
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
Linux服务/Nginx/image-20250207201018894.png
Normal file
After Width: | Height: | Size: 754 KiB |
BIN
Linux服务/Nginx/image-20250207201019563.png
Normal file
After Width: | Height: | Size: 754 KiB |
BIN
Linux服务/Nginx/image-20250207201020275.png
Normal file
After Width: | Height: | Size: 754 KiB |
BIN
Linux服务/Nginx/image-20250207201110920.png
Normal file
After Width: | Height: | Size: 668 KiB |
BIN
Linux服务/Nginx/image-20250207201132377.png
Normal file
After Width: | Height: | Size: 710 KiB |
BIN
Linux服务/Nginx/image-20250207201155503.png
Normal file
After Width: | Height: | Size: 921 KiB |
BIN
Linux服务/Nginx/image-20250207201221158.png
Normal file
After Width: | Height: | Size: 872 KiB |
BIN
Linux服务/Nginx/image-20250207201248174.png
Normal file
After Width: | Height: | Size: 803 KiB |
BIN
Linux服务/Nginx/image-20250207201334236.png
Normal file
After Width: | Height: | Size: 744 KiB |
BIN
Linux服务/Nginx/image-20250207201405074.png
Normal file
After Width: | Height: | Size: 650 KiB |
BIN
Linux服务/Nginx/phpmyadmin登录页面.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Linux服务/Nginx/phpmyadmin管理页面.png
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
Linux服务/Nginx/创建typecho数据库.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
Linux服务/Nginx/初始化配置.png
Normal file
After Width: | Height: | Size: 61 KiB |