一、账号安全控制:筑牢系统第一道防线
用户账号是访问 Linux 系统的身份凭证,账号的安全配置直接决定了系统的基础安全等级。Linux 的账号安全控制主要围绕账号清理 、密码安全 、操作痕迹管控 和权限提权展开,从源头减少账号层面的安全风险。
1.1 系统账号清理,剔除冗余与风险
Linux 系统安装后会自带大量非登录账号(如 bin、daemon、adm 等),这类账号仅用于维护系统服务,默认登录 Shell 为/sbin/nologin,需确保其配置不被篡改。可通过以下命令查看非登录账号:
bash
grep "/sbin/nologin$" /etc/passwd
对于服务器中长期闲置的用户账号 ,不建议直接删除(防止数据关联问题),可先通过usermod或passwd命令锁定:
bash
usermod -L zhangsan # 锁定账号
passwd -S zhangsan # 查看账号锁定状态
usermod -U zhangsan # 解锁账号
若服务器账号已固定,无需新增或修改,可通过chattr命令锁定账号配置文件/etc/passwd和/etc/shadow,防止恶意篡改:
bash
chattr +i /etc/passwd /etc/shadow # 锁定文件
lsattr /etc/passwd /etc/shadow # 查看锁定状态
chattr -i /etc/passwd /etc/shadow # 解锁文件
1.2 密码安全控制,防止弱口令与暴力破解
简单密码或长期不变的密码是暴力破解的主要目标,管理员可从密码有效期 、强制修改密码两方面配置密码安全策略,兼顾安全性和易用性。
-
配置全局密码有效期 :修改
/etc/login.defs文件,设置PASS_MAX_DAYS参数,适用于新建用户 ,例如下列配置表示密码有效期 30 天:bash
vi /etc/login.defs PASS_MAX_DAYS 30 # 新增/修改该参数 PASS_MIN_LEN 8 # 密码最小长度(仅对新建用户生效) -
修改已有用户密码有效期 :使用
chage命令,适用于已存在的用户,比如设置用户lisi的密码 30 天后过期、7 天前提醒:bash
chage -M 30 -W 7 lisi chage -l lisi # 查看用户密码策略详情 -
强制用户首次登录改密码 :创建新用户后,可设置其密码立即过期,强制用户在第一次登录时修改:
bash
passwd -e wangwu -
PAM 模块强化密码复杂度 :通过 PAM 的
pam_pwquality.so模块,可强制密码包含大小写字母、数字和特殊字符,避免简单密码。编辑/etc/pam.d/password-auth或/etc/pam.d/system-auth,添加如下配置:bash
password requisite pam_pwquality.so retry=3 minlen=10 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1含义:密码最小长度 10 位,至少包含 1 个小写字母、1 个大写字母、1 个数字、1 个特殊字符,最多重试 3 次。
1.3 权限提权安全:sudo 的精细化管控
直接使用root账号登录操作风险极高,一旦误操作或账号泄露,会直接危及整个系统。sudo命令允许普通用户以其他用户(通常是root)的身份执行指定命令,是 Linux 权限管控的核心工具。
-
核心作用 :既避免了直接登录
root的风险,又能灵活分配权限,让普通用户仅能执行必要的管理操作。 -
配置文件 :通过
/etc/sudoers文件(推荐用visudo命令编辑,避免语法错误)实现精细化控制:bash
visudo示例配置:允许用户
zhangsan仅能执行/usr/bin/systemctl restart nginx和/usr/bin/df命令,且无需输入密码:bash
zhangsan ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart nginx, /usr/bin/df -
安全实践 :
- 遵循最小权限原则,只给用户分配完成工作必需的命令权限。
- 避免使用
ALL=(ALL) ALL这类过度授权的配置。 - 可配置
Defaults logfile开启sudo操作日志,方便审计追溯。
1.4 用户切换与环境隔离:su与su -的区别
在运维场景中,经常需要临时切换到其他用户执行操作,su和su -是最常用的切换命令,但两者效果差异很大:
-
su [用户名]:仅切换用户身份,不会加载目标用户的完整环境变量 ,当前目录、PATH 等保持不变,适合临时执行单条命令。bash
su root # 切换到root,但仍在原用户目录 -
su - [用户名]:完整模拟目标用户的登录过程,加载其家目录、Shell 配置文件(如.bashrc、.bash_profile) ,环境变量完全重置,等同于重新登录该用户。bash
su - root # 切换到root并进入root家目录,加载完整环境 -
安全提示 :生产环境中建议优先使用
sudo而非su,因为sudo可以记录每一次提权操作,而su仅记录切换行为,无法追溯具体执行了哪些命令。
二、PAM 安全认证:灵活的用户认证机制
PAM(Pluggable Authentication Modules,可插拔认证模块)是 Linux 系统中一套通用的认证框架,它将认证逻辑与具体应用解耦,让管理员可以为不同服务(如 SSH、登录、sudo)配置不同的认证方式,极大提升了系统认证的灵活性和安全性。
2.1 PAM 的核心作用
- 统一认证入口 :无论是本地登录、SSH 远程登录,还是
sudo提权、FTP 访问,都可以通过 PAM 配置统一的认证规则。 - 灵活扩展认证方式:支持密码认证、密钥认证、双因素认证(如 Google Authenticator)、LDAP 认证等多种方式,无需修改应用程序代码。
- 强化安全策略:除了密码复杂度控制,还能实现登录失败次数限制、时间限制、IP 限制等,有效防范暴力破解。
2.2 典型 PAM 配置示例
以限制 SSH 登录失败次数为例,编辑/etc/pam.d/sshd,添加pam_tally2.so模块:
bash
auth required pam_tally2.so deny=5 unlock_time=1800
account required pam_tally2.so
含义:连续失败 5 次后锁定账号,1800 秒(30 分钟)后自动解锁,防止暴力破解 SSH 服务。
三、端口扫描与安全检测:主动发现系统风险
在完成账号和认证层面的安全配置后,还需要主动扫描系统开放的端口和服务,及时发现未授权访问、弱服务等安全隐患。NMAP是 Linux 下最强大的端口扫描工具,其中 半开扫描(SYN 扫描)是最常用的隐蔽扫描方式。
3.1 NMAP 半开扫描(SYN 扫描)原理
半开扫描也被称为隐形扫描,它不会建立完整的 TCP 连接,因此扫描行为更隐蔽,不易被目标主机的防火墙或日志系统发现。
- 工作流程 :
- 扫描端向目标端口发送SYN 包(请求建立连接)。
- 若端口开放:目标主机回复SYN+ACK 包 (同意建立连接),扫描端立即发送RST 包(中断连接),不完成三次握手。
- 若端口关闭:目标主机回复RST 包(拒绝连接)。
- 核心优势:速度快、隐蔽性强,不会在目标主机留下完整的连接日志,适合渗透测试和安全巡检。
3.2 半开扫描实操命令
执行半开扫描需要 root 权限,命令格式如下:
bash
nmap -sS 192.168.1.100 # -sS 表示启用SYN半开扫描
扫描结果会清晰展示目标主机开放的端口、对应的服务(如 22 端口对应 SSH、80 端口对应 HTTP),方便管理员排查未授权开放的端口。
3.3 其他实用扫描选项
-
-p:指定扫描的端口范围,如-p 1-1000扫描 1-1000 端口。 -
-O:启用操作系统探测,识别目标主机的系统版本。 -
-sV:探测开放端口对应的服务版本。 -
-oN:将扫描结果保存到文件,方便后续分析:bash
nmap -sS -p 1-1000 -oN scan_result.txt 192.168.1.100
四、总结
Linux 系统安全是一个持续优化的过程,本文从账号权限、认证机制、主动扫描三个维度讲解了核心安全配置和工具使用,核心要点如下:
- 账号安全 :锁定冗余账号,通过
chage和 PAM 模块强化密码策略,用sudo精细化分配权限,避免直接使用root。 - 认证安全:利用 PAM 框架为不同服务配置差异化认证规则,如限制登录失败次数、启用双因素认证。
- 主动防御 :定期使用
NMAP半开扫描检测开放端口,及时关闭不必要的服务和端口,减少攻击面。 - 日志审计 :开启
sudo、SSH 等关键操作的日志记录,定期审查日志,发现异常访问行为。