Linux基础 -- shadow文件格式管理

/etc/shadow 文件存储了用户的加密密码和其他账户相关信息。与 /etc/passwd 不同,/etc/shadow 只有超级用户才能访问,且文件中的密码是经过加密处理的。编辑 /etc/shadow 文件时,需要了解其内容格式,以免破坏系统的认证机制。

/etc/shadow 文件格式

每行对应一个用户账户,字段用冒号(:)分隔。通常包含以下内容:

username:password:last_change:min_days:max_days:warn_days:inactive_days:expire_date:reserved

各字段含义如下:

  1. username

    • 用户名,与 /etc/passwd 中的用户名相对应。
  2. password

    • 用户的加密密码。这个字段可以包含以下几种内容:
      • 加密后的密码字符串。
      • !* 表示该账户被锁定,无法登录。
      • 空字符串表示不需要密码即可登录(不建议这样做)。

    通常,这里的密码是通过哈希函数加密后的值。常见的加密算法有 MD5SHA-256SHA-512,并且在密码前面会有相应的标识符来表示使用的加密方法。

    例如:

    • $1$:表示使用 MD5 加密。
    • $5$:表示使用 SHA-256 加密。
    • $6$:表示使用 SHA-512 加密。
  3. last_change

    • 从1970年1月1日起至上次密码修改之间的天数。
  4. min_days

    • 两次密码修改之间的最小天数。如果设为 0,则没有限制。
  5. max_days

    • 密码的最大有效天数。超过这个天数,用户将被要求更改密码。
  6. warn_days

    • 密码过期前,系统向用户发出密码过期警告的天数。
  7. inactive_days

    • 密码过期后,账户失效前的非活动天数。超过此天数,账户将被锁定。
  8. expire_date

    • 账户过期日期,表示自1970年1月1日以来的天数。过期后,用户无法登录。设为 -1 或空表示账户不会过期。
  9. reserved

    • 保留字段,目前未使用,通常为空。

示例

以下是一个典型的 /etc/shadow 文件的条目示例:

user1:$6$abcd$EFGhijklmnopqrstuvwxyz1234567890abcdef:18845:0:99999:7:::
  • user1:用户名。
  • $6$abcd$EFGhijklmnopqrstuvwxyz1234567890abcdef:使用 SHA-512 加密的密码。
  • 18845:上次密码修改的日期(从1970年1月1日开始计算的天数)。
  • 0:最小密码修改天数。
  • 99999:最大密码有效天数。
  • 7:密码到期前7天提醒用户更改密码。
  • 剩余字段为空或默认,表示没有设置额外限制。

注意事项

  1. 编辑工具:建议使用超级用户权限的文本编辑工具,如 vinano,来编辑 /etc/shadow 文件。修改前,务必备份原始文件。

  2. 密码加密:手动编辑密码时,建议使用加密工具生成加密字符串,例如使用 openssl passwd 命令生成 SHA-512 加密密码:

    openssl passwd -6
    
  3. 避免错误修改:不正确的修改可能导致用户无法登录或系统认证问题,因此编辑时要谨慎。

通过理解 /etc/shadow 文件格式和内容,可以有效地管理系统用户的密码和相关信息。

python 生成方式

用python工具生成/etc/shadow上需要使用的密码部分,其中可以使用passlib;
passlib是一个支持多种哈希算法的Python库,专门用于处理密码哈希和验证。它支持生成符合/etc/shadow格式的密码字段。

安装 passlib

pip install passlib

代码示例

from passlib.hash import sha512_crypt

password = "hello"
hashed_password = sha512_crypt.hash(password, rounds=5000, salt="gFj0G/ECExVW")

print("Hashed password:", hashed_password)

这个Python示例使用passlib生成符合/etc/shadow格式的SHA-512哈希值。

小结
生成符合/etc/shadow文件格式的加密密码有很多工具和方法,常见的有:
命令行工具:如openssl、mkpasswd、htpasswd。
编程语言接口:如C语言中的crypt函数、Python的crypt模块和passlib库。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值