《安全配置从默认开始》
第3章 操作系统安全配置(Linux)
3、操作系统安全配置(Linux):从默认到加固
Linux 系统的默认配置通常以“可用性”为首要目标,而非“安全性”。许多默认开启的服务、宽松的权限设置以及未加防护的网络端口,都可能成为攻击者的突破口。本课程将带领你从默认配置出发,逐步加固你的 Linux 系统。
3.1 Linux 默认服务与端口
安装完 Linux 系统后,许多服务默认处于运行状态。攻击者会扫描常见端口(如 22/SSH、80/HTTP、3306/MySQL)来寻找漏洞。安全的第一步是:只开启必要的服务。
| 服务名称 | 默认端口 | 风险说明 | 建议操作 |
|---|---|---|---|
| SSH (sshd) | 22/TCP | 暴力破解、弱口令 | 更换端口、密钥登录 |
| FTP (vsftpd) | 21/TCP | 明文传输 | 禁用或改用 SFTP |
| Telnet | 23/TCP | 完全明文、无加密 | 立即禁用 |
| CUPS (打印服务) | 631/TCP | 远程利用历史漏洞 | 如无打印机则禁用 |
| RPC / NFS | 111,2049 | 信息泄露、未授权访问 | 按需启用并限制来源 |
📌 检查与关闭服务命令
# 查看所有监听端口 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 值 | 文件权限 | 目录权限 | 安全等级 |
|---|---|---|---|
| 022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | 默认 |
| 027 | 640 (rw-r-----) | 750 (rwxr-x---) | ✅ 推荐 |
| 077 | 600 (rw-------) | 700 (rwx------) | 严格 |
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
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)。
—— 专注课程资料整理