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

9.9 KiB
Raw Permalink Blame History

文件服务


文件传输协议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

[root@wxin ~]# yum -y install vsftpd

启动服务并设置开机自启

[root@wxin ~]# systemctl start vsftpd
[root@wxin ~]# systemctl enable vsftpd

配置 vsftpd

编辑配置文件 /etc/vsftpd/vsftpd.conf

[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

安装程序

[root@test ~]# yum -y install lftp

连接服务器

# 匿名登录 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

编辑配置文件

# 编辑 /etc/lftp.conf 追加如下参数,保存就生效
vim /etc/lftp.conf
set ssl:verify-certificate no   # 跳过 SSL 证书验证(测试环境)
set ftp:ssl-allow no

网络文件系统NFS

NFS网络文件系统允许计算机通过网络共享文件和目录使远程文件访问如同本地操作。

1. NFS 服务器端配置

安装 NFS 服务

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

创建共享目录

[root@nas ~]# mkdir /nfs_share
[root@nas ~]# chmod 755 /nfs_share

配置共享目录

编辑配置文件 /etc/exports

[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 服务

[root@nas ~]# systemctl start nfs-server
[root@nas ~]# systemctl enable nfs-server

刷新共享配置

[root@nas ~]# exportfs -arv
exporting 192.168.159.0/24:/nfs_share

查看共享目录

[root@nas ~]# showmount -e localhost
Export list for localhost:
/nfs_share 192.168.159.0/24

2. NFS 客户端配置

安装

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

创建本地挂载点

[root@client ~]# mkdir /mnt/nfs_client

挂载 NFS 共享目录

临时挂载:

[root@client ~]# mount -t nfs 192.168.159.130:/nfs_share /mnt/nfs_client

永久挂载:

[root@client ~]# vim /etc/fstab 
192.168.159.130:/nfs_share /mnt/nfs_client nfs defaults 0 0

执行:

[root@client ~]# mount -a

验证挂载

[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
  • 文件传输(scpsftp
  • 端口转发(隧道功能)
  • 代理跳板(通过 SSH 连接其他服务器)

默认端口

SSH默认使用 22 端口,可通过配置文件修改。

2. SSH 工作原理

加密机制

  • 对称加密会话密钥加密通信内容如AES
  • 非对称加密身份验证阶段使用如RSA、ECDSA
  • 哈希算法验证数据完整性如SHA-256

连接流程

  • 客户端发起连接请求。
  • 服务端返回公钥(存储在/etc/ssh/ssh_host_*)。
  • 双方协商会话密钥Diffie-Hellman
  • 客户端通过密码或密钥认证身份。
  • 建立加密通道进行通信。

3. SSH 服务端配置

安装 SSH 服务并启动

[root@ssh ~]# yum -y install openssh-server
[root@ssh ~]# systemctl start sshd
[root@ssh ~]# systemctl enable sshd

配置文件详解

[root@ssh ~]# vim /etc/ssh/sshd_config
Port 22                     # 修改默认端口(增强安全性)
PermitRootLogin no          # 禁止root直接登录
PasswordAuthentication no   # 禁用密码登录(强制密钥认证)
AllowUsers user1 user2      # 仅允许指定用户登录

重启服务

[root@ssh ~]# systemctl restart sshd

4. SSH 客户端使用

基本登录

[root@ssh ~]# ssh username@remote_host         # 使用密码登录
[root@ssh ~]# ssh -p 2222 username@remote_host # 指定端口

密码认证(免密登录)

生成密钥对

[root@ssh ~]# ssh-keygen -t rsa -b 4096   # 默认保存在 ~/.ssh/id_rsa

上传公钥到服务器

[root@ssh ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
# 或手动追加到服务端的 ~/.ssh/authorized_keys

登录验证

[root@ssh ~]# ssh user@remote_host  # 无需输入密码

文件传输

SCP安全复制

[root@ssh ~]# scp file.txt user@remote_host:/path/to/dest  # 上传
[root@ssh ~]# scp user@remote_host:/path/file.txt ./       # 下载

SFTP交互式文件传输

[root@ssh ~]# sftp user@remote_host

5. 高级功能

端口转发(隧道)

本地端口转发

[root@ssh ~]# ssh -L 本地端口:目标主机:目标端口 user@跳板机

示例通过跳板机访问内网Web服务

[root@ssh ~]# ssh -L 8080:192.168.1.100:80 user@jumpserver

远程端口转发

[root@ssh ~]# ssh -R 远程端口:本地主机:本地端口 user@remote_host

SSH 代理Agent Forwarding

[root@ssh ~]# ssh -A user@remote_host  # 允许在远程主机使用本地密钥

配置文件简化(~/.ssh/config

[root@ssh ~]# vim ~/.ssh/config
Host myserver
    HostName 192.168.1.100
    Port 2222
    User user1
    IdentityFile ~/.ssh/id_rsa_myserver

6. 安全建议

  • 禁用密码登录:仅允许密钥认证。
  • 修改默认端口:减少暴力破解风险。
  • 限制登录用户:通过AllowUsers指定可登录用户。
  • 使用强密码/密钥密钥长度至少2048位。
  • 定期更新密钥:防止密钥泄露风险。