Linux 系统安全及应用实战教程

前言

在信息技术飞速发展的当下,系统安全成为服务器运维和日常使用中不可忽视的核心问题。Linux 作为服务器端的主流操作系统,其安全防护手段直接决定了系统和数据的安全性。本文将从账号安全控制系统引导和登录控制弱口令检测端口扫描四个核心维度,结合实操命令和配置方法,详细讲解 Linux 系统安全的实用防护策略,内容兼具理论性和实操性,适合 Linux 运维工程师和安全爱好者学习参考。

一、账号安全控制

用户账号是 Linux 系统的身份凭证,账号的安全是系统安全的第一道防线。Linux 提供了完善的账号安全机制,主要包括基本安全措施用户切换与提权两部分,通过对账号、密码、操作权限的精细化管控,从源头降低安全风险。

1.1 基本安全措施

基本安全措施围绕系统账号清理、密码安全控制、命令历史及自动注销展开,是账号安全的基础配置,相关实操命令和配置方法整理如下表:

表格

安全措施 核心目的 实操命令 / 配置方法 注意事项
系统账号清理 - 检查非登录账号 确保系统默认账号禁止终端登录,防止未授权访问 grep "/sbin/nologin$" /etc/passwd 系统默认非登录账号如 bin、daemon、adm 等,其登录 Shell 必须为 /sbin/nologin,禁止人为改动
系统账号清理 - 删除冗余账号 清理无用的系统账号和卸载程序残留账号 userdel 用户名 针对 games 等极少使用的系统账号、应用卸载后未删除的账号,直接删除
系统账号清理 - 锁定长期未用账号 不确定是否删除时,临时禁用账号,保留账号数据 锁定:usermod -L 用户名/passwd -l 用户名查看状态:passwd -S 用户名解锁:usermod -U 用户名/passwd -u 用户名 锁定后账号无法登录,解锁后恢复正常使用
系统账号清理 - 锁定账号配置文件 固定账号后,防止新增 / 删除账号、修改密码等操作 锁定:chattr +i /etc/passwd /etc/shadow查看锁定状态:lsattr /etc/passwd /etc/shadow解锁:chattr -i /etc/passwd /etc/shadow 锁定后无法执行 useradd、passwd 等修改账号的命令,需解锁后操作
密码安全控制 - 设置密码有效期 强制用户定期修改密码,降低密码被破解风险 1. 对新建用户:编辑/etc/login.defs,修改PASS_MAX_DAYS 30(示例为 30 天)2. 对已有用户:chage -M 30 用户名(示例为 30 天) 密码过期后,用户登录时会被强制要求重置密码,否则拒绝登录
密码安全控制 - 强制首次登录改密码 批量创建用户后,要求用户自设密码,提升密码安全性 chage -d 0 用户名 执行后用户下次登录,输入原密码后必须设置新密码才能进入系统
命令历史 - 限制记录条数 减少命令历史泄露的风险,防止操作轨迹和明文密码被窃取 1. 对新登录用户:编辑/etc/profile,修改HISTSIZE=200(示例为 200 条)2. 对当前用户:export HISTSIZE=200 Bash 终端默认记录 1000 条历史命令,可根据安全需求调整
命令历史 - 退出自动清空 退出 Bash 环境后,清除本次登录的命令历史,防止后续查看 编辑用户宿主目录下~/.bash_logout,添加:history -c``clear 该配置仅对当前用户生效,若需全局生效,可修改/etc/skel/.bash_logout(新用户模板)
自动注销 - 设置闲置超时 防止管理员离开后,他人误操作或未授权使用终端 1. 对新登录用户:编辑/etc/profile,添加export TMOUT=600(示例为 600 秒)2. 对当前用户:export TMOUT=600 1. 单位为秒,设置后无输入则自动注销2. 耗时操作时需取消,执行unset TMOUT

1.2 用户切换与提权

