系统安全核心目标Linux系统安全的核心是保障系统“机密性、完整性、可用性”常见安全风险分类账号安全风险弱密码、默认账号未删除、权限分配过高、账号被盗用网络安全风险端口暴露、恶意端口扫描、DDoS攻击、未授权远程访问文件系统风险敏感文件权限过高、系统文件被篡改、恶意软件植入系统配置风险不必要的服务开启、防火墙未配置、内核漏洞未修复应用安全风险部署的应用如Web服务存在漏洞被利用入侵系统安全防护核心原则最小权限原则仅授予必要权限避免过度授权如普通用户不赋予root权限纵深防御原则多层面防护账号、网络、文件、应用单一防护失效后仍有其他屏障定期更新原则及时更新系统内核、软件包修复已知漏洞日志审计原则开启系统日志定期审计及时发现异常操作和入侵痕迹账号与权限安全账号安全配置禁用/删除无用账号Linux系统默认存在一些无用账号如bin、daemon、lp等这些账号若被利用可能带来安全风险需禁用或删除核心账号不可删除避免系统崩溃# 查看系统所有账号包括系统账号和普通账号 cat /etc/passwd # 查看可登录账号排除nologin的系统账号 cat /etc/passwd | grep -v nologin # 禁用账号不删除仅禁止登录推荐 usermod -L 用户名 # 锁定账号解锁用 usermod -U 用户名 # 删除无用账号确认无依赖后操作 userdel 用户名 # 仅删除账号保留家目录 userdel -r 用户名 # 删除账号及家目录彻底删除2.1.2 密码安全配置弱密码是账号被盗的主要原因需强制设置复杂密码并定期更换同时限制密码尝试次数# 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 retry3 minlen12 ucredit-1 lcredit-1 dcredit-1 ocredit-1 # 说明ucredit-1至少1个大写字母、lcredit-1至少1个小写字母、dcredit-1至少1个数字、ocredit-1至少1个特殊字符、retry3最多尝试3次 # 3. 限制SSH密码尝试次数防止暴力破解 vim /etc/ssh/sshd_config # 修改参数 MaxAuthTries 3 # 最多尝试3次超过则断开连接 MaxSessions 5 # 最大并发会话数减少恶意连接禁用root远程登录root是Linux最高权限账号若允许远程登录一旦密码泄露将导致系统完全被控制。建议禁用root远程登录通过普通用户sudo授权的方式管理系统# 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文件/目录权限分为读r4、写w2、执行x1对应所有者owner、所属组group、其他用户other三类对象权限配置需遵循“最小权限”# 查看文件/目录权限 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/sudoerssudo配置文件权限440避免被篡改 chmod 440 /etc/sudoers网络安全防护防火墙配置CentOS 8为例Linux防火墙firewalld是网络安全的第一道屏障需关闭不必要的端口仅开放服务所需端口如Nginx的80、443端口# 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所需80HTTP、443HTTPS端口 firewall-cmd --add-port80/tcp --permanent firewall-cmd --add-port443/tcp --permanent # 开放SSH所需22端口远程登录必备 firewall-cmd --add-port22/tcp --permanent # 4. 关闭不必要的端口 firewall-cmd --remove-port端口号/tcp --permanent # 5. 重新加载防火墙使配置生效 firewall-cmd --reload端口安全管理除了防火墙限制端口还需定期检查系统开放的端口排查异常端口可能是恶意程序开启# 查看所有监听端口包括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等这些服务可能存在漏洞且占用系统资源需禁用# 1. 查看系统正在运行的服务 systemctl list-unit-files --typeservice | 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_configSSH配置文件权限设为600仅root可读写/var/log/系统日志目录权限设为700仅root可访问防止日志被篡改# 锁定敏感文件防止被篡改锁定后无法修改解锁用chattr -i chattr i /etc/shadow chattr i /etc/passwd chattr i /etc/ssh/sshd_config # 查看文件是否被锁定 lsattr /etc/shadow # 显示有i标识说明已锁定系统更新与漏洞修复Linux系统和软件包会不断发现漏洞及时更新是修复漏洞的关键需定期执行更新命令# 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 # 仅安装安全补丁禁用不必要的内核功能部分内核功能可能被恶意利用 需禁用# 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.logNginx访问日志若部署了Nginx/var/log/nginx/error.logNginx错误日志若部署了Nginx日志查看常用命# 查看最近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 -nr5.2 应急处理流程当发现系统存在安全异常如账号被盗、恶意程序、数据被篡改需按以下流程处理 减少损失隔离系统立即断开服务器网络 防止恶意程序扩散 数据被窃取排查异常查看系统日志 进程 端口 定位异常原因清除威胁终止恶意进程 删除恶意程序 修改被盗账号密码 禁用异常账号修复漏洞更新系统和软件包 修复配置漏洞恢复服务确认威胁清除后 重新连接网络 恢复服务 检查数据完整性审计复盘记录应急处理过程 分析安全漏洞原因 优化防护措施 避免再次发生六、常见安全工具推荐chkrootkit检测系统是否被植入rootkit恶意后门程序命令chkrootkitrkhunter与chkrootkit功能类似 更全面的rootkit检测工具 命令rkhunter -cfail2ban防止SSH暴力破解 自动封禁多次登录失败的IP 需手动安装配置iptables传统防火墙工具CentOS 7及以下常用功能强大 可自定义复杂规则auditd系统审计工具 可详细记录文件访问 用户操作 便于后续审计和排查# 安装常用安全工具CentOS yum install -y chkrootkit rkhunter fail2ban auditd # 启动auditd审计服务 systemctl start auditd systemctl enable auditd