Linux 系统安全及应用实战:账号、引导、弱口令与端口扫描全解析

前言

在信息技术高速发展的当下,系统安全成为服务器运维和网络管理的核心环节,Linux 作为服务器端的主流操作系统,其安全防护手段的掌握尤为重要。本文将从账号安全控制系统引导和登录控制弱口令检测端口扫描四个核心维度,结合实操命令和配置案例,详细讲解 Linux 系统安全的实用策略和工具使用,帮助运维人员构建更安全、可靠的系统环境。

一、账号安全控制

用户账号是 Linux 系统的身份凭证,也是系统安全的第一道防线。Linux 提供了完善的账号安全机制,从账号清理、密码控制到权限提升,全方位保障账号的正当、安全使用。

1.1 基本安全措施

1.1.1 系统账号清理

Linux 系统中除了管理员手动创建的账号,还有大量随系统 / 程序安装的非登录用户账号 (如 bin、daemon、adm、lp 等),这类账号仅用于维护系统运作、启动服务进程,默认登录 Shell 为/sbin/nologin,需确保该配置不被篡改,验证命令如下:

复制代码
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd

对于系统中很少使用的冗余账号(如 games)、应用卸载后残留的账号,可直接删除;对于长期不用但暂无法确定是否删除的账号,可通过usermodpasswd命令锁定:

复制代码
# 锁定账号zhangsan
[root@localhost ~]# usermod -L zhangsan
# 查看账号状态
[root@localhost ~]# passwd -S zhangsan
# 解锁账号zhangsan
[root@localhost ~]# usermod -U zhangsan

若服务器用户账号已固定,可通过chattr命令锁定账号配置文件/etc/passwd/etc/shadow,防止账号被非法添加 / 删除、密码被篡改:

复制代码
# 锁定文件
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
# 查看文件锁定状态
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
# 解锁文件
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow

文件锁定后,无法执行useraddpasswd等修改账号属性的操作,需解锁后才能进行。

1.1.2 密码安全控制

弱密码和长期未更换的密码是系统被暴力破解的主要隐患,管理员可在服务器端限制密码有效期,并强制用户初次 / 下次登录时修改密码。

  1. 设置密码最大有效天数 修改/etc/login.defs文件适用于新建用户 ,通过chage命令适用于已有用户 ,示例为设置密码有效期 30 天:

    复制代码
    # 编辑配置文件,修改PASS_MAX_DAYS参数
    [root@localhost ~]# vi /etc/login.defs
    PASS_MAX_DAYS 30
    # 为已有用户lisi设置密码有效期30天
    [root@localhost ~]# chage -M 30 lisi
  2. 强制用户下次登录重设密码 适用于批量创建用户或统一要求用户更新密码的场景,以用户 zhangsan 为例:

    复制代码
    [root@localhost ~]# chage -d 0 zhangsan

    该用户下次登录时,会被强制要求修改密码,否则无法进入系统。

1.1.3 命令历史与自动注销

Bash 终端的命令历史机制虽方便操作,但也可能泄露敏感操作(如明文密码输入),同时管理员离开时未注销终端易导致误操作,需通过以下配置降低风险:

  1. 限制历史命令记录条数 历史命令条数由HISTSIZE变量控制,默认 1000 条,修改/etc/profile文件影响所有新登录用户 ,通过export命令影响当前用户 ,示例设置为 200 条:

    复制代码
    # 编辑配置文件,永久生效
    [root@localhost ~]# vi /etc/profile
    HISTSIZE=200
    # 当前用户立即生效
    [root@localhost ~]# export HISTSIZE=200
  2. 退出终端自动清空历史命令 修改用户宿主目录的~/.bash_logout文件,添加清空命令和清屏命令,用户退出 Bash 环境后,历史命令将被自动清除:

    复制代码
    [root@localhost ~]# vi ~/.bash_logout
    history -c
    clear
  3. 设置终端闲置自动注销TMOUT变量控制(单位:秒),同样通过/etc/profileexport配置,示例设置 10 分钟(600 秒)无操作则注销:

    复制代码
    # 所有新登录用户生效
    [root@localhost ~]# vi /etc/profile
    export TMOUT=600
    # 当前用户生效
    [root@localhost ~]# export TMOUT=600
    # 取消自动注销(耗时操作时使用)
    [root@localhost ~]# unset TMOUT