Linux 服务器不建议直接使用 root 用户登录,一方面避免误操作导致系统损坏,另一方面降低 root 密码泄露的风险。系统提供susudo两种命令实现用户切换和权限提升,其中 su 用于用户身份切换,sudo 用于精细化的权限提升,二者的核心区别和实操配置如下:

1.2.1 su 命令:用户身份切换

su 命令可实现普通用户与 root 用户、普通用户之间的身份切换,核心特点和安全配置如下:

  1. 基本用法su - 目标用户名,选项-表示切换用户后进入目标用户的登录 Shell 环境,若省略则仅切换身份、不切换环境;从 root 切换为普通用户时,无需验证密码,反之则需要。示例:普通用户 jerry 切换为 root:su - root,输入 root 密码后完成切换。
  2. 安全控制 :默认情况下,Euler 系统禁止普通用户使用 su 命令,通过pam_wheel 认证模块 实现 su 命令的授权使用,仅 wheel 组内用户可使用 su 命令,配置步骤:
    • 步骤 1:将授权用户加入 wheel 组:gpasswd -a 用户名 wheel
    • 步骤 2:验证 wheel 组成员:grep wheel /etc/group
    • 步骤 3:启用 pam_wheel 模块:编辑/etc/pam.d/su,确保存在行auth required pam_wheel.so use_uid(若注释则取消注释)。
  3. 日志记录 :su 命令的切换操作会记录到安全日志/var/log/secure,可通过tail /var/log/secure查看,便于审计。
1.2.2 PAM 认证:可插拔认证模块

PAM(Pluggable Authentication Modules)是 Linux 系统的可插拔认证模块,为 su、login、ftp 等应用提供统一的认证机制,是 su 命令安全控制的底层支撑,核心要点:

  1. 认证原理 :Service(服务,如 su)→ PAM 配置文件(/etc/pam.d/下对应服务的文件)→ pam_*.so 认证模块(/lib/security/下),应用程序将认证请求发送到 PAM 模块,由模块完成安全认证。
  2. 查看 PAM 支持 :执行ls /etc/pam.d/ | grep 服务名,如ls /etc/pam.d/ | grep su,若有结果则表示该服务支持 PAM 认证。
  3. PAM 配置文件格式 :每行一个独立认证过程,分为三个字段:认证类型控制类型PAM 模块及其参数
    • 认证类型:包括认证管理(auth,验证用户名密码)、帐户管理(account,检查账号是否过期 / 允许登录)、密码管理(password,修改密码)、会话管理(session,会话管理和记账)。
    • 控制类型:定义验证结果的处理方式,核心类型如下:
      • required:验证失败仍继续,最终返回 Fail;
      • requisite:验证失败立即结束整个验证过程,返回 Fail;
      • sufficient:验证成功立即返回,不再继续,否则忽略结果;
      • optional:不用于验证,仅显示信息(通常用于 session 类型)。
1.2.3 sudo 命令:精细化权限提升

