前言
在信息技术飞速发展的当下,系统安全成为服务器运维和日常使用中不可忽视的核心问题。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 密码泄露的风险。系统提供su 和sudo两种命令实现用户切换和权限提升,其中 su 用于用户身份切换,sudo 用于精细化的权限提升,二者的核心区别和实操配置如下:
1.2.1 su 命令:用户身份切换
su 命令可实现普通用户与 root 用户、普通用户之间的身份切换,核心特点和安全配置如下:
- 基本用法 :
su - 目标用户名,选项-表示切换用户后进入目标用户的登录 Shell 环境,若省略则仅切换身份、不切换环境;从 root 切换为普通用户时,无需验证密码,反之则需要。示例:普通用户 jerry 切换为 root:su - root,输入 root 密码后完成切换。 - 安全控制 :默认情况下,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(若注释则取消注释)。
- 步骤 1:将授权用户加入 wheel 组:
- 日志记录 :su 命令的切换操作会记录到安全日志
/var/log/secure,可通过tail /var/log/secure查看,便于审计。
1.2.2 PAM 认证:可插拔认证模块
PAM(Pluggable Authentication Modules)是 Linux 系统的可插拔认证模块,为 su、login、ftp 等应用提供统一的认证机制,是 su 命令安全控制的底层支撑,核心要点:
- 认证原理 :Service(服务,如 su)→ PAM 配置文件(
/etc/pam.d/下对应服务的文件)→ pam_*.so 认证模块(/lib/security/下),应用程序将认证请求发送到 PAM 模块,由模块完成安全认证。 - 查看 PAM 支持 :执行
ls /etc/pam.d/ | grep 服务名,如ls /etc/pam.d/ | grep su,若有结果则表示该服务支持 PAM 认证。 - PAM 配置文件格式 :每行一个独立认证过程,分为三个字段:认证类型 、控制类型 、PAM 模块及其参数 。
- 认证类型:包括认证管理(auth,验证用户名密码)、帐户管理(account,检查账号是否过期 / 允许登录)、密码管理(password,修改密码)、会话管理(session,会话管理和记账)。
- 控制类型:定义验证结果的处理方式,核心类型如下:
- required:验证失败仍继续,最终返回 Fail;
- requisite:验证失败立即结束整个验证过程,返回 Fail;
- sufficient:验证成功立即返回,不再继续,否则忽略结果;
- optional:不用于验证,仅显示信息(通常用于 session 类型)。
1.2.3 sudo 命令:精细化权限提升
su 命令切换用户需要知道目标用户密码,而 sudo 命令可让普通用户在无需知道 root 密码的情况下,执行指定的特权命令,是生产环境中最常用的权限管理方式,核心配置和使用方法如下:
-
配置文件 :sudo 的配置文件为
/etc/sudoers,默认权限 440,必须使用 visudo 工具编辑 (自动检查语法错误,避免配置错误导致 sudo 失效),也可使用 vi 编辑,但保存时需执行:w!强制操作。 -
基本授权格式 :
user MACHINE=COMMANDS,包含三个核心部分:- user:授权的用户名,或
%组名(授权整个用户组,% 为组标识); - MACHINE:使用该配置的主机名,一般设为localhost或实际主机名,多主机共用配置时可灵活设置;
- COMMANDS:允许执行的特权命令,需填写完整路径,多个命令用逗号分隔。
- user:授权的用户名,或
-
典型授权示例 :
- 授权用户 jerry 在localhost执行 ifconfig 命令:
jerry localhost=/sbin/ifconfig - 授权 wheel 组用户无需验证密码执行所有命令:
%wheel ALL=NOPASSWD: ALL
- 授权用户 jerry 在localhost执行 ifconfig 命令:
-
别名配置 :当授权用户、主机、命令较多时,可通过别名集中定义(别名必须为大写),分别使用
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 # 授权别名用户在别名主机执行别名命令 -
通配符与取反 :命令部分支持通配符
*和取反符号!,用于授权某个目录下的所有命令或排除个别命令,示例:授权用户 syrianer 执行 /sbin/ 下除 ifconfig、route 外的所有命令:syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route -
日志记录 :默认 sudo 操作不记录,编辑
/etc/sudoers添加Defaults logfile = "/var/log/sudo",启用 sudo 日志,可通过tail /var/log/sudo查看操作记录。 -
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 配置限制引导设备,防止从外部介质启动,配置要点:
- 将第一优先引导设备设为当前系统所在磁盘;
- 禁止从光盘、U 盘、网络等外部设备引导,将对应选项设为 "Disabled";
- 将 BIOS 安全级别改为 "setup",并设置BIOS 管理密码,防止未授权人员修改 BIOS 配置。
2.1.2 限制更改 GRUB 引导参数
GRUB 是 Linux 系统的引导加载程序,修改 GRUB 引导参数可实现系统修复、单用户模式登录等操作,若未做安全控制,将导致系统权限泄露。为 GRUB 菜单设置密码,仅授权人员可修改引导参数,GRUB2的配置步骤如下(实操命令整理):
-
生成 PBKDF2 加密的 GRUB 密码:
grub2-mkpasswd-pbkdf2,根据提示输入并确认密码,命令输出加密后的密码字符串(需保存,后续配置使用); -
备份 GRUB 配置文件:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak cp /etc/grub.d/00_header /etc/grub.d/00_header.bak -
编辑 GRUB 用户配置文件:
vim /etc/grub.d/01_users,添加以下内容(替换为步骤 1 生成的加密密码):#!/bin/sh -e cat <<EOF set superusers="root" export superusers password_pbkdf2 root 此处替换为步骤1生成的加密密码字符串 EOF -
生成新的 GRUB 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg; -
验证效果:重启系统进入 GRUB 菜单,按 E 键尝试修改引导参数,此时会提示输入用户名和密码,仅输入正确的 root 和 GRUB 密码后,方可编辑引导参数。
注意:禁止使用明文密码配置 GRUB,虽然可直接将加密密码替换为明文,但安全性极低,易被破解。
2.2 终端及登录控制
在服务器维护(如备份、调试)期间,为防止新用户登录系统造成干扰,可通过创建/etc/nologin文件实现临时的登录限制,核心用法:
- 禁止普通用户登录 :
touch /etc/nologin,login 程序检测到该文件存在时,将拒绝所有普通用户登录,root 用户不受限制; - 恢复正常登录 :
rm -f /etc/nologin,删除该文件后,普通用户可正常登录,也可通过重启系统自动恢复; - 适用场景:仅建议在服务器短期维护时使用,属于临时防护措施,不可长期启用。
三、弱口令检测与端口扫描
即使做好了账号和引导的安全控制,系统仍可能存在弱口令 和开放危险端口 等隐性安全风险。弱口令易被暴力破解,开放不必要的端口则可能被黑客利用,通过专业工具进行检测和扫描,可及时发现并修复这些风险。本文介绍两款主流工具: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 等系统):
- 下载源码包:从官方网站http://www.openwall.com/john/获取稳定版源码包;
- 解压源码包:
tar zxf john-1.8.0.tar.gz; - 进入源码目录:
cd john-1.8.0/src; - 安装编译依赖:
dnf -y install gcc(CentOS 8+/Euler)或yum -y install gcc(CentOS 7); - 编译源码:
make clean linux-x86-64(64 位系统),若为 32 位系统则执行make clean linux-x86; - 验证编译结果:编译完成后,在
../run目录下生成可执行程序john,执行ls ../run | grep john,若有结果则编译成功。
注意 :John the Ripper 无需专门的安装操作,编译后的run目录包含可执行程序、配置文件和字典文件,可复制到任意位置使用。
3.1.2 检测弱口令账号
John the Ripper 直接对/etc/shadow文件(存储用户加密密码)进行检测,实操步骤如下:
-
准备密码文件:复制
/etc/shadow到临时目录,避免修改原文件:cp /etc/shadow /root/shadow.txt chmod 644 /root/shadow.txt # 赋予读取权限 -
进入 run 目录:
cd ../run; -
执行弱口令检测:
./john /root/shadow.txt,工具将自动进行暴力破解,破解出的弱口令会即时输出,格式为密码 (用户名); -
中止检测:若检测时间过长,按
Ctrl+C强行终止; -
查看已破解结果:
./john --show /root/shadow.txt,可查看所有破解出的弱口令账号和密码。
3.1.3 字典破解
暴力破解效率较低,John the Ripper 支持字典破解,通过指定字典文件(包含常见密码组合),大幅提高弱口令检测效率,核心用法:
- 默认字典 :工具自带字典文件
password.lst,位于run目录下,包含 3000 多个常见弱口令; - 指定字典破解 :
./john --wordlist=字典文件路径 /root/shadow.txt,示例:./john --wordlist=./password.lst /root/shadow.txt; - 清空破解记录 :若需重新检测,执行
:> john.pot(清空已破解结果文件),避免工具跳过已破解的密码; - 自定义字典:可根据实际需求编辑字典文件,添加更多常见密码组合,提升检测的全面性。
提示 :密码强度越高,破解所需时间越长,建议用户设置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 [扫描类型] [选项] <扫描目标>,各参数说明:
- 扫描目标:可为主机名、IP 地址、网络地址(如 192.168.4.0/24),多个目标以空格分隔;
- 常用选项 :
-p:指定扫描的端口,可指定单个端口(-p 80)、端口范围(-p 1-100)、多个端口(-p 80,443);-n:禁用反向 DNS 解析,加快扫描速度;
- 常用扫描类型: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 是一款常用的网络压力测试工具,可模拟网络攻击包,测试系统和防火墙的抗攻击能力,核心用法示例:
-
基础洪水攻击测试 :向 192.168.10.1 的 80 端口发送 TCP SYN 包,模拟连接请求洪水:
hping3 -c 3 -d 120 -S -w 64 -p 80 --flood 192.168.10.1 -
随机源 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 系统安全是一个系统性的工程,并非单一配置即可实现,需要从账号安全 、引导登录安全 、风险检测三个维度进行全方位的防护,本文核心要点总结如下:
- 账号安全是基础:通过清理冗余账号、锁定未用账号、设置密码有效期、限制命令历史等措施,从源头保障账号安全;使用 sudo 实现精细化的权限提升,替代直接的 root 登录,降低密码泄露风险。
- 引导登录安全是屏障 :通过 BIOS 和 GRUB 的密码配置,防止非授权人员的本地操作;利用
/etc/nologin实现临时的登录限制,满足服务器维护的安全需求。 - 风险检测是关键:使用 John the Ripper 定期检测弱口令账号,督促用户设置复杂密码;通过 NMAP 扫描开放端口,及时关闭不必要的服务,减小被攻击的面。
- 安全防护是长期过程:系统安全并非一劳永逸,需要管理员定期进行安全检测、更新系统补丁、优化安全配置,同时提升安全意识,避免因误操作导致安全漏洞。
本文所介绍的所有操作均基于 Linux 主流发行版(CentOS、Euler、RHEL),命令和配置具有通用性,可直接在生产环境中落地。在实际运维中,可根据系统的业务场景和安全需求,灵活组合各项安全措施,构建更加安全、可靠的 Linux 系统环境