云计算基础-16:Linux文件服务

在互联网的早期,文件共享就是最核心的需求。直到今天,无论是网站部署、数据存储,还是远程运维,都离不开各种文件服务。

本文将系统讲解 Linux 中三大核心文件服务:

  • FTP:互联网上最经典的文件传输协议,用于文件上传下载
  • NFS:Linux 系统之间的网络文件系统,用于集群共享存储
  • SSH:安全外壳协议,用于远程管理和免密登录

学完本章,你将能够搭建并管理这些服务,为你的服务器提供文件共享和远程管理能力。


FTP Server(文件传输协议服务)

简介

FTP(File Transfer Protocol):文件传输协议,是 TCP/IP 协议组中应用层的协议之一。

FTP 的作用

  • 提供文件共享服务——让多台计算机之间可以方便地传输文件
  • 互联网上的媒体资源软件资源,绝大部分都是通过 FTP 服务器传递的
┌─────────────┐          ┌─────────────┐
│   客户端     │◄────────►│  FTP 服务器  │
│  (下载/上传) │          │  /var/ftp/  │
└─────────────┘          └─────────────┘
       ↑                          ↑
   浏览器/lftp/wget          存储共享文件

软件包

Linux 中最常用的 FTP 服务器软件是 vsftpd(Very Secure FTP Daemon)。


FTP 基础

端口说明

端口类型说明
21/tcp控制端口(Command)用于传输 FTP 命令(登录、切换目录、上传/下载指令等)
20/tcp数据端口(Data)用于实际传输文件数据(仅在主动模式下使用)

FTP 使用两个端口——21 端口负责”说”(命令),20 端口负责”搬”(数据)。


FTP Server 默认配置

步骤 1:安装 vsftpd

logo:

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

前提:请提前配置好 YUM 源(本地源或阿里云源)。

步骤 2:准备分发的文件

[root@localhost ~]# touch /var/ftp/abc.txt   /var/ftp/123.mp4

FTP 服务器的主目录/var/ftp/ 是 FTP 程序分享内容的基本机目录。客户端访问时看到的就是这个目录下的文件。

步骤 3:启动服务

# 启动服务
[root@localhost ~]# systemctl start vsftpd

# 设置开机自启
[root@localhost ~]# systemctl enable vsftpd

# 查看服务状态和端口
[root@localhost ~]# ss -ltnp | grep vsftpd
LISTEN     0      32          :::21        :::*      users:(("vsftpd",pid=12775,fd=4))

看到 21 端口 处于 LISTEN 状态,说明 FTP 服务已正常启动。

步骤 4:关闭防火墙(测试环境)

# 停止防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

# 关闭 SELinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled

生产环境提醒:在生产环境中不建议完全关闭防火墙,应该配置允许 21 和 20 端口的规则。


FTP Client(客户端访问)

方式一:浏览器或文件系统访问(任何系统)

步骤:

  1. 打开浏览器(Firefox、Chrome、IE 等)或真机的文件管理器
  2. 输入地址:ftp://服务器IP地址
  3. 默认仅能下载文件(匿名用户只读)
示例:ftp://192.168.100.114

浏览器访问是最简单的方式,适合快速下载文件,但不支持上传。

我这里使用真机的浏览器访问不成功,所以开了一台带有图形化虚拟机的浏览器访问,和真机的文件管理器访问都是成功的

方式二:Linux FTP 客户端程序 — lftp

这里我换了另一个虚拟机来测试

步骤 1:安装 lftp

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

步骤 2:访问服务器

[root@zhangsan66 ~]# lftp 192.168.100.114
lftp 192.168.100.114:~>

步骤 3:查看并下载

# 查看服务器上的文件
lftp 192.168.100.114:~> ls
-rw-r--r--    1 0        0               0 May 28 08:59 123.mp4
-rw-r--r--    1 0        0               0 May 28 08:59 abc.txt
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub

# 下载文件
lftp 192.168.100.114:/> get  123.mp4

# 下载整个目录
lftp 192.168.100.114:/> mirror pub
lftp 192.168.100.114:/> quit