1.2 用户切换与提权

Linux 服务器不建议普通用户直接以 root 身份登录,既避免误操作导致系统损坏,也降低 root 密码泄露风险。系统提供su(用户切换)和sudo(权限提升)两个命令,实现普通用户的权限管理。

1.2.1 su 命令的用法

su命令用于切换用户,选项-表示切换后进入目标用户的登录 Shell 环境(若省略仅切换身份,不切换环境),从 root 切换到普通用户无需验证密码,反之则需要。

复制代码
# 从普通用户jerry切换到root,需输入root密码
[jerry@localhost ~]$ su - root

为降低普通用户反复尝试 root 密码的风险,Linux 启用pam_wheel认证模块,仅加入 wheel 组的用户可使用 su 命令,配置步骤如下:

  1. 将授权用户添加到 wheel 组(以 tsengyia 为例):

    复制代码
    [root@localhost ~]# gpasswd -a tsengyia wheel
    # 确认wheel组成员
    [root@localhost ~]# grep wheel /etc/group
  2. 启用 pam_wheel 认证,编辑/etc/pam.d/su文件,确保以下配置行存在且未注释:

    复制代码
    [root@localhost ~]# vi /etc/pam.d/su
    auth required pam_wheel.so use_uid

未加入 wheel 组的用户执行 su 命令时,会提示 "权限被拒绝",su 命令的所有操作会记录到安全日志/var/log/secure,可随时查看审计。

1.2.2 PAM 认证

PAM(Pluggable Authentication Modules,可插拔认证模块)是 Linux 主流的用户级认证方式,为 login、su、telnet 等应用提供统一的认证机制,管理员通过 PAM 配置文件制定不同应用的认证策略。

  1. PAM 认证原理 服务程序 → 加载对应 PAM 配置文件(/etc/pam.d/目录下) → 调用认证模块(/lib/security/目录下) → 完成认证。验证某程序是否支持 PAM 认证,可通过ls /etc/pam.d/ | grep 程序名,例如验证 su:

    复制代码
    [root@localhost ~]# ls /etc/pam.d/ | grep su
  2. PAM 配置文件格式 配置文件中每一行是一个独立的认证过程,分为三个字段:认证类型控制类型PAM 模块及参数

    • 认证类型:包括认证管理(auth,验证账号密码)、账户管理(account,检查账号有效性)、密码管理(password,修改密码)、会话管理(session,会话管理和记账);
    • 控制类型:定义验证结果的处理方式,核心类型如下:
      • required:验证失败仍继续,最终返回 Fail;
      • requisite:验证失败立即终止,返回 Fail;
      • sufficient:验证成功立即返回,不再继续;
      • optional:仅显示信息,不参与验证(多用于 session)。
1.2.3 sudo 命令 ------ 提升执行权限

su命令切换用户需知道目标用户密码,而sudo命令可让普通用户在无需知道 root 密码 的前提下,执行指定的特权命令,需由管理员预先在/etc/sudoers文件中授权。

(1)sudo 授权配置

/etc/sudoers文件默认权限 440,必须使用visudo工具编辑 (避免语法错误),也可使用 vi 编辑但需强制保存(:w!)。授权记录的基本格式:

复制代码
user MACHINE=COMMANDS
  • user:授权的用户名,%组名表示授权整个用户组;
  • MACHINE:主机名,用于多主机共用配置文件,一般设为localhost或实际主机名;
  • COMMANDS:允许执行的特权命令,需写完整路径,多个命令用逗号分隔。

基础授权示例

复制代码
[root@localhost ~]# visudo
# 授权jerry在localhost执行ifconfig命令
jerry localhost=/sbin/ifconfig
# 授权wheel组用户无需输密码执行所有命令
%wheel ALL=NOPASSWD: ALL

