news 2026/4/27 6:55:23

【Linux 基础知识系列:第二百零三篇】Linux 系统账户安全加固

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux 基础知识系列:第二百零三篇】Linux 系统账户安全加固

一、简介:为什么要“折腾”账户安全?

  • MITRE ATT&CK矩阵把“Valid Accounts”列为 Top 1 入口:

    • 2022 年 80% 勒索软件通过弱口令/爆破 root入场。

  • 合规要求

    • 等保 2.0 要求“默认账户管理、口令复杂度、权限最小化”。

    • SOC2、ISO27001 审计首查sudoersshadow配置。

  • 现实痛点

    • 开发图方便开PasswordAuthentication yes + PermitRootLogin yes,上线三天被爆破 2 万次。

掌握“账户加固”=低成本把 90% 脚本小子挡在门外,是 Linux 运维、DevOps、云原生安全最划算的投入。


二、核心概念:6 个关键词先搞懂

名词一句话说明本文操作文件
rootUID=0 超级用户,可写任意文件/etc/passwd/etc/ssh/sshd_config
sudo授权普通用户以 root 身份执行指定命令/etc/sudoers
PAMPluggable Authentication Modules,管控密码/会话/etc/pam.d/{system-auth,password-auth}
shadow保存哈希口令与过期策略/etc/shadow
SSH 密钥非对称认证,弃用口令~/.ssh/authorized_keys
UID/GID用户/组 ID,<1000 为系统保留useradd -u 2023

三、环境准备:3 分钟拉起实验机

  1. 系统

    • CentOS Stream 9 / Debian 11(内核 ≥5.10)

  2. 权限

    • 全程需 root,建议云主机快照备份

  3. 安装补充包

    # CentOS sudo dnf install -y policycoreutils-python-utils # Debian sudo apt install -y libpam-pwquality
  4. 实验目录

    mkdir -p ~/security-lab && cd ~/security-lab

四、实际案例与步骤:5 大关卡,复制即运行

每段脚本均可chmod +x xxx.sh && ./xxx.sh直接执行,已加set -euo pipefail防呆。


4.1 禁用 root 远程登录:一键脚本

场景:防止爆破,保留本地终端应急。
文件/etc/ssh/sshd_config

#!/usr/bin/env bash # file: 01-disable-root-sshd.sh set -euo pipefail CONF=/etc/ssh/sshd_config cp $CONF ${CONF}.bak.$(date +%F) # 1. 关闭 root 远程 sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' $CONF sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' $CONF # 2. 关闭密码认证(强制密钥) sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' $CONF sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' $CONF # 3. 重启生效 systemctl restart sshd echo "✔ root 远程登录已禁用,请确保普通用户密钥已部署"

验证

ssh root@127.0.0.1 # 预期:Permission denied (publickey).

4.2 密码复杂度策略:PAM 一招搞定

场景:防止“123456/Qweasd”拖库。
文件:CentOS/etc/pam.d/system-auth;Debian/etc/pam.d/common-password

#!/usr/bin/env bash # file: 02-password-policy.sh set -euo pipefail # CentOS & Debian 通用模块 PWQUALITY=/etc/security/pwquality.conf cp $PWQUALITY ${PWQUALITY}.bak cat > $PWQUALITY <<'EOF' # 最小长度 12,大小写+数字+特殊字符各 1 minlen = 12 minclass = 4 # 禁止与旧密码重复 3 次 maxrepeat = 3 # 3 次失败锁定 300 秒(faillock 见下节) EOF echo "✔ 密码策略已更新,立即对新用户生效"

测试

useradd testuser echo "Test@123456" | passwd testuser # 预期:BAD PASSWORD: is too simple

4.3 失败锁定 + 解锁:faillock 模块

场景:防暴力爆破。
文件/etc/pam.d/system-auth/common-auth

#!/usr/bin/env bash # file: 03-faillock.sh set -euo pipefail # 1. 备份 cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak # 2. 插入 faillock 行(CentOS 示例) sed -i '/^auth.*pam_unix.so/a auth required pam_faillock.so preauth silent audit deny=3 unlock_time=300' /etc/pam.d/system-auth sed -i '/^auth.*pam_unix.so/a auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300' /etc/pam.d/system-auth # Debian 用 pam_tally2 或 pam_faillock,同理 # 3. 查看/手动解锁 echo "查看锁定列表:" faillock echo "解锁用户 testuser:" faillock --user testuser --reset

4.4 最小化 sudo:白名单机制

场景:开发只给systemctl restart nginx,不给全 root。
工具visudo

#!/usr/bin/env bash # file: 04-sudo-whitelist.sh set -euo pipefail # 1. 创建运维组 groupadd -g 2023 ops # 2. 追加 sudoers(使用 EDITOR=vi 避免语法错误) tee /etc/sudoers.d/ops <<'EOF' # 仅允许 ops 组用户执行指定命令 %ops ALL=(root) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl status nginx, /bin/journalctl -u nginx EOF # 3. 把开发加入组 usermod -aG ops dev1 echo "✔ dev1 登录后执行:sudo systemctl restart nginx"

验证

su - dev1 sudo systemctl restart nginx # 成功 sudo reboot # 失败:not allowed

4.5 账户生命周期:自动清理“幽灵”账号

场景:项目结束,外包账户无人删除,成为后门。
策略:90 天未登录即失效。

