当前位置:首页>Linux>Linux 安全实践指南

Linux 安全实践指南

  • 2026-10-11 08:15:04
Linux 安全实践指南



第 1 部分 —— 安全基础

这部分介绍安全基础操作和启动配置,服务器安装后应立即执行这些步骤(Day 0 setup)。


1. 系统更新

安全的第一步是打补丁,绝不要在装有过期软件包的服务器上运行服务。

# Debian / Ubuntu
sudo apt update && sudo apt upgrade -y

# RHEL / CentOS / AlmaLinux
sudo yum update -y


2. 用户管理

永远不要以 root 身份登录或运行应用程序,请创建一个具备管理员权限的普通用户。

# 创建用户 'oz',带 home 目录和 bash shell
sudo useradd -m -s /bin/bash oz

# 设置强密码
sudo passwd oz

# 授予 sudo 权限
# Debian/Ubuntu:
sudo usermod -aG sudo oz

# RHEL/CentOS:
sudo usermod -aG wheel oz


3. 密码策略

强制用户定期更换密码,并让长期不用的账户过期。

# 查看用户 'oz' 当前密码过期策略
sudo chage -l oz

# 强制每 90 天修改一次密码
sudo chage -M 90 oz

# 账户闲置 30 天后锁定
sudo chage -I 30 oz


4. 锁定 Root 账户

当 sudo 用户配置完成后,锁定 root 账户以防止直接登录。

# 锁定 root 账户(禁用密码登录)
sudo passwd -l root

# (可选)如确有必要可解锁:
# sudo passwd -u root


5. SSH 基础安全配置

编辑 /etc/ssh/sshd_config 来加固 SSH。

修改前务必备份配置:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

打开配置文件:

sudo nano /etc/ssh/sshd_config

关键配置项:

Port 2222                   # 修改默认端口(“通过隐藏达到安全性”)
PermitRootLogin no          # 最重要的一行!
PasswordAuthentication no   # 如果使用 SSH Key,建议关闭密码登录
PermitEmptyPasswords no     # 禁止空密码
MaxAuthTries 3              # 失败 3 次后断开连接
LoginGraceTime 60           # 超过 60 秒未登录成功则断开

应用配置:

sudo systemctl restart sshd


6. 防火墙基础

先关闭所有入口,再开放需要的端口。

方案 A:UFW(Ubuntu/Debian,简单易用)

# 1. 默认拒绝所有入站连接
sudo ufw default deny incoming

# 2. 允许所有出站流量
sudo ufw default allow outgoing

# 3. 放行 SSH(如果第 5 步改了端口,请同步修改)
sudo ufw allow 2222/tcp

# 4. 放行 Web 流量(如果需要)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 5. 启用防火墙
sudo ufw enable

方案 B:Firewalld(RHEL/CentOS)

# 添加 SSH 端口(如果使用自定义端口)
sudo firewall-cmd --permanent --add-port=2222/tcp

# 重载防火墙
sudo firewall-cmd --reload


7. 禁用无用服务

减少攻击面,关闭不需要的服务。

# 查看所有已启用服务
systemctl list-unit-files --state=enabled

# 停止并禁用服务(例如不需要 postfix)
sudo systemctl stop postfix
sudo systemctl disable postfix


8. 文件权限基础

统一权限设置,防止未授权访问。

# 755: 所有者(RWX),组(R-X),其他(R-X)
# 适用于目录/脚本
chmod 755 script.sh

# 644: 所有者(RW),组(R),其他(R)
# 适用于配置文件
chmod 644 config.yaml

# 600: 所有者(RW),其他(None)
# 私钥必须使用(非常重要)
chmod 600 id_rsa


9. 时间同步

如果时间戳错误,日志基本没有意义。确保 NTP 正常运行。

# 启用 NTP 时间同步
sudo timedatectl set-ntp on

# 查看状态
timedatectl status


10. 检查活动会话

维护系统前,先确认是否还有其他用户在线。

# 当前谁在线?
w

# 最近登录记录,如果last不支持用
# lslogins -o USER,LAST-LOGIN,LAST-TTY
#
last -n 10

# 登录失败记录(检查暴力破解)
# 如果lastb不支持用
# journalctl -u ssh | grep "Failed password"
sudo lastb -n 10


11. Shell 历史记录清理

不要在历史记录中留下敏感命令(例如 CLI 中传递的密码)。

# 清空当前会话历史
history -c

# 永久清空历史文件
cat /dev/null > ~/.bash_history

# 当前会话不记录历史
export HISTSIZE=0


第 2 部分 —— 高级技巧

这部分介绍可产品环境使用的工具与配置,把你的服务器打造成安全堡垒。


