1. 首页 > IT综合教程 > 正文

89. Linux系统安全加固培训

一、安全加固概述

Linux系统安全加固是指通过一系列配置和措施,提高Linux系统的安全性,防止未授权访问、数据泄露和系统入侵。

1.1 安全威胁

  • 未授权访问:通过弱密码、漏洞等方式获取系统访问权限
  • 数据泄露:敏感数据被窃取或篡改
  • 系统入侵:恶意代码或攻击者控制系统
  • 拒绝服务:系统资源被耗尽,无法提供服务
  • 权限提升:普通用户获取管理员权限

1.2 安全加固目标

  • 最小化攻击面
  • 加强访问控制
  • 提高系统监控能力
  • 及时修补漏洞
  • 建立安全审计机制

二、系统基础安全

2.1 系统更新

# CentOS/RHEL
sudo yum update -y

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

# 定期更新计划
# 添加到crontab
0 2 * * * /usr/bin/yum update -y > /var/log/yum-update.log 2>&1

# 或使用自动更新工具
# CentOS/RHEL
sudo yum install -y yum-cron
sudo systemctl enable yum-cron
sudo systemctl start yum-cron

# Ubuntu/Debian
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

2.2 用户与权限管理

# 禁用root远程登录
# 编辑/etc/ssh/sshd_config
PermitRootLogin no

# 重启SSH服务
sudo systemctl restart sshd

# 创建普通用户
sudo useradd -m -s /bin/bash admin

# 设置密码
sudo passwd admin

# 添加到sudo组
# CentOS/RHEL
sudo usermod -aG wheel admin

# Ubuntu/Debian
sudo usermod -aG sudo admin

# 配置sudo免密码(可选)
sudo visudo
# 添加:admin ALL=(ALL) NOPASSWD: ALL

# 锁定不必要的用户
sudo passwd -l nobody
sudo passwd -l system

# 检查用户
cat /etc/passwd

# 检查sudo权限
sudo -l

# 限制su命令
sudo groupadd suusers
sudo usermod -aG suusers admin

# 编辑/etc/pam.d/su
# 添加:auth required pam_wheel.so group=suusers

2.3 密码策略

# 编辑/etc/login.defs
PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_MIN_LEN    12
PASS_WARN_AGE   7

# 安装pam_cracklib
sudo yum install -y pam_cracklib  # CentOS/RHEL
sudo apt install -y libpam-cracklib  # Ubuntu/Debian

# 编辑/etc/pam.d/system-auth 或 /etc/pam.d/common-password
# 添加密码复杂度要求
password    required    pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

# 限制登录失败次数
sudo edit /etc/pam.d/system-auth  # CentOS/RHEL
sudo edit /etc/pam.d/common-auth  # Ubuntu/Debian

# 添加:
auth        required      pam_faillock.so preauth silent audit deny=5 unlock_time=300
auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=300
auth        sufficient    pam_unix.so try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=300

# 查看失败次数
sudo faillock

# 解锁用户
sudo faillock --user admin --reset

三、网络安全

3.1 防火墙配置

# 使用firewalld(CentOS 7+)
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 查看状态
sudo firewall-cmd --state

# 查看规则
sudo firewall-cmd --list-all

# 开放必要端口
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent

# 开放服务
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# 重新加载规则
sudo firewall-cmd --reload

# 使用ufw(Ubuntu/Debian)
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

# 查看状态
sudo ufw status

# 使用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 -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -j DROP

# 保存规则
# CentOS/RHEL
sudo service iptables save

# Ubuntu/Debian
sudo iptables-save > /etc/iptables/rules.v4

3.2 SSH安全配置

# 编辑/etc/ssh/sshd_config
# 更改SSH端口
Port 2222

# 禁用密码登录
PasswordAuthentication no

# 启用公钥登录
PubkeyAuthentication yes

# 限制登录用户
AllowUsers admin

# 禁用X11转发
X11Forwarding no

# 禁用DNS反向解析
UseDNS no

# 设置登录超时
LoginGraceTime 30

# 限制连接数
MaxStartups 10:30:60

# 重启SSH服务
sudo systemctl restart sshd

# 生成SSH密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

# 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub admin@server

# 测试无密码登录
ssh admin@server -p 2222

3.3 网络服务管理

# 查看监听端口
sudo netstat -tuln
sudo ss -tuln

