linux/文件服务.md
2025-03-24 12:31:27 +08:00

398 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h2><center>文件服务</center></h2>
------
## 一文件传输协议FTP
文件传输协议FTPFile Transfer Protocol是一种用于在计算机网络上在客户端和服务器之间传输文件的标准网络协议。
### 1. FTP 的核心特点
1. **双通道通信:**
- **控制连接(端口 21**用于传输命令(如登录、切换目录、上传/下载指令)。
- **数据连接(端口 20 或动态端口):**实际传输文件内容。
2. **两种工作模式:**
- **主动模式PORT**服务器主动连接客户端指定的端口。
1. 客户端通过控制连接告知服务器自己的IP和端口 —> 服务器从端口 20 主动连接客户端。
2. 问题:客户端防护墙可能组织外部连接。
- **被动模式PASV**服务器被动等待客户端连接。
1. 服务器告知客户端一个动态端口 —> 客户端主动连接该端口。
2. 使用场景:客户端位于防火墙或 NAT 后。
3. **明文传输:**
- FTP 默认不加密数据(用户名、密码、文件内容均为铭文),存在安全风险。
### 2. FTP 工作流程
1. **建立控制连接:**
- 客户端通过 TCP 连接到服务器的 21 端口,进行身份验证(如匿名登录 anonymous 或账号密码)。
2. **选择传输模式:**
- 客户端决定使用主动模式或被动模式,协商数据连接的端口。
3. **传输文件:**
- 通过数据连接传输文件(支持 ASCII 或二进制模式)。
4. **终止文件:**
- 传输完成后关闭数据连接,控制连接可保持以执行后续操作。
### 3. 服务器配置FTP Server
**安装 vsftpd**
```bash
[root@wxin ~]# yum -y install vsftpd
```
**启动服务并设置开机自启**
```bash
[root@wxin ~]# systemctl start vsftpd
[root@wxin ~]# systemctl enable vsftpd
```
**配置 vsftpd**
编辑配置文件 `/etc/vsftpd/vsftpd.conf`
```bash
[root@wxin ~]# vim /etc/vsftpd/vsftpd.conf
常用配置选项(按需修改):
# 禁用匿名登录(默认开启)
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许本地用户写入
write_enable=YES
# 启动上传文件的能力
anon_upload_enable=YES
# 启动创建目录的能力
anon_mkdir_write_enable=YES
# 限制用户只能访问其主目录chroot
chroot_local_user=YES
allow_writeable_chroot=YES
# 设置被动模式端口范围(可选)
pasv_min_port=50000
pasv_max_port=51000
pasv_address=<服务器公网IP> # 如果服务器在NAT后需指定公网IP
# 日志记录(可选)
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
```
注意:
FTP 服务器的主目录 `/var/ftp/`,是 FTP 程序分享内容的本机目录。
### 4. 客户端访问FTP Client
**浏览器访问**
- 客户机打开浏览器
- 输入`ftp://服务器IP地址`
- 默认仅能下载文件,无法上传文件
**客户端程序lftp**
安装程序
```bash
[root@test ~]# yum -y install lftp
```
连接服务器
```bash
# 匿名登录 FTP 服务器
[root@test ~]# lftp ftp.example.com
# 指定用户名和密码
[root@test ~]# lftp -u username,password ftp.example.com
# 使用 SFTPSSH 协议)
[root@test ~]# lftp sftp://username@example.com
# 使用 FTPS加密 FTP
[root@test ~]# lftp -e "set ftp:ssl-force true" ftp://example.com
```
基本命令
| 命令 | 功能 |
| :---------------: | :-----------------------------: |
| ls | 列出远程目录内容 |
| cd <目录> | 切换远程目录 |
| lcd <目录> | 切换本地目录 |
| get <远程文件> | 下载单个文件 |
| mget <通配符> | 批量下载(如 `mget *.zip` |
| put <本地文件> | 上传单个文件 |
| mput <通配符> | 批量上传 |
| mirror <远程目录> | 下载整个目录(递归) |
| mirror -R <目录> | 上传整个目录到服务器 |
| pwd | 显示当前远程目录 |
| lpwd | 显示当前本地目录 |
| !<命令> | 执行本地 Shell 命令(如 `!ls` |
| exit 或 bye | 退出 lftp |
编辑配置文件
```bash
# 编辑 /etc/lftp.conf 追加如下参数,保存就生效
vim /etc/lftp.conf
set ssl:verify-certificate no # 跳过 SSL 证书验证(测试环境)
set ftp:ssl-allow no
```
## 二网络文件系统NFS
NFS网络文件系统允许计算机通过网络共享文件和目录使远程文件访问如同本地操作。
### 1. NFS 服务器端配置
**安装 NFS 服务**
```bash
[root@nas ~]# yum -y install nfs-utils
```
**创建共享目录**
```bash
[root@nas ~]# mkdir /nfs_share
[root@nas ~]# chmod 755 /nfs_share
```
**配置共享目录**
编辑配置文件 `/etc/exports`
```bash
[root@nas ~]# vim /etc/exports
/nfs_share 192.168.159.0/24(rw,sync,no_root_squash,no_all_squash)
```
参数:
- rw允许读写。
- sync同步写入磁盘。
- no_root_squash允许客户端root用户以服务器root权限访问谨慎使用
- 192.168.159.0/24允许访问的客户端IP段按需修改
**启动 NFS 服务**
```bash
[root@nas ~]# systemctl start nfs-server
[root@nas ~]# systemctl enable nfs-server
```
**刷新共享配置**
```bash
[root@nas ~]# exportfs -arv
exporting 192.168.159.0/24:/nfs_share
```
**查看共享目录**
```bash
[root@nas ~]# showmount -e localhost
Export list for localhost:
/nfs_share 192.168.159.0/24
```
### 2. NFS 客户端配置
**安装**
```bash
[root@client ~]# yum -y install nfs-utils
```
**创建本地挂载点**
```bash
[root@client ~]# mkdir /mnt/nfs_client
```
**挂载 NFS 共享目录**
临时挂载:
```bash
[root@client ~]# mount -t nfs 192.168.159.130:/nfs_share /mnt/nfs_client
```
永久挂载:
```bash
[root@client ~]# vim /etc/fstab
192.168.159.130:/nfs_share /mnt/nfs_client nfs defaults 0 0
```
执行:
```bash
[root@client ~]# mount -a
```
验证挂载
```bash
[root@client ~]# df -hT | grep nfs
192.168.159.130:/nfs_share nfs4 17G 5.4G 12G 32% /mnt/nfs_client
```
## 三SSH
### 1. SSH 概念
SSHSecure Shell是一种加密的网络协议用于在不安全网络中安全地远程登陆和执行命令替代明文传输的 Telnet、FTP等协议。
**核心功能:**
- 远程登陆(`ssh user@host`
- 文件传输(`scp``sftp`
- 端口转发(隧道功能)
- 代理跳板(通过 SSH 连接其他服务器)
**默认端口**
SSH默认使用 22 端口,可通过配置文件修改。
### 2. SSH 工作原理
**加密机制**
- 对称加密会话密钥加密通信内容如AES
- 非对称加密身份验证阶段使用如RSA、ECDSA
- 哈希算法验证数据完整性如SHA-256
**连接流程**
- 客户端发起连接请求。
- 服务端返回公钥(存储在`/etc/ssh/ssh_host_*`)。
- 双方协商会话密钥Diffie-Hellman
- 客户端通过密码或密钥认证身份。
- 建立加密通道进行通信。
### 3. SSH 服务端配置
**安装 SSH 服务并启动**
```bash
[root@ssh ~]# yum -y install openssh-server
[root@ssh ~]# systemctl start sshd
[root@ssh ~]# systemctl enable sshd
```
**配置文件详解**
```bash
[root@ssh ~]# vim /etc/ssh/sshd_config
Port 22 # 修改默认端口(增强安全性)
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码登录(强制密钥认证)
AllowUsers user1 user2 # 仅允许指定用户登录
```
**重启服务**
```bash
[root@ssh ~]# systemctl restart sshd
```
### 4. SSH 客户端使用
**基本登录**
```bash
[root@ssh ~]# ssh username@remote_host # 使用密码登录
[root@ssh ~]# ssh -p 2222 username@remote_host # 指定端口
```
**密码认证(免密登录)**
生成密钥对
```bash
[root@ssh ~]# ssh-keygen -t rsa -b 4096 # 默认保存在 ~/.ssh/id_rsa
```
上传公钥到服务器
```bash
[root@ssh ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
# 或手动追加到服务端的 ~/.ssh/authorized_keys
```
登录验证
```bash
[root@ssh ~]# ssh user@remote_host # 无需输入密码
```
**文件传输**
SCP安全复制
```bash
[root@ssh ~]# scp file.txt user@remote_host:/path/to/dest # 上传
[root@ssh ~]# scp user@remote_host:/path/file.txt ./ # 下载
```
SFTP交互式文件传输
```bash
[root@ssh ~]# sftp user@remote_host
```
### 5. 高级功能
**端口转发(隧道)**
本地端口转发
```bash
[root@ssh ~]# ssh -L 本地端口:目标主机:目标端口 user@跳板机
```
**示例**通过跳板机访问内网Web服务
```bash
[root@ssh ~]# ssh -L 8080:192.168.1.100:80 user@jumpserver
```
远程端口转发
```bash
[root@ssh ~]# ssh -R 远程端口:本地主机:本地端口 user@remote_host
```
**SSH 代理Agent Forwarding**
```bash
[root@ssh ~]# ssh -A user@remote_host # 允许在远程主机使用本地密钥
```
**配置文件简化(`~/.ssh/config`**
```bash
[root@ssh ~]# vim ~/.ssh/config
Host myserver
HostName 192.168.1.100
Port 2222
User user1
IdentityFile ~/.ssh/id_rsa_myserver
```
### 6. 安全建议
- **禁用密码登录**:仅允许密钥认证。
- **修改默认端口**:减少暴力破解风险。
- **限制登录用户**:通过`AllowUsers`指定可登录用户。
- **使用强密码/密钥**密钥长度至少2048位。
- **定期更新密钥**:防止密钥泄露风险。