目录
[1. 基本语法](#1. 基本语法)
[2. 常用选项](#2. 常用选项)
[3. 与 sudo 的对比](#3. 与 sudo 的对比)
[禁止 root 用户登录配置方法](#禁止 root 用户登录配置方法)
[1:弱口令检测------John the Ripper](#1:弱口令检测——John the Ripper)
一:账号安全控制
用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号才能进入计算机。在 Linux 系统中,提供了多种机制来确保用户账号的正当、安全使用。
1:基本安全措施
(1)系统账号清理
在 Linux 系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户 root 之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号。
常见的非登录用户账号包括 bin、daemon、adm、lp、mail 等。为了确保系统安全,这些用户账号的登录 Shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动,如下所示。

各种非登录用户账号中,还有相当一部分是很少用到的,如 games。这些用户账号可以视为冗余账号直接删除即可。除此之外,还有一些随应用程序安装的用户账号,若卸载程序以后未能自动删除,则需要管理员手动进行清理。
对于 Linux 服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。例如,若要锁定、解锁名为 zhangsan 的用户账号,可以执行以下操作(passwd、usermod 命令都可用来锁定、解锁账号)。

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用chattr 命令,分别结合"+i""-i"选项来锁定、解锁文件,使用 lsattr 命令可以査看文件锁定情况。

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录 Shell、宿主目录等属性信息。

(2)密码安全控制
在不安全的网络环境中,为了降低密码被猜出或被暴力破解的风险,用户应养成定期更改密码的习惯,避免长期使用同一个密码。管理员可以在服务器端限制用户密码的最大有效天数,对于密码已过期的用户,登录时将被要求重新设置密码,否则将拒绝登录。
操作类型 | 命令或配置方法 | 适用场景 | 效果说明 |
---|---|---|---|
设置密码有效期 | 修改 /etc/login.defs 文件,设置 PASS_MAX_DAYS 30 |
适用于新建用户 | 新创建用户的密码有效期将被设为 30 天,到期后需修改密码。 |
设置密码有效期 | chage -M 30 lisi |
适用于已有用户(如 lisi) | 将指定用户(lisi)的密码有效期设为 30 天,到期后需修改密码。 |
强制下次登录修改密码 | chage -d 0 zhangsan |
适用于需要强制修改密码的用户 | 用户(zhangsan)下次登录时会被强制要求修改密码,否则无法登录系统。 |
(3)命令历史、自动注销
shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。
安全控制项 | 配置方法 | 适用场景 | 效果说明 |
---|---|---|---|
命令历史管理 | 修改 ~/.bashrc 或 /etc/profile ,添加: export HISTSIZE=1000 export HISTFILESIZE=2000 export HISTTIMEFORMAT="%F %T " export HISTCONTROL=ignoredups:erasedups |
限制历史命令记录数量,避免敏感信息泄露 | 控制历史命令存储条数,避免重复记录,并添加时间戳便于审计。 |
禁用历史记录 | 在 ~/.bashrc 或 /etc/profile 中添加: unset HISTFILE export HISTSIZE=0 export HISTFILESIZE=0 |
高敏感环境,禁止记录命令历史 | 完全禁用命令历史记录,防止敏感操作被泄露。 |
自动注销(TMOUT) | 在 ~/.bashrc 或 /etc/profile 中添加: export TMOUT=300 readonly TMOUT |
防止用户长时间无操作导致会话保持 | 用户 300 秒(5 分钟)无操作后自动注销,增强会话安全。 |
锁定终端超时 | 在 /etc/profile 或 /etc/bashrc 中添加: TMOUT=600 readonly TMOUT |
适用于多用户环境或服务器运维 | 10 分钟无操作后自动锁定终端,防止未授权访问。 |
2:用户切换与提权
命令 | 功能 | 使用示例 | 适用场景 | 安全注意事项 |
---|---|---|---|---|
su | 切换用户身份(需输入目标用户密码) | su - root (切换到 root) su - username (切换到普通用户) |
需要完全切换用户环境(如 root 运维)时使用。 | 直接切换至 root 存在风险,建议限制 root 远程登录,仅允许受信任用户使用。 |
sudo | 临时以 root(或其他用户)权限执行命令 | sudo apt update sudo -u username command |
普通用户需要执行特定管理命令时使用(如安装软件、修改系统配置)。 | 需在 /etc/sudoers 精细配置权限,遵循最小权限原则,避免滥用。 |
sudo -i sudo su | 切换到 root shell(需当前用户有 sudo 权限) | sudo -i sudo su - |
需要长时间以 root 身份操作时使用(比 su 更安全,因需验证当前用户密码)。 |
仍可能带来安全风险,建议仅在必要时使用,操作完成后及时退出 root 环境。 |
(1)su命令的用法
1. 基本语法
su [选项] [用户名]
1.若不指定用户名,默认切换到 root
用户。
2.切换用户后,需输入目标用户的密码(root 切换普通用户无需密码)。
2. 常用选项
选项 | 作用 |
---|---|
- 或 -l |
完全切换用户环境(加载目标用户的 ~/.bashrc 、~/.profile 等配置)。 |
-c |
以目标用户身份执行单条命令后退出,例如:su -c "command" username 。 |
-s |
指定切换后的 Shell(如 su -s /bin/bash username )。 |
-m |
保留当前环境变量(不加载目标用户配置)。 |
3. 与 sudo
的对比
场景 | su |
sudo |
---|---|---|
需密码 | 目标用户的密码 | 当前用户的密码 |
权限粒度 | 切换完整用户会话 | 仅提升单条命令权限 |
日志记录 | 记录用户切换 | 记录具体执行的命令 |
安全建议 | 限制 root 切换 | 精细控制 /etc/sudoers |
(2)PAM认证
PAM 认证核心概念与配置
分类 | 说明 | 配置文件/示例 | 相关模块(pam_*.so) |
---|---|---|---|
PAM 简介 | Linux 的可插拔认证模块,提供统一的用户认证机制,支持灵活的策略配置。 | 主配置文件:/etc/pam.conf (旧版) 服务独立配置:/etc/pam.d/ 目录下(如 /etc/pam.d/sshd ) |
- |
认证流程 | 1. 服务(如 sshd)调用 PAM 2. 加载对应服务的 PAM 配置 3. 通过模块(如 pam_unix.so )完成认证。 |
示例流程: sshd → /etc/pam.d/sshd → pam_unix.so |
pam_unix.so (基础认证) |
PAM 配置类型 | 四类配置行(每行包含 类型 、控制标志 、模块 、参数 ): |
示例配置行 : auth required pam_unix.so nullok |
pam_deny.so (拒绝访问) |
类型(Type) | - auth :用户身份验证 - account :账户有效性检查(如过期、权限) - password :密码策略 - session :会话管理 |
account required pam_time.so (限制用户登录时间) |
pam_time.so (时间限制) |
控制标志(Control) | - required :必须成功,但失败后继续检查其他模块 - sufficient :成功则立即通过 - optional :结果忽略 - requisite :失败则立即终止 |
auth sufficient pam_ldap.so (LDAP 认证成功则跳过后续) |
pam_ldap.so (LDAP 认证) |
常用模块 | - pam_unix.so :本地账户认证 - pam_tally2.so :登录失败计数 - pam_cracklib.so :密码复杂度检查 - pam_limits.so :资源限制 |
password requisite pam_cracklib.so minlen=8 |
pam_cracklib.so (密码强度) |
安全应用场景 | - 限制 su 命令(仅 wheel 组可用) - 强制密码复杂度 - 防止暴力破解(失败锁定) - 限制用户资源(CPU、内存) |
限制 su : auth required pam_wheel.so use_uid |
pam_wheel.so (限制特权切换) |
如果想査看某个程序是否支持 PAM 认证,可以用 1s 命令进行査看,例如执行以下命令可以査看 su是否支持 PAM 模块认证。

su 的 PAM 配置文件的具体内容如下所示。


字段 | 类型/选项 | 说明 | 示例 |
---|---|---|---|
认证类型 | auth |
验证用户身份(如检查密码、指纹等)。 | auth required pam_unix.so |
account |
检查账户状态(是否过期、是否有登录权限等)。 | account requisite pam_time.so |
|
password |
管理密码策略(修改密码时的复杂度检查等)。 | password requisite pam_cracklib.so minlen=8 |
|
session |
管理用户会话(如登录时加载环境变量、记录日志等)。 | session optional pam_limits.so |
|
控制类型 | required |
必须成功,若失败会继续检查其他模块,最终返回失败。 | auth required pam_deny.so |
requisite |
必须成功,若失败立即终止验证并返回失败。 | auth requisite pam_succeed_if.so uid >= 1000 |
|
sufficient |
若成功则立即通过认证(跳过后续模块),失败则忽略并继续。 | auth sufficient pam_ldap.so |
|
optional |
仅用于显示信息,不影响认证结果(通常用于 session 类型)。 |
session optional pam_motd.so |
|
PAM 模块示例 | pam_unix.so |
基础认证模块(本地用户密码验证)。 | auth required pam_unix.so shadow nullok |
pam_cracklib.so |
强制密码复杂度(如最小长度、数字等)。 | password requisite pam_cracklib.so difok=3 minlen=12 |
|
pam_tally2.so |
限制登录失败次数(防暴力破解)。 | auth required pam_tally2.so deny=5 unlock_time=600 |
|
pam_limits.so |
限制用户资源(如进程数、内存等)。 | session required pam_limits.so |
安全应用场景
场景 | PAM 配置方法 | 作用 |
---|---|---|
禁止 root 远程登录 | 在 /etc/pam.d/sshd 中添加: auth required pam_securetty.so |
仅允许 root 从安全终端登录。 |
强制密码复杂度 | 在 /etc/pam.d/system-auth 中添加: password requisite pam_cracklib.so minlen=10 |
密码长度至少 10 字符。 |
限制用户切换 | 在 /etc/pam.d/su 中添加: auth required pam_wheel.so use_uid |
仅允许 wheel 组用户使用 su |
3:sudo命令------提升执行权限
sudo
命令核心功能与配置
分类 | 说明 | 配置示例 | 适用场景 |
---|---|---|---|
基本功能 | 允许授权用户以 root 或其他用户身份执行命令,无需共享目标用户密码。 | sudo apt update |
普通用户需临时执行特权命令(如软件安装)。 |
配置文件 | 权限规则存储在 /etc/sudoers ,需通过 visudo 编辑(避免语法错误)。 |
visudo |
管理员配置用户或组的 sudo 权限。 |
授权语法 | 用户/组 主机=(目标用户) 命令 |
jerry ALL=(ALL) /usr/bin/apt |
精确控制用户可执行的命令范围。 |
免密码执行 | 添加 NOPASSWD 选项,适用于自动化脚本。 |
%admin ALL=(ALL) NOPASSWD: ALL |
需无交互执行的场景(如 cron 任务)。 |
日志记录 | 所有 sudo 操作记录在 /var/log/auth.log ,便于审计。 |
grep sudo /var/log/auth.log |
安全审计与故障排查。 |
限制权限 | 通过 ! 排除危险命令,或限制参数。 |
user1 ALL=(ALL) /usr/bin/systemctl restart *, !/usr/bin/systemctl * root |
防止滥用特权命令(如重启关键服务)。 |
常用 sudo
命令示例
命令 | 作用 |
---|---|
sudo -l |
列出当前用户可执行的 sudo 命令。 |
sudo -u username command |
以指定用户身份执行命令(如 sudo -u mysql vi /etc/mysql/my.cnf )。 |
sudo -i 或 sudo -s |
启动交互式 root shell(需用户有完整 sudo 权限)。 |
sudo !! |
以 sudo 权限重新执行上一条命令。 |
(1)在配置文件/etc/sudoers中添加授权
配置项 | 说明 | 语法格式 | 示例 |
---|---|---|---|
文件权限 | 默认权限为 440 ,需使用 visudo 编辑(避免语法错误)。 |
chmod 440 /etc/sudoers |
- |
授权格式 | 基本结构:用户 主机=(目标用户) 命令 |
user MACHINE=(RUNAS_USER) COMMANDS |
jerry localhost=(root) /usr/bin/apt |
用户字段 | - 直接指定用户名(如 jerry ) - 使用 %组名 授权整个组(如 %admin )。 |
username 或 %groupname |
%wheel ALL=(ALL) ALL |
主机字段 | 指定主机名(通常为 localhost 或实际主机名),支持通配符 ALL 。 |
hostname 或 ALL |
user1 webserver=(root) /usr/bin/systemctl |
目标用户字段 | 指定可以切换到的用户身份(默认为 root ),可设为 ALL 或具体用户(如 mysql )。 |
(username) 或 (ALL) |
alice ALL=(mysql) /usr/bin/mysqladmin |
命令字段 | 需填写完整命令路径,多个命令用逗号分隔。 支持通配符 * ,排除命令用 ! 。 |
full_path_to_command 或 !full_path_to_command |
bob ALL=(ALL) /usr/bin/apt, !/usr/bin/apt remove * |
特殊选项 | - NOPASSWD : 免密码执行 - PASSWD : 需要密码(默认) - SETENV : 保留环境变量。 |
NOPASSWD: COMMANDS |
%devops ALL=(ALL) NOPASSWD: /usr/bin/docker |
配置示例与场景说明
场景 | 配置示例 | 作用 |
---|---|---|
允许用户执行所有命令 | jerry ALL=(ALL) ALL |
用户 jerry 可切换到任何用户执行任意命令(需密码)。 |
允许组内用户免密码重启服务 | %admin ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx |
admin 组成员无需密码即可重启 Nginx。 |
限制用户使用特定命令 | alice localhost=(mysql) /usr/bin/mysql, /usr/bin/mysqldump |
用户 alice 仅能以 mysql 身份执行 MySQL 相关命令。 |
禁止危险操作 | user1 ALL=(ALL) /usr/bin/*, !/usr/bin/passwd, !/usr/bin/rm -rf / |
允许使用大部分命令,但禁止修改密码和强制删除根目录。 |
(2)通过sudo执行特权命令
对于已获得授权的用户,通过 sudo 方式执行特权命令时,只需要将正常的命令行作为sudo 命令的参数即可。由于特权命令程序通常位于/sbin、/usr/sbin 等目录下,普通用户执行时应使用绝对路径。以下操作验证了使用 sudo 方式执行命令的过程。



在当前会话过程中,第一次通过 sudo 执行命令时,必须以用户自己的密码(不是 root 用户或其他用户的密码)进行验证。此后再次通过 sudo 执行命令时,只要与前一次 sudo 操作的间隔时间不超过5min(分),则不再重复验证。
sudo
权限查看与日志记录
操作 | 命令/方法 | 输出说明 | 示例 |
---|---|---|---|
查看当前用户权限 | sudo -l |
显示当前用户被授权的 sudo 命令列表,未授权用户提示 may not run sudo 。 |
<br>用户 syrianer 可以在该主机上运行以下命令:<br>(root) /sbin/*<br> |
验证密码 | 执行 sudo -l 时需输入当前用户密码(若未配置 NOPASSWD )。 |
密码验证通过后显示权限列表。 | [sudo] password for syrianer: |
查看所有用户权限 | 管理员可通过 visudo 或查看 /etc/sudoers 文件。 |
显示系统中所有用户的 sudo 授权配置。 |
%admin ALL=(ALL) ALL |
检查 sudo 日志 |
tail /var/log/sudo 或 grep sudo /var/log/auth.log (系统日志路径可能不同)。 |
记录用户、时间、终端、执行的命令等详细信息。 | <br>Aug 25 00:00:46 : syrianer : ... COMMAND=list<br> |
日志字段含义 | - TTY :用户终端 - PWD :当前目录 - USER :切换到的用户 - COMMAND :执行的命令。 |
用于审计用户操作。 | USER=root ; COMMAND=/sbin/ifconfig |
常见场景示例
场景 | 操作 | 结果 |
---|---|---|
用户自查权限 | 普通用户执行 sudo -l 。 |
显示允许执行的命令列表或提示无权限。 |
管理员审计日志 | `cat /var/log/sudo | grep "COMMAND=/usr/bin/apt"` |
排查异常操作 | `grep "USER=root" /var/log/auth.log | grep "COMMAND=rm"` |
二:系统引导和·登录控制
在互联网环境中,大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终端登录过程往往容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺乏严格、安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题。
1:开关机安全控制
对于服务器主机,其物理环境的安全防护是非常重要的,不仅要保持机箱完好、机柜锁闭,还要严格控制机房的人员进出、硬件设备的现场接触等过程。在开关机安全控制方面,除了要做好物理安全防护以外,还要做好系统本身的一些安全措施。
(1)调整BISO引导设置
将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
禁止从其他设备(如光盘、U 盘、网络等)引导系统,对应的项设为"Disabled"
将 BIOS 的安全级别改为"setup",并设置好管理密码,以防止未授权的修改。
(2)限制更改GRUB引导参数
GRUB 密码保护配置流程
步骤 | 操作命令/配置 | 说明 |
---|---|---|
1. 生成 PBKDF2 加密密码 | grub2-mkpasswd-pbkdf2 |
输入两次密码,生成加密字符串(基于 PBKDF2 算法)。 |
2. 备份配置文件 | cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak cp /etc/grub.d/00_header /etc/grub.d/00_header.bak |
防止配置错误导致系统无法启动。 |
3. 创建用户密码文件 | vim /etc/grub.d/01_users ,内容如下: <br>#!/bin/sh -e<br>cat << EOF<br>set superusers="root"<br>password_pbkdf2 root [生成的PBKDF2哈希]<br>EOF<br> |
定义超级用户(如 root )及其加密密码。 |
4. 设置文件权限 | chmod 755 /etc/grub.d/01_users |
确保脚本可执行。 |
5. 生成新 GRUB 配置 | grub2-mkconfig -o /boot/grub2/grub.cfg |
应用密码保护到 GRUB 菜单。 |
6. 验证配置 | 重启系统,尝试修改 GRUB 参数时需输入密码。 | 若未提示密码,检查步骤 3 和 5 是否执行正确。 |
注意事项
-
密码安全
- 使用强密码并妥善保存 PBKDF2 哈希值,避免泄露。
-
配置文件权限
/etc/grub.d/
下的脚本需为755
权限,/boot/grub2/grub.cfg
需为600
。
-
恢复方法
- 若忘记密码,需通过救援模式或 Live CD 恢复备份的
grub.cfg
文件。
- 若忘记密码,需通过救援模式或 Live CD 恢复备份的
-
兼容性
- 不同 Linux 发行版路径可能不同(如 CentOS 为
/boot/grub2/
,Ubuntu 为/boot/grub/
)。
- 不同 Linux 发行版路径可能不同(如 CentOS 为
2:终端及登录控制
在 Linux 服务器中,默认开启了六个 tty 终端,允许任何用户进行本地登录。关于本地登录的安全控制,可以从以下几个方面着手。
(1)禁止root用户登录
禁止 root 用户登录配置方法
配置方式 | 操作步骤 | 效果说明 | 适用场景 |
---|---|---|---|
1. 修改 /etc/securetty |
编辑文件,注释或删除对应终端行(如 tty5 、tty6 ): #tty5 #tty6 |
root 用户将无法从被注释的终端登录(如本地控制台 tty5/tty6)。 | 限制 root 本地登录的终端。 |
2. 禁用 SSH root 登录 | 修改 /etc/ssh/sshd_config : PermitRootLogin no 重启服务: systemctl restart sshd |
完全禁止 root 通过 SSH 远程登录,强制使用普通用户 + sudo 。 |
生产服务器远程访问安全加固。 |
3. 使用 PAM 限制 | 在 /etc/pam.d/login 中添加: auth required pam_securetty.so |
仅允许 root 从 /etc/securetty 中列出的终端登录(需结合方式 1 使用)。 |
增强终端登录控制。 |
(2)禁止普通用户登录
禁止普通用户登录配置方法
配置方式 | 操作步骤 | 效果说明 | 适用场景 |
---|---|---|---|
1. 创建 /etc/nologin 文件 |
执行命令: touch /etc/nologin |
所有普通用户登录时会被拒绝(显示默认提示信息),仅允许 root 用户登录。 | 服务器维护期间临时禁止用户登录。 |
2. 自定义提示信息 | 编辑 /etc/nologin 文件,写入自定义内容: echo "系统维护中,禁止登录。预计恢复时间:2023-12-01 18:00" > /etc/nologin |
用户登录时会显示自定义的维护信息,提升用户体验。 | 需向用户说明维护情况的场景。 |
3. 恢复登录 | 删除 /etc/nologin 文件: rm -f /etc/nologin |
普通用户登录权限立即恢复。 | 维护结束后快速恢复服务。 |
三:弱口令、端口扫描
1:弱口令检测------John the Ripper
分类 | 说明 | 操作命令/示例 | 注意事项 |
---|---|---|---|
工具简介 | 开源密码破解工具,支持 DES、MD5、SHA 等多种加密算法,用于检测系统弱口令。 | - | 仅限合法授权使用(如内部安全审计)。 |
安装方法 | 1. 源码安装 : <br>wget http://www.openwall.com/john/j/john-1.9.0.tar.gz<br>tar -zxvf john-1.9.0.tar.gz<br>cd john-1.9.0/src<br>make clean && make<br> 2. 包管理器安装 (部分系统): apt install john (Debian) yum install john (RHEL) |
需提前安装编译工具(如 gcc 、make )。 |
|
基本使用步骤 | 1. 提取密码哈希: unshadow /etc/passwd /etc/shadow > hashes.txt 2. 运行破解: john hashes.txt 3. 查看结果: john --show hashes.txt |
密码哈希文件需管理员权限获取。 | |
破解模式 | - 字典攻击 : john --wordlist=password.lst hashes.txt - 暴力破解 : john --incremental hashes.txt |
字典文件(如 password.lst )需自行准备或从安全渠道获取。 |
|
检测结果示例 | <br>user1:123456<br>user2:admin<br> |
发现弱口令后,应立即通知用户修改或强制重置。 | |
安全建议 | - 定期运行检测,结合密码策略(如 pam_cracklib )。 - 对弱口令账号强制密码过期: chage -d 0 username |
避免在生产环境直接破解,建议在隔离测试环境中进行。 |
常用命令
命令 | 作用 |
---|---|
john --wordlist=dict.txt hashes.txt |
使用字典文件 dict.txt 破解哈希。 |
john --format=sha512crypt hashes.txt |
指定哈希类型(如 sha512crypt )。 |
john --rules hashes.txt |
启用规则变形(如大小写、数字替换)。 |
john --restore=session |
恢复上次中断的破解会话。 |
(2)检测弱口令账号
弱口令检测方法与工具对比
工具/方法 | 使用场景 | 操作步骤 | 优点 | 缺点 |
---|---|---|---|---|
John the Ripper | Linux/UNIX 系统本地密码检测 | 1. 提取哈希:unshadow /etc/passwd /etc/shadow > hashes.txt 2. 破解:john hashes.txt 3. 查看结果:john --show hashes.txt |
支持多种加密算法,灵活高效 | 暴力破解耗时,需高性能硬件支持 |
Hydra | 远程服务弱口令爆破(SSH/FTP等) | hydra -l user -P password.lst ssh://192.168.1.1 |
支持多协议,可针对网络服务测试 | 易触发防火墙封锁,需谨慎使用 |
CrackLib | 密码策略强制检测 | 在 /etc/pam.d/system-auth 中配置: password requisite pam_cracklib.so minlen=8 difok=3 |
实时阻止弱口令设置 | 仅适用于新密码设置,不检测现有密码 |
自定义脚本 | 批量检查默认/常见密码 | 编写脚本遍历用户列表,尝试登录: `echo "123456" | su - user` | 可定制化,适合特定场景 |
检测结果处理与加固措施
检测结果 | 风险等级 | 应对措施 | 命令示例 |
---|---|---|---|
密码为常见弱口令(如 123456 ) |
高危 | 强制立即修改密码并记录: chage -d 0 username 通知用户 |
passwd username |
密码为简单变形(如 Admin123 ) |
中危 | 要求用户设置复杂密码,启用多因素认证(MFA) | chage -M 30 username (缩短有效期) |
密码强度足够 | 低危 | 定期复查(建议每季度一次) | - |
(3)使用密码字典文件
分类 | 说明 | 操作命令/示例 | 适用场景 |
---|---|---|---|
字典文件作用 | 包含常见密码组合的文本文件,用于暴力破解或弱口令检测。 | - | 安全审计、渗透测试、密码强度验证。 |
常见字典类型 | - 通用字典 :如 rockyou.txt - 定制字典 :根据目标信息生成(如公司名+年份) - 规则字典:基于规则变形(如大小写、数字替换) |
john --wordlist=rockyou.txt hashes.txt |
针对性破解或全面扫描。 |
生成字典工具 | - Crunch :按规则生成密码 - Cewl :爬取网站内容生成字典 - Hashcat:规则引擎生成变形字典 | crunch 6 8 0123456789 -o num_dict.txt (生成6-8位数字组合) |
需要定制化字典时使用。 |
使用字典破解 | 1. John the Ripper : john --wordlist=dict.txt hashes.txt 2. Hydra : hydra -l user -P dict.txt ssh://192.168.1.1 |
结合工具快速检测弱口令。 | 本地密码哈希或远程服务爆破。 |
字典优化技巧 | - 去重:`sort dict.txt | uniq > clean_dict.txt - 合并: cat dict1.txt dict2.txt > combined.txt - 过滤长度: awk 'length($0) >=8' dict.txt > long_dict.txt` |
awk 'length($0) >=12' rockyou.txt > strong_pass.txt |
防护措施 | - 禁用常见密码:在 /etc/pam.d/system-auth 中配置 pam_pwquality.so - 强制密码复杂度:minlen=12 difok=3 |
password requisite pam_pwquality.so retry=3 minlen=12 enforce_for_root |
防止字典攻击生效。 |
法律与伦理 | 仅限授权测试,禁止未授权使用。 | - | 合法渗透测试或内部安全审计。 |
字典名称 | 内容特点 | 下载来源 | 适用场景 |
---|---|---|---|
rockyou.txt |
包含数百万常见密码(如 123456 、password ) |
Kali Linux 默认路径:/usr/share/wordlists/ |
快速检测极弱口令。 |
SecLists |
集合多种字典(用户名、密码、目录等) | GitHub: danielmiessler/SecLists |
综合渗透测试。 |
CrackStation.txt |
包含哈希预计算密码(约15亿条) | CrackStation官网 | 高效破解复杂哈希。 |
2:网络扫描------NMAP
NMAP 是一个强大的端口扫描类安全评测工具,官方站点是 http://nmap.org/。NMAP 被设计为检测众多主机数量的巨大网络,支持 ping 扫描、多端口检测、0s 识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,减小安全风险。
(1)安装NMAP软件包
在 Linux 系统中,既可以使用光盘自带的 nmap-6.40-7.e17.x8664.rpm 安装包,也可以使用从NMAP 官方网站下载的最新版源码包,这里以 YUM 方式安装的 nmap 软件包为例。
[root@localhost ~]# yum install -y nmap
(2)扫描语法及类型
NMAP 基本命令格式
组成部分 | 说明 | 示例 |
---|---|---|
基本语法 | nmap [扫描类型] [选项] <扫描目标> |
nmap -sS -p 80 192.168.1.1 |
扫描目标 | 支持主机名、IP 地址或网络段(空格分隔多个目标)。 | nmap 192.168.1.1 192.168.1.2 |
常用选项 | - -p :指定端口(如 -p 80,443 或 -p 1-1000 ) - -n :禁用 DNS 反向解析(加速扫描)。 |
nmap -p 22,80 -n 192.168.1.0/24 |
NMAP 常用扫描类型对比
扫描类型 | 命令选项 | 原理 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|---|
TCP SYN 扫描 | -sS |
发送 SYN 包,收到 SYN/ACK 则认为端口开放(半开连接,不完成三次握手)。 | 速度快,隐蔽性强(不留下完整连接记录)。 | 需 root 权限。 | 默认扫描方式,高效探测开放端口。 |
TCP 连接扫描 | -sT |
完成完整 TCP 三次握手,确认端口状态。 | 无需 root 权限。 | 速度慢,易被日志记录。 | 无特权用户的基本扫描。 |
TCP FIN 扫描 | -sF |
发送 FIN 包,关闭的端口会返回 RST,开放的端口无响应。 | 绕过简单防火墙规则。 | 部分系统不遵循 RFC 标准(可能误判)。 | 检测防火墙配置。 |
UDP 扫描 | -sU |
发送 UDP 包,根据响应(或无响应)判断端口状态。 | 检测 UDP 服务(如 DNS、DHCP)。 | 速度极慢(需等待超时)。 | 识别 UDP 服务。 |
ICMP 扫描 | -sP |
仅发送 ICMP Echo 请求(类似 ping),检测主机存活。 | 快速确认主机在线状态。 | 不扫描端口。 | 初步网络存活探测。 |
跳过 Ping 检测 | -Pn |
假设所有目标存活,直接扫描指定端口(避免因禁 Ping 导致的漏扫)。 | 绕过禁 Ping 的主机。 | 可能增加无效扫描时间。 | 目标禁用 ICMP 时的扫描。 |
常用组合命令示例
场景 | 命令示例 | 说明 |
---|---|---|
快速扫描常用端口 | nmap -sS -p 80,443,22,3389 192.168.1.1 |
SYN 扫描指定端口。 |
扫描整个网段的 UDP 服务 | nmap -sU -p 53,67,68 192.168.1.0/24 |
检测 DNS、DHCP 等 UDP 服务。 |
绕过防火墙检测 | nmap -sF -T4 192.168.1.1 |
FIN 扫描(躲避简单过滤)。 |
全面扫描(含版本探测) | nmap -sV -O -p 1-65535 192.168.1.1 |
识别服务版本和操作系统。 |