Linux系统加固

在当今数字化时代,Linux系统因其开源、灵活和高性能的特点,被广泛应用于服务器、云计算和嵌入式设备。然而,开放的特性也使其成为网络攻击的目标。系统加固(System Hardening)是提升Linux系统安全性的关键措施,旨在通过配置优化、权限控制和安全策略,降低安全风险,保护系统免受未经授权的访问和攻击。

一、Linux系统加固的基础

1.1 什么是系统加固?

系统加固是指通过一系列技术手段和配置调整,增强Linux系统的安全性,减少攻击面,防止未经授权的访问、数据泄露或系统破坏。加固的目标是确保系统在功能需求与安全性之间取得平衡,涵盖用户管理、文件权限、网络配置、软件更新和监控等多个方面。

1.2 为什么需要系统加固?

  • 应对安全威胁:Linux系统常用于关键业务(如Web服务器、数据库),容易成为黑客攻击目标,如DDoS、SQL注入或权限提升攻击。
  • 合规性要求:许多行业标准(如PCI-DSS、ISO 27001)要求对系统进行安全加固。
  • 减少攻击面:未加固的系统可能存在默认账户、不必要服务或弱密码等漏洞,增加被攻击的风险。
  • 保护数据安全:加固可以防止敏感数据(如用户信息、日志)泄露或被篡改。

1.3 系统加固的原则

  • 最小权限原则:仅授予用户和服务所需的最低权限。
  • 最小化原则:禁用不必要的服务、端口和软件,减少攻击入口。
  • 深度防御:通过多层次安全措施(如防火墙、加密、监控)提升防护能力。
  • 定期更新:及时修补已知漏洞,保持系统和软件的最新状态。
  • 持续监控:实时检测异常行为,快速响应安全事件。

二、Linux系统加固的核心方法

系统加固涉及多个层面,以下从用户管理、文件权限、网络安全、系统服务、日志监控等方面详细介绍。

2.1 用户和权限管理

2.1.1 删除或禁用不必要账户

默认安装的Linux系统可能包含不必要的用户账户(如games、news),应删除或禁用:

sudo userdel -r games
sudo usermod -L news

查看所有账户:

cat /etc/passwd
2.1.2 强化密码策略
  • 设置强密码要求:编辑/etc/login.defs:

    PASS_MIN_LEN 12
    PASS_MAX_DAYS 90
    PASS_MIN_DAYS 7
    PASS_WARN_AGE 14
    
  • 使用PAM模块:编辑/etc/security/pwquality.conf:

    minlen = 12
    dcredit = -1  # 至少1个数字
    ucredit = -1  # 至少1个大写字母
    lcredit = -1  # 至少1个小写字母
    ocredit = -1  # 至少1个特殊字符
    
2.1.3 限制root账户
  • 禁用root直接登录:编辑/etc/ssh/sshd_config:

    PermitRootLogin no
    

    重启SSH服务:

    sudo systemctl restart sshd
    
  • 使用sudo:为普通用户分配sudo权限,编辑/etc/sudoers:

    user1 ALL=(ALL) ALL
    
2.1.4 配置账户锁定

防止暴力破解,编辑/etc/security/faillock.conf:

deny = 5
unlock_time = 600

启用后,5次登录失败将锁定账户600秒。

2.2 文件系统安全

2.2.1 设置严格的文件权限
  • 检查关键文件权限:确保/etc/passwd、/etc/shadow等文件权限正确:

    sudo chmod 644 /etc/passwd
    sudo chmod 600 /etc/shadow
    
  • 限制目录访问:如限制/tmp目录:

    sudo chmod 1777 /tmp
    
2.2.2 使用不可变属性

防止关键文件被修改:

sudo chattr +i /etc/passwd

取消不可变属性:

sudo chattr -i /etc/passwd
2.2.3 启用文件系统配额

限制用户磁盘使用量,参考以下步骤:

  1. 在/etc/fstab中启用配额:

    /dev/sda2 /home ext4 defaults,usrquota,grpquota 0 2
    
  2. 初始化配额:

    sudo quotacheck -cug /home
    sudo quotaon /home
    
  3. 设置用户配额:

    sudo edquota user1
    

2.3 网络安全配置

2.3.1 配置防火墙

使用firewalld或iptables限制网络访问:

  • firewalld

    sudo systemctl enable firewalld
    sudo systemctl start firewalld
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --permanent --add-port=80/tcp
    sudo firewall-cmd --reload
    
  • iptables

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -A INPUT -j DROP
    sudo service iptables save
    
2.3.2 禁用不必要端口

检查开放端口:

sudo netstat -tuln

禁用不必要服务(如telnet):

sudo systemctl disable telnet
2.3.3 配置SSH安全
  • 更改默认端口:编辑/etc/ssh/sshd_config:

    Port 2222
    
  • 限制用户登录

    AllowUsers user1 user2
    
  • 启用密钥认证

    1. 生成密钥对:

      ssh-keygen -t rsa -b 4096
      
    2. 复制公钥到服务器:

      ssh-copy-id user1@server
      
    3. 禁用密码登录:

      PasswordAuthentication no
      

2.4 系统服务管理