su 命令切换用户需要知道目标用户密码,而 sudo 命令可让普通用户在无需知道 root 密码的情况下,执行指定的特权命令,是生产环境中最常用的权限管理方式,核心配置和使用方法如下:

  1. 配置文件 :sudo 的配置文件为/etc/sudoers,默认权限 440,必须使用 visudo 工具编辑 (自动检查语法错误,避免配置错误导致 sudo 失效),也可使用 vi 编辑,但保存时需执行:w!强制操作。

  2. 基本授权格式user MACHINE=COMMANDS,包含三个核心部分:

    • user:授权的用户名,或%组名(授权整个用户组,% 为组标识);
    • MACHINE:使用该配置的主机名,一般设为localhost或实际主机名,多主机共用配置时可灵活设置;
    • COMMANDS:允许执行的特权命令,需填写完整路径,多个命令用逗号分隔。
  3. 典型授权示例

    • 授权用户 jerry 在localhost执行 ifconfig 命令:jerry localhost=/sbin/ifconfig
    • 授权 wheel 组用户无需验证密码执行所有命令:%wheel ALL=NOPASSWD: ALL
  4. 别名配置 :当授权用户、主机、命令较多时,可通过别名集中定义(别名必须为大写),分别使用User_Alias(用户别名)、Host_Alias(主机别名)、Cmnd_Alias(命令别名),示例:

    复制代码
    User_Alias OPERATORS=jerry,tom,tsengyia  # 定义用户别名
    Host_Alias MAILSVRS=smtp,pop            # 定义主机别名
    Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum  # 定义命令别名
    OPERATORS MAILSVRS=PKGTOOLS             # 授权别名用户在别名主机执行别名命令
  5. 通配符与取反 :命令部分支持通配符*和取反符号!,用于授权某个目录下的所有命令或排除个别命令,示例:授权用户 syrianer 执行 /sbin/ 下除 ifconfig、route 外的所有命令:syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route

  6. 日志记录 :默认 sudo 操作不记录,编辑/etc/sudoers添加Defaults logfile = "/var/log/sudo",启用 sudo 日志,可通过tail /var/log/sudo查看操作记录。

  7. sudo 命令使用方法

    • 执行特权命令:sudo 命令完整路径,示例:sudo /sbin/ifconfig ens33:0 192.168.1.11/24
    • 验证规则:第一次执行 sudo 需输入当前用户密码,5 分钟内再次执行无需重复验证;
    • 查看授权:sudo -l,输入密码后可查看当前用户的 sudo 授权范围;
    • 日志查看:tail /var/log/sudo,查看所有用户的 sudo 操作记录。

二、系统引导和登录控制

Linux 服务器的远程管理是主流方式,但本地引导和终端登录的安全隐患往往被忽视,尤其是机房环境管控不严格时,非授权人员可通过本地操作篡改系统配置、获取权限。系统引导和登录控制从开关机安全终端及登录控制两方面入手,加强物理和系统层面的防护。

2.1 开关机安全控制

开关机安全控制主要针对 BIOS 引导和 GRUB 引导参数进行配置,防止非授权人员通过光盘、U 盘、修改引导参数等方式进入系统,核心配置步骤如下:

2.1.1 调整 BIOS 引导设置

BIOS 是系统启动的第一道关卡,通过 BIOS 配置限制引导设备,防止从外部介质启动,配置要点:

  1. 第一优先引导设备设为当前系统所在磁盘;
  2. 禁止从光盘、U 盘、网络等外部设备引导,将对应选项设为 "Disabled";
  3. 将 BIOS 安全级别改为 "setup",并设置BIOS 管理密码,防止未授权人员修改 BIOS 配置。
2.1.2 限制更改 GRUB 引导参数

GRUB 是 Linux 系统的引导加载程序,修改 GRUB 引导参数可实现系统修复、单用户模式登录等操作,若未做安全控制,将导致系统权限泄露。为 GRUB 菜单设置密码,仅授权人员可修改引导参数,GRUB2的配置步骤如下(实操命令整理):

  1. 生成 PBKDF2 加密的 GRUB 密码:grub2-mkpasswd-pbkdf2,根据提示输入并确认密码,命令输出加密后的密码字符串(需保存,后续配置使用);

  2. 备份 GRUB 配置文件:

    复制代码
    cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
    cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
  3. 编辑 GRUB 用户配置文件:vim /etc/grub.d/01_users,添加以下内容(替换为步骤 1 生成的加密密码):

    复制代码
    #!/bin/sh -e
    cat <<EOF
    set superusers="root"
    export superusers
    password_pbkdf2 root 此处替换为步骤1生成的加密密码字符串
    EOF
  4. 生成新的 GRUB 配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg

  5. 验证效果:重启系统进入 GRUB 菜单,按 E 键尝试修改引导参数,此时会提示输入用户名和密码,仅输入正确的 root 和 GRUB 密码后,方可编辑引导参数。