# 查看是否下载成功
[root@zhangsan66 ~]# ls
123.mp4  pub

lftp 常用命令:

命令说明
ls查看服务器文件列表
get 文件名下载单个文件
mget *.txt批量下载多个文件
mirror 目录名下载整个目录
put 文件名上传文件
mirror -R 目录名上传整个目录
cd 目录切换服务器目录
lcd 目录切换本地目录
bye / exit/quit退出 lftp

方式三:Linux FTP 客户端程序 — wget

在FTP服务器上准备新文件:

[root@localhost ~]# touch /var/ftp/123abc.mp3

下载单个文件:

[root@zhangsan66 ~]# wget ftp://192.168.100.114/123abc.mp3
--2026-05-28 17:20:14--  ftp://192.168.100.114/123abc.mp3
           => “123abc.mp3”
正在连接 192.168.100.114:21... 已连接。
正在以 anonymous 登录 ... 登录成功!
==> SYST ... 完成。   ==> PWD ... 完成。
==> TYPE I ... 完成。 ==> 不需要 CWD。
==> SIZE 123abc.mp3 ... 完成。
==> PASV ... 完成。   ==> RETR 123abc.mp3 ... 完成。

    [ <=>                                                                        ] 0           --.-K/s 用时 0s      

2026-05-28 17:20:14 (0.00 B/s) - “123abc.mp3” 已保存 [0]
[root@zhangsan66 ~]# ls
123abc.mp3  123.mp4  pub

指定下载路径和文件名:

[root@localhost ~]# wget ftp://192.168.100.114/123abc.mp3  -O  /tmp/321.PNG

-O 参数:指定保存的文件名和路径。

wget 不仅可以下载 FTP 文件,还可以下载 HTTP 文件:

例如去QQ获取下载链接后:

[root@zhangsan66 ~]# wget https://qqdl.gtimg.cn/qqfile/QQNT/9.9.31/release/092069d7/QQ_9.9.31_260528_x64_01.exe
--2026-05-28 17:26:45--  https://qqdl.gtimg.cn/qqfile/QQNT/9.9.31/release/092069d7/QQ_9.9.31_260528_x64_01.exe
正在解析主机 qqdl.gtimg.cn (qqdl.gtimg.cn)... 113.125.209.140, 175.12.75.68, 119.86.222.74, ...
正在连接 qqdl.gtimg.cn (qqdl.gtimg.cn)|113.125.209.140|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:310074032 (296M) [application/octet-stream]
正在保存至: “QQ_9.9.31_260528_x64_01.exe”

100%[===========================================================================>] 310,074,032 2.69MB/s 用时 98s    

2026-05-28 17:28:23 (3.02 MB/s) - 已保存 “QQ_9.9.31_260528_x64_01.exe” [310074032/310074032])

[root@zhangsan66 ~]# ls
123abc.mp3  123.mp4  pub  QQ_9.9.31_260528_x64_01.exe

wget 是最常用的命令行下载工具,支持 FTP 和 HTTP 两种协议。


启动 FTP 上传功能

默认情况下,FTP 服务器只允许匿名用户下载文件。如果需要上传功能,需要进行额外配置。

步骤 1:了解配置文件

# FTP 配置文件
/etc/vsftpd/vsftpd.conf

用于设定 FTP 服务器的功能开启或关闭的文件。

# 修改前先备份
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

步骤 2:检查匿名账户登录设置

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

# 找到以下配置项:
anonymous_enable=YES
配置值说明
anonymous_enable=YES允许匿名用户登录(默认,方便但安全性低)
anonymous_enable=NO禁用匿名用户登录(需要用户名和密码)

anonymous_enable=YES 表示”匿名 = 是”,即允许匿名用户访问。

步骤 3:配置上传指令

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

# 添加或取消以下行的注释: 
anon_upload_enable=YES              # 启动上传文件的能力
anon_mkdir_write_enable=YES          # 启动创建目录的能力

重启 FTP 服务:

[root@localhost ~]# systemctl restart vsftpd

步骤 4:创建上传目录

# 创建专门用于上传的目录
[root@localhost ~]# mkdir /var/ftp/upload

# 赋予写入权限(匿名用户需要)
[root@localhost ~]# chmod 777 /var/ftp/upload

重要:上传文件时,客户端一定要进入这个 upload 目录,才能上传文件。

步骤 5:客户端测试

准备测试文件:

# 在客户机上创建一个测试文件
[root@zhangsan66 ~]# echo 222 > 2.txt

上传文件:

# 登录 FTP 服务器
[root@zhangsan66 ~]# lftp  192.168.100.114

# 进入上传目录
lftp 192.168.100.114:~> cd upload/

# 上传文件
lftp 192.168.100.114:/upload> put 2.txt 
lftp 192.168.100.114:/upload> ls
-rw-------    1 14       50              4 May 29 07:15 2.txt

创建目录:

lftp 192.168.100.114:/upload> mkdir file
mkdir 成功, 建立 `file'
lftp 192.168.100.114:/upload> ls
-rw-------    1 14       50              4 May 29 07:15 2.txt
drwx------    2 14       50              6 May 29 07:24 file

上传整个目录:

# 前提是客户机上有一个名为 aaa 的文件夹等着上传
lftp 192.168.100.114:/upload> mirror -R youxi
Total: 1 directory, 0 files, 0 symlinks
lftp 192.168.100.114:/upload> ls
-rw-------    1 14       50              4 May 29 07:15 2.txt
drwx------    2 14       50              6 May 29 07:24 file
drwx------    2 14       50              6 May 29 07:26 youxi

mirror -R 表示反向镜像,即将本地目录上传到服务器。


FTP 配置文件常用选项

配置项说明默认值
anonymous_enable=YES允许匿名登录YES
anon_upload_enable=YES允许匿名用户上传NO
anon_mkdir_write_enable=YES允许匿名用户创建目录NO
anon_other_write_enable=YES允许匿名用户删除/重命名NO
local_enable=YES允许本地用户登录YES
write_enable=YES允许写入操作YES
local_umask=022本地用户上传文件的权限掩码022
dirmessage_enable=YES进入目录时显示欢迎信息YES
xferlog_enable=YES启用传输日志YES
connect_from_port_20=YES使用 20 端口传输数据YES
listen=YES以独立模式监听YES

NFS Server(网络文件系统)

简介

NFS(Network File System):网络文件系统,是 Linux/Unix 系统之间共享文件的一种协议。

NFS 的特点

特点说明
客户端主要为 LinuxNFS 是 Linux/Unix 原生协议,Windows 需要额外安装 NFS 客户端
支持多节点同时挂载多台客户端可以同时挂载同一个 NFS 共享目录
支持并发写入多个客户端可以同时读写共享目录

NFS 的作用

  • 提供文件共享服务——让多台 Linux 服务器共享同一份数据
  • 为 Web Server 集群配置后端存储——多台 Web 服务器共享同一份网站代码
┌──────────┐  ┌──────────┐  ┌──────────┐
│  Web1    │  │  Web2    │  │  Web3    │
│ 192.168. │  │ 192.168. │  │ 192.168. │
│  100.114 │  │  1100.115 │  │  100.116 │
└────┬─────┘  └────┬─────┘  └────┬─────┘
     │              │              │
     └──────────────┼──────────────┘
                    │
              ┌─────┴─────┐
              │   NAS     │
              │ 192.168.  │
              │  100.113  │
              │ /webdata  │
              └───────────┘

实战:NFS 服务器搭建

实验环境

角色IP 地址说明
NAS(存储端)192.168.100.113NFS 服务器,提供共享存储
Web1192.168.100.114NFS 客户端,挂载共享目录
Web2192.168.100.115NFS 客户端,挂载共享目录
Web3192.168.100.116NFS 客户端,挂载共享目录

准备工作:关闭防火墙(所有机器)

# 关闭 SELinux
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled

[root@localhost ~]# setenforce 0

# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

NAS(存储端)配置

安装 NFS 服务器

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

NAS(Network Attached Storage):网络附属存储。NFS 是 NAS 的一种实现方式。

创建共享目录并放置内容

# 创建共享目录(存储网站代码)
[root@nas ~]# mkdir /webdata

# 放置测试页面
[root@nas ~]# echo "nfs test66666666" > /webdata/index.html

配置 NFS 共享

[root@nas ~]# vim /etc/exports

# 添加以下内容:
/webdata    192.168.100.0/24(rw)

配置说明:

部分说明
/webdata发布资源的目录(共享目录)
192.168.100.0/24允许访问 NFS 的客户端网段
(rw)读写权限(read-write)

更多权限选项:

选项说明
rw读写权限
ro只读权限
sync数据同步写入磁盘(安全但较慢)
async数据先写入内存再写入磁盘(快但不安全)
root_squash将 root 用户映射为匿名用户(安全)
no_root_squash保留 root 用户权限(方便但不安全)
no_all_squash保留用户 UID/GID 映射

启动 NFS 服务

# 启动服务
[root@nas ~]# systemctl start nfs-server

# 设置开机自启
[root@nas ~]# systemctl enable nfs-server

检查 NFS 输出

[root@nas ~]# exportfs -v
/webdata          192.168.100.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

-v 参数:详细显示输出的目录和权限信息。


Web 客户端配置(Web1/Web2/Web3 相同)

安装 NFS 客户端和 Web 服务器

[root@web1 ~]# yum -y install nfs-utils httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd

查看存储端共享

[root@web1 ~]# showmount -e 192.168.100.113
Export list for 192.168.100.113:
/webdata 192.168.100.0/24

showmount -e:查询 NFS 服务器可用的共享目录。

手动挂载 NFS

[root@web1 ~]# mount -t nfs 192.168.100.113:/webdata /var/www/html/

命令拆解:

mount      -t      nfs           192.168.100.113:/webdata    /var/www/html/
  │          │        │                      │                      │
  │          │        │                      │                      └── 本地挂载点
  │          │        │                      └── NFS 服务器地址:共享目录
  │          │        └── 文件系统类型(NFS)
  │          └── 指定类型
  └── 挂载命令

查看挂载状态

[root@web1 ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
192.168.100.113:/webdata   17G  5.3G   12G  31% /var/www/html
[root@web1 ~]# ls /var/www/html/
index.html
[root@web1 ~]# cat  /var/www/html/index.html 
nfs test66666666

可以看到 NFS 共享目录已经成功挂载到本地的 /var/www/html/,并且能看到 index.html 文件内容与NFS内容一致。

测试网站访问

打开浏览器,访问 Web 服务器的 IP 地址:

http://192.168.100.114/
http://192.168.100.115/
http://192.168.100.116/

三台 Web 服务器显示的都是同一个页面——因为它们共享了同一个 NFS 存储目录 /webdata

验证共享写入

在 NAS 上修改文件:

[root@nas ~]# echo "Hello from NAS" > /webdata/index.html

在任意 Web 上查看:

[root@web1 ~]# cat /var/www/html/index.html
Hello from NAS

所有 Web 服务器看到的内容都是一样的!这就是共享存储的威力。


设置永久挂载(开机自动挂载)

[root@web1 ~]# vim /etc/fstab

# 添加以下内容:
192.168.100.113:/webdata    /var/www/html    nfs    defaults    0 0

/etc/fstab 格式说明:

设备/共享           挂载点      类型   选项        转储  检查
192.168.100.113:/webdata  /var/www/html  nfs   defaults    0    0

设置永久挂载后,即使服务器重启,NFS 共享也会自动挂载。


NFS vs FTP 对比

对比维度NFSFTP
协议类型网络文件系统文件传输协议
使用场景Linux 系统间共享文件(如集群存储)文件上传下载(如软件发布)
挂载方式挂载为本地目录,透明访问需要客户端程序连接
用户体验像操作本地文件一样需要 FTP 客户端
适用系统主要 Linux/Unix跨平台(Windows/Linux/Mac)
并发写入支持不支持(需要锁机制)

SSH Server(安全外壳协议)

简介

SSH(Secure Shell):安全外壳协议。在服务器的字符界面,进行选取、复制、粘贴、翻页很不方便。借助 SSH 远程操作和管理系统,不仅方便而且安全可靠。

SSH 的作用

  • 远程登录——从一台机器远程连接到另一台机器
  • 远程执行命令——在不登录的情况下执行命令
  • 安全文件传输——通过 SCP/SFTP 安全地传输文件
  • 端口转发/隧道——建立安全的加密通道

SSH 服务器实战

步骤 1:查询 SSH 是否安装

[root@localhost ~]# rpm -qa | grep ssh
openssh-server-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64

如果没有安装,执行:

[root@localhost ~]# yum -y install openssh-server

步骤 2:SSH 服务管理

# 启动服务(默认已启动)
[root@localhost ~]# systemctl start sshd

# 查看端口
[root@localhost ~]# netstat -antp | grep sshd
tcp    0    0 0.0.0.0:22    0.0.0.0:*    LISTEN    1234/sshd

# 开机自启(默认已启用)
[root@localhost ~]# systemctl enable sshd

22 端口 是 SSH 服务的默认端口。

步骤 3:使用 SSH 远程管理

# SSH 远程登录
[root@localhost ~]# ssh username@IP地址

# 示例:
[root@localhost ~]# ssh root@192.168.142.134
The authenticity of host '192.168.142.134 (192.168.142.134)' can't be established.
ECDSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.142.134's password:
[root@remote ~]#

第一次登录时的提示:

提示说明
The authenticity of host...这是你第一次连接该主机,系统显示对方的指纹
Are you sure you want to continue...确认后会将指纹保存到 ~/.ssh/known_hosts
password:输入远程主机的用户密码

SSH 免密登录

当需要管理大量服务器时,每次输入密码非常低效。SSH 免密登录通过公钥认证机制,实现无需密码的自动登录。

应用场景

┌─────────────┐          ┌──────────────────────┐
│   跳板机     │          │   业务服务器群          │
│ 192.168.    │  ──────► │ 192.168.100.114      │
│  100.110    │  SSH     │ 192.168.100.116      │
│             │  免密     │ 192.168.100.232      │
└─────────────┘          │ ... (数量非常大)       │
                         └──────────────────────┘

跳板机(Bastion Host):一台专门用于远程连接其他服务器的中转服务器,是进入内部网络的唯一入口。


配置免密登录的完整流程

环境

角色IP 地址说明
跳板机192.168.100.110发起连接,持有私钥
业务服务器192.168.100.114被连接,持有公钥

步骤 1:使用密码远程登录(测试连通性)

[root@110 ~]# ssh root@192.168.100.114
root@192.168.100.114's password: 
[root@114 ~]# exit
logout
Connection to 192.168.100.114 closed.
[root@110 ~]# 

需要输入密码,说明 SSH 服务正常,但还没配置免密。

步骤 2:在跳板机(110)上生成密钥对

[root@110 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):                 ← 直接回车(不设密码)
Enter same passphrase again:                                ← 直接回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WDpz7zjjBkkk4E5CUhduilLQGHdvvMTEh18IUcb2B8g root@110
The key's randomart image is:
+---[RSA 2048]----+
|+*+.+o+Boo       |
|++.+.=+.E o      |
|. + oo*+.o .     |
| * o o.=. . .    |
|o o  .*.S  .     |
|.     o+ .       |
|       .  .      |
|        +o       |
|       ooo.      |
+----[SHA256]-----+
[root@110 ~]# 

-t rsa:指定加密算法为 RSA。一路回车即可,不要设置 passphrase(否则每次使用私钥时都要输入密码,失去了免密的意义)。

查看生成的密钥:

[root@110 ~]# ll ~/.ssh/
total 12
-rw------- 1 root root 1679 Jun  1 10:02 id_rsa         ← 私钥(自己保管,不能泄露)
-rw-r--r-- 1 root root  390 Jun  1 10:02 id_rsa.pub     ← 公钥(分发给目标服务器)

步骤 3:将公钥传递给目标服务器

[root@110 ~]#  ssh-copy-id root@192.168.100.114
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.100.114 (192.168.100.114)' can't be established.
ECDSA key fingerprint is SHA256:3fjgqAxLwRbNDXSOUh1+/JrI4KpzyrHgkzmymB4vUUM.
ECDSA key fingerprint is MD5:3e:f6:f6:dc:fa:ef:26:47:9e:70:2f:4d:39:38:0b:0c.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.100.114's password:              ← 输入一次密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.100.114'"
and check to make sure that only the key(s) you wanted were added.

[root@110 ~]# 

ssh-copy-id 会自动将公钥追加到目标服务器的 ~/.ssh/authorized_keys 文件中。

手动方式(如果 ssh-copy-id 不可用):

# 查看公钥内容
[root@110 ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... root@110

# 手动复制到目标服务器
[root@110 ~]# cat ~/.ssh/id_rsa.pub | ssh root@192.168.100.114 "cat >> ~/.ssh/authorized_keys"

步骤 4:测试免密登录

[root@110 ~]# ssh root@192.168.100.114
Last login: Mon Jun  1 09:52:47 2026 from 192.168.100.1
[root@114 ~]# 

直接登录成功,不需要输入密码!🎉


免密登录原理

┌─────────────────────────────────────────────────────────────┐
│                    免密登录流程                               │
│                                                              │
│  跳板机 (110)              业务服务器 (114)                  │
│  ┌───────────┐            ┌───────────────────┐             │
│  │ id_rsa    │            │ authorized_keys   │             │
│  │ (私钥)    │   ──────►  │ (公钥列表)         │             │
│  │ 自己保管   │   签名验证  │ 存放所有允许的公钥  │             │
│  └───────────┘            └───────────────────┘             │
│                                                              │
│  1. 跳板机发起连接,发送连接请求                               │
│  2. 服务器用公钥加密一段随机数据发送给跳板机                    │
│  3. 跳板机用私钥解密后发回服务器                               │
│  4. 服务器验证解密结果,匹配则允许登录                         │
└─────────────────────────────────────────────────────────────┘

核心理解:私钥像钥匙,公钥像锁孔。跳板机有钥匙(私钥),服务器有锁孔(公钥)。只有匹配的钥匙才能开锁。


SSH 常用命令

命令说明示例
ssh user@host远程登录ssh root@192.168.1.100
ssh user@host command远程执行命令ssh root@192.168.1.100 ls /tmp
ssh-copy-id user@host复制公钥到目标ssh-copy-id root@192.168.1.100
scp file user@host:path上传文件scp local.txt root@192.168.1.100:/tmp/
scp user@host:path local下载文件scp root@192.168.1.100:/tmp/remote.txt .
scp -r dir user@host:path上传目录scp -r mydir root@192.168.1.100:/opt/

SSH 安全加固

修改默认端口

[root@localhost ~]# vim /etc/ssh/sshd_config

# 修改端口(默认 22)
Port 2222
[root@localhost ~]# systemctl restart sshd

修改端口可以减少自动化攻击(脚本扫描通常只扫 22 端口)。

禁止 root 直接登录

[root@localhost ~]# vim /etc/ssh/sshd_config

# 禁止 root 登录
PermitRootLogin no

建议创建普通用户,登录后再 su - 切换到 root。

禁止密码登录(仅允许密钥)

[root@localhost ~]# vim /etc/ssh/sshd_config
# 仅允许公钥认证
PasswordAuthentication no
PubkeyAuthentication yes

这是最安全的 SSH 配置——完全禁用密码登录,只有持有私钥的人才能登录。


常见问题

FTP 相关

Q1:FTP 上传失败,提示 “550 Permission denied”

  1. 检查 /var/ftp/upload 目录权限:chmod 777 /var/ftp/upload
  2. 检查 SELinux 是否关闭:getenforce
  3. 检查 vsftpd.conf 中是否开启 anon_upload_enable=YES

Q2:FTP 登录后看不到文件

确保文件放在 /var/ftp/ 目录下,这是 FTP 的共享根目录。


NFS 相关

Q1:showmount 提示 “clnt_create: RPC: Port mapper failure”

  • 确认 NFS 服务已启动:systemctl status nfs-server
  • 确认 rpcbind 服务已启动:systemctl status rpcbind
  • 确认防火墙已关闭

Q2:NFS 挂载后无法写入

检查 /etc/exports 中的权限是否为 rw,并确认 no_root_squash 已设置。

Q3:如何卸载 NFS 挂载?

[root@web1 ~]# umount /var/www/html/

SSH 相关

Q1:SSH 连接超时断开怎么办?

# 在 sshd_config 中设置心跳间隔
[root@localhost ~]# vim /etc/ssh/sshd_config

ClientAliveInterval 60     # 每 60 秒发送一次心跳
ClientAliveCountMax 3      # 最多 3 次无响应则断开

Q2:SSH 连接很慢

# 在 sshd_config 中关闭 DNS 反向解析
[root@localhost ~]# vim /etc/ssh/sshd_config

UseDNS no

Q3:如何快速配置多台服务器的免密登录?

# 在跳板机上批量分发公钥
for ip in 134 135 136; do
    ssh-copy-id root@192.168.142.$ip
done

服务管理建议

  1. FTP 安全

    • 生产环境尽量使用 SFTP(基于 SSH 的文件传输)替代 FTP
    • FTP 传输的密码和文件都是明文的
  2. NFS 权限

    • 使用 ro(只读)权限共享不需要写入的数据
    • 限制允许挂载的客户端 IP 范围
  3. SSH 安全

    • 修改默认端口
    • 禁止 root 直接登录
    • 使用密钥认证替代密码认证
    • 定期更新 SSH 版本
  4. 服务管理

    • 所有服务都应该设置开机自启:systemctl enable service
    • 修改配置后重启服务:systemctl restart service
    • 定期检查服务日志:journalctl -u service

总结

通过本章节的学习,你应该掌握了:

  • 理解 FTP 协议的作用和端口(21 控制端口、20 数据端口)
  • 掌握 vsftpd 的安装、启动和基本配置
  • 使用浏览器、lftp、wget 三种方式访问 FTP 服务器
  • 配置 FTP 上传功能(匿名上传、创建目录)
  • 理解 NFS 网络文件系统的作用和特点
  • 掌握 NFS 服务器的搭建(安装、配置 /etc/exports、启动)
  • 掌握 NFS 客户端的挂载(手动挂载、永久挂载)
  • 使用 showmount 查看共享、exportfs 检查输出
  • 理解 SSH 协议的作用和 22 端口
  • 掌握 SSH 远程登录和远程执行命令
  • 理解 SSH 免密登录的原理和配置流程
  • 使用 ssh-keygen 生成密钥对
  • 使用 ssh-copy-id 分发公钥
  • 掌握 SCP 命令进行安全文件传输
  • 了解 SSH 安全加固方法(修改端口、禁止 root 登录、禁用密码认证)

学习建议:文件服务是运维的核心技能。建议在自己的虚拟机环境中搭建完整的 FTP + NFS + SSH 实验环境,特别是 NFS 的 Web 集群共享存储场景和 SSH 免密登录的跳板机场景。实际操作一遍,胜过阅读十遍文档!


🙋 学习路上不孤单,有坑一起填!



卡在参数调试、命令打架、功能没反应、资源失效?其他问题?直接戳我,也可以进群和同好交流!



📱 个人QQ:3838586495    👥 交流Q群:1094091455    📮 邮箱:leyan2504@163.com



内容帮你省了大把踩坑时间?可以文末小小打赏鼓励一波,也欢迎安利给身边学习的朋友~



✨ 欢迎来评论区「交作业」:分享你的配置思路、提出疑难问题;评论区正确填写邮箱,不错过任何人的解答回复!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