# 禁用不必要的服务
sudo systemctl stop cups
sudo systemctl disable cups
sudo systemctl stop avahi-daemon
sudo systemctl disable avahi-daemon
sudo systemctl stop bluetooth
sudo systemctl disable bluetooth

# 查看系统服务
sudo systemctl list-unit-files --type=service | grep enabled

# 禁用IPv6(可选)
# 编辑/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# 应用配置
sudo sysctl -p

# 配置TCP安全参数
# 编辑/etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535

# 应用配置
sudo sysctl -p

四、文件系统安全

4.1 文件权限

# 检查关键文件权限
sudo find /etc -type f -perm -002 -exec ls -l {} \;
sudo find /etc -type f -perm -4000 -exec ls -l {} \;

# 设置关键文件权限
sudo chmod 600 /etc/shadow
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 600 ~/.ssh/authorized_keys

# 递归设置目录权限
sudo chmod -R 755 /usr/local
sudo chmod -R 700 /root

# 限制SUID/SGID文件
sudo find / -type f -perm -4000 -ls
sudo find / -type f -perm -2000 -ls

# 移除不必要的SUID/SGID权限
sudo chmod u-s /usr/bin/chfn
sudo chmod u-s /usr/bin/chsh

4.2 文件系统挂载选项

# 查看当前挂载
df -h

# 编辑/etc/fstab
# 添加挂载选项
/dev/sda1 / ext4 defaults,nosuid,nodev,noexec,relatime 0 1
/dev/sda2 /home ext4 defaults,nosuid,nodev,noexec,relatime 0 2
/dev/sda3 /tmp ext4 defaults,nosuid,nodev,noexec,relatime 0 2
/dev/sda4 /var ext4 defaults,nosuid,nodev,relatime 0 2

# 重新挂载
sudo mount -o remount /
sudo mount -o remount /home
sudo mount -o remount /tmp
sudo mount -o remount /var

# 验证挂载选项
sudo mount | grep ext4

4.3 敏感文件保护

# 备份敏感文件
sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 监控文件变化
sudo apt install -y aide  # Ubuntu/Debian
sudo yum install -y aide  # CentOS/RHEL

# 初始化AIDE
sudo aideinit

# 配置AIDE
# 编辑/etc/aide.conf

# 检查文件变化
sudo aide --check

# 更新AIDE数据库
sudo aide --update
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# 使用tripwire(商业软件)
# 安装tripwire
sudo apt install -y tripwire  # Ubuntu/Debian
sudo yum install -y tripwire  # CentOS/RHEL

# 初始化tripwire
sudo tripwire --init

# 检查文件变化
sudo tripwire --check

五、系统安全加固

5.1 SELinux配置

# 查看SELinux状态
getenforce

# 启用SELinux
sudo setenforce 1

# 永久启用SELinux
# 编辑/etc/selinux/config
SELINUX=enforcing

# 查看SELinux模式
sudo sestatus

# 查看SELinux上下文
ls -Z /var/www/html

# 设置SELinux上下文
sudo chcon -R -t httpd_sys_content_t /var/www/html

# 查看SELinux日志
sudo tail -f /var/log/audit/audit.log

# 生成SELinux规则
sudo audit2allow -a

# 安装SELinux管理工具
sudo yum install -y policycoreutils-python  # CentOS/RHEL
sudo apt install -y selinux-utils  # Ubuntu/Debian

# 管理SELinux布尔值
sudo getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on

5.2 PAM配置

# 查看PAM配置
sudo ls /etc/pam.d/

# 配置PAM认证
# 编辑/etc/pam.d/system-auth 或 /etc/pam.d/common-auth

# 添加登录限制
auth        required      pam_tally2.so onerr=fail audit silent deny=5 unlock_time=300

# 配置会话管理
# 编辑/etc/pam.d/system-session 或 /etc/pam.d/common-session

# 添加资源限制
session     required      pam_limits.so

# 编辑/etc/security/limits.conf
# 添加:
*               soft    nofile          65536
*               hard    nofile          65536
*               soft    nproc           4096
*               hard    nproc           4096

# 查看资源限制
ulimit -a

5.3 系统服务加固

# 查看系统服务
sudo systemctl list-unit-files --type=service

# 禁用不必要的服务
sudo systemctl stop postfix
sudo systemctl disable postfix
sudo systemctl stop rpcbind
sudo systemctl disable rpcbind
sudo systemctl stop nfs-server
sudo systemctl disable nfs-server
sudo systemctl stop samba
sudo systemctl disable samba