注意:禁止使用明文密码配置 GRUB,虽然可直接将加密密码替换为明文,但安全性极低,易被破解。

2.2 终端及登录控制

在服务器维护(如备份、调试)期间,为防止新用户登录系统造成干扰,可通过创建/etc/nologin文件实现临时的登录限制,核心用法:

  1. 禁止普通用户登录touch /etc/nologin,login 程序检测到该文件存在时,将拒绝所有普通用户登录,root 用户不受限制
  2. 恢复正常登录rm -f /etc/nologin,删除该文件后,普通用户可正常登录,也可通过重启系统自动恢复;
  3. 适用场景:仅建议在服务器短期维护时使用,属于临时防护措施,不可长期启用。

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

即使做好了账号和引导的安全控制,系统仍可能存在弱口令开放危险端口 等隐性安全风险。弱口令易被暴力破解,开放不必要的端口则可能被黑客利用,通过专业工具进行检测和扫描,可及时发现并修复这些风险。本文介绍两款主流工具:John the Ripper (弱口令检测)和NMAP(端口扫描),均为开源工具,功能强大且易于使用。

3.1 弱口令检测:John the Ripper

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

3.1.1 下载与安装

John the Ripper 采用源码包安装,需编译后使用,以john-1.8.0.tar.gz为例,安装步骤如下(适用于 CentOS/RHEL/Euler 等系统):

  1. 下载源码包:从官方网站http://www.openwall.com/john/获取稳定版源码包;
  2. 解压源码包:tar zxf john-1.8.0.tar.gz
  3. 进入源码目录:cd john-1.8.0/src
  4. 安装编译依赖:dnf -y install gcc(CentOS 8+/Euler)或yum -y install gcc(CentOS 7);
  5. 编译源码:make clean linux-x86-64(64 位系统),若为 32 位系统则执行make clean linux-x86
  6. 验证编译结果:编译完成后,在../run目录下生成可执行程序john,执行ls ../run | grep john,若有结果则编译成功。

注意 :John the Ripper 无需专门的安装操作,编译后的run目录包含可执行程序、配置文件和字典文件,可复制到任意位置使用。

3.1.2 检测弱口令账号

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

  1. 准备密码文件:复制/etc/shadow到临时目录,避免修改原文件:

    复制代码
    cp /etc/shadow /root/shadow.txt
    chmod 644 /root/shadow.txt  # 赋予读取权限
  2. 进入 run 目录:cd ../run

  3. 执行弱口令检测:./john /root/shadow.txt,工具将自动进行暴力破解,破解出的弱口令会即时输出,格式为密码 (用户名)

  4. 中止检测:若检测时间过长,按Ctrl+C强行终止;

  5. 查看已破解结果:./john --show /root/shadow.txt,可查看所有破解出的弱口令账号和密码。

3.1.3 字典破解

暴力破解效率较低,John the Ripper 支持字典破解,通过指定字典文件(包含常见密码组合),大幅提高弱口令检测效率,核心用法:

  1. 默认字典 :工具自带字典文件password.lst,位于run目录下,包含 3000 多个常见弱口令;
  2. 指定字典破解./john --wordlist=字典文件路径 /root/shadow.txt,示例:./john --wordlist=./password.lst /root/shadow.txt
  3. 清空破解记录 :若需重新检测,执行:> john.pot(清空已破解结果文件),避免工具跳过已破解的密码;
  4. 自定义字典:可根据实际需求编辑字典文件,添加更多常见密码组合,提升检测的全面性。

提示 :密码强度越高,破解所需时间越长,建议用户设置8 位以上 、包含数字、字母、特殊符号的复杂密码,降低被破解的风险。

3.2 端口扫描:NMAP

