铜墙铁壁:Linux 账户安全深度加固指南,让你的系统坚不可摧!

admin 2025年6月5日16:45:49评论2 views字数 7173阅读23分54秒阅读模式

嗨,各位 Linux 探索者和系统守护者!

在数字世界的攻防战中,账户安全是抵御入侵的第一道雄关,也是最容易被忽视的薄弱环节。我们将深入挖掘,如何为这些账户构建起“铜墙铁壁”,让你系统在面对日益复杂的网络威胁时,也能稳如泰山!

这不仅仅是一份指南,更是一套能让你的 Linux 系统安全等级飙升的实战秘籍。准备好升级你的安全技能了吗?Let's dive in! 🚀

铜墙铁壁:Linux 账户安全深度加固指南,让你的系统坚不可摧!

🔑 一、强密码策略:不止于“复杂”,更在于“智慧”

弱密码如同虚掩的城门,是攻击者的首选突破口。一个真正强大的密码策略,需要多维度考量。

1. 密码复杂度:让猜测和暴力破解难上加难

仅仅要求“字母+数字”已经不够了,我们需要更细致的规则。

  • 实现工具:pam_pwquality (现代Linux发行版主流) 或 pam_cracklib (一些较旧系统仍在使用)。
  • 核心配置文件:/etc/security/pwquality.conf (对于 pam_pwquality)。
    • 基本要求:

      minlen = 12

      :密码最小长度,推荐至少12位,越长越好。
    • dcredit = -1:至少包含1个数字。
    • ucredit = -1:至少包含1个大写字母。
    • lcredit = -1:至少包含1个小写字母。
    • ocredit = -1:至少包含1个特殊字符(如 !@#$%^&*())。
    • 增强要求:
    • difok = 5 : 新密码与旧密码至少需要有5个字符不同,防止简单修改。
    • maxrepeat = 3:不允许连续重复同一字符超过3次 (例如, "aaaa"会被拒绝)。
    • maxsequence = 4:不允许超过4个字符的有序序列 (例如, "1234", "abcd")。
    • gecoscheck = 1:检查密码是否与用户的 GECOS 字段(如用户名、全名)中的词语过于相似。
    • dictcheck = 1:启用字典检查,防止使用常见单词作为密码(需要配置字典路径)。
    • badwords = admin administrator user root:自定义禁用词列表。
    • enforce_for_root = yes:强烈建议root用户也遵守此策略。
    • retry = 3:用户在密码不合规时,允许尝试设置的次数。
  • PAM模块配置:编辑 /etc/pam.d/system-auth (RHEL/Fedora/CentOS) 或 /etc/pam.d/common-password (Debian/Ubuntu)。 在 password 栈中,确保 pam_pwquality.so (或 pam_cracklib.so) 被正确调用,通常在 pam_unix.so 之前,并设为 requisite 或 required
# 示例 (RHEL/Fedora 系):
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
    • requisite: 此模块失败,则整个栈立即失败。
    • required: 此模块失败,整个栈最终会失败,但后续模块仍会执行。

2. 密码老化 (Password Aging):动态防御的关键

静态不变的密码更容易受到长期破解尝试和内部泄露的威胁。

  • 系统默认 (/etc/login.defs): 为新创建的用户设定基线。
    • PASS_MAX_DAYS 90:密码最长有效期90天。到期后用户必须修改密码才能登录。
    • PASS_MIN_DAYS 7:密码最短使用期7天。防止用户刚改完密码就立刻改回旧密码。
    • PASS_WARN_AGE 14:密码到期前14天开始向用户发出警告。
  • 用户级管理 (chage): 对现有用户进行精细化设置。
sudo chage -l <用户名>              # 查看指定用户的密码老化信息
sudo chage -M 90 -m 7 -W 14 <用户名> # 一次性设置最长、最短、警告期
sudo chage -E YYYY-MM-DD <用户名>   # 设置账户的过期日期 (到期后账户无法使用)
sudo chage -I 30 <用户名>           # 密码过期后,若用户连续30天未登录,则账户被锁定 (慎用,确保用户知晓)
sudo chage -d 0 <用户名>            # 强制用户在下次登录时立即修改密码

3. 密码历史 (Password History):杜绝“旧瓶装新酒”

防止用户在多个旧密码之间来回切换,降低密码被猜中的风险。

  • 实现方式: 主要通过 pam_unix.so 模块的 remember=N 选项。
  • PAM配置 (已在上方复杂度示例中包含):
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
  • remember=5 表示系统会记住用户最近使用过的5个密码(哈希值)。这些哈希值通常存储在 /etc/security/opasswd 文件中(确保此文件权限安全,通常为 600,所有者 root)。
  • pam_pwhistory 模块: 如果需要更高级的密码历史管理功能,可以考虑使用 pam_pwhistory.so

二、账户锁定机制:暴力破解的“终结者”

面对无休止的密码尝试,账户锁定是简单粗暴但极其有效的防御手段。

  • 核心工具:pam_faillock (现代系统首选,功能更完善) 取代了旧的 pam_tally2

  • 工作原理: 监控用户的登录失败尝试。当失败次数达到预设阈值时,账户会被临时锁定一段时间,或者直到管理员手动解锁。

  • PAM 配置详解:需要在 PAM 配置文件(如 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth,或 Debian/Ubuntu 系的 common-auth 和 common-account)的 auth 和 account 两个选项中进行配置。

    在 auth 附近添加 (顺序很重要):

#%PAM-1.0
auth        required      pam_env.so
auth        required      pam_faillock.so preauth silent audit deny=5 unlock_time=1800 even_deny_root
# ... (其他 pam_unix.so 等模块)
auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=1800 even_deny_root
auth        sufficient    pam_unix.so nullok try_first_pass
# ...
  • 在 account 添加:

account     required      pam_unix.so
account     required      pam_faillock.so
# ...
  • 这一行确保在账户管理阶段(例如检查账户是否过期)也应用 faillock 规则。

    • preauth: 在其他认证模块(如密码检查)之前执行,用于判断账户是否已被锁定。如果已锁定,则直接拒绝。
    • authfail: 在其他认证模块(如 pam_unix.so)认证失败后执行,用于记录失败尝试。
    • deny=5: 允许的最大失败尝试次数。
    • unlock_time=1800: 锁定时间(秒),这里是30分钟。设为 0 表示永久锁定,需管理员介入。
    • even_deny_root: 对 root 用户也生效此锁定策略 (务必谨慎!确保你有其他方式恢复对 root 的访问,如单用户模式)。
    • silent: 不向用户显示尝试次数等详细信息。
    • audit: 记录失败尝试到审计日志。
  • 配置文件 (/etc/security/faillock.conf): 可以为 pam_faillock 设置全局默认值,例如:

deny = 5
unlock_time = 1800
dir = /var/run/faillock # 存储失败记录的目录
audit
silent
# local_users_only
# even_deny_root (建议在 PAM 文件中按需配置)
  • 管理与解锁:

sudo faillock --user <用户名>              # 查看用户的失败尝试记录和锁定状态
sudo faillock --user <用户名> --reset      # 重置失败记录并解锁用户
  • 潜在风险: 如果 unlock_time 设置过长或 deny 阈值过低,可能会被恶意用于针对性地锁定合法用户账户,造成拒绝服务 (DoS)。需要权衡。

铜墙铁壁:Linux 账户安全深度加固指南,让你的系统坚不可摧!

🎩 三、sudo 权限的审慎使用:最小权限的艺术

sudo 是 Linux 权限管理的神器,但“能力越大,责任越大”。

  • 告别 root 直登: 养成使用普通账户登录,通过 sudo 执行特权命令的习惯。
  • 按需精准授权: 并非所有管理员都需要完整的 root 权限。通过将用户添加到特定用户组 (sudo 或 wheel) 是常见做法,但更安全的是通过 /etc/sudoers 文件进行细粒度授权。
  • visudo 命令:永远使用 visudo 命令编辑 /etc/sudoers 文件! 它会在保存前进行语法检查,防止因配置错误导致 sudo 彻底瘫痪。
  • 细粒度规则示例:
# 用户别名
User_Alias  WEB_ADMINS = userA, userB
# 命令别名
Cmnd_Alias APACHE_CTRL = /usr/sbin/service httpd *, /usr/bin/systemctl restart httpd, /usr/bin/systemctl status httpd
# 授权规则
WEB_ADMINS ALL = APACHE_CTRL
  • 上述例子允许 userA 和 userB 执行重启和查看 Apache 状态的命令。
  • NOPASSWD 的双刃剑: 谨慎使用 NOPASSWD: 标签。它允许用户执行特定 sudo 命令时无需输入密码,虽然方便,但也大大增加了安全风险,尤其是在脚本中或被恶意利用时。仅用于严格受限且无其他替代方案的场景。
  • sudo 日志审计:sudo 的所有操作都会被记录。在 Debian/Ubuntu 上通常是 /var/log/auth.log,在 RHEL/CentOS 上是 /var/log/secure。定期检查这些日志,关注可疑的命令执行。

🌐 四、SSH 安全配置:远程堡垒的加固秘诀

SSH 是远程管理 Linux 系统的生命线,其安全配置不容忽视。

  • 禁止 root 直接登录:编辑 /etc/ssh/sshd_config,确保或修改:

PermitRootLogin no
  • 这强制所有管理员先以普通用户身份登录,再通过 sudo 获取权限,增加了审计路径和一层防护。

  • 强制使用密钥认证,禁用密码认证:SSH 密钥对远比密码安全,能有效防止暴力破解。

PasswordAuthentication no      # 禁用密码登录
PubkeyAuthentication yes       # 启用公钥认证
ChallengeResponseAuthentication no # 禁用挑战-响应认证 (也可能允许密码)
  • 确保用户已正确配置其 SSH 公钥到服务器的 ~/.ssh/authorized_keys 文件。

  • 更改默认 SSH 端口 (可选,有限效果):将默认的 Port 22 改为其他不常用的高位端口 (例如 Port 2222)。这不能阻止有针对性的攻击,但可以减少大量自动化的扫描和初级脚本小子。注意修改后防火墙也要放行新端口。

  • 限制登录尝试次数和时间:

LoginGraceTime 30s   # 登录操作的最长等待时间 (例如30秒)
MaxAuthTries 3       # 每个连接允许的最大认证尝试次数
  • 配置 ClientAliveInterval防止 SSH 会话因网络问题或长时间不活动而异常断开,或及时踢掉僵尸会话。

ClientAliveInterval 60      # 服务器每60秒向客户端发送一次存活消息
ClientAliveCountMax 3     # 客户端连续3次未响应则断开连接
  • 使用 fail2banfail2ban 是一个入侵阻止软件框架,它可以扫描日志文件(如 SSHD 日志),并根据配置的规则(如连续多次密码错误)自动更新防火墙规则来阻止恶意 IP 地址。

  • 限制特定用户/组登录:

AllowUsers user1 user2@host_pattern
AllowGroups ssh_allowed_group
# DenyUsers evil_user
# DenyGroups unwanted_group
  • 启用双因素认证 (2FA/MFA) for SSH (高级):可以集成 PAM 模块如 pam_google_authenticator (Google Authenticator) 或 pam_duo (Duo Security) 来为 SSH 登录增加一层额外的动态密码验证。

修改 sshd_config 后,务必重启 SSH 服务以使配置生效 (例如 sudo systemctl restart sshd 或 sudo service ssh restart),并确保在断开当前会话前,能从新终端成功登录!

🔎 五、定期审计与监控:化身“鹰眼”,洞察秋毫

持续的安全监控和定期审计是主动发现和响应威胁的关键。

  • 登录活动追踪:

    • last: 显示最近成功登录系统的用户列表及其登录时间、来源IP。
    • lastb: (通常需要root权限) 显示登录失败的尝试记录,对于发现暴力破解尝试非常有用。
    • lastlog: 显示系统中所有用户最后一次登录的信息。
    • whow: 查看当前正登录在系统上的用户及其活动。
  • auditd (Linux Audit Daemon):Linux 内核级的审计系统,功能非常强大,可以记录非常详细的系统调用和文件访问信息。

    • 配置文件: 规则定义在 /etc/audit/rules.d/ 目录下的 .rules 文件中 (例如 audit.rules)。
    • 简单规则示例 (监控对 /etc/passwd 的写操作和属性更改):
-w /etc/passwd -p wa -k passwd_changes
    • 日志查看: 使用 ausearch -k passwd_changes 或 aureport 等命令分析审计日志 (通常在 /var/log/audit/audit.log)。
    • auditd 配置和日志分析有一定复杂度,但对于合规性和深度追踪至关重要。
  • 文件完整性监控 (FIM):检测重要系统文件或配置文件是否被未经授权的修改。

    • 工具: AIDE (Advanced Intrusion Detection Environment), Tripwire (有开源版和商业版), Samhain。
    • 工作原理:创建系统关键文件的基线数据库(包含校验和、权限、时间戳等),定期与当前状态比较,发现变更则报警。
  • 日志集中管理与分析:将多台服务器的日志(系统日志、应用日志、安全日志等)集中发送到专门的日志管理平台(如 ELK Stack - Elasticsearch, Logstash, Kibana;Splunk;Graylog),进行统一存储、搜索、分析和告警。

🛡️ 六、系统加固与其它注意事项

账户安全是整体系统安全的一部分,还需要其他层面的配合。

  • 物理安全: 对于物理服务器,确保机房的物理访问控制严格。
  • 及时禁用/删除不必要的账户: 定期审查用户列表,对于已离职员工、测试账户或不再使用的服务账户,应立即禁用 (sudo usermod -L 用户名 或 sudo passwd -l 用户名) 或在确认无用后删除 (sudo userdel -r 用户名)。对于过期账户,可以用 sudo chage -E 0 用户名 使其立即过期。
  • 用户安全意识培训: 最薄弱的环节往往是人。对所有用户进行安全意识培训,强调创建强密码、警惕钓鱼邮件和社交工程、不随意执行未知脚本的重要性。
  • 最小化安装与服务: 系统中只安装必要的软件包,只运行必要的服务,减少攻击面。
  • 防火墙配置: 使用 ufw (Uncomplicated Firewall), firewalld (RHEL/CentOS/Fedora 默认) 或直接使用 iptables/nftables 配置严格的防火墙规则,只开放必要的端口。
  • 强制访问控制 (MAC): 对于安全性要求极高的环境,可以考虑启用 SELinux (Security-Enhanced Linux) 或 AppArmor。它们提供了比传统自主访问控制 (DAC) 更细粒度的强制性安全策略,能有效限制进程(即使是root权限的进程)的行为,防止提权和恶意操作。配置和管理 MAC 系统相对复杂。
  • 定期安全评估与更新:
    • 定期进行系统安全扫描和渗透测试。
    • 保持系统和所有软件包更新到最新版本! 这是修复已知安全漏洞最基本也是最有效的手段。订阅相关的安全邮件列表或漏洞通告。

结语

Linux 账户安全是一场永无止境的“攻防演练”。它不是一堆配置的简单堆砌,而是需要根据实际场景持续评估、调整和优化的动态过程。通过实施本文提到的多层次安全策略,并培养良好的安全习惯,你将能为你的 Linux 系统构建起一道坚不可摧的防线,有效抵御来自内外部的各种威胁。

记住,安全无小事,细节决定成败!

你认为在 Linux 账户安全中,还有哪些容易被忽视却至关重要的点?欢迎在评论区分享你的经验和见解,让我们共同进步,守护我们的数字世界!🌟

#Linux安全 #账户安全 #系统加固 #网络安全 #运维必备 #服务器安全 #信息安全 #PAM #SSH安全 #安全审计

原文始发于微信公众号(格格巫和蓝精灵):铜墙铁壁:Linux 账户安全深度加固指南,让你的系统坚不可摧!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月5日16:45:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   铜墙铁壁:Linux 账户安全深度加固指南,让你的系统坚不可摧!https://cn-sec.com/archives/4135410.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息