2.4.1 禁用不必要服务

列出所有服务:

sudo systemctl list-unit-files --state=enabled

禁用不必要服务(如cups打印服务):

sudo systemctl disable cups
2.4.2 限制服务权限

使用systemd限制服务资源: 编辑/etc/systemd/system/nginx.service.d/override.conf:

[Service]
MemoryLimit=512M
CPUQuota=50%

重新加载配置:

sudo systemctl daemon-reload
sudo systemctl restart nginx

2.5 软件和系统更新

2.5.1 定期更新系统

保持系统和软件最新,修补已知漏洞:

  • Debian/Ubuntu

    sudo apt update && sudo apt upgrade -y
    
  • CentOS/RHEL

    sudo yum update -y
    
2.5.2 启用自动更新

配置自动安全更新(以Ubuntu为例):

sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

2.6 日志和监控

2.6.1 配置日志审计

使用auditd监控关键操作:

sudo apt install auditd
sudo systemctl enable auditd
sudo systemctl start auditd

添加审计规则,监控/etc/passwd:

sudo auditctl -w /etc/passwd -p wa -k passwd_changes
2.6.2 集中化日志管理

使用rsyslog或syslog-ng收集日志,配置远程日志服务器: 编辑/etc/rsyslog.conf:

*.* @logserver:514

重启服务:

sudo systemctl restart rsyslog
2.6.3 实时监控

使用Prometheus和Grafana监控系统:

  1. 安装node_exporter:

    sudo apt install prometheus-node-exporter
    
  2. 配置Grafana仪表盘,监控CPU、内存和磁盘使用情况。

2.7 入侵检测与防护

2.7.1 安装入侵检测系统(IDS)

使用AIDE监控文件完整性:

sudo apt install aide
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

定期检查:

sudo aide --check
2.7.2 配置Fail2Ban

防止暴力破解:

sudo apt install fail2ban

配置SSH防护,编辑/etc/fail2ban/jail.local:

[sshd]
enabled = true
port = 2222
maxretry = 5
bantime = 600

重启服务:

sudo systemctl restart fail2ban

2.8 内核和模块加固

2.8.1 限制内核参数

编辑/etc/sysctl.conf,添加:

# 禁用IP转发
net.ipv4.ip_forward = 0
# 启用SYN洪水防护
net.ipv4.tcp_syncookies = 1
# 限制core dump
fs.suid_dumpable = 0

应用配置:

sudo sysctl -p
2.8.2 禁用不必要内核模块

列出加载的模块:

lsmod

禁用模块(如USB存储):

echo "blacklist usb-storage" >> /etc/modprobe.d/blacklist.conf

2.9 使用SELinux或AppArmor

  • SELinux(CentOS/RHEL): 启用强制模式:

    sudo setenforce 1
    

    编辑/etc/selinux/config:

    SELINUX=enforcing
    
  • AppArmor(Ubuntu/Debian): 安装并配置:

    sudo apt install apparmor
    sudo systemctl enable apparmor
    

三、预防安全风险的措施

  1. 定期安全审计: 使用lynis进行系统安全扫描:

    sudo apt install lynis
    sudo lynis audit system
    
  2. 备份关键数据: 配置定期备份:

    0 2 * * * rsync -av /home /backup
    
  3. 员工培训: 提高运维人员的安全意识,避免弱密码或误操作。

  4. 漏洞扫描: 使用OpenVAS或Nessus定期扫描系统漏洞。

四、案例分析:典型场景下的系统加固

4.1 案例1:Web服务器加固

某公司运行Nginx服务器,需防止常见攻击。加固步骤:

  1. 禁用root登录,配置SSH密钥认证。

  2. 使用firewalld仅开放80和443端口:

    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
    
  3. 安装Fail2Ban,配置SSH和HTTP防护。

  4. 启用AppArmor,限制Nginx权限。

  5. 结果:抵御多次暴力破解尝试,系统安全性提升。

4.2 案例2:数据库服务器加固

一台MySQL服务器存储敏感数据,需加固。步骤:

  1. 设置强密码策略,禁用匿名用户:

    DROP USER ''@'localhost';
    
  2. 配置/etc/my.cnf:

    [mysqld]
    bind-address = 127.0.0.1
    
  3. 使用LVM快照备份数据库:

    sudo lvcreate -L 10G -s -n mysql_snap /dev/vg_name/lv_mysql
    
  4. 启用auditd监控数据库文件。

  5. 结果:数据库访问受限,数据安全性增强。

五、常见问题与注意事项

  1. 功能与安全的平衡:过度加固可能影响系统功能,需根据业务需求调整。
  2. 备份测试:加固前确保备份可用,避免配置错误导致数据丢失。
  3. 日志管理:定期清理日志,避免磁盘空间不足。
  4. 持续更新:关注CVE漏洞公告,及时修补系统。

六、总结

Linux系统加固是保障服务器安全的关键措施,涵盖用户管理、文件权限、网络安全、服务优化等多个方面。通过合理配置防火墙、SSH、SELinux/AppArmor等工具,结合定期更新和监控,可以显著降低安全风险。

更多技术分享,关注公众号:halugin

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