一、系统基础安全加固
1. 及时更新系统补丁
保持系统及软件包为最新版本,修复已知漏洞:
bash
# Debian/Ubuntu 系统
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
# RHEL/CentOS 系统
sudo yum update -y && sudo yum autoremove -y
# 启用自动更新(推荐服务器环境)
# Debian/Ubuntu: 安装 unattended-upgrades
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades # 交互式启用自动更新
# RHEL/CentOS: 使用 yum-cron
sudo yum install yum-cron -y
sudo systemctl enable --now yum-cron
二、用户与权限管理
1. 禁用 root 直接登录(核心!)
通过sshd_config
限制 root 直接登录,强制使用普通用户 +sudo
提权:
bash
sudo vim /etc/ssh/sshd_config
# 修改或添加以下配置
PermitRootLogin no # 禁止root直接登录
AllowUsers 用户名 # 只允许指定用户通过SSH登录(可选,更严格)
# 重启SSH服务生效
sudo systemctl restart sshd # Debian/Ubuntu
# 或
sudo systemctl restart sshd.service # RHEL/CentOS
2. 配置 sudo 权限与强密码策略
限制
sudo
用户:仅授权必要用户使用sudo
(通过visudo
编辑/etc/sudoers
):bash
sudo visudo # 添加一行(替换为你的用户名) 用户名 ALL=(ALL:ALL) ALL
强制强密码策略(通过
pam_pwquality
):bash
sudo vim /etc/pam.d/common-password # Debian/Ubuntu # 或 /etc/pam.d/system-auth # RHEL/CentOS # 在password requisite一行添加以下参数(示例): password requisite pam_pwquality.so minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 retry=3 # 含义:密码最小长度12,至少1个大写、1个小写、1个数字、1个特殊字符,最多重试3次
三、网络防火墙配置
1. 启用并配置防火墙
只开放必要端口(如 SSH 默认 22、HTTP 80 等),拒绝其他所有端口:
bash
# 方法1:使用 ufw(Debian/Ubuntu 常用,简单)
sudo ufw default deny incoming # 默认拒绝所有入站连接
sudo ufw default allow outgoing # 默认允许所有出站连接
sudo ufw allow 22/tcp # 允许SSH端口(若修改过SSH端口,替换为实际端口)
sudo ufw allow 80/tcp # 若需要HTTP服务(可选)
sudo ufw allow 443/tcp # 若需要HTTPS服务(可选)
sudo ufw enable # 启用防火墙
sudo ufw status # 查看规则
# 方法2:使用 firewalld(RHEL/CentOS 常用)
sudo systemctl enable --now firewalld
sudo firewall-cmd --set-default-zone=drop # 默认拒绝入站
sudo firewall-cmd --add-port=22/tcp --permanent # 允许SSH(永久生效)
sudo firewall-cmd --reload # 重载规则
2. 强化 SSH 安全
更改 SSH 默认端口(减少暴力破解尝试):
bash
sudo vim /etc/ssh/sshd_config # 修改 Port 22 为其他端口(如 2222) Port 2222 sudo systemctl restart sshd # 同时更新防火墙规则,允许新端口
禁用密码登录,强制使用 SSH 密钥认证:
bash
# 客户端生成密钥对(本地执行) ssh-keygen -t ed25519 # 生成更安全的ed25519密钥(替代rsa) # 将公钥上传到服务器(替换为服务器IP和用户名) ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP -p 端口号 # 服务器端禁用密码登录 sudo vim /etc/ssh/sshd_config PasswordAuthentication no # 禁用密码登录 PubkeyAuthentication yes # 启用密钥认证 sudo systemctl restart sshd
四、文件系统与权限控制
1. 限制敏感文件权限
确保/etc/passwd
、/etc/shadow
等关键文件权限正确:
bash
# 检查并修复权限
sudo chmod 644 /etc/passwd
sudo chmod 000 /etc/shadow # 仅root可读写
sudo chmod 700 /root # 限制root家目录权限
2. 禁用 SUID/SGID 权限(减少滥用风险)
查找并清理不必要的 SUID/SGID 文件(这些文件可临时获得高权限):
bash
# 查找所有SUID文件
find / -perm -4000 2>/dev/null
# 查找所有SGID文件
find / -perm -2000 2>/dev/null
# 对非必要文件,移除SUID/SGID权限(需谨慎,例如chmod、passwd等系统工具需要保留)
sudo chmod u-s /path/to/file # 移除SUID
sudo chmod g-s /path/to/file # 移除SGID
五、日志监控与审计
1. 配置日志集中管理
确保系统日志完整记录,便于追溯异常操作:
bash
# 检查日志服务状态(默认已启用)
sudo systemctl status rsyslog # Debian/Ubuntu
# 或 journald(所有系统通用)
sudo journalctl --disk-usage # 查看日志占用
# 监控关键日志(如SSH登录、sudo操作)
# 实时查看SSH登录日志
sudo tail -f /var/log/auth.log # Debian/Ubuntu
# 或 /var/log/secure # RHEL/CentOS
# 配置日志轮转(防止日志占满磁盘)
# 查看日志轮转配置:/etc/logrotate.d/ 目录下的文件
2. 安装审计工具(可选,适合高安全需求)
使用auditd
监控文件访问、系统调用等敏感操作:
bash
# 安装 auditd
sudo apt install auditd -y # Debian/Ubuntu
# 或 sudo yum install auditd -y # RHEL/CentOS
sudo systemctl enable --now auditd
# 示例:监控 /etc/passwd 文件的修改
sudo auditctl -w /etc/passwd -p rwxa -k passwd_changes
# 查看审计日志
sudo ausearch -k passwd_changes
六、其他安全措施
禁用不必要的服务:减少攻击面
bash
# 列出所有运行的服务 sudo systemctl list-unit-files --type=service --state=enabled # 禁用不需要的服务(例如cups、bluetooth等) sudo systemctl disable --now 服务名
启用 SELinux/AppArmor(强制访问控制,限制程序权限)
SELinux(RHEL/CentOS 默认启用):
bash
sudo setenforce 1 # 临时启用( enforcing 模式) sudo vim /etc/selinux/config # 永久启用(设置 SELINUX=enforcing)
AppArmor(Debian/Ubuntu 默认启用):
bash
sudo aa-status # 查看状态
定期备份数据:防止数据丢失或勒索攻击
bash
# 示例:使用 rsync 备份关键目录到外部存储 rsync -avz /etc /home /var/www 备份目录/