NMAP 是一款强大的开源端口扫描工具,支持 ping 扫描、多端口检测、OS 识别、UDP/TCP 扫描等多种功能,通过扫描系统开放的端口,可找出不可控的应用服务,及时关闭不必要的端口,减小安全风险。NMAP 适用于单主机和大规模网络扫描,是运维工程师的必备工具。

3.2.1 安装 NMAP

Linux 系统中可通过 YUM/DNF 快速安装 NMAP,操作简单,无需编译:

  • CentOS 7/Euler:yum install -y nmap
  • CentOS 8+/Rocky Linux:dnf install -y nmap

安装完成后,执行nmap -v,若显示版本信息则安装成功。

3.2.2 NMAP 基本用法

NMAP 的基本命令格式:nmap [扫描类型] [选项] <扫描目标>,各参数说明:

  1. 扫描目标:可为主机名、IP 地址、网络地址(如 192.168.4.0/24),多个目标以空格分隔;
  2. 常用选项
    • -p:指定扫描的端口,可指定单个端口(-p 80)、端口范围(-p 1-100)、多个端口(-p 80,443);
    • -n:禁用反向 DNS 解析,加快扫描速度;
  3. 常用扫描类型:NMAP 的扫描类型决定检测方式,直接影响扫描结果,核心类型如下表:

表格

扫描类型 命令参数 扫描原理 适用场景 特点
TCP SYN 扫描(半开扫描) -sS 仅向目标发送 SYN 数据包,收到 SYN/ACK 则认为端口开放,立即断开连接,不建立完整 TCP 连接 常规端口扫描,兼顾速度和隐蔽性 扫描速度快,不易被防火墙检测到,最常用
TCP 连接扫描 -sT 建立完整的 TCP 连接,连接成功则认为端口开放 检测端口是否真正开放,适合无防火墙的内网环境 扫描速度慢,易被系统日志记录
TCP FIN 扫描 -sF 发送 FIN 数据包,开放的端口忽略该数据包,关闭的端口返回 RST 数据包 检测防火墙的健壮性,绕过简单的 SYN 过滤防火墙 可检测防火墙是否仅过滤 SYN 数据包
UDP 扫描 -sU 探测目标主机的 UDP 服务,发送 UDP 数据包,根据响应判断端口状态 检测 UDP 端口开放情况,如 DNS、DHCP 等服务 扫描速度慢,UDP 协议无连接,需等待超时响应
ICMP 扫描(ping 扫描) -sP 类似 ping 命令,仅检测目标主机是否存活,不扫描端口 快速排查网络中存活的主机 扫描速度极快,适合大规模网络主机探测
跳过 ping 检测 -P0 不进行 ping 检测,默认认为所有目标主机存活 检测禁止 ping 的主机,避免因无法 ping 通而放弃扫描 扫描范围广,速度稍慢,适合外网扫描
3.2.3 典型扫描示例

NMAP 的扫描方式灵活,可根据不同需求组合扫描类型和选项,以下为生产环境中最常用的扫描示例,覆盖单主机扫描、网段扫描、指定端口扫描等场景:

示例 1:扫描本机所有常用 TCP/UDP 端口
复制代码
# 扫描本机常用TCP端口
nmap 127.0.0.1
# 扫描本机常用UDP端口
nmap -sU 127.0.0.1

结果解读 :STATE 列表示端口状态,open为开放、filtered为被防火墙过滤、closed为关闭。

示例 2:扫描 192.168.4.0/24 网段的 FTP 服务(21 端口)
复制代码
nmap -p 21 192.168.4.0/24

用途:排查内网中提供 FTP 服务的主机,及时关闭未授权的 FTP 服务。

示例 3:快速检测 192.168.4.0/24 网段的存活主机
复制代码
nmap -n -sP 192.168.4.0/24

特点-n禁用 DNS 解析,加快扫描速度;-sP仅做 ping 检测,不扫描端口,适合快速排查网段内的在线主机。

示例 4:检测 192.168.4.100~200 的文件共享服务(139、445 端口)
复制代码
nmap -p 139,445 192.168.4.100-200

