目录
一、账户安全控制
避免因账户信息泄露或权限滥用导致系统被入侵、数据丢失或被篡改,确保系统稳定运行和数据安全。
1. 基本安全措施
(1)系统账号清理
- 概述:为确保系统安全,设置限制一些用户登录(禁用、锁定等),通常 /sbin/nologin 表示禁止终端登录
- 锁定解锁用户(通过passwd、usermod 命令)
usermod -L <username> //锁定账户 passwd -S <username> //查看账户状态 usermod -U <username> //解锁账户 userdel -r <username> # -r 删除用户及家目录 usermod -s /sbin/nologin <username> #限制登录shell(替代删除) ##锁定的是密码,可以通过改密码解锁
若服务器中的账户已固定,不再更改,采取锁定账号配置文件。可使用 chattr(修改属性)命令,结合“+i” “-i”( “i” 属性通常表示文件不可更改),实现锁定、解锁文件(彻底更改,root权限也无法进入);lsattr 是查看文件锁定情况
-
/etc/passwd
:用户账号信息 -
/etc/shadow
:用户密码哈希
(2)密码安全控制
- 概念:通过策略强制用户设置高强度密码,限制密码使用周期。
- 作用:防止弱密码被暴力破解,提升账户认证安全性。
- 能做什么?强制密码复杂度(大小写 + 数字 + 特殊字符),限制密码有效期(如 30 天更换一次)
-
# 1. 修改密码策略(全局配置) vi /etc/login.defs ------------------------ PASS_MAX_DAYS 90 # 密码最长有效期 PASS_MIN_DAYS 7 # 密码最短修改间隔 PASS_MIN_LEN 8 # 密码最小长度 PASS_WARN_AGE 14 # 密码过期前提醒天数 # 2. 使用 pam_pwquality 模块增强密码复杂度(CentOS/RHEL) vi /etc/security/pwquality.conf ------------------------ minlen = 12 # 密码最小长度 dcredit = -1 # 至少包含 1 个数字 ucredit = -1 # 至少包含 1 个大写字母 lcredit = -1 # 至少包含 1 个小写字母 ocredit = -1 # 至少包含 1 个特殊字符 # 3. 强制用户下次登录修改密码 chage -d 0 <username> #chage (修改有效期),密码分最短有效期和最初有效期;-M (改已有的用户)、-d (强制)
(3)命令历史、自动注销
- 合理设置命令历史记录策略,避免敏感操作记录泄露;设置自动注销时间,防止用户离开后会话被他人利用。
# 1. 限制命令历史记录条数 vi /etc/profile # 全局配置 (适用于新登录用户) 这个文件用于设置系统级的环境变量和启动脚本,对整个系统的所有用户生效 ------------------------ HISTSIZE=50 # 内存中保存的历史命令数量 HISTFILESIZE=100 # 历史文件最大记录数 export TMOUT=300 # 设置 300 秒无操作自动注销 [root@localhost ~]# export TMOUT=600 //适用于当前用户 # 2. 立即生效配置 source /etc/profile # 3. 清除当前用户的命令历史 history -c # 清空内存中的历史 rm ~/.bash_history # 删除历史文件 vi ~/.bash_logout //也可以修改文件,实现自动清空 history -c clear
2. 用户切换与提权
(1)su 命令的用法
su 命令用于切换用户身份,从当前用户切换到其他用户,如普通用户切换到 root 用户。
su - user2 # 完整环境切换(需目标用户密码)
su -c "vim /etc/hosts" user3 # 单命令执行
加强 su 命令的使用控制:
# 限制su使用(wheel组)
groupadd -a 用户 wheel #添加授权用户XX
grep wheel /etc/group #确定wheel组成员
vi /etc/pam.d/su ##借助pam_wheel认证模板,修改/etc/pam.d/认证配置启用pam_wheel认证
#%PAM-1.0
auth sufficient pam_rootok.so ...//省略部分内容
auth required pam_wheel.so use_uid //去掉此行开头的#号
...//省略部分内容
未加入wheel组的成员将无法使用 su 命令
(2)PAM 认证
概述:即可插拔认证模块,模块化认证框架,为系统提供灵活的认证机制,可根据需求配置不同的认证方式(如密码认证、指纹认证等)。
PAM工作流程: 应用 → PAM配置 → 认证模块(如pam_unix.so) → 结果
关键配置文件:
-
/etc/pam.d/login
:登录认证 -
/etc/pam.d/sshd
:SSH认证 -
/etc/pam.d/su
:su切换控制
PAM 认证原理:
-
PAM认证的顺序:Service(服务)--PAM(配置文件)--pam_*.so
-
先确定服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(/lib/security)进行安全认证
-
用户访问服务器时,服务器的某个服务程序把用户的请求发送到PAM模块进行认证
ls /etc/pam.d/ | grep su #查看su是否支持PAM模块认证 cat /etc/pam.d/su #查看文件内容 每一行都是一个独立的认证过程: 每一行可以区分为三个字段:1.认证类型 2.控制类型 3.PAM 模块及其参数 1.认证管理:接受用户名和密码,进而进行认证 2.账户管理:检查账户是否被允许登录系统,是否已经过期,是否有时间段的限制等 3.密码管理:主要用于修改用户的密码 4.会话管理:主要提供对会话的管理和记账
控制标志 行为描述 典型场景 required 模块必须成功,失败最终导致认证失败 基础密码认证 sufficient 模块成功立即通过,失败可被后续模块覆盖 二次认证(如OTP) optional 模块结果仅作参考 日志记录模块 include 包含其他配置文件 复用通用认证
3. sudo 命令——提升执行权限
为什么要做提权?
普通用户权限有限,部分系统关键操作(如修改系统配置文件)需要更高权限,通过提权可在保障安全的前提下让普通用户执行特定的高权限操作。
(1)在配置文件/etc/sudoers 中添加授权
# 安全编辑(语法检查)
visudo
# 用户/组 主机=(目标用户) 可执行命令(绝对路径)
<USER/Group> <HOST>=([TARGET_USER]) <COMMANDS>
# 授权格式
<用户> <主机名>= (<命令别名>) [NOPASSWD:] <命令路径>
# 示例:
%webadmins ALL=(root) /usr/bin/systemctl restart nginx, /usr/sbin/nginx -t
常用参数:
-
NOPASSWD
: 执行时无需密码 -
(root)
: 以root身份运行
(2)通过 sudo 执行特权命令
特权命令程序一般位于/sbin、/usr/sbin 等目录下,普通用户执行使用绝对路径
# 查看sudo日志
tail -f /var/log/auth.log | grep sudo
# 日志示例:
Aug 1 10:00:00 server sudo: alice : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/apt update
#查看哪些用户有sudo授权
sudo -l
二、系统引导和登录控制
- 概念:系统引导和登录控制是对系统启动过程和用户登录过程进行安全管理的操作。
- 作用:防止非法用户通过修改引导参数进入系统,限制特定用户登录,降低系统被入侵风险。
1. 开关机安全控制
(1)调整 BIOS 引导设置
- 操作步骤:开机时按特定按键(如 Del、F2 等,不同品牌主板按键不同)进入 BIOS 设置界面,在 “Boot” 选项中设置引导顺序,优先从安全可靠的设备(如硬盘)引导,其他的禁用,设为“Disabled”;设置 BIOS 密码,防止他人随意修改引导设置。
(2)限制更改 GRUB 引导参数
- 操作步骤:修改 GRUB 配置文件权限,例如在 Linux 系统中,可通过命令chmod 600 /etc/default/grub限制文件读写权限,仅允许 root 用户修改;同时,对 GRUB 启动菜单设置密码保护,防止非法用户修改启动参数。
- 设置密码步骤:
grub2-mkpasswd-pdkdf2 //根据提示指定密码 # 输入并确认密码,生成类似以下的哈希值: # grub.pbkdf2.sha512.10000.XXXXXXXX. ##系统引导程序相关的配置文件boot/grub2/grub.cfg;备份 cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak ##系统启动相关的重要文件,生成的密码在这个文件里;备份 cp /etc/grub.d/00_header /etc/grub.d/00_header.bak vim /etc/grub.d/01_users 在文件添加内容上一步生成的哈希值(格式以外,其他可删除): cat << EOF set superusers="admin" # 管理员用户名(可自定义) password_pbkdf2 admin <密码哈希> EOF
grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的grub.cfg配置文件
通过以上配置,重启进入GRUB菜单时,按E键将无法修改引导参数,若要编辑必须输入正确的密码。
2. 终端及登录控制
(1)禁止 root 用户登录
禁止 root 本地终端登录
# 方法1:修改PAM认证规则(适用于所有终端)
vi /etc/pam.d/login
# 在文件开头添加(拒绝root登录):
auth required pam_succeed_if.so user != root quiet
# 方法2:限制root登录终端(仅允许指定终端,如tty1)
vi /etc/securetty
# 删除或注释掉除`tty1`外的所有行(根据需求保留管理终端)
禁止 root 远程 SSH 登录
vi /etc/ssh/sshd_config
# 找到并修改:
PermitRootLogin no
# 重启SSH服务:
sudo systemctl restart sshd
(2)禁止普通用户登录
临时禁止所有普通用户登录
# 创建nologin文件(root可登录,普通用户被拒绝)
touch /etc/nologin
# 写入提示信息(可选):
echo "System maintenance in progress." | sudo tee /etc/nologin
# 移除文件以恢复登录:
rm -rf /etc/nologin
永久禁止特定普通用户登录
# 修改用户shell为不可登录状态
sudo usermod -s /sbin/nologin <用户名>
# 或直接编辑/etc/passwd(确保最后字段为/sbin/nologin):
<用户名>:x:1001:1001::/home/<用户名>:/sbin/nologin
禁止普通用户通过 SSH 登录
vi /etc/ssh/sshd_config
# 添加(仅允许root和指定用户组登录,如wheel组):
AllowGroups wheel
DenyUsers * # 先拒绝所有用户
AllowUsers root @wheel # 允许root和wheel组成员
# 或直接禁止普通用户(非root):
DenyUsers !root
# 重启SSH服务生效
systemctl restart sshd
三、弱口令检测、端口扫描
1. 弱口令检测——John the Ripper
小思考:是什么?有什么用?
- 概念:John the Ripper 是一款开源的密码破解工具,可用于检测系统中存在的弱口令。
- 作用:帮助管理员发现系统中设置简单、容易被破解的密码,及时提醒用户修改,提升系统安全性。
- 能做什么?:扫描系统账户,检测出使用弱口令的账户。
(1)下载并安装 John the Ripper
通过官网下载源码包:http://www.openwall.com/john (解压后直接使用)
cd john-1.8.0 #有三个子目录---doc、run、src (分别表示手册文档、运行程序、源码文件);还有一个链接说明文件README
ls doc/ #查看doc目录下的文档
cd src/ #查看源码文件类型
make clean linux-x86-64 #可执行编译过程(没成功,先安装gcc c语言编译器,支持 C/C++、Ada 等)
ls ../run/john #确认已生成可执行程序 john
(2)检测弱口令账户
以对/etc/shadow 文件检测为例:
- 普通用户需 root 权限读取
/etc/shadow
(密码哈希存储在此):cp /etc/shadow /root/shadow.txt #备份一下(确保安全) cd到run子目录下 ./john /root/shadow.txt #执行暴力破解 ./john --show /root/shadow.txt #查看已破解出的账户列表 ./john --stop /root/shadow.txt # 停止当前破解任务
(3)使用密码字典文件
- 内置字典:John 自带基础字典(如
password.lst
、rockyou.txt
),可直接使用:内置字典位于
/usr/share/john/
目录;>john.pot //清空已破解的账户列表,以便重新分析 ./john --wordlist=/usr/share/john/rockyou.txt 文件
- 自定义字典:
创建文本文件(如custom.dict
),每行一个密码,包含常见弱密码(如123456
、admin
、password
等):# 自定义字典(每行一个密码) vim custom_dict.txt → 添加:123456 → 添加:password → 添加:admin@2023 ./john --wordlist=custom.dict 文件
2. 网络扫描——NMAP
小思考:是什么?有什么用?
- 是什么?:NMAP 是一款网络扫描和主机探测工具,用于发现网络中的主机、开放端口及运行的服务等信息。
- 有什么用?:帮助管理员了解网络拓扑结构、发现潜在安全漏洞,及时采取防护措施;也可用于安全测试,模拟攻击者探测目标网络。
- 能做什么?:扫描目标主机开放的端口、运行的服务及服务版本,判断主机操作系统类型等。
(1)安装 NMAP 软件包
# Debian/Ubuntu
apt install nmap -y
# CentOS/RHEL
yum install nmap -y
Windows:
从官网(https://nmap.org/)下载安装程序,按向导安装(支持图形界面 Nmap GUI)。
(2)扫描语法及类型
基本语法: nmap [扫描选项] [目标IP/域名/网段]
常用扫描选项:
选项 | 说明 |
---|---|
-sL | 仅列出目标(不发送任何数据包) |
-sP | Ping 扫描(检测主机是否在线,默认禁用,需用 -PE /-PS 替代) |
-sS | TCP SYN 扫描(半开放扫描,隐蔽性强,需 root 权限) |
-sT | TCP 全连接扫描(适合目标防火墙宽松的场景) |
-sU | UDP 扫描(检测 UDP 端口,速度较慢) |
-p <端口范围> | 指定扫描端口(如 -p 80,443 或 -p 1-1000 ) |
-A | 启用高级扫描(检测服务版本、操作系统、脚本扫描) |
-sV | 检测服务版本信息 |
-O | 检测操作系统类型 |
-v | 显示详细扫描过程 |
-oN <文件名> | 将结果保存为普通文本文件 |
-oG <文件名> | 保存为 grep 友好格式(便于后续处理) |
(3)扫描操作示例
# 基础端口扫描
nmap 192.168.1.100
# 快速扫描(仅常用端口)
nmap -F 192.168.1.0/24
# 全端口扫描+服务识别
nmap -p 1-65535 -sV 192.168.1.100
# 检测操作系统(需root)
nmap -O 192.168.1.100
# 扫描常用UDP端口
nmap -sU -p 53,67,68,161 192.168.1.100
# 查看网段有哪些存活主机
nmap -n -sP 192.168.1.0/24
四、总结
系统安全管理涵盖账户安全、系统引导登录安全、弱口令检测及端口扫描等多方面。通过实施账户安全控制措施,规范用户权限;加强系统引导和登录管理,保障系统启动及访问安全;利用 John the Ripper 和 NMAP 等工具,主动检测安全隐患。各环节相互配合,形成一套较为完整的系统安全防护体系,可有效降低系统遭受攻击和数据泄露的风险。