diff --git a/文件服务.md b/文件服务.md new file mode 100644 index 0000000..5695439 --- /dev/null +++ b/文件服务.md @@ -0,0 +1,398 @@ +

文件服务

+ +------ + +## 一:文件传输协议(FTP) + +​ 文件传输协议(FTP,File 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 + +# 使用 SFTP(SSH 协议) +[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 概念 + +​ SSH(Secure 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位。 +- **定期更新密钥**:防止密钥泄露风险。 \ No newline at end of file