系统安全及应用

简介

无论是企业的核心数据,还是个人的隐私信息,都高度依赖于计算机系统的安全保障。一旦系统安全出现漏洞,可能导致数据泄露、系统瘫痪等严重后果。今天,我们将深入探索系统安全及应用的关键领域,通过详细操作步骤、示例解析和原理剖析,帮助技术人员和运维人员掌握系统化的安全防护体系。

一、账号安全控制

用户账号是操作系统的“数字身份证”,其安全性直接决定了系统资源的访问权限。Linux系统通过多层机制实现账号的精细化管理,我们从基础措施到高级策略逐步拆解。

(一)基础安全措施

1. 系统账号清理

Linux系统在安装时会自动创建大量用于支撑服务的非登录用户(如​​bin​​​、​​daemon​​​、​​adm​​),这些账号的存在是系统正常运行的必要条件,但它们的登录权限必须被严格限制——禁止直接登录终端是核心原则

  • 查看非登录用户配置
    通过​​​/etc/passwd​​文件可查看用户的登录Shell设置,执行:
grep "/sbin/nologin" /etc/passwd

正常输出应类似:

bin:x:1:1:bin:/bin:/sbin/nologin  
daemon:x:2:2:daemon:/sbin:/sbin/nologin  
adm:x:3:4:adm:/var/adm:/sbin/nologin

其中​​/sbin/nologin​​​表示该用户无法通过终端登录,若发现某行被修改为​​/bin/bash​​等可登录Shell,需立即修正。

  • 锁定关键文件防止篡改
    为避免恶意用户篡改账号配置,可通过​​​chattr​​​命令为​​/etc/passwd​​​和​​/etc/shadow​​添加不可变属性
chattr +i /etc/passwd /etc/shadow

此时若尝试创建新用户(如​​useradd billgate​​​),会收到​​useradd: 无法打开/etc/passwd​​的错误提示,确保核心账号文件的完整性。

2. 密码安全控制

密码是账号安全的核心屏障,通过有效期管理强制修改策略,可显著提升破解难度。

  • 设置密码有效期(针对新用户&已有用户)
  • 全局策略(新用户):编辑​​/etc/login.defs​​,将密码最大有效期设为30天:
vi /etc/login.defs  
# 找到PASS_MAX_DAYS并修改  
PASS_MAX_DAYS   30
  • 单独用户调整(已有用户):使用​​chage​​​命令对指定用户(如​​lisi​​)生效:
chage -M 30 lisi  # -M参数指定最大有效期

当用户密码过期后,登录时会强制提示:

You are required to change your password immediately (root enforced)  
Changing password for username.  
(current) UNIX password:  # 输入旧密码  
New password:  # 输入新密码  
Retype new password:
  • 强制首次登录修改密码
    当批量创建用户或系统初始化时,可通过​​​chage -d 0​​​强制用户下次登录时重置密码。以​​zhangsan​​为例:
chage -d 0 zhangsan  # -d参数将密码最后修改时间设为0(过期状态)

登录流程如下:

Localhost login: zhangsan  
password:  # 输入初始密码(若有)  
You are required to change your password immediately (root enforced)  
Changing password for zhangsan.  
(current) UNIX password:  # 再次输入初始密码  
New password:  # 必须设置新密码  
Retype new password:

3. 命令历史与自动注销

Shell的命令历史记录(​​~/.bash_history​​)可能包含敏感信息(如明文密码、配置命令),结合记录条数限制自动清空机制可降低风险。

  • 限制历史命令记录条数
  • 全局设置(所有新用户):编辑​​/etc/profile​​​,将​​HISTSIZE​​从默认1000调至200:
vi /etc/profile  
# 添加或修改以下行  
HISTSIZE=200  
source /etc/profile  # 使配置立即生效(无需重新登录)
  • 当前用户临时设置:执行​​export HISTSIZE=200​​,仅对当前Shell会话有效。
  • 退出时自动清空历史记录
    在用户主目录的​​​~/.bash_logout​​中添加清空命令,用户退出时自动执行:
vi ~/.bash_logout  
# 添加以下两行  
history -c  # 清空历史记录  
clear  # 清空终端显示
  • 闲置超时自动注销
    通过​​​TMOUT​​变量设置终端闲置超时时间(单位:秒),防止无人值守时被非法操作:
vi /etc/profile  
# 添加  
export TMOUT=600  # 10分钟无操作自动注销  
source /etc/profile

注意:执行编译、配置修改等长耗时任务时,需先执行​​unset TMOUT​​取消超时限制。

(二)用户切换与提权

直接使用​​root​​​账号登录风险极高,通过​​su​​​和​​sudo​​实现权限分级,是Linux安全的核心设计。

1. su命令

​su​​​命令用于切换用户身份,但默认允许所有用户尝试切换(如暴力破解​​root​​​密码),通过​​pam_wheel​​​模块可严格限制允许使用​​su​​的用户。

  • 配置步骤
  1. 创建授权用户组:将允许使用​​su​​​的用户(如​​tsengyia​​​)加入​​wheel​​组:
gpasswd -a tsengyia wheel  
grep wheel /etc/group  # 验证成员:wheel:x:10:tsengyia
  1. 修改PAM认证配置:编辑​​/etc/pam.d/su​​​,取消​​auth required pam_wheel.so use_uid​​行的注释:
vi /etc/pam.d/su  
# 找到以下行,去掉开头的#  
#auth required pam_wheel.so use_uid  →  改为  
auth required pam_wheel.so use_uid
  1. 验证效果:未加入​​wheel​​​组的用户(如​​jerry​​​)尝试切换​​root​​时会失败:
[jerry@localhost ~]$ su - root  
密码:  # 输入root密码  
su: 拒绝权限
  • 日志审计:所有​​su​​​操作记录在​​/var/log/secure​​中,可通过关键词搜索:
grep "su" /var/log/secure  
# 示例输出:Aug 24 23:59:44 localhost su: Successful su for root by tsengyia

2. PAM认证

PAM(Pluggable Authentication Modules)是Linux的“认证中枢”,为​​login​​​、​​su​​​、​​ssh​​等服务提供统一的认证逻辑,其核心在于配置文件(​​/etc/pam.d/​​目录下)的灵活组合。

  • 认证流程解析
  1. 服务触发:当用户执行​​su​​命令时,服务程序调用PAM模块。
  2. 加载配置:读取​​/etc/pam.d/su​​文件,按行执行认证规则。
  3. 模块调用:调用​​/lib/security/​​​下的具体认证模块(如​​pam_wheel.so​​)。
  • 配置文件结构
    每行格式为:​​​类型 控制标志 模块[参数]​​​,以​​su​​的PAM配置为例:
auth sufficient pam_rootok.so  # root用户直接认证通过  
auth required pam_wheel.so use_uid  # 非root用户必须属于wheel组  
account sufficient pam_succeed_if.so uid=0 use_uid quiet  # 检查用户UID是否为0(root)
  • 控制标志
  • ​required​​:验证失败继续执行,但最终返回失败(用于记录日志)。
  • ​sufficient​​:验证成功则立即通过,无需后续检查。
  • ​requisite​​:验证失败立即终止,不执行后续规则。

3. sudo命令

​sudo​​​允许普通用户在授权范围内以​​root​​或其他用户身份执行命令,避免直接暴露超级用户密码,是生产环境的标配方案。

  • 核心配置文件/etc/sudoers​​ 使用​​​visudo​​​编辑(避免语法错误),授权格式为​​用户 主机=(目标用户) 命令列表​​,支持别名和通配符:
  • 基础授权示例
jerry localhost=/sbin/ifconfig  # jerry可在本地执行ifconfig  
%wheel ALL=NOPASSWD:ALL  # wheel组用户执行任何命令无需密码
  • 别名简化配置
User_Alias OPERATORS=jerry,tom,tsengyia  # 用户别名  
Host_Alias MAILSVRS=smtp,pop  # 主机别名  
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum  # 命令别名  
OPERATORS MAILSVRS=PKGTOOLS  # 组合授权:OPERATORS用户可在MAILSVRS主机执行PKGTOOLS命令
  • 排除特定命令
