一、系统基础安全加固

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

六、其他安全措施

  1. 禁用不必要的服务:减少攻击面

    bash

    # 列出所有运行的服务
    sudo systemctl list-unit-files --type=service --state=enabled
    # 禁用不需要的服务(例如cups、bluetooth等)
    sudo systemctl disable --now 服务名
    

  2. 启用 SELinux/AppArmor(强制访问控制,限制程序权限)

    • SELinux(RHEL/CentOS 默认启用):

      bash

      sudo setenforce 1  # 临时启用( enforcing 模式)
      sudo vim /etc/selinux/config  # 永久启用(设置 SELINUX=enforcing)
      

    • AppArmor(Debian/Ubuntu 默认启用):

      bash

      sudo aa-status  # 查看状态
      

  3. 定期备份数据:防止数据丢失或勒索攻击

    bash

    # 示例:使用 rsync 备份关键目录到外部存储
    rsync -avz /etc /home /var/www 备份目录/