#!/usr/bin/env bash # file: 05-user-audit.sh set -euo pipefail # 1. 列出最近 90 天未登录的普通用户(UID≥1000) awk -F: '$3>=1000 && $7 !~ /nologin|false/ {print $1}' /etc/passwd | while read user; do lastlog -u "$user" | grep -q "Never\|>90 days" && echo "Stale user: $user" done > stale-users.txt # 2. 批量失效(人工复核后再执行) while read user; do chage -E0 "$user" # 立即过期 usermod -L "$user" # 锁定 done < stale-users.txt

建议:把脚本加入月度 Cron,输出邮件给安全团队。


五、常见问题与解答(FAQ)

问题现象解决
visudosyntax error手动改/etc/sudoers务必用visudo -c检查,错误会无法 sudo
设置PasswordAuthentication no后密钥也没法登录未上传公钥提前ssh-copy-id 普通用户,保留一跳终端不退出验证
faillock 不生效仍无限次尝试确认 PAM 行顺序,faillock 必须放在 pam_unix 前
锁定 root 自己root 被 faillock 锁用单用户模式或云平台 VNC 救援,执行faillock --user root --reset
外包拒绝过期业务说“还要用”走审批流,延长90+90 天,留审计记录

六、实践建议与最佳实践

  1. 变更“三跳”原则
    改配置前 → 开第二终端跳板 → 验证成功再退出,防止把自己锁死。

  2. 配置即代码(IaC)
    把所有改动写成 Ansible playbook,Git 版本管理,回滚 1 秒完成。

  3. 密钥先行,密码后备
    强制ed25519密钥:ssh-keygen -t ed25519 -C ops@company
    密码仅给应急,且 12 位随机:pwgen -sy 12 1

  4. sudo 审计
    开启log_output

    Defaults log_output

    日志集中到 Graylog/ELK,发现sudo bash立即告警。

  5. 定期基线扫描
    用 Lynis 或 OpenSCAP 每周跑

    lynis audit system --profile custom.prf
  6. 云上增强

    • AWS 用 IAM Role + Systems Manager,弃用 SSH 密钥,零密码。

    • 阿里云启用“安骑士”防暴力,与 faillock 双保险。


七、总结:一张脑图带走全部要点

账户安全加固 ├─ 远程:root 禁止 / 密钥认证 / 修改端口 ├─ 密码:PAM 复杂度 / 90 天过期 / faillock 3 次锁定 ├─ 权限:sudo 白名单 / 日志审计 ├─ 清理:幽灵账号 / 定期基线 └─ 文化:配置即代码 + 双终端验证

完成本文 5 个脚本,你的服务器将:

  • 减少 90% ssh 爆破流量

  • 满足等保/ISO 审计口令要求

  • 杜绝“离职员工账户还能登”尴尬

把脚本纳入 GitLab CI,每次上架新节点自动跑一遍——让“账户安全”从一次性救火,变成可持续、可审计、可回滚的例行工程。祝你加固顺利,远离“裸奔”!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 7:09:00

通达信彩带表示的macd

{}W:1; M:1; MM:9*M; SHORT:MM*4/3; LONG:MM*26/9; DIFF:(EMA(CLOSE,SHORT)-EMA(CLOSE,LONG)); DEA:EMA(DIFF,MM),COLOR58FF58; MACD:2*(DIFF-DEA),COLORFFFF00,LINETHICK0; 红柱:DRAWBAND(MACD,RGB(180,50,50),0,RGB(0,128,0)); 绿柱:DRAWBAND(0,RGB(0,128,0),MACD,RGB(180,50…

作者头像 李华
网站建设 2026/4/26 14:25:11

双机热备全景剖析:从技术原理到角色视角的深度解构【20251217】001篇

文章目录 双机热备全景剖析:从技术原理到角色视角的深度解构 开篇:为何“永不宕机”成为数字时代的生死线? 第一章 本源探究:3W1H框架解构双机热备核心 1.1 WHAT(是什么)—— 技术本质的多层透视 1.2 WHY(为什么)—— 业务连续性的数字经济学 1.3 WHERE(用在哪里)——…

作者头像 李华
网站建设 2026/4/22 0:37:05

双机热备:从背景到实践的深度剖析【20251217】002篇

文章目录 **双机热备:从背景到实践的深度剖析** **前言:为什么需要“双机热备”?** 第一章:What —— 什么是双机热备? 1.1 定义(专业角度) 1.2 大白话解释(生活类比) 第二章:Why —— 为什么要用双机热备? 2.1 技术动因:单点故障是万恶之源 (1)硬件层面不可靠性…

作者头像 李华
网站建设 2026/4/23 16:54:42

《Python 数据序列化与反序列化全景解析:从基础到最佳实践》

《Python 数据序列化与反序列化全景解析&#xff1a;从基础到最佳实践》 一、开篇引入&#xff1a;为什么要关注序列化&#xff1f; 在现代软件开发中&#xff0c;数据的跨平台传输与持久化是不可或缺的环节。无论是 Web API 的 JSON 响应、机器学习模型的保存与加载&#xff…

作者头像 李华
网站建设 2026/4/24 16:08:02

零基础:100个小案例玩转Python软件开发!第五节:用户登录

欢迎回到我们的 《零基础&#xff1a;100个小案例玩转Python软件开发&#xff01;》 系列&#xff01;在本节课&#xff0c;我将教大家如何开发一个可以登录的界面。 我们先在PyMe中创建一个对话框窗口程序。 虽然这只是一个PyMe中的模版程序&#xff0c;但它具备一个简单的登录…

作者头像 李华