别名授权示例 :当授权用户 / 主机 / 命令较多时,可通过User_AliasHost_AliasCmnd_Alias定义别名(必须大写),简化配置:

复制代码
[root@localhost ~]# visudo
# 定义用户别名:jerry、tom、tsengyia
User_Alias OPERATORS=jerry,tom,tsengyia
# 定义主机别名:smtp、pop
Host_Alias MAILSVRS=smtp,pop
# 定义命令别名:rpm、yum
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
# 授权别名用户在别名主机执行别名命令
OPERATORS MAILSVRS=PKGTOOLS

通配符 / 取反授权示例 :使用*匹配所有命令,!取反排除指定命令,示例授权 syrianer 执行/sbin/下除 ifconfig、route 外的所有命令:

复制代码
[root@localhost ~]# visudo
syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route

启用 sudo 日志 :默认 sudo 操作不记录,添加Defaults logfile配置,将日志保存到/var/log/sudo

复制代码
[root@localhost ~]# visudo
Defaults logfile = "/var/log/sudo"
(2)sudo 命令的使用

已授权用户执行特权命令时,在命令前加sudo即可,首次执行需验证自身密码,5 分钟内重复执行无需再次验证。

复制代码
# 未用sudo,普通用户执行ifconfig修改IP提示权限拒绝
[jerry@localhost ~]$ /sbin/ifconfig ens33:0 192.168.1.11/24
# 使用sudo执行,验证自身密码后成功
[jerry@localhost ~]$ sudo /sbin/ifconfig ens33:0 192.168.1.11/24

查看当前用户的 sudo 授权:

复制代码
[jerry@localhost ~]$ sudo -l

查看 sudo 操作日志:

复制代码
[root@localhost ~]# tail /var/log/sudo

二、系统引导和登录控制

服务器的本地引导和终端登录是易被忽视的安全点,尤其是机房管理不严格的场景,需通过 BIOS 配置、GRUB 保护、终端限制等手段,加强物理和系统层面的引导登录安全。

2.1 开关机安全控制

2.1.1 调整 BIOS 引导设置

BIOS 是系统引导的第一道关卡,需通过以下配置防止从外部设备非法引导:

  1. 将第一优先引导设备设为系统所在磁盘
  2. 禁用光盘、U 盘、网络等其他引导设备(设为 Disabled);
  3. 将 BIOS 安全级别改为 setup,并设置BIOS 管理密码,防止未授权修改配置。
2.1.2 限制更改 GRUB 引导参数