# 启用必要的服务
sudo systemctl start sshd
sudo systemctl enable sshd
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 检查服务状态
sudo systemctl status sshd
sudo systemctl status firewalld

# 配置系统启动项
sudo systemctl list-dependencies graphical.target
sudo systemctl list-dependencies multi-user.target

六、安全监控与审计

6.1 日志管理

# 查看系统日志
sudo tail -f /var/log/messages  # CentOS/RHEL
sudo tail -f /var/log/syslog    # Ubuntu/Debian

# 查看安全日志
sudo tail -f /var/log/secure    # CentOS/RHEL
sudo tail -f /var/log/auth.log  # Ubuntu/Debian

# 配置日志轮转
# 编辑/etc/logrotate.conf

# 配置rsyslog
# 编辑/etc/rsyslog.conf

# 发送日志到远程服务器
# 添加:
*.* @192.168.1.200:514

# 重启rsyslog
sudo systemctl restart rsyslog

# 使用journalctl
sudo journalctl

# 查看特定服务日志
sudo journalctl -u sshd

# 实时查看日志
sudo journalctl -f

# 清理日志
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M

6.2 入侵检测

# 安装OSSEC
sudo apt install -y ossec-hids  # Ubuntu/Debian
sudo yum install -y ossec-hids  # CentOS/RHEL

# 配置OSSEC
# 编辑/var/ossec/etc/ossec.conf

# 启动OSSEC
sudo systemctl start ossec-hids
sudo systemctl enable ossec-hids

# 查看OSSEC日志
sudo tail -f /var/ossec/logs/ossec.log

# 安装Fail2ban
sudo apt install -y fail2ban  # Ubuntu/Debian
sudo yum install -y fail2ban  # CentOS/RHEL

# 配置Fail2ban
# 复制配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 编辑/etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 3600
bantime = 3600

# 启动Fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 查看Fail2ban状态
sudo fail2ban-client status
sudo fail2ban-client status sshd

# 安装Wazuh(OSSEC的分支)
# 风哥教程参考官方文档:https://documentation.wazuh.com/

6.3 安全扫描

# 安装Nmap
sudo apt install -y nmap  # Ubuntu/Debian
sudo yum install -y nmap  # CentOS/RHEL

# 扫描开放端口
sudo nmap -sV fgedudb

# 扫描网络
sudo nmap -sV 192.168.1.0/24

# 安装OpenVAS/Greenbone
sudo apt install -y openvas  # Ubuntu/Debian
# 或使用Docker
# docker run -d -p 443:443 --name openvas mikesplain/openvas

# 安装Lynis
sudo apt install -y lynis  # Ubuntu/Debian
sudo yum install -y lynis  # CentOS/RHEL

# 运行安全扫描
sudo lynis audit system

# 查看扫描报告
cat /var/log/lynis.log

# 安装Chkrootkit
sudo apt install -y chkrootkit  # Ubuntu/Debian
sudo yum install -y chkrootkit  # CentOS/RHEL

# 检查rootkit
sudo chkrootkit

# 安装RKHunter
sudo apt install -y rkhunter  # Ubuntu/Debian
sudo yum install -y rkhunter  # CentOS/RHEL

# 检查rootkit
sudo rkhunter --check

七、应用安全

7.1 Web服务器安全

# Nginx安全配置
# 编辑/etc/nginx/nginx.conf
server {
    listen 80;
    server_name fgedu.net.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name fgedu.net.cn;
    
    ssl_certificate /etc/ssl/certs/fgedu.net.cn.crt;
    ssl_certificate_key /etc/ssl/private/fgedu.net.cn.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
    add_header Content-Security-Policy "default-src 'self'";
    
    location / {
        root /var/www/html;
        index index.html;
    }
}

# Apache安全配置
# 编辑/etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf
ServerTokens Prod
ServerSignature Off
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Content-Security-Policy "default-src 'self'"

# 重启服务
sudo systemctl restart nginx
sudo systemctl restart httpd  # CentOS/RHEL
sudo systemctl restart apache2  # Ubuntu/Debian

7.2 数据库安全

# MySQL/MariaDB安全
# 运行安全脚本
mysql_secure_installation

# 配置MySQL
# 编辑/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address = 127.0.0.1
sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
default-authentication-plugin = mysql_native_password

# 重启MySQL
sudo systemctl restart mysqld  # CentOS/RHEL
sudo systemctl restart mysql  # Ubuntu/Debian

