简介
无论是企业的核心数据,还是个人的隐私信息,都高度依赖于计算机系统的安全保障。一旦系统安全出现漏洞,可能导致数据泄露、系统瘫痪等严重后果。今天,我们将深入探索系统安全及应用的关键领域,通过详细操作步骤、示例解析和原理剖析,帮助技术人员和运维人员掌握系统化的安全防护体系。
一、账号安全控制
用户账号是操作系统的“数字身份证”,其安全性直接决定了系统资源的访问权限。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
的用户。
- 配置步骤
- 创建授权用户组:将允许使用
su
的用户(如tsengyia
)加入wheel
组:
gpasswd -a tsengyia wheel
grep wheel /etc/group # 验证成员:wheel:x:10:tsengyia
- 修改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
- 验证效果:未加入
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/
目录下)的灵活组合。
- 认证流程解析
- 服务触发:当用户执行
su
命令时,服务程序调用PAM模块。 - 加载配置:读取
/etc/pam.d/su
文件,按行执行认证规则。 - 模块调用:调用
/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密码可阻止未授权修改。
- 配置步骤
- 生成加密密码(推荐使用
grub2-setpassword
,避免明文密码):
grub2-setpassword # 交互式设置,输入用户名(如root)和密码
成功后会在/boot/grub2/
生成user.cfg
,包含加密的密码哈希。
- 重建GRUB配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
- 验证效果:重启后进入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扫描 | | 半开扫描,仅发送SYN包,快速且隐蔽,避免完整连接 | 防火墙环境下的端口探测 |
TCP连接扫描 | | 完整三次握手,准确性高,但易被日志记录 | 无防火墙的内部网络检测 |
UDP扫描 | | 检测UDP服务,速度较慢,需管理员权限 | 发现DNS、DHCP等UDP服务 |
ICMP扫描 | | 类似ping,快速判断主机存活,不扫描端口 | 网络普查,筛选存活主机 |
端口指定 | | 扫描特定端口(如FTP的21端口),支持多端口 | 针对性服务检测 |
- 示例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
四、总结
通过以上技术点的深度实践,我们可以构建一个覆盖账号管理-引导控制-弱口令检测-端口扫描的闭环安全体系。需注意:
- 最小权限原则:无论是
su
的wheel
组控制,还是sudo
的精准授权,都应遵循“按需分配,最小够用”。 - 定期审计:每周扫描弱口令、每月检查端口开放情况,结合日志分析异常登录行为。
- 动态更新:随着攻击手段升级,及时更新工具(如John的字典、NMAP的特征库)和系统补丁。
安全是一场永无止境的对抗,唯有将技术措施与运维规范相结合,才能在不断变化的威胁环境中守住系统安全的底线。