系统安全核心目标
Linux系统安全的核心是保障系统"机密性、完整性、可用性"
常见安全风险分类
- 账号安全风险:弱密码、默认账号未删除、权限分配过高、账号被盗用
- 网络安全风险:端口暴露、恶意端口扫描、DDoS攻击、未授权远程访问
- 文件系统风险:敏感文件权限过高、系统文件被篡改、恶意软件植入
- 系统配置风险:不必要的服务开启、防火墙未配置、内核漏洞未修复
- 应用安全风险:部署的应用(如Web服务)存在漏洞,被利用入侵系统
安全防护核心原则
-
最小权限原则:仅授予必要权限,避免过度授权(如普通用户不赋予root权限)
-
纵深防御原则:多层面防护(账号、网络、文件、应用),单一防护失效后仍有其他屏障
-
定期更新原则:及时更新系统内核、软件包,修复已知漏洞
-
日志审计原则:开启系统日志,定期审计,及时发现异常操作和入侵痕迹
账号与权限安全
账号安全配置
禁用/删除无用账号
Linux系统默认存在一些无用账号(如bin、daemon、lp等),这些账号若被利用可能带来安全风险,需禁用或删除(核心账号不可删除,避免系统崩溃)
bash
# 查看系统所有账号(包括系统账号和普通账号)
cat /etc/passwd
# 查看可登录账号(排除nologin的系统账号)
cat /etc/passwd | grep -v nologin
# 禁用账号(不删除,仅禁止登录,推荐)
usermod -L 用户名 # 锁定账号,解锁用 usermod -U 用户名
# 删除无用账号(确认无依赖后操作)
userdel 用户名 # 仅删除账号,保留家目录
userdel -r 用户名 # 删除账号及家目录(彻底删除)
2.1.2 密码安全配置
弱密码是账号被盗的主要原因,需强制设置复杂密码,并定期更换,同时限制密码尝试次数
bash
# 1. 设置密码复杂度(编辑/etc/login.defs文件)
vim /etc/login.defs
# 修改以下参数:
PASS_MAX_DAYS 90 # 密码最长有效期(90天,定期更换)
PASS_MIN_DAYS 7 # 密码最短修改间隔(7天,避免频繁修改)
PASS_MIN_LEN 12 # 密码最小长度(12位)
PASS_WARN_AGE 7 # 密码过期前7天提醒
# 2. 强制密码复杂度(安装pam_cracklib模块,CentOS默认安装)
vim /etc/pam.d/system-auth
# 添加以下行(在password sufficient pam_unix.so之后)
password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
# 说明:ucredit=-1(至少1个大写字母)、lcredit=-1(至少1个小写字母)、dcredit=-1(至少1个数字)、ocredit=-1(至少1个特殊字符)、retry=3(最多尝试3次)
# 3. 限制SSH密码尝试次数(防止暴力破解)
vim /etc/ssh/sshd_config
# 修改参数:
MaxAuthTries 3 # 最多尝试3次,超过则断开连接
MaxSessions 5 # 最大并发会话数,减少恶意连接
禁用root远程登录
root是Linux最高权限账号,若允许远程登录,一旦密码泄露,将导致系统完全被控制。建议禁用root远程登录,通过普通用户+sudo授权的方式管理系统
bash
# 1. 先创建一个普通用户(用于远程登录和管理)
useradd admin # 创建admin用户
passwd admin # 为admin设置复杂密码
# 2. 给普通用户授予sudo权限(编辑/etc/sudoers文件)
vim /etc/sudoers
# 添加以下行(在root ALL=(ALL) ALL下方)
admin ALL=(ALL) ALL # admin用户可执行所有root命令(需输入自身密码)
# 可选:免密sudo(谨慎使用,适合信任环境)
# admin ALL=(ALL) NOPASSWD: ALL
# 3. 禁用root远程登录(编辑SSH配置文件)
vim /etc/ssh/sshd_config
# 修改参数:
PermitRootLogin no # 禁用root远程登录
# 重启SSH服务生效
systemctl restart sshd
权限管理
Linux文件/目录权限分为读(r=4)、写(w=2)、执行(x=1),对应所有者(owner)、所属组(group)、其他用户(other)三类对象,权限配置需遵循"最小权限"
bash
# 查看文件/目录权限
ls -l 文件名/目录名 # 输出格式:权限 所有者 所属组 大小 时间 名称
# 修改文件/目录所有者和所属组
chown 所有者:所属组 文件名/目录名 # 例:chown admin:admin /home/admin
chgrp 所属组 文件名/目录名 # 仅修改所属组
# 修改权限(数字法,推荐)
chmod 755 文件名 # 所有者rwx(7),所属组r-x(5),其他r-x(5)(适合可执行文件)
chmod 644 文件名 # 所有者rw-(6),所属组r--(4),其他r--(4)(适合普通文件)
chmod 700 目录名 # 仅所有者可读写执行(适合敏感目录,如/home/admin)
# 关键权限配置(必做)
# 1. /etc/passwd(用户信息文件):权限644,禁止写入
chmod 644 /etc/passwd
# 2. /etc/shadow(密码加密文件):权限400,仅root可读
chmod 400 /etc/shadow
# 3. /etc/sudoers(sudo配置文件):权限440,避免被篡改
chmod 440 /etc/sudoers
网络安全防护
防火墙配置(CentOS 8为例)
Linux防火墙(firewalld)是网络安全的第一道屏障,需关闭不必要的端口,仅开放服务所需端口(如Nginx的80、443端口)
bash
# 1. 查看防火墙状态
systemctl status firewalld # 运行中为active(running)
# 启动/停止/重启防火墙
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 设置开机自启(推荐)
systemctl enable firewalld
# 2. 查看已开放端口
firewall-cmd --list-ports
# 查看已开放服务
firewall-cmd --list-services
# 3. 开放必要端口(永久开放,需重新加载生效)
# 开放Nginx所需80(HTTP)、443(HTTPS)端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
# 开放SSH所需22端口(远程登录必备)
firewall-cmd --add-port=22/tcp --permanent
# 4. 关闭不必要的端口
firewall-cmd --remove-port=端口号/tcp --permanent
# 5. 重新加载防火墙,使配置生效
firewall-cmd --reload
端口安全管理
除了防火墙限制端口,还需定期检查系统开放的端口,排查异常端口(可能是恶意程序开启)
bash
# 查看所有监听端口(包括TCP和UDP)
netstat -tulnp # -t(TCP)、-u(UDP)、-l(监听)、-n(数字显示)、-p(显示进程)
# 或使用ss命令(更高效)
ss -tulnp
# 排查异常端口:
# 1. 查看端口对应的进程,确认是否为正常服务
netstat -tulnp | grep 异常端口号
# 2. 若为未知进程,查看进程详情
ps -ef | grep 进程ID
# 3. 确认是恶意进程后,终止进程并删除对应的程序
kill -9 进程ID # 强制终止进程
禁止不必要的网络服务
Linux系统默认开启一些不必要的服务(如telnet、ftp、rpcbind等),这些服务可能存在漏洞,且占用系统资源,需禁用
bash
# 1. 查看系统正在运行的服务
systemctl list-unit-files --type=service | grep enabled # 查看开机自启的服务
systemctl status 服务名 # 查看单个服务状态
# 2. 禁用不必要的服务(以telnet为例)
systemctl stop telnet # 停止当前服务
systemctl disable telnet # 禁止开机自启
# 常见需禁用的服务:
# telnet(远程登录,不安全,推荐用SSH)
# ftp(文件传输,不安全,推荐用sftp)
# rpcbind(远程过程调用,非必要不开启)
# cups(打印服务,服务器无需开启)
文件系统与系统配置安全
敏感文件保护
Linux系统中部分文件存储着敏感信息(如密码、配置),需加强保护,防止被篡改或读取
- /etc/shadow:存储用户密码加密信息,权限设为400,仅root可读
- /etc/passwd:存储用户基本信息,权限设为644,禁止普通用户写入
- /etc/ssh/sshd_config:SSH配置文件,权限设为600,仅root可读写
- /var/log/:系统日志目录,权限设为700,仅root可访问,防止日志被篡改
bash
# 锁定敏感文件,防止被篡改(锁定后无法修改,解锁用chattr -i)
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/ssh/sshd_config
# 查看文件是否被锁定
lsattr /etc/shadow # 显示有i标识,说明已锁定
系统更新与漏洞修复
Linux系统和软件包会不断发现漏洞,及时更新是修复漏洞的关键,需定期执行更新命令
bash
# CentOS/RHEL系统(yum包管理器)
yum update -y # 更新所有软件包(包括内核)
yum upgrade -y # 升级系统版本(与update类似,更彻底)
# Ubuntu/Debian系统(apt包管理器)
apt update # 更新软件包列表
apt upgrade -y # 更新所有软件包
# 查看已安装的内核版本
uname -r
# 安装安全补丁(仅更新安全相关补丁,不更新其他软件)
yum install -y yum-security # 安装安全更新工具
yum update-minimal --security -y # 仅安装安全补丁
禁用不必要的内核功能
部分内核功能可能被恶意利用 需禁用
bash
# 1. 禁用SUID/SGID权限(避免恶意程序通过SUID获取高权限)
# 查找系统中所有带SUID/SGID权限的文件
find / -type f \( -perm -4000 -o -perm -2000 \) -print0 | xargs -0 ls -l
# 对不必要的文件,取消SUID/SGID权限(如find命令)
chmod u-s /usr/bin/find
chmod g-s /usr/bin/find
# 2. 禁止ICMP ping响应(防止被扫描)
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
sysctl -p # 生效配置
# 3. 禁用IP转发(防止系统被用作路由器,被恶意利用)
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
sysctl -p
日志审计与应急处理
系统日志配置与查看
Linux系统日志记录了所有用户操作、系统事件和异常情况,是排查安全问题的重要依据,需开启并定期审计
常见日志文件位置
- /var/log/secure:记录用户登录、sudo操作、SSH登录等安全相关日志(最常用)
- /var/log/messages:记录系统整体运行日志,包括服务启动、系统错误等
- /var/log/nginx/access.log:Nginx访问日志(若部署了Nginx)
- /var/log/nginx/error.log:Nginx错误日志(若部署了Nginx)
日志查看常用命
bash
# 查看最近100行安全日志(排查登录异常)
tail -100 /var/log/secure
# 实时监控安全日志(实时查看新的登录和操作)
tail -f /var/log/secure
# 查找失败的登录记录(排查暴力破解)
grep "Failed password" /var/log/secure
# 查找成功的登录记录(查看正常登录情况)
grep "Accepted password" /var/log/secure
# 统计登录失败次数最多的IP(可能是恶意IP)
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
5.2 应急处理流程
当发现系统存在安全异常(如账号被盗、恶意程序、数据被篡改)需按以下流程处理 减少损失
-
隔离系统:立即断开服务器网络 防止恶意程序扩散 数据被窃取
-
排查异常:查看系统日志 进程 端口 定位异常原因
-
清除威胁:终止恶意进程 删除恶意程序 修改被盗账号密码 禁用异常账号
-
修复漏洞:更新系统和软件包 修复配置漏洞
-
恢复服务:确认威胁清除后 重新连接网络 恢复服务 检查数据完整性
-
审计复盘:记录应急处理过程 分析安全漏洞原因 优化防护措施 避免再次发生
六、常见安全工具推荐
- chkrootkit:检测系统是否被植入rootkit(恶意后门程序)命令:chkrootkit
- rkhunter:与chkrootkit功能类似 更全面的rootkit检测工具 命令:rkhunter -c
- fail2ban:防止SSH暴力破解 自动封禁多次登录失败的IP 需手动安装配置
- iptables:传统防火墙工具(CentOS 7及以下常用)功能强大 可自定义复杂规则
- auditd:系统审计工具 可详细记录文件访问 用户操作 便于后续审计和排查
bash
# 安装常用安全工具(CentOS)
yum install -y chkrootkit rkhunter fail2ban auditd
# 启动auditd审计服务
systemctl start auditd
systemctl enable auditd