# PostgreSQL安全
# 编辑/etc/postgresql/12/main/postgresql.conf
listen_addresses = 'fgedudb'

# 编辑/etc/postgresql/12/main/pg_hba.conf
local   all             postgres                                peer
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

# 重启PostgreSQL
sudo systemctl restart postgresql

7.3 容器安全

# Docker安全
# 安装Docker
sudo apt install -y docker.io  # Ubuntu/Debian
sudo yum install -y docker  # CentOS/RHEL

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

# 配置Docker守护进程
# 编辑/etc/docker/daemon.json
{
  "tls": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server.pem",
  "tlskey": "/etc/docker/server-key.pem",
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}

# 重启Docker
sudo systemctl restart docker

# 使用安全的基础镜像
docker pull alpine:latest

# 限制容器权限
docker run --cap-drop=ALL --security-opt=no-new-privileges -it alpine:latest

# 扫描容器镜像
sudo apt install -y clair  # Ubuntu/Debian
# 或使用Trivy
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image alpine:latest

# Kubernetes安全
# 配置RBAC
# 启用PodSecurityPolicy
# 使用网络策略
# 配置Secret管理

八、安全事件响应

8.1 安全事件分类

  • 系统入侵:未授权访问系统
  • 数据泄露:敏感数据被窃取
  • 拒绝服务:系统无法提供服务
  • 恶意代码:病毒、木马、勒索软件
  • 权限提升:普通用户获取管理员权限

8.2 事件响应流程

1. 检测与分析
   - 监控系统日志
   - 分析异常行为
   - 确认安全事件

2. 遏制与隔离
   - 隔离受影响系统
   - 限制网络访问
   - 暂停相关服务

3. 消除威胁
   - 移除恶意代码
   - 修补漏洞
   - 重置密码

4. 恢复系统
   - 从备份恢复数据
   - 重建系统
   - 验证系统完整性

5. 事后分析
   - 记录事件详情
   - 分析攻击路径
   - 更新安全策略

6. 预防措施
   - 加强安全配置
   - 定期安全扫描
   - 员工安全培训

8.3 应急响应工具

# 安装应急响应工具
sudo apt install -y forensic-tools  # Ubuntu/Debian
sudo yum install -y sleuthkit  # CentOS/RHEL

# 内存取证
dmidecode
lspci
free -h

# 磁盘取证
sudo fdisk -l
sudo df -h

# 网络取证
sudo netstat -antup
sudo ss -antup
sudo tcpdump -i eth0

# 进程分析
sudo ps aux
sudo top

# 文件分析
sudo find / -type f -mtime -1 -exec ls -l {} \;
sudo find / -type f -perm -4000 -exec ls -l {} \;

# 日志分析
sudo grep "Failed password" /var/log/auth.log
sudo grep "ERROR" /var/log/messages

# 网络流量分析
sudo apt install -y wireshark  # Ubuntu/Debian
sudo yum install -y wireshark  # CentOS/RHEL

# 恶意代码检测
sudo apt install -y clamav  # Ubuntu/Debian
sudo yum install -y clamav  # CentOS/RHEL
sudo freshclam
sudo clamscan -r /

九、最佳实践

安全领域 最佳实践
系统更新 定期更新系统和软件
用户管理 禁用root远程登录,使用sudo
密码策略 强密码,定期更换
网络安全 配置防火墙,限制开放端口
SSH安全 使用密钥登录,更改默认端口
文件系统 设置合理权限,使用挂载选项
SELinux 启用并正确配置
日志管理 集中存储,定期分析
入侵检测 安装并配置IDS/IPS
安全扫描 定期进行漏洞扫描
注意事项:

  • 定期更新系统和软件
  • 使用强密码策略
  • 限制用户权限
  • 配置防火墙规则
  • 启用入侵检测系统
  • 定期安全扫描
  • 备份重要数据
  • 建立安全事件响应机制
  • 员工安全培训
  • 遵循最小权限原则

十、总结

Linux系统安全加固是一个持续的过程,需要综合考虑多个方面。通过本培训文档,您应该掌握了:

  • 系统基础安全配置
  • 网络安全加固
  • 文件系统安全
  • 系统服务加固
  • 安全监控与审计
  • 应用安全配置
  • 安全事件响应
  • 安全最佳实践

通过实施这些安全措施,可以显著提高Linux系统的安全性,减少安全风险。

更多学习教程公众号风哥教程itpux_com

IT运维培训文档系列 | 第89篇 | Linux系统安全加固培训

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息