一、安全加固概述
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