用途:139 和 445 是 SMB 文件共享服务的默认端口,排查内网中开放的文件共享服务,防止文件泄露。

示例 5:扫描目标主机的 1-1000 端口,跳过 ping 检测
复制代码
nmap -P0 -p 1-1000 192.168.4.10

用途:针对禁止 ping 的主机,确保扫描不被遗漏,检测 1-1000 的常用端口开放情况。

3.3 拓展:系统压力测试工具 hping3

除了端口扫描,hping3 是一款常用的网络压力测试工具,可模拟网络攻击包,测试系统和防火墙的抗攻击能力,核心用法示例:

  1. 基础洪水攻击测试 :向 192.168.10.1 的 80 端口发送 TCP SYN 包,模拟连接请求洪水:

    复制代码
    hping3 -c 3 -d 120 -S -w 64 -p 80 --flood 192.168.10.1
  2. 随机源 IP 压力测试 :模拟不同客户端向目标发送 1000 个 TCP SYN 包,测试防火墙的抗 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 窗口大小;
  • -p:目标端口;
  • --flood:洪水模式,快速发送数据包;
  • --rand-source:使用随机源 IP,模拟不同客户端。

注意 :hping3 仅可用于自身服务器的压力测试,禁止用于未授权的网络攻击,否则将承担法律责任。

四、总结

Linux 系统安全是一个系统性的工程,并非单一配置即可实现,需要从账号安全引导登录安全风险检测三个维度进行全方位的防护,本文核心要点总结如下:

  1. 账号安全是基础:通过清理冗余账号、锁定未用账号、设置密码有效期、限制命令历史等措施,从源头保障账号安全;使用 sudo 实现精细化的权限提升,替代直接的 root 登录,降低密码泄露风险。
  2. 引导登录安全是屏障 :通过 BIOS 和 GRUB 的密码配置,防止非授权人员的本地操作;利用/etc/nologin实现临时的登录限制,满足服务器维护的安全需求。
  3. 风险检测是关键:使用 John the Ripper 定期检测弱口令账号,督促用户设置复杂密码;通过 NMAP 扫描开放端口,及时关闭不必要的服务,减小被攻击的面。
  4. 安全防护是长期过程:系统安全并非一劳永逸,需要管理员定期进行安全检测、更新系统补丁、优化安全配置,同时提升安全意识,避免因误操作导致安全漏洞。

本文所介绍的所有操作均基于 Linux 主流发行版(CentOS、Euler、RHEL),命令和配置具有通用性,可直接在生产环境中落地。在实际运维中,可根据系统的业务场景和安全需求,灵活组合各项安全措施,构建更加安全、可靠的 Linux 系统环境

相关推荐
徐子宸3 小时前
金舟软件-AI对话工具-华为网络数通-网络通信基本概念-20260313-未完待续
安全·web安全·网络安全·安全架构·华为网络数通·金舟软件·ai对话工具
Acczdy3 小时前
春秋云境:CVE-2025-64111
安全·网络安全
志栋智能3 小时前
安全超自动化的终极目标:实现自适应安全防护
运维·人工智能·安全·自动化
蛊明3 小时前
Win11 启动 eNSP AR1 报错 40 的解决方法:关闭基于虚拟化的安全(VBS)
安全
Eward-an3 小时前
Gemini认证工具创意开发(技术深度解析)
安全·网络安全·区块链
NewCarRen5 小时前
车载安全(五):车载安全系统的开发过程和安全评估方法
网络·安全
智能工业品检测-奇妙智能5 小时前
化工行业安全体系管理平台
人工智能·安全·圣泉集团·奇妙智能
安全渗透Hacker5 小时前
OpenClaw 威胁分析(中文翻译+表格整理)
网络·人工智能·安全·安全威胁分析·威胁分析
Z1eaf_complete5 小时前
剖析目录遍历漏洞
安全·网络安全