syrianer localhost=/sbin/*,! /sbin/ifconfig,! /sbin/route  # 允许/sbin/下除ifconfig和route外的所有命令
  • 安全日志记录
    启用​​​sudo​​​日志需在​​/etc/sudoers​​中添加:
Defaults logfile="/var/log/sudo"

日志格式示例:

Aug 24 23:59:44 :jerry : TTY=pts/0 ;PWD=/home/jerry ; USER=root ; COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24

包含用户、终端、工作目录、目标用户和执行命令,便于审计追溯。

  • 用户端操作
    授权用户执行命令时,只需在命令前加​​​sudo​​​,首次验证自己的密码(非​​root​​密码),5分钟内免重复验证:
[jerry@localhost ~]$ sudo /sbin/ifconfig ens33:0 192.168.1.11/24  
[sudo] password for jerry:  # 输入jerry的密码  
# 命令执行成功,修改IP地址

查看授权:​​sudo -l​​会列出该用户允许执行的所有命令。

二、系统引导和登录控制

即使服务器处于机房等物理安全环境,引导过程和终端登录的安全控制仍不可忽视,这是防止“物理入侵”的关键环节。

(一)开关机安全

GRUB(Grand Unified Bootloader)是Linux系统启动的第一步,若被恶意修改引导参数(如进入单用户模式获取root权限),将导致严重安全事件。通过设置GRUB密码可阻止未授权修改。

  • 配置步骤
  1. 生成加密密码(推荐使用​​grub2-setpassword​​,避免明文密码):
grub2-setpassword  # 交互式设置,输入用户名(如root)和密码

成功后会在​​/boot/grub2/​​​生成​​user.cfg​​,包含加密的密码哈希。

  1. 重建GRUB配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. 验证效果:重启后进入GRUB菜单,按​​E​​键编辑时会提示输入用户名和密码,否则无法修改引导参数。
(二)终端及登录控制

1. 禁止root用户从特定终端登录

​/etc/securetty​​​文件定义了允许root用户登录的终端,通过注释掉不需要的终端(如​​tty5​​​、​​tty6​​​),可限制root只能从安全终端(如​​tty1​​​-​​tty4​​)登录:

vi /etc/securetty  
# 注释以下行  
#tty5  
#tty6

若root尝试从​​tty5​​登录,系统会直接拒绝,提升本地登录的安全性。

2. 临时禁止普通用户登录(维护模式)

当服务器进行备份、升级等维护操作时,创建​​/etc/nologin​​文件可阻止普通用户登录(root仍可登录):

touch /etc/nologin

此时普通用户登录会收到提示:​​Login is disabled, please contact your system administrator​​。维护完成后,删除该文件或重启服务器即可恢复。

三、弱口令检测与端口扫描

被动防御之外,通过工具主动扫描风险是安全运维的必备技能,我们以John the Ripper和NMAP为例,演示实战操作。

(一)弱口令检测

作为开源密码破解工具,John支持多种加密算法,通过字典攻击暴力破解检测弱口令,是管理员的“密码审计利器”。

1. 准备工作:获取密码哈希

Linux的用户密码哈希存储在​​/etc/shadow​​(仅root可读),需复制到安全目录:

cp /etc/shadow /root/shadow.txt

2. 快速破解:默认字典扫描

进入John的运行目录(通常为​​/usr/share/john/run/​​),执行:

./john /root/shadow.txt

输出实时显示破解结果,如:

zhangsan (zhangsan)  # 用户名zhangsan,密码zhangsan(弱口令)  
123456 (kadmin)  # 密码为简单数字组合

按​​Ctrl+C​​​终止后,用​​--show​​查看所有结果:

./john --show /root/shadow.txt

3. 自定义字典攻击

使用更全面的字典文件(如​​password.lst​​)可提高破解成功率,指定字典路径:

./john --wordlist=/path/to/custom.dict /root/shadow.txt

管理员可通过收集常见弱口令(如​​password​​​、​​admin123​​)生成自定义字典,定期扫描用户密码。

(二)端口扫描

NMAP作为网络扫描的“瑞士军刀”,支持多种扫描类型,适用于从单主机到大规模网络的安全检测。

1. 基础扫描语法

nmap [扫描类型] [选项] <目标>  
# 示例:扫描单个IP、网段(192.168.4.0/24)、IP范围(192.168.4.100-200)

2. 常用扫描类型对比与示例

扫描类型

选项

特点

适用场景

TCP SYN扫描

​-sS​

半开扫描,仅发送SYN包,快速且隐蔽,避免完整连接

防火墙环境下的端口探测

TCP连接扫描

​-sT​

完整三次握手,准确性高,但易被日志记录

无防火墙的内部网络检测

UDP扫描

​-sU​

检测UDP服务,速度较慢,需管理员权限

发现DNS、DHCP等UDP服务

ICMP扫描

​-sP​

类似ping,快速判断主机存活,不扫描端口

网络普查,筛选存活主机

端口指定

​-p 21​

扫描特定端口(如FTP的21端口),支持多端口​​-p 21,22,80​​​或范围​​-p 1-100​

针对性服务检测

  • 示例1:本机端口检测
nmap 127.0.0.1  # 扫描TCP常用端口  
nmap -sU 127.0.0.1  # 扫描UDP常用端口

输出分析:​​STATE​​​列为​​open​​​表示端口开放,​​filtered​​​可能被防火墙阻止,​​closed​​为关闭。

  • 示例2:网段FTP服务扫描
nmap -p 21 192.168.4.0/24

结果显示该网段内所有开放21端口的主机,帮助发现未授权的FTP服务。

  • 示例3:存活主机发现
nmap -n -sP 192.168.4.0/24  # -n禁用DNS解析,加快扫描;-sP仅检测存活

快速定位网络中的活跃设备,为后续深度扫描做准备。

3.防火墙绕过与隐蔽扫描

对于启用防火墙的目标,可使用​​-sF​​​(FIN扫描)或​​-sX​​(Xmas扫描),利用RFC标准中“开放端口忽略异常标志位”的特性,间接判断端口状态:

nmap -sF 192.168.4.100  # 发送FIN包,关闭的端口会返回RST

四、总结

通过以上技术点的深度实践,我们可以构建一个覆盖账号管理-引导控制-弱口令检测-端口扫描的闭环安全体系。需注意:

  1. 最小权限原则:无论是​​su​​​的​​wheel​​​组控制,还是​​sudo​​的精准授权,都应遵循“按需分配,最小够用”。
  2. 定期审计:每周扫描弱口令、每月检查端口开放情况,结合日志分析异常登录行为。
  3. 动态更新:随着攻击手段升级,及时更新工具(如John的字典、NMAP的特征库)和系统补丁。

安全是一场永无止境的对抗,唯有将技术措施与运维规范相结合,才能在不断变化的威胁环境中守住系统安全的底线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值