Linux系统安全学习

系统安全核心目标

Linux系统安全的核心是保障系统"机密性、完整性、可用性"

常见安全风险分类

  • 账号安全风险:弱密码、默认账号未删除、权限分配过高、账号被盗用
  • 网络安全风险:端口暴露、恶意端口扫描、DDoS攻击、未授权远程访问
  • 文件系统风险:敏感文件权限过高、系统文件被篡改、恶意软件植入
  • 系统配置风险:不必要的服务开启、防火墙未配置、内核漏洞未修复
  • 应用安全风险:部署的应用(如Web服务)存在漏洞,被利用入侵系统

安全防护核心原则

  1. 最小权限原则:仅授予必要权限,避免过度授权(如普通用户不赋予root权限)

  2. 纵深防御原则:多层面防护(账号、网络、文件、应用),单一防护失效后仍有其他屏障

  3. 定期更新原则:及时更新系统内核、软件包,修复已知漏洞

  4. 日志审计原则:开启系统日志,定期审计,及时发现异常操作和入侵痕迹

账号与权限安全

账号安全配置

禁用/删除无用账号

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 应急处理流程

当发现系统存在安全异常(如账号被盗、恶意程序、数据被篡改)需按以下流程处理 减少损失

  1. 隔离系统:立即断开服务器网络 防止恶意程序扩散 数据被窃取

  2. 排查异常:查看系统日志 进程 端口 定位异常原因

  3. 清除威胁:终止恶意进程 删除恶意程序 修改被盗账号密码 禁用异常账号

  4. 修复漏洞:更新系统和软件包 修复配置漏洞

  5. 恢复服务:确认威胁清除后 重新连接网络 恢复服务 检查数据完整性

  6. 审计复盘:记录应急处理过程 分析安全漏洞原因 优化防护措施 避免再次发生

六、常见安全工具推荐

  • 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
相关推荐
我命由我123451 小时前
Git 创建新分支并推送到远程仓库
java·服务器·git·后端·学习·java-ee·学习方法
勇闯逆流河2 小时前
【Linux】基础开发工具(gcc/g++,makefile)
linux·运维·服务器
爱丽_2 小时前
Linux 目录结构与常用命令速查(服务器必备)
linux·运维·服务器
结网的兔子2 小时前
前端学习笔记(实战准备篇)——用vite构建一个项目【吐血整理】
前端·学习·elementui·npm·node.js·vue
Larry_Yanan2 小时前
QML学习笔记(六十四)动画相关:State状态、Transition过渡和Gradient渐变
开发语言·c++·笔记·qt·学习
ADHD多动联盟2 小时前
注意力缺陷是什么?主要有哪些应对策略和干预方法?
学习·学习方法·玩游戏
yatum_20142 小时前
集群节点时钟同步(NTP)配置手册
linux·分布式·hbase
hsg772 小时前
简述:openclaw应用二三事
人工智能·学习