云计算小白入门:Linux 核心服务实战(FTP+iptables+SELinux+SSH)

前言

作为云计算小白,Linux 是绕不开的基础 —— 云服务器、容器、大数据平台大多跑在 Linux 上。今天这篇文章,就用 “理论 + 实操 + 实例” 的方式,带你搞定 4 个 Linux 核心技能:FTP 文件传输、iptables 防火墙、SELinux 安全配置、SSH 密钥登录,全程通俗易懂,看完就能上手!

一、FTP 服务:Linux 下的 “文件快递员”

1.1 FTP 概念:啥是 FTP?

1.1.1 FTP 作用:解决 “文件远距离传输” 问题

简单说,FTP 就是 “文件传输协议”,作用像个 “快递员”—— 把本地文件传到服务器,或把服务器文件下载到本地。实例 1:你写好的网站代码(HTML/CSS),需要传到云服务器上才能被别人访问,用 FTP 就能实现;实例 2:云服务器的运行日志(比如错误日志),需要下载到本地分析,FTP 也能搞定。

1.1.2 适用场景:

  • 网站代码部署、日志下载;
  • 多台电脑共享服务器上的文件;
  • 批量传输大文件(比 HTTP 传输更稳定)。

1.2 FTP 原理:主动和被动模式怎么选?

FTP 传输需要两个连接:命令连接(发 “上传 / 下载” 指令)和数据连接(实际传文件)。根据数据连接的建立方式,分两种模式 —— 用 “快递” 类比更易理解:

1.2.1 主动模式:服务器主动 “送文件”

  • 类比:你(客户端)打给快递员(服务器)说 “要寄文件”(命令连接),快递员挂了电话,主动上门取件(服务器主动发起数据连接)。
  • 流程:
    1. 客户端连服务器 21 端口(命令端口),发指令;
    2. 服务器从 20 端口(数据端口)主动连客户端的随机端口,传文件。

1.2.2 被动模式:服务器 “等你取文件”

  • 类比:你(客户端)打给快递员(服务器)说 “要取文件”(命令连接),快递员说 “文件放驿站 10086 号柜,自己来取”(服务器开放随机端口),你去驿站取件(客户端主动连服务器随机端口)。
  • 流程:
    1. 客户端连服务器 21 端口,发 “被动模式” 指令;
    2. 服务器开放一个随机端口(比如 10086),告诉客户端;
    3. 客户端连服务器 10086 端口,传文件。

1.2.3 区别与选择:

  • 主动模式:服务器要主动连客户端,适合客户端无防火墙的场景;
  • 被动模式:客户端主动连服务器,适合客户端有防火墙(比如家用路由器)的场景 ——日常用被动模式更稳定

1.3 搭建 FTP 服务(CentOS 7 实战)

用最常用的vsftpd软件搭建,步骤像 “搭积木”,一步步来:

1.3.1 准备工作

  • 云服务器 / 虚拟机(CentOS 7),能上网;
  • root用户登录(权限足够)。

1.3.2 安装 vsftpd

执行命令(“yum install” 是 Linux 的 “应用商店安装”):

yum install vsftpd -y  # -y表示默认同意安装

“Complete!” 表示安装成功。

1.3.3 配置 vsftpd(核心步骤)

vsftpd 的配置文件在/etc/vsftpd/vsftpd.conf,用vim编辑(不懂 vim?记住 “按 i 编辑,编辑完按 Esc,输入:wq 保存退出”):

bash

vim /etc/vsftpd/vsftpd.conf

