系统安全及应用深度笔记
一、账号安全控制体系构建
(一)账户全生命周期管理
1. 冗余账户精细化治理
-  
非登录账户基线核查
Linux 系统默认创建的非登录账户(如bin、daemon、mail)承担系统服务支撑功能,其登录 Shell 必须强制设置为/sbin/nologin。通过以下命令批量核查:grep "/sbin/nologin" /etc/passwd | awk -F: '{print $1}'若发现异常账户(如 Shell 被修改为
/bin/bash),需立即排查是否存在非法篡改。 -  
动态账户清理策略
-  
临时账户处理
:对于安装程序生成的临时账户(如
gameslp),若确认无用可直接删除:
userdel -r games # -r选项递归删除宿主目录 -  
僵尸账户锁定
:对不确定是否需保留的账户,采用
usermod -L双向锁定(同时锁定密码和账户状态):
usermod -L -e "01/01/2020" zhangsan # 设置过期时间并锁定解锁时需同时清除过期时间:
usermod -U -e "" zhangsan 
 -  
 -  
账户配置文件免疫机制
使用chattr命令为账户核心文件添加不可变属性(+i),形成写保护:chattr +i /etc/passwd /etc/shadow /etc/group此时任何账户操作(包括
useradd、passwd)都会报错,解锁需管理员手动执行:chattr -i /etc/passwd /etc/shadow /etc/group 
2. 密码策略三维度强化
-  
时间维度:有效期梯度控制
-  
全局策略
:在
/etc/login.defs中配置默认密码策略,例如:
bas
PASS_MAX_DAYS 90 # 最大有效期90天 PASS_MIN_DAYS 7 # 最小修改间隔7天 PASS_WARN_AGE 14 # 过期前14天警告 -  
个体策略
:针对特权账户(如
root)设置更严格的有效期:
chage -M 30 -W 7 root # 30天强制修改,提前7天警告 
 -  
 -  
强度维度:复杂度校验
结合 PAM 模块实现密码复杂度检查,在/etc/pam.d/system-auth中添加:password requisite pam_cracklib.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 # 要求至少12位,包含大小写、数字违反策略时用户将收到明确提示:
密码必须包含至少1个大写字母、1个小写字母和1个数字。 -  
行为维度:强制密码重置
-  
首次登录重置
:新建用户时强制下次登录修改密码:
useradd -m jerry && chage -d 0 jerry -  
批量重置
:系统升级后要求所有用户重新设置密码:
awk -F: '$3>=1000' /etc/passwd | cut -d: -f1 | xargs -I {} chage -d 0 {} 
 -  
 
3. 会话安全深度加固
-  
历史命令防泄露
-  
记录量限制
:全局限制所有用户历史命令记录为 500 条(默认 1000 条):
echo "HISTSIZE=500" >> /etc/profile && source /etc/profile -  
敏感操作净化
:在用户
.bashrc中添加过滤规则,自动清除包含密码的命令:
export HISTIGNORE='*password*:*passwd*' 
 -  
 -  
智能超时机制
-  
动态超时
:根据会话活跃度自动调整超时时间(需结合脚本实现),基础配置为:
echo "export TMOUT=300" >> /etc/profile # 5分钟无操作自动注销 -  
例外场景
:在执行长时间任务(如编译代码)时,临时禁用超时:
trap '' SIGALRM # 忽略超时信号 
 -  
 
(二)权限管理矩阵模型
1. su 命令的最小权限控制
-  
wheel 组特权隔离
-  
用户加入
:将授权用户添加到
wheel组(GID=10):
gpasswd -a tsengyia wheel -  
配置激活
:编辑
/etc/pam.d/su,取消注释以下行以启用 wheel 组验证:
auth required pam_wheel.so use_uid # 仅wheel组成员可使用su -  
审计追踪
:su 操作记录存储在
/var/log/secure,可通过以下命令过滤:
grep "su:" /var/log/secure | grep "session opened" 
 -  
 
