• Linux账号密码安全运维


    前言

    随着云计算厂商的兴起,云资源如ECS不再只有企业或者公司才会使用,普通人也可以自己买一台ECS来搭建自己的应用或者网站。虽然云计算厂商帮我们做了很多安全相关的工作,但并不代表我们的机器资源就绝对是安全的。

    要知道有很多事情是云计算厂商不能为我们做的,就比如账号密码的安全策略配置,而账号密码的安全又是Linux安全中的第一道安全锁,我们必须重视起来。

    比如一个具有公网IP的服务器,我们可以使用Linux连接工具或者ssh在本地进行连接,如果密码太简单并且没有错误次数限制,我们完全可以暴力破解出来,这属于【高危】漏洞。

    账号密码策略

    查看当前用户的账号密码策略

    -- 输入指令
    chage -l root
    
    -- 返回结果
    Last password change                                  : Jun 14, 2022
    Password expires                                        : never
    Password inactive                                       : never
    Account expires                                         : never
    Minimum number of days between password change          : 0
    Maximum number of days between password change          : 99999
    Number of days of warning before password expires       : 7
    
    -- 翻译过来:
    最近一次密码修改时间  6 14, 2022
    密码过期时间 :从不过期
    密码失效时间 :从不
    帐户过期时间 :从不
    两次改变密码之间相距的最小天数 :任何时候都可以改
    两次改变密码之间相距的最大天数 :永远不需要改
    在密码过期之前警告的天数 :7
    

    这种账号肯定是有风险的,尤其还是root账户,一旦被破解,那这台Linux服务器基本上凉凉。

    1. 设置密码失效时间【一定要设置】

    设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。

    /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:

    --两次改变密码之间相距的最大天数,密码有效最大天数
    PASS_MAX_DAYS 90  
    

    注意:以上只对之后新增的用户有效,如果要修改已存在的用户密码规则,需要使用chage命令

    2. 设置密码修改最小间隔时间【一定要设置】

    设置密码修改最小间隔时间,限制密码更改过于频繁

    /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:

    --两次改变密码之间相距的最小天数,为零时代表任何时候都可以更改密码
    PASS_MIN_DAYS 7
    

    注意:以上只对之后新增的用户有效,如果要修改已存在的用户密码规则,需要使用chage命令

    3. 在到期前设置警告的天数【建议设置】

    设备警告的天数,可以让我们备份旧密码、准备新密码

    /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7天

    PASS_WARN_AGE 7
    

    注意:以上只对之后新增的用户有效,如果要修改已存在的用户密码规则,需要使用chage命令

    4. 设置密码复杂度【一定要设置】

    简单的密码安全性很差,一般建议密码长度大于8,包括大小写字母、数字、特殊字符等

    /etc/pam.d/common-password 添加如下内容(如果没有该文件自己创建一个):

    # /etc/pam.d/common-password - password-related modules common to all services
    
    password        requisite       pam_cracklib.so retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
    password        [success=1 default=ignore]      pam_unix.so sha512
    password        requisite       pam_deny.so
    password        required        pam_permit.so
    
    • “minlen=8”表示密码长度至少为8个字符。
    • “ucredit=-1”表示密码中至少包含一个大写字母。
    • “lcredit=-1”表示密码中至少包含一个小写字母。
    • “dcredit=-1”表示密码中至少包含一个数字。
    • “ocredit=-1”表示密码中至少包含一个特殊字符。

    注意:以上只对之后新增的用户有效,如果要修改已存在的用户密码规则,需要使用chage命令

    5. 检查密码重用是否受限制【一定要设置】

    强制用户不重用最近使用的密码,降低密码猜测攻击风险

    /etc/pam.d/password-auth/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5。

    6. 设置SSH空闲超时退出时间【建议设置】

    设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险

    编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。

    ClientAliveInterval 600
    ClientAliveCountMax 2
    

    7. 账户锁定策略【一定要设置】

    策略要求:

    • 设定锁定的阈值为5次
    • 锁定时间为5分钟即300秒
    • 必须所有用户都受限,包括root

    修改配置文件/etc/pam.d/system-auth-ac/etc/pam.d/password-auth-ac

    • /etc/pam.d/system-auth-ac文件替换如下:
    auth        required      pam_env.so
    auth        required      pam_tally2.so even_deny_root deny=5 unlock_time=60
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
    auth        required      pam_deny.so
     
    account     required      pam_unix.so
    account     required      pam_tally2.so
    account     sufficient    pam_localuser.so
    account     sufficient    pam_succeed_if.so uid < 1000 quiet
    account     required      pam_permit.so
    
    • /etc/pam.d/password-auth-ac文件替换如下:
    auth        required      pam_env.so
    auth        required      pam_tally2.so deny=5 unlock_time=60
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
    auth        required      pam_deny.so
     
    account     required      pam_unix.so
    account     required      pam_tally2.so
    account     sufficient    pam_localuser.so
    account     sufficient    pam_succeed_if.so uid < 1000 quiet
    account     required      pam_permit.so
    
    • 查看用户锁定状态
    -- 输入命令
    pam_tally2 -u root
    
    -- 输出结果
    Login           Failures Latest failure     From
    root                0    
    
    • 解锁状态
    -- 输入命令
    pam_tally2 -r -u  root
    
    -- 输出结果
    Login           Failures Latest failure     From
    root                0    
    

    温馨提示:login.defs文件和/etc/pam.d/system-auth文件的规则设置对非root用户起作用,在root用户下则不会生效!如果设置root用户密码过期时间等,需要用chage命令进行设置。
    chage命令使用示例:

    基本格式:chage [选项] 账户名 
    
    --  查看系统账户的当前设置
    chage -l username   
    
    -- 设置用户设置密码失效时间
    chage --maxdays 90 username
    
    -- 设置用户密码修改最小间隔时间
    chage --mindays 7 username
    

    作者:不若为止
    欢迎任何形式的转载,但请务必注明出处。
    限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

  • 相关阅读:
    哈希方法总结
    觉非科技数据闭环系列 | BEV感知研发实践
    编程技术对网络社会的益作用?
    Hugging Face 年度回顾:2023,开源大模型之年
    Vue {{}}里面不同内容
    asp.net blazor集成TinyMCE.Blazor
    参考图像彩色化网络修改流程(自用版)
    开具数电票如何减少认证频次?
    第56篇-某创网加速乐cookie值分析【2023-09-15】
    groovy:SimpleDateFormat 打印当前时间
  • 原文地址:https://www.cnblogs.com/wlovet/p/17783140.html