12. 精细化sudo 权限

用sudo精确控制权限,不要直接编辑 /etc/sudoers,必须使用 visudo,否则语法错误可能导致 sudo 完全失效。

sudo visudo

常见配置:

# 1. 免密码 sudo(谨慎使用,适合自动化脚本)
# 用户 deploy 无需密码即可执行所有命令
deploy ALL=(ALL) NOPASSWD: ALL

# 2. 命令限制(最小权限原则)
# 用户 junior 只能重启 nginx
junior ALL=(ALL) /usr/bin/systemctl restart nginx

# 3. 用户组权限
# sysadmin 组拥有完整权限
%sysadmin ALL=(ALL) ALL


13. 高级 SSH 安全

不要再依赖密码。使用 SSH Key + 多因素认证(MFA)。


步骤 A:强制仅允许 SSH Key 登录

在执行前,请确保已经用 ssh-copy-id 上传公钥。

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no


步骤 B:启用 2FA(Google Authenticator)

增加第二层防护。

sudo dnf install libpam-google-authenticator
google-authenticator

按照屏幕提示完成配置。


14. 入侵防护(Fail2Ban)

自动封禁恶意行为 IP(如暴力破解)。

# 安装
sudo dnf install fail2ban -y

# 创建本地配置(不要直接改 jail.conf)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

关键配置:

[sshd]
enabled = true
port    = ssh(或你的自定义端口 2222)
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h

重启并检查状态:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd


15. 不可变文件(chattr)

让关键文件不可删除,甚至 root 也不行。

# 锁定文件(Immutable 位)
sudo chattr +i /etc/passwd

# 查看属性(注意是否有 'i')
lsattr /etc/passwd

# 尝试删除(会失败)
rm /etc/passwd

# 解锁文件(编辑前必须解除)
sudo chattr -i /etc/passwd


16. ACL 访问控制列表

当传统 chmod(用户/组/其他)不够用时。

# 单独给用户 john 授予 rwx 权限,
# 不受文件所有者影响
setfacl -m u:john:rwx /var/www/html/index.php

# 删除 ACL
setfacl -x u:john /var/www/html/index.php

# 查看 ACL
getfacl /var/www/html/index.php


17. 端口与 Socket 审计

检测后门或异常监听端口。

# 查看所有监听端口(TCP/UDP)及对应 PID
sudo ss -tulpn

# 谁占用了 8080 端口?
sudo lsof -i :8080

# 按进程监控网络带宽
sudo nethogs eth0


18. 内核加固(sysctl)

增强网络栈,防御 IP 欺骗与中间人攻击。

sudo nano /etc/sysctl.conf

添加/取消注释:

# 禁用 IP 转发(如果不是路由器)
net.ipv4.ip_forward = 0

# 忽略 ICMP Echo(禁止 Ping 响应,隐藏主机)
net.ipv4.icmp_echo_ignore_all = 1

# 防止 IP Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用 IPv6(如果不用)
net.ipv6.conf.all.disable_ipv6 = 1

立即生效:

sudo sysctl -p


19. 进程限制

通过限制资源防止 DoS(拒绝服务攻击)。

编辑:

nano /etc/security/limits.conf

示例:

# 用户 oz 最多只能创建 50 个进程
oz hard nproc 50

# 提高数据库用户文件打开数限制
postgres soft nofile 4096
postgres hard nofile 10240


20. 日志分析与取证

在海量日志中找到关键线索。

# 实时监控认证日志
tail -f /var/log/auth.log

# 仅查看 SSH 服务日志
journalctl -u sshd --since "1 hour ago"

# 只查看错误和严重级别日志
journalctl -p err -b


21. Rootkit 扫描

自动化安全审计。

# 安装 RKHunter
sudo dnf install rkhunter -y

# 更新数据库
sudo rkhunter --propupd

# 执行检查
sudo rkhunter --check


22. Cron 任务安全

恶意软件常通过计划任务实现重启后持久化。

# 查看当前用户 cron
crontab -l

# 检查系统级 cron(重点检查这些目录)
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
cat /etc/crontab


23. 法律警告 Banner

吓退脚本小子,同时增加法律效力。

# 编辑 Banner 文件
sudo nano /etc/issue.net

添加类似内容:

上帝在看着你,未经许可登入系统会被全程记录,直接移交司法系统。

启用 SSH Banner:

sudo nano /etc/ssh/sshd_config

添加/取消注释:

Banner /etc/issue.net

重启sshd

sudo systemctl restart sshd



本文内容不需要死记硬背,把本文加入书签,或者打印出来备用。



参考

https://medium.com/the-tech-notes/linux-security-cheat-sheet-0fd019ef4fcf

最新文章

随机文章