《安全配置从默认开始》
第3章 操作系统安全配置(Linux)

3、操作系统安全配置(Linux):从默认到加固

Linux 系统的默认配置通常以“可用性”为首要目标,而非“安全性”。许多默认开启的服务、宽松的权限设置以及未加防护的网络端口,都可能成为攻击者的突破口。本课程将带领你从默认配置出发,逐步加固你的 Linux 系统。

🔒 Linux 安全配置核心领域 服务与端口 关闭无用服务 最小化原则 用户与权限 sudo / umask 最小权限 SSH 加固 密钥登录 禁用 Root 防火墙 iptables firewalld

3.1 Linux 默认服务与端口

安装完 Linux 系统后,许多服务默认处于运行状态。攻击者会扫描常见端口(如 22/SSH、80/HTTP、3306/MySQL)来寻找漏洞。安全的第一步是:只开启必要的服务。

服务名称 默认端口 风险说明 建议操作
SSH (sshd)22/TCP暴力破解、弱口令更换端口、密钥登录
FTP (vsftpd)21/TCP明文传输禁用或改用 SFTP
Telnet23/TCP完全明文、无加密立即禁用
CUPS (打印服务)631/TCP远程利用历史漏洞如无打印机则禁用
RPC / NFS111,2049信息泄露、未授权访问按需启用并限制来源
🔍 默认端口攻击面示意 Linux 服务器 攻击者 扫描端口: 22 (SSH) ⚠️ 21 (FTP) ⚠️ 23 (Telnet) ❌ 631 (CUPS) ⚠️

📌 检查与关闭服务命令

# 查看所有监听端口
ss -tlnp

# 查看服务状态
systemctl status vsftpd

# 停止并禁用服务(以FTP为例)
sudo systemctl stop vsftpd
sudo systemctl disable vsftpd

3.2 用户与权限管理(sudo、umask)

Linux 权限模型基于“用户-组-其他”。默认情况下,普通用户权限过大或 root 权限滥用是常见问题。我们需要通过 sudo 和 umask 来收紧权限。

3.2.1 sudo 精细化授权

不要直接使用 root 账户,而是通过 sudo 赋予特定用户执行特定命令的权限。

# 编辑 sudo 配置文件
sudo visudo

# 示例:允许用户 alice 无需密码执行 systemctl 管理服务
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl

# 示例:允许运维组执行所有命令,但需要密码
%ops ALL=(ALL) ALL

3.2.2 umask 默认权限掩码

umask 决定了新建文件和目录的默认权限。默认 umask 通常是 022(文件 644,目录 755),对于安全敏感环境,建议收紧为 027。

umask 值文件权限目录权限安全等级
022644 (rw-r--r--)755 (rwxr-xr-x)默认
027640 (rw-r-----)750 (rwxr-x---)✅ 推荐
077600 (rw-------)700 (rwx------)严格
🧮 umask 计算示例 (umask=027) 基础权限: 666 (文件) / 777 (目录) 减去 umask: 027 结果权限: 640 (文件) / 750 (目录) ✅

3.3 SSH 安全加固

SSH 是远程管理 Linux 的“大门”,也是最常被攻击的目标。默认配置下,允许 root 登录、使用密码认证,这些都是高危行为。

🔧 核心加固清单

  • 禁用 Root 登录: PermitRootLogin no
  • 仅允许密钥认证: PasswordAuthentication no
  • 更换默认端口: Port 2222(避免被批量扫描)
  • 限制登录用户: AllowUsers alice bob
  • 使用协议版本 2: Protocol 2
# 编辑 /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config

# 修改以下关键项:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers alice
Protocol 2

# 重启服务生效
sudo systemctl restart sshd
🔐 SSH 加固前后对比 ❌ 加固前(默认) 端口 22 / Root 可登录 密码认证 / 易被暴力破解 ➡️ ✅ 加固后 端口 2222 / 禁用 Root 密钥认证 / 限制用户

3.4 防火墙基础配置(iptables / firewalld)

防火墙是网络流量的“守门员”。Linux 提供了 iptables(传统)和 firewalld(动态防火墙)两种工具。对于初学者,推荐使用 firewalld,它更直观。

3.4.1 firewalld 快速配置

# 启动并启用 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 查看当前区域和规则
sudo firewall-cmd --list-all

# 允许 SSH(新端口 2222)
sudo firewall-cmd --permanent --add-port=2222/tcp

# 允许 HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 移除默认的 SSH 端口 22
sudo firewall-cmd --permanent --remove-service=ssh

# 重新加载配置
sudo firewall-cmd --reload

3.4.2 iptables 基础规则示例

# 清除默认规则
sudo iptables -F

# 设置默认策略:拒绝所有入站,允许出站
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许 SSH(端口 2222)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 允许 HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
🛡️ 防火墙包过滤流程 外部网络 防火墙 规则匹配 内部服务 ❌ 拒绝 ✅ 允许(匹配规则)

📋 本节小结

  • 服务与端口: 使用 ss -tlnp 检查,关闭一切非必要服务。
  • 用户与权限: 通过 sudo 限制 root 使用,设置 umask 027 收紧默认权限。
  • SSH 加固: 禁用密码和 root 登录,更换端口,使用密钥认证。
  • 防火墙: 采用“默认拒绝”策略,仅放行必要端口(如 SSH、Web)。

—— 专注课程资料整理