前言
在信息技术高速发展的当下,系统安全成为服务器运维和网络管理的核心环节,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)、应用卸载后残留的账号,可直接删除;对于长期不用但暂无法确定是否删除的账号,可通过usermod或passwd命令锁定:
# 锁定账号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
文件锁定后,无法执行useradd、passwd等修改账号属性的操作,需解锁后才能进行。
1.1.2 密码安全控制
弱密码和长期未更换的密码是系统被暴力破解的主要隐患,管理员可在服务器端限制密码有效期,并强制用户初次 / 下次登录时修改密码。
-
设置密码最大有效天数 修改
/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 -
强制用户下次登录重设密码 适用于批量创建用户或统一要求用户更新密码的场景,以用户 zhangsan 为例:
[root@localhost ~]# chage -d 0 zhangsan该用户下次登录时,会被强制要求修改密码,否则无法进入系统。
1.1.3 命令历史与自动注销
Bash 终端的命令历史机制虽方便操作,但也可能泄露敏感操作(如明文密码输入),同时管理员离开时未注销终端易导致误操作,需通过以下配置降低风险:
-
限制历史命令记录条数 历史命令条数由
HISTSIZE变量控制,默认 1000 条,修改/etc/profile文件影响所有新登录用户 ,通过export命令影响当前用户 ,示例设置为 200 条:# 编辑配置文件,永久生效 [root@localhost ~]# vi /etc/profile HISTSIZE=200 # 当前用户立即生效 [root@localhost ~]# export HISTSIZE=200 -
退出终端自动清空历史命令 修改用户宿主目录的
~/.bash_logout文件,添加清空命令和清屏命令,用户退出 Bash 环境后,历史命令将被自动清除:[root@localhost ~]# vi ~/.bash_logout history -c clear -
设置终端闲置自动注销 由
TMOUT变量控制(单位:秒),同样通过/etc/profile或export配置,示例设置 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 命令,配置步骤如下:
-
将授权用户添加到 wheel 组(以 tsengyia 为例):
[root@localhost ~]# gpasswd -a tsengyia wheel # 确认wheel组成员 [root@localhost ~]# grep wheel /etc/group -
启用 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 配置文件制定不同应用的认证策略。
-
PAM 认证原理 服务程序 → 加载对应 PAM 配置文件(
/etc/pam.d/目录下) → 调用认证模块(/lib/security/目录下) → 完成认证。验证某程序是否支持 PAM 认证,可通过ls /etc/pam.d/ | grep 程序名,例如验证 su:[root@localhost ~]# ls /etc/pam.d/ | grep su -
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_Alias、Host_Alias、Cmnd_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 是系统引导的第一道关卡,需通过以下配置防止从外部设备非法引导:
- 将第一优先引导设备设为系统所在磁盘;
- 禁用光盘、U 盘、网络等其他引导设备(设为 Disabled);
- 将 BIOS 安全级别改为 setup,并设置BIOS 管理密码,防止未授权修改配置。
2.1.2 限制更改 GRUB 引导参数
修改 GRUB 引导参数可实现系统修复,但也可能被用于非法获取系统权限,需为 GRUB 菜单设置密码,仅验证通过后可编辑引导参数。建议使用 PBKDF2 加密密码,配置步骤如下:
-
生成 PBKDF2 加密的 GRUB 密码:
[root@localhost ~]# grub2-mkpasswd-pbkdf2 # 根据提示输入并确认密码,生成加密字符串(需保存) -
备份 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 -
编辑 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 -
重新生成 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
-
从官方网站(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 -
安装编译依赖 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 -
编译完成后,在
../run目录下生成可执行程序john,无需额外安装,直接使用即可。
3.1.2 检测弱口令账号
John the Ripper 直接对/etc/shadow文件(存储用户加密密码)进行检测,步骤如下:
-
复制 shadow 文件到指定目录,修改权限确保可读取:
[root@localhost src]# cp /etc/shadow /root/shadow.txt [root@localhost src]# chmod 644 /root/shadow.txt -
进入 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 系统安全是一个系统性的工程,核心在于从细节入手,层层防护。本文从账号安全、引导登录安全、弱口令检测、端口扫描四个核心方面,讲解了实用的配置策略和工具使用:
- 账号安全是基础,通过清理冗余账号、控制密码有效期、限制 su/sudo 权限,从源头保障身份认证安全;
- 引导和登录控制是物理安全的关键,BIOS 和 GRUB 的密码保护可防止本地非法入侵,临时终端限制可降低维护期间的风险;
- John the Ripper 可快速检测弱口令账号,及时督促用户修改复杂密码,避免被暴力破解;
- NMAP 可全面扫描网络端口和存活主机,找出开放的危险服务,及时关闭并加固防火墙配置。