2. sudo 的 RBAC 模型实践
-  
细粒度授权示例
-  
单命令授权
:允许用户
jerry在本地执行
ifconfig(需输入自身密码):
visudo -c <<EOF jerry localhost=/sbin/ifconfig EOF -  
无密码授权
:允许
admin组用户无密码执行
systemctl%admin ALL=NOPASSWD: /usr/bin/systemctl 
 -  
 -  
复杂场景配置
-  
目录级授权
:允许用户
ops执行
/usr/local/bin/下的所有命令:
ops ALL=/usr/local/bin/* -  
排除特定命令
:禁止
dbadmin组执行
rm和
mv%dbadmin ALL=!/bin/rm, !/bin/mv 
 -  
 -  
审计与回溯
启用 sudo 日志记录至独立文件:echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers日志包含用户、终端、执行命令等信息,可通过
grep "COMMAND=" /var/log/sudo.log分析。 
二、系统引导与登录防护体系
(一)物理层与引导层安全
1. BIOS 安全基线配置
-  
引导策略锁定
-  
启动顺序:设置为
硬盘 > 光驱 > 网络 > U盘(不同品牌 BIOS 路径不同,通常在Boot菜单)。 -  
安全选项
:
Security Boot:启用防止未签名系统启动Set Supervisor Password:设置管理员密码(复杂度要求:8 位以上,含字母 + 数字)USB Legacy Support:禁用(防止 USB 设备启动)
 
 -  
 
2. GRUB2 安全加固
-  
加密密码生成
使用 PBKDF2 算法生成强密码(避免明文):grub2-mkpasswd-pbkdf2 输入密码: ****** 重新输入口令: ****** # 记录生成的哈希值 -  
配置文件修改
在/etc/grub.d/01_users中添加认证配置:cat << EOF set superusers="admin" export superusers password pbkdf2 admin <生成的哈希值> EOF重新生成 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg启动时按
E键编辑需输入密码,有效防止未授权内核参数修改(如单用户模式绕过认证)。 
(二)终端登录安全策略
1. root 账户登录限制
-  
安全终端定义
etc/securetty文件列出允许 root 登录的终端,默认包含
tty1-tty6。禁止远程登录时,需注释所有行:
# 原始内容 tty1 tty2 # 修改后(禁止所有本地终端登录) #tty1 #tty2此时 root 只能通过 SSH(需配合
PermitRootLogin no)或控制台带外管理登录。
 
2. 维护模式临时封锁
-  
紧急状态启用
创建
/etc/nologin文件后,普通用户登录时会看到:
The system is undergoing maintenance. Please try later.touch /etc/nologin # 立即生效-  
例外处理:root 用户仍可登录,用于紧急维护
 -  
自动清理
:可结合
systemd定时器,在维护窗口结束后自动删除文件:
cat /etc/systemd/system/nologin-cleanup.timer [Unit] Description=Cleanup nologin file[Timer] OnCalendar=2025-05-19 23:00:00 Persistent=true[Install] WantedBy=timers.target 
 -  
 
三、安全检测与监控技术
(一)弱口令深度检测(John the Ripper)
1. 分布式破解架构
-  
环境准备
-  
文件提取
:从目标服务器复制
/etc/shadow(需 root 权限)
scp root@target:/etc/shadow ./shadow.txt -  
权限处理:确保当前用户可读取该文件(需设置
chmod 600 shadow.txt) 
 -  
 
2. 进阶破解技巧
-  
混合攻击模式
使用规则文件(run/password.lst)结合用户名字典生成变体密码:./john --rules --wordlist=usernames.txt shadow.txt例如:用户名
jerry可能生成jerry123、Jerry!等变体。 -  
差异化字典策略
-  
行业字典:针对金融行业使用包含
bank、trade的专业字典 -  
自定义字典生成
:利用
crunch工具生成指定规则字典(如 8 位数字 + 字母):
crunch 8 8 -t @@@###%% -o custom.dict # 格式:3字母+3数字+2符号 
 -  
 
3. 结果分析与响应
-  
风险分级
- 高风险:纯数字 / 简单字符串(如
123456、admin) - 中风险:姓名拼音 + 数字(如
zhangsan2023) - 低风险:符合复杂度要求但被破解(需检查字典是否包含内部信息)
 
 - 高风险:纯数字 / 简单字符串(如
 -  
自动化响应脚本
破解完成后自动生成整改报告并通知管理员:./john --show shadow.txt | awk '{print "用户:"$2,"密码:"$1}' > weak_password_report.txt mail -s "弱口令检测报告" admin@example.com < weak_password_report.txt 
(二)网络服务安全扫描(NMAP)
1. 分层扫描策略
-  
第一层:存活主机发现
使用 ICMP 和 SYN 包混合探测,避免单一协议被防火墙过滤:nmap -sP -PE -PS21,80,443 192.168.1.0/24-PE:ICMP Echo 请求-PS:TCP SYN 包到指定端口
 -  
第二层:端口服务枚举
对存活主机进行全端口扫描(1-65535)并识别服务版本:nmap -p- -sV -O --script=vulners 192.168.1.100-sV:获取服务版本信息-O:操作系统指纹识别--script=vulners:同步检测已知漏洞
 -  
第三层:深度漏洞验证
针对高危端口(如 445、3389)执行脚本化攻击检测:nmap --script=smb-vuln-ms17-010,nmap-vulners 192.168.1.110 
2. 典型攻击场景模拟
-  
隐蔽扫描(绕过防火墙)
使用 FIN 扫描(-sF)和 Xmas 扫描(-sX)检测状态过滤型防火墙:nmap -sF -p 80,443 192.168.1.50 nmap -sX -p 1-1000 192.168.1.50- 开放端口对 FIN/Xmas 包无响应,关闭端口返回 RST 包
 
 -  
UDP 服务发现
扫描 DNS(53)、SNMP(161)等 UDP 服务,使用 - sU 选项并增加超时(-T4)nmap -sU -p 53,161 -T4 192.168.1.20 
3. 扫描结果处置流程
- 高危端口(如 22、3306)开放在外网:立即配置防火墙限制源 IP
 - 未授权服务(如 RPC 111、NetBIOS 139):关闭对应服务或迁移至内网
 - 过时软件版本:触发补丁升级流程(如
yum update httpd) - 可疑端口(如非标准端口运行自定义服务):启动入侵检测(如
tcpdump抓包分析) 
四、安全运营体系构建
(一)定期审计清单
| 检查项 | 频率 | 工具 / 命令 | 合规标准 | 
|---|---|---|---|
| 非登录账户 Shell 检查 | 每周 | grep nologin /etc/passwd | 全部为/sbin/nologin | 
| 弱口令检测 | 每月 | John the Ripper | 无复杂度不足密码 | 
| 开放端口核查 | 每季度 | nmap -p- localhost | 仅开放必要端口(如 22、80、443) | 
| GRUB 密码有效性验证 | 半年 | 重启测试 GRUB 密码输入 | 必须输入正确密码才能修改引导参数 | 
(二)应急响应预案要点
- 账户异常:发现未知账户立即锁定(
usermod -L)并检查/etc/passwd修改记录 - 密码泄露:强制所有用户修改密码,审计 sudo 日志排查权限滥用
 - 端口异常:使用
lsof -i :端口号定位进程,结合chkconfig关闭自启动服务 - 引导篡改:从应急启动盘(如 Ubuntu Live CD)恢复 GRUB 配置,重新生成
grub.cfg 
(三)安全意识培养
- 用户教育:定期培训密码安全(如 “8 字符以上 + 三要素组合”)、禁止共享账户
 - 管理员认证:要求掌握
chattr、pam、grub2等核心安全工具的高级用法 - 威胁情报:订阅 CVE 漏洞周报,建立
nmap脚本库实时更新检测规则 
五、总结:构建主动防御体系
系统安全是动态防御过程,需实现:
- 事前预防:通过账户清理、密码策略、引导保护构建准入防线
 - 事中检测:利用 John 和 NMAP 实现弱口令与端口暴露的实时监控
 - 事后响应:结合审计日志和应急流程快速处置安全事件
 
