云计算小白入门:Linux 核心服务实战(FTP+iptables+SELinux+SSH)
云计算小白入门: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 主动模式:服务器主动 “送文件”
- 类比:你(客户端)打给快递员(服务器)说 “要寄文件”(命令连接),快递员挂了电话,主动上门取件(服务器主动发起数据连接)。
- 流程:
- 客户端连服务器 21 端口(命令端口),发指令;
- 服务器从 20 端口(数据端口)主动连客户端的随机端口,传文件。
1.2.2 被动模式:服务器 “等你取文件”
- 类比:你(客户端)打给快递员(服务器)说 “要取文件”(命令连接),快递员说 “文件放驿站 10086 号柜,自己来取”(服务器开放随机端口),你去驿站取件(客户端主动连服务器随机端口)。
- 流程:
- 客户端连服务器 21 端口,发 “被动模式” 指令;
- 服务器开放一个随机端口(比如 10086),告诉客户端;
- 客户端连服务器 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)
- 下载安装 FileZilla;
- 打开后,输入:主机(服务器 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 数据包流向与匹配顺序
- 数据包进来,先过 PREROUTING 链;
- 决定是否转发:转发走 FORWARD 链,不转发走 INPUT 链;
- 应用程序处理后,数据包出去走 OUTPUT 链;
- 最后过 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 端口,配置文件正确)
排查:
- 临时切换到宽容模式:
setenforce 0; - 再试上传,若能上传,说明是 SELinux 阻止了;
- 查看 SELinux 日志,找被阻止的原因:
bash
cat /var/log/audit/audit.log | grep denied - 解决:允许 FTP 服务写文件(用
setsebool命令):bash
setsebool -P ftpd_full_access on # -P表示永久生效 - 切回强制模式:
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 不可用):
- 把公钥文件传到服务器:
scp ~/.ssh/id_rsa.pub root@192.168.1.100:/tmp/ - 登录服务器,把公钥添加到授权文件:
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 禁用密码登录(可选,更安全)
若密钥登录正常,可禁用密码登录,防止暴力破解:
- 登录服务器,编辑 SSH 配置文件:
bash
vim /etc/ssh/sshd_config - 修改以下参数:
ini
PasswordAuthentication no # 禁用密码登录 PubkeyAuthentication yes # 启用密钥登录 - 重启 SSH 服务:
bash
systemctl restart sshd
4.4 常见问题排查
- 免密登录失败?检查客户端私钥权限(600)、服务器 authorized_keys 权限(600);
- 提示 “Permission denied”?查看服务器
/var/log/secure日志找原因; - 密钥丢了?重新生成密钥对,再上传公钥到服务器。
总结
今天我们搞定了 Linux 4 个核心技能:FTP 传文件、iptables 防攻击、SELinux 提安全、SSH 免密登 —— 都是云计算小白必备的实操技能。记住 “理论 + 实例” 的学习方法,多动手敲命令、排错,很快就能熟练掌握!
| 技能 | 核心命令 / 工具 | 一句话记住 |
|---|---|---|
| FTP | vsftpd、FileZilla | 被动模式传文件,21 端口要开 |
| iptables | iptables -I、service iptables save | 允许就 ACCEPT,拒绝就 DROP |
| SELinux | getenforce、setenforce | 调试用宽容,生产用强制 |
| SSH 密钥 | ssh-keygen、ssh-copy-id | 公钥放服务器,私钥自己留 |
更多推荐
所有评论(0)