修改 / 添加以下参数(注释用 #开头,小白可直接复制):

ini

anonymous_enable=NO  # 禁止匿名登录(必须关,否则任何人能访问)
local_enable=YES     # 允许本地用户登录(用Linux系统用户登录)
write_enable=YES     # 允许上传文件
local_umask=022      # 上传文件权限(默认644,可读可写)
dirmessage_enable=YES# 进入目录时显示提示信息
xferlog_enable=YES   # 开启日志记录
connect_from_port_20=YES# 主动模式用20端口传数据
pasv_enable=YES      # 开启被动模式(重点!)
pasv_min_port=10060  # 被动模式最小端口
pasv_max_port=10090  # 被动模式最大端口
pam_service_name=vsftpd  # 认证服务
userlist_enable=YES  # 启用用户列表
tcp_wrappers=YES     # 启用TCP包装器(防火墙兼容)

👉 配图 2:配置文件编辑截图,标注关键参数。

1.3.4 创建 FTP 用户(比如叫 ftpuser)

创建用户并设置密码,这个用户就是登录 FTP 的账号:

bash

useradd ftpuser  # 创建用户ftpuser
passwd ftpuser   # 设置密码,输入时密码不显示,输完回车即可

👉 配图 3:创建用户和设置密码的截图。

1.3.5 启动服务并设开机自启

bash

systemctl start vsftpd  # 启动FTP服务
systemctl enable vsftpd # 设置开机自启(服务器重启后自动运行)
systemctl status vsftpd # 查看服务状态(显示green的active就对了)

👉 配图 4:服务启动成功的截图,标注 “active (running)”。

1.3.6 测试 FTP 访问(两种方式)

方式 1:Windows 客户端(用 FileZilla)
  1. 下载安装 FileZilla;
  2. 打开后,输入:主机(服务器 IP)、用户名(ftpuser)、密码(刚才设的)、端口(21),点击 “快速连接”。👉 配图 5:FileZilla 连接截图,显示成功连接后看到服务器文件。
方式 2:Linux 命令行(客户端也是 Linux)

bash

ftp 服务器IP  # 比如ftp 192.168.1.100
# 提示输入用户名(ftpuser)和密码,登录成功后:
put 本地文件路径  # 上传文件,比如put /home/test.txt
get 服务器文件路径 # 下载文件,比如get /home/ftpuser/log.txt
bye  # 退出FTP

1.3.7 常见问题排查

  • 连接失败?检查服务器防火墙是否开放 21 端口、10060-10090 端口;
  • 能登录不能上传?检查write_enable=YES是否配置,且用户有目录写权限;
  • 服务启动失败?查看日志cat /var/log/xferlog找错误原因。

二、iptables 防火墙:Linux 的 “安全门卫”

2.1 iptables 概述:啥是防火墙?

防火墙就像小区的 “门卫”—— 控制哪些人(IP)能进、哪些人不能进,哪些业务(端口)能对外提供服务。

2.1.1 Netfilter 与 iptables 的关系

  • Netfilter:Linux 内核里的 “防火墙引擎”(底层硬件),负责实际过滤数据包;
  • iptables:用户层的 “管理工具”(遥控器),用来告诉 Netfilter “怎么过滤”。简单说:iptables 是 “操作界面”,Netfilter 是 “执行机构”。

2.1.2 iptables 的特点

  • 基于内核,效率高;
  • 灵活:可定制复杂的过滤规则;
  • 免费开源,是 Linux 默认防火墙(CentOS 7 默认用 firewalld,也可装 iptables)。

2.2 iptables 的表与链结构:规则怎么存?

iptables 用 “表” 和 “链” 来组织规则 —— 可以理解为 “部门 + 流程”:

2.2.1 四张表(Tables):不同 “处理部门”

表名作用(通俗解释)常用程度
filter过滤数据包(允许 / 禁止访问)最高
nat地址转换(比如内网 IP 映射公网)
mangle修改数据包(比如改 TTL)
raw关闭数据包跟踪(提升性能)极低
👉 重点记 filter 表—— 日常用得最多。

2.2.2 五条链(Chains):数据包 “必经流程”

数据包在服务器里的流转,会经过 5 个固定 “节点”(链),规则就配置在链上:

  • INPUT:数据包进入服务器时(比如别人访问你的 22 端口);
  • OUTPUT:数据包从服务器出去时(比如你访问百度);
  • FORWARD:数据包转发时(比如服务器当路由器);
  • PREROUTING:路由前(比如 nat 表做端口映射);
  • POSTROUTING:路由后(比如 nat 表做地址转换)。👉 配图 6:数据包流向流程图,标注 5 条链的位置。

2.2.3 数据包流向与匹配顺序

  1. 数据包进来,先过 PREROUTING 链;
  2. 决定是否转发:转发走 FORWARD 链,不转发走 INPUT 链;
  3. 应用程序处理后,数据包出去走 OUTPUT 链;
  4. 最后过 POSTROUTING 链,离开服务器。

2.2.4 匹配流程:规则怎么执行?

  • 链上的规则按 “从上到下” 顺序执行;
  • 匹配到一条规则后,按规则的 “动作” 处理(比如 ACCEPT 允许、DROP 拒绝),不再往下匹配;
  • 没匹配到任何规则,按链的 “默认策略” 处理(比如 INPUT 默认 DROP,拒绝所有入站)。

2.3 iptables 基本操作命令(实战)

先装 iptables(CentOS 7 默认 firewalld,先禁用再装):

bash

systemctl stop firewalld  # 停止firewalld
systemctl disable firewalld  # 禁用firewalld
yum install iptables-services -y  # 装iptables
systemctl start iptables  # 启动iptables
systemctl enable iptables  # 开机自启

2.3.1 查看规则

bash

iptables -L  # 查看所有表所有链的规则(默认filter表)
iptables -L -n  # 用数字显示IP和端口(更快,推荐)
iptables -t filter -L INPUT  # 查看filter表INPUT链的规则

👉 配图 7:查看规则的截图,标注规则的动作、协议、端口。

2.3.2 添加规则(核心!)

规则动作:ACCEPT(允许)、DROP(拒绝,不提示)、REJECT(拒绝,提示错误)

实例 1:开放 22 端口(SSH 远程登录,必须开!)

bash

# 允许所有IP访问22端口(TCP协议)
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
  • -I:插入规则(插在链的最前面);
  • -p tcp:指定 TCP 协议;
  • --dport 22:目标端口(服务器的 22 端口);
  • -j ACCEPT:动作是允许。
实例 2:开放 FTP 端口(21 端口 + 被动模式端口段)

bash

iptables -I INPUT -p tcp --dport 21 -j ACCEPT  # 21命令端口
iptables -I INPUT -p tcp --dport 10060:10090 -j ACCEPT  # 被动模式端口段
实例 3:禁止某个 IP 访问(比如禁止 192.168.1.200 访问)

bash

iptables -I INPUT -s 192.168.1.200 -j DROP
  • -s 192.168.1.200:指定来源 IP。
实例 4:允许服务器访问外网(OUTPUT 链)

bash

iptables -I OUTPUT -j ACCEPT  # 允许所有出站流量

2.3.3 修改 / 删除规则

bash

# 查看规则编号(加--line-numbers)
iptables -L INPUT -n --line-numbers

# 删除INPUT链编号为3的规则
iptables -D INPUT 3

# 修改规则(比如把DROP改成ACCEPT)
iptables -R INPUT 2 -s 192.168.1.200 -j ACCEPT

2.4 规则保存与重启

添加的规则默认是 “临时的”,服务器重启就没了,必须保存:

bash

service iptables save  # 保存规则到/etc/sysconfig/iptables

重启 iptables:

bash

systemctl restart iptables

三、SELinux:Linux 的 “安全保险箱”

3.1 SELinux 概念:为啥需要它?

SELinux 是 “安全增强型 Linux”,相当于给 Linux 加了个 “保险箱”—— 即使黑客破解了账号密码,也很难越权访问文件(比如 Apache 服务不能访问 MySQL 的数据库文件)。

3.1.1 SELinux 的作用

举个例子:没有 SELinux 时,若 Apache 服务被黑客入侵,黑客能通过 Apache 访问服务器上所有文件;有 SELinux 时,Apache 只能访问自己 “被允许” 的文件(比如 /var/www/html),无法越权。

3.2 SELinux 的三种运行状态

SELinux 有 3 种状态,日常用前两种调试,禁用需谨慎:

状态作用(通俗解释)适用场景
Enforcing强制模式:严格执行策略,违规行为被阻止并记录生产环境(推荐)
Permissive宽容模式:不阻止违规,但记录日志调试服务(常用)
Disabled禁用模式:完全关闭 SELinux测试环境(不推荐)

3.3 状态查看与切换(实战)

3.3.1 查看 SELinux 状态

bash

getenforce  # 快速查看(输出Enforcing/Permissive/Disabled)
sestatus    # 详细查看(包括策略等信息)

👉 配图 8:查看状态的截图,标注当前状态。

3.3.2 临时切换状态(重启失效)

bash

setenforce 0  # 切换到Permissive模式(宽容)
setenforce 1  # 切换到Enforcing模式(强制)
# 注意:Disabled状态不能用setenforce切换,需改配置文件

3.3.3 永久切换状态(重启生效)

编辑配置文件/etc/selinux/config

bash

vim /etc/selinux/config

修改SELINUX参数:

ini

SELINUX=enforcing  # 强制模式
# SELINUX=permissive  # 宽容模式
# SELINUX=disabled   # 禁用模式

改完后,必须重启服务器才能生效:

bash

reboot

3.4 实用实例:解决 SELinux 导致的服务访问失败

问题:FTP 能登录,但不能上传文件(已开 iptables 端口,配置文件正确)
排查:
  1. 临时切换到宽容模式:setenforce 0
  2. 再试上传,若能上传,说明是 SELinux 阻止了;
  3. 查看 SELinux 日志,找被阻止的原因:

    bash

    cat /var/log/audit/audit.log | grep denied
    
  4. 解决:允许 FTP 服务写文件(用setsebool命令):

    bash

    setsebool -P ftpd_full_access on  # -P表示永久生效
    
  5. 切回强制模式:setenforce 1,上传正常。

四、SSH 密钥登录:Linux 远程登录 “免密又安全”

4.1 SSH 概述:远程登录的 “安全通道”

SSH 是 “安全外壳协议”,用来远程登录 Linux 服务器(替代不安全的 Telnet)。日常用两种登录方式:

  • 密码登录:输入用户名 + 密码(易被暴力破解);
  • 密钥登录:用 “密钥对” 登录(免输密码,更安全)。

4.2 密钥登录原理:“钥匙” 和 “锁” 的故事

  • 公钥(id_rsa.pub):像服务器上的 “锁”,可以公开;
  • 私钥(id_rsa):像你手里的 “钥匙”,必须保密;
  • 原理:把 “锁”(公钥)放到服务器上,登录时用 “钥匙”(私钥)解锁 —— 只有你的钥匙能开你的锁,别人没有钥匙就登不上。

4.3 密钥登录配置步骤(实战)

4.3.1 客户端生成密钥对(Windows/Linux 都可以)

以 Linux 客户端为例(Windows 用 Git Bash、Xshell 也能生成):

bash

ssh-keygen  # 生成密钥对

执行后按 3 次回车(默认路径、无密码短语),会在~/.ssh/目录下生成两个文件:

  • id_rsa:私钥(自己留着,千万别删!);
  • id_rsa.pub:公钥(要传到服务器)。👉 配图 9:生成密钥对的截图,标注密钥文件路径。

4.3.2 把公钥上传到服务器

ssh-copy-id命令(最简单,推荐):

bash

ssh-copy-id 用户名@服务器IP  # 比如ssh-copy-id root@192.168.1.100

输入服务器密码,回车后,公钥就会自动传到服务器的~/.ssh/authorized_keys文件里。

手动上传(若 ssh-copy-id 不可用):
  1. 把公钥文件传到服务器:
    scp ~/.ssh/id_rsa.pub root@192.168.1.100:/tmp/
    
  2. 登录服务器,把公钥添加到授权文件:
    cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys  # 必须改权限,否则登录失败
    rm -f /tmp/id_rsa.pub  # 删除临时文件
    

4.3.3 测试免密登录

客户端执行命令,不用输密码就能登录:

ssh 用户名@服务器IP  # 比如ssh root@192.168.1.100

4.3.4 禁用密码登录(可选,更安全)

若密钥登录正常,可禁用密码登录,防止暴力破解:

  1. 登录服务器,编辑 SSH 配置文件:

    bash

    vim /etc/ssh/sshd_config
    
  2. 修改以下参数:

    ini

    PasswordAuthentication no  # 禁用密码登录
    PubkeyAuthentication yes   # 启用密钥登录
    
  3. 重启 SSH 服务:

    bash

    systemctl restart sshd
    

4.4 常见问题排查

  • 免密登录失败?检查客户端私钥权限(600)、服务器 authorized_keys 权限(600);
  • 提示 “Permission denied”?查看服务器/var/log/secure日志找原因;
  • 密钥丢了?重新生成密钥对,再上传公钥到服务器。

总结

今天我们搞定了 Linux 4 个核心技能:FTP 传文件、iptables 防攻击、SELinux 提安全、SSH 免密登 —— 都是云计算小白必备的实操技能。记住 “理论 + 实例” 的学习方法,多动手敲命令、排错,很快就能熟练掌握!


技能核心命令 / 工具一句话记住
FTPvsftpd、FileZilla被动模式传文件,21 端口要开
iptablesiptables -I、service iptables save允许就 ACCEPT,拒绝就 DROP
SELinuxgetenforce、setenforce调试用宽容,生产用强制
SSH 密钥ssh-keygen、ssh-copy-id公钥放服务器,私钥自己留


更多推荐