修改 GRUB 引导参数可实现系统修复,但也可能被用于非法获取系统权限,需为 GRUB 菜单设置密码,仅验证通过后可编辑引导参数。建议使用 PBKDF2 加密密码,配置步骤如下:

  1. 生成 PBKDF2 加密的 GRUB 密码:

    复制代码
    [root@localhost ~]# grub2-mkpasswd-pbkdf2
    # 根据提示输入并确认密码,生成加密字符串(需保存)
  2. 备份 GRUB 配置文件,防止配置错误:

    复制代码
    [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
    [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
  3. 编辑 GRUB 用户配置文件/etc/grub.d/01_users,添加超级用户和加密密码:

    复制代码
    [root@localhost ~]# vim /etc/grub.d/01_users
    #!/bin/sh -e 
    cat <<EOF 
    set superusers="root"
    export superusers 
    password_pbkdf2 root 上述步骤生成的加密字符串
    EOF
  4. 重新生成 GRUB 配置文件,使配置生效:

    复制代码
    [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

配置完成后,系统开机进入 GRUB 菜单时,按 E 键编辑引导参数需输入 root 和 GRUB 密码,否则无法修改。

2.2 终端及登录控制

服务器维护期间(如备份、调试),可临时禁止普通用户登录,仅允许 root 用户操作,通过创建/etc/nologin文件实现:

复制代码
[root@localhost ~]# touch /etc/nologin

login程序会检查该文件,存在则拒绝普通用户登录,root 用户不受限制。维护完成后,删除该文件即可恢复正常登录:

复制代码
[root@localhost ~]# rm -rf /etc/nologin

此方法为临时方案,重启服务器后/etc/nologin文件会自动消失。

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

系统的弱口令和开放的危险端口是网络攻击的主要切入点,本节介绍两款经典的安全工具:John the Ripper (弱口令检测)和NMAP(端口扫描),帮助运维人员及时发现并修复安全隐患。

3.1 弱口令检测 ------John the Ripper

John the Ripper 是一款开源的密码破解工具,支持 DES、MD5 等多种加密算法,可通过暴力破解和字典破解检测 Linux 系统用户的密码强度,及时找出弱口令账号。

3.1.1 下载并安装 John the Ripper
  1. 从官方网站(http://www.openwall.com/john/)下载源码包(如 john-1.8.0.tar.gz),解压后进入目录:

    复制代码
    [root@localhost ~]# tar zxf john-1.8.0.tar.gz
    [root@localhost ~]# cd john-1.8.0
  2. 安装编译依赖 gcc,切换到 src 目录执行编译:

    复制代码
    [root@localhost john-1.8.0]# dnf -y install gcc
    [root@localhost john-1.8.0]# cd src/
    [root@localhost src]# make clean linux-x86-64
  3. 编译完成后,在../run目录下生成可执行程序john,无需额外安装,直接使用即可。

3.1.2 检测弱口令账号

John the Ripper 直接对/etc/shadow文件(存储用户加密密码)进行检测,步骤如下:

  1. 复制 shadow 文件到指定目录,修改权限确保可读取:

    复制代码
    [root@localhost src]# cp /etc/shadow /root/shadow.txt
    [root@localhost src]# chmod 644 /root/shadow.txt
  2. 进入 run 目录,执行 john 程序开始破解:

    复制代码
    [root@localhost src]# cd ../run
    [root@localhost run]# ./john /root/shadow.txt

破解过程中,找到的弱口令会即时输出(第一列为密码,第二列为用户名),按Ctrl+C可中止破解。已破解的密码会自动保存到john.pot文件,查看已破解账号列表:

复制代码
[root@localhost run]# ./john --show /root/shadow.txt
3.1.3 使用密码字典文件

暴力破解的效率取决于字典文件的完整性,John the Ripper 默认字典为run/password.lst(包含 3000 + 常见弱口令),也可自定义字典文件。使用--wordlist=选项指定字典:

复制代码
# 清空已破解记录,重新分析
[root@localhost run]# :> john.pot
# 使用指定字典破解
[root@localhost run]# ./john --wordlist=./password.lst /root/shadow.txt

字典文件中密码组合越多,破解成功率越高,但耗时也越长。建议运维人员要求用户设置8 位以上、包含数字 / 字母 / 特殊字符的复杂密码,提升密码安全性。

3.2 网络扫描 ------NMAP

NMAP 是一款强大的端口扫描工具,支持 ping 扫描、多端口检测、OS 识别、网段存活主机探测等功能,通过定期扫描内部网络,可找出不可控的应用服务,及时关闭危险端口,降低安全风险。

3.2.1 安装 NMAP

Linux 系统中可通过 YUM 快速安装 NMAP,简单便捷:

复制代码
[root@localhost ~]# yum install -y nmap

也可从官方网站(http://nmap.org/)下载源码包编译安装,获取最新版本。

3.2.2 NMAP 基本语法

NMAP 的核心语法如下:

复制代码
nmap [扫描类型] [选项] <扫描目标...>
  • 扫描目标:主机名、IP 地址、网段(如 192.168.4.0/24),多个目标用空格分隔;

  • 常用选项-p指定扫描端口,-n禁用反向 DNS 解析(加快扫描速度);

  • 核心扫描类型

    扫描类型 说明
    -sS TCP SYN 扫描(半开扫描),仅发 SYN 包,不建立完整连接,速度快、隐蔽性高
    -sT TCP 连接扫描,建立完整 TCP 连接,扫描结果准确但易被检测
    -sF TCP FIN 扫描,检测防火墙健壮性,开放端口忽略 FIN 包,关闭端口返回 RST 包
    -sU UDP 扫描,探测 UDP 服务,速度较慢
    -sP ICMP 扫描,类似 ping,快速判断主机是否存活
    -P0 跳过 ping 检测,默认目标主机存活,适用于禁 ping 的主机
3.2.3 典型扫描示例
示例 1:扫描本机开放的 TCP/UDP 端口
复制代码
# 扫描本机常用TCP端口
[root@localhost ~]# nmap 127.0.0.1
# 扫描本机常用UDP端口
[root@localhost ~]# nmap -sU 127.0.0.1

扫描结果中STATE列说明:open(端口开放)、filtered(端口被防火墙过滤)、closed(端口关闭)。

示例 2:扫描指定网段的指定端口(如 FTP 端口 21)
复制代码
# 扫描192.168.4.0/24网段中开放21端口的主机
[root@localhost ~]# nmap -p 21 192.168.4.0/24
示例 3:快速探测网段存活主机(禁 ping 环境用 - P0)
复制代码
# 扫描192.168.4.0/24网段存活主机,禁用DNS解析加快速度
[root@localhost ~]# nmap -n -sP 192.168.4.0/24
# 禁ping网段,跳过ping检测
[root@localhost ~]# nmap -n -P0 192.168.4.0/24
示例 4:扫描指定 IP 段的特定服务端口(如文件共享 139/445)
复制代码
# 扫描192.168.4.100~200中开放139、445端口的主机
[root@localhost ~]# nmap -p 139,445 192.168.4.100-200

3.3 补充:网络压力测试工具 hping3

hping3 是一款网络测试工具,可模拟网络攻击进行压力测试,检测服务器和防火墙的抗攻击能力,典型用法如下:

复制代码
# 向192.168.10.1的80端口发送SYN洪水包,3个数据包,每个120字节
hping3 -c 3 -d 120 -S -w 64 -p 80 --flood 192.168.10.1
# 模拟1000个随机源IP的SYN请求,测试80端口抗DDOS能力
hping3 -c 1000 -d 100 -S -w 64 -p 80 --flood --rand-source 192.168.10.1

参数说明-c(数据包数量)、-d(数据包大小)、-S(设置 TCP SYN 标志)、-w(TCP 窗口大小)、--flood(洪水模式)、--rand-source(随机源 IP)。

四、总结

Linux 系统安全是一个系统性的工程,核心在于从细节入手,层层防护。本文从账号安全、引导登录安全、弱口令检测、端口扫描四个核心方面,讲解了实用的配置策略和工具使用:

  1. 账号安全是基础,通过清理冗余账号、控制密码有效期、限制 su/sudo 权限,从源头保障身份认证安全;
  2. 引导和登录控制是物理安全的关键,BIOS 和 GRUB 的密码保护可防止本地非法入侵,临时终端限制可降低维护期间的风险;
  3. John the Ripper 可快速检测弱口令账号,及时督促用户修改复杂密码,避免被暴力破解;
  4. NMAP 可全面扫描网络端口和存活主机,找出开放的危险服务,及时关闭并加固防火墙配置。
相关推荐
酸菜。2 小时前
lspci -tv使用
linux
拾贰_C2 小时前
【mysql |centos |mysql设置】MySQL修改密码并创建用户,系统安全默认开启了密码复杂度检查组件,怎么解决
mysql·centos·系统安全
zzh0812 小时前
Linux系统安全
linux·运维·系统安全
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 5: 长度最小的子数组、无重复字符的最长子串
linux·运维·服务器
YMWM_2 小时前
linux命令行测试是否可以访问google、github、huggingface
linux·运维·github
U盘失踪了2 小时前
VMware® Workstation 17 Pro 解决VMware Tools 安装
linux·运维·服务器
中科三方2 小时前
DNS解析负载均衡:实现原理、核心策略与权威实践
运维·负载均衡
WangJunXiang62 小时前
系统安全及应用
安全·github·系统安全
刘晨鑫12 小时前
系统安全及应用
安全·系统安全