Linux环境下,shadow文件的使用方法及操作步骤是什么?

在Linux系统中,/etc/shadow文件是存储用户密码加密信息的核心安全文件,它与/etc/passwd文件配合工作:/etc/passwd存储用户的基本信息(如用户名、UID、家目录等),而密码等敏感数据则迁移至/etc/shadow,以避免普通用户通过读取/etc/passwd获取密码哈希值,从而提升系统安全性,正确使用和管理/etc/shadow文件是Linux系统安全运维的重要环节,本文将详细介绍其结构、查看方法、密码管理命令、安全配置及最佳实践。

linux 如何使用shadow

/etc/shadow文件的结构与字段说明

/etc/shadow文件中的每一行对应一个用户,行内由9个字段组成,字段间用冒号()分隔,各字段的含义如下表所示:

字段序号 字段名称 含义说明 示例值
1 用户名 /etc/passwd文件中的用户名对应,标识用户身份 root
2 加密密码 存储用户密码的哈希值,若为空字符串()表示用户无密码(不安全);若为表示账户被锁定(无法登录) $6$abc123$...(SHA-512哈希)
3 上次修改密码时间 自1970年1月1日以来,距离上次修改密码的天数 18500
4 最小密码有效期 密码修改后,最少需要等待多少天才能再次修改(0表示可随时修改) 0
5 最大密码有效期 密码在多少天后必须强制修改(99999表示永不过期) 90
6 密码过期警告期 密码过期前多少天开始提醒用户(0表示不提醒) 7
7 密码非活跃期 密码过期后,账户最多可多少天未登录(0表示过期立即禁用) 30
8 账户过期时间 账户在多少天后被禁用(自1970年1月1日起计算,空字符串表示永不过期) 19430
9 保留字段 系统保留字段,暂无特殊用途 (空)

查看/etc/shadow

由于/etc/shadow文件包含敏感信息,其默认权限为000(仅root用户可读写执行),普通用户无法直接访问,root用户可通过以下命令查看文件内容:

使用catless命令直接查看

# 直接查看文件全部内容(适合行数较少时)  
cat /etc/shadow  
# 分页查看(适合行数较多,支持上下翻页)  
less /etc/shadow  

执行后,每行显示一个用户的密码信息,按q键退出less界面。

使用getent命令查询指定用户

若仅需查看特定用户的密码策略信息,可通过getent命令结合shadow数据库查询:

getent shadow username  

查看root用户的信息:

getent shadow root  
# 输出示例:root:$6$abc123$...:18500:0:90:7:30:19430::  

密码管理核心命令

passwd命令:修改用户密码

passwd是Linux中最常用的密码管理工具,普通用户可修改自己的密码,root用户可修改任意用户的密码,并支持锁定/解锁账户。

  • 普通用户修改自身密码

    passwd  

    执行后需输入当前密码验证,再输入两次新密码(密码不会显示在终端)。

  • root用户修改其他用户密码

    passwd username  

    无需原密码验证,直接输入两次新密码即可。

  • 锁定/解锁用户账户

    # 锁定账户(密码字段改为"*")  
    passwd -l username  
    # 解锁账户(恢复密码字段为哈希值)  
    passwd -u username  

    锁定后,用户即使输入正确密码也无法登录(如passwd -l root可临时禁止root远程登录)。

    linux 如何使用shadow

chage命令:管理密码策略

chage(change age)命令用于修改用户密码的过期策略,包括有效期、警告期、非活跃期等,适合批量管理或精细化控制。

  • 查看用户密码策略

    chage -l username  

    例如查看testuser的策略:

    chage -l testuser  
    # 输出示例:  
    # Last password change                    : Dec 31, 2023  
    # Password expires                    : Mar 30, 2024  
    # Password inactive                   : May 29, 2024  
    # Account expires                      : never  
    # Minimum number of days between password change : 0  
    # Maximum number of days between password change : 90  
    # Number of days of warning before password expires : 7  
  • 修改密码有效期

    # 设置密码90天后过期(-M:Maximum)  
    chage -M 90 username  
    # 设置密码至少7天后才能修改(-m:Minimum)  
    chage -m 7 username  
  • 设置密码过期警告期

    # 密码过期前7天开始提醒(-W:Warning)  
    chage -W 7 username  
  • 设置密码非活跃期

    # 密码过期后30天未登录则禁用账户(-I:Inactive)  
    chage -I 30 username  
  • 设置账户过期时间

    # 账户在2024年12月31日后禁用(-E:Expire)  
    chage -E 2024-12-31 username  

密码加密算法配置

/etc/shadow中的密码哈希值采用不同加密算法生成,算法类型通过哈希值前缀标识(如$1$表示MD5,$5$表示SHA-256,$6$表示SHA-512),当前主流系统默认使用SHA-512(安全性更高),可通过/etc/login.defs文件或passwd命令配置。

查看当前加密算法

grep "ENCRYPT_METHOD" /etc/login.defs  

若未配置,可通过以下命令查看用户密码的哈希算法:

getent shadow username | cut -d: -f2 | cut -d$ -f2  

输出6表示SHA-512,5表示SHA-256,1表示MD5。

修改默认加密算法

编辑/etc/login.defs文件,修改ENCRYPT_METHOD参数:

vim /etc/login.defs  
# 添加或修改为:  
ENCRYPT_METHOD SHA512  

修改后,新创建的用户或通过passwd修改密码时,将自动使用SHA-512算法。

linux 如何使用shadow

安全最佳实践

禁用空密码账户

检查/etc/shadow中是否存在密码字段为空的用户(第二列为空字符串),若有则立即设置密码或锁定账户:

# 查找空密码用户  
awk -F: '($2 == "") {print $1}' /etc/shadow  

对找到的用户执行passwd username设置密码,或passwd -l username锁定。

定期修改密码策略

通过chage命令为所有用户设置合理的密码有效期(如普通用户90天,管理员60天),避免长期使用同一密码:

# 批量设置所有用户密码90天后过期  
for user in $(cut -d: -f1 /etc/passwd); do  
    chage -M 90 $user  
done  

备份与恢复/etc/shadow

定期备份/etc/shadow文件,避免误操作导致系统无法登录:

# 备份到/home/backup/  
cp /etc/shadow /home/backup/shadow.bak_$(date +%Y%m%d)  
# 恢复(需root权限)  
cp /home/backup/shadow.bak_20240101 /etc/shadow  

限制root登录

直接锁定root密码(passwd -l root),并通过sudo机制授权普通用户执行管理员命令,减少root密码泄露风险。

相关问答FAQs

Q1: 如何查看用户的密码过期时间?
A: 使用chage命令的-l选项可查看用户的详细密码策略,包括过期时间。

chage -l username  

输出中的“Password expires”字段即为密码过期日期(若为“never”则永不过期)。

Q2: 如何锁定或解锁用户账户?
A: 使用passwd命令结合-l(锁定)或-u(解锁)选项。

# 锁定用户testuser  
passwd -l testuser  
# 解锁用户testuser  
passwd -u testuser  

锁定后,用户即使输入正确密码也无法登录;解锁后恢复正常登录权限。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25913.html

(0)
酷番叔酷番叔
上一篇 2小时前
下一篇 2小时前

相关推荐

  • linux下如何修改用户密码

    Linux下,可通过passwd 用户名命令修改用户密码,按提示输入新密码

    2025年8月15日
    1700
  • 如何快速掌握Linux入门?

    Linux是一种开源操作系统内核,核心特点是自由传播、多用户多任务支持、稳定高效,它采用类Unix设计,提供强大的网络功能与安全性,是服务器、云计算及嵌入式设备的主流平台。

    2025年7月31日
    2900
  • linux如何查看网络丢包

    Linux 中,可使用 ping 命令查看网络丢包,如 `ping www.baidu.

    2025年8月10日
    2000
  • Linux软件装在哪?秒查所有安装位置

    通过包管理器查询(推荐)适用于通过 apt、yum、dpkg、rpm 等安装的软件,Debian/Ubuntu (APT/Dpkg)查询已安装软件的所有文件路径:dpkg -L 软件名# 示例:dpkg -L nginx查找软件包安装的二进制文件位置:dpkg -S 软件名# 示例:dpkg -S nginxR……

    2025年7月5日
    3800
  • Linux双屏如何提升工作效率?

    准备工作硬件连接确认显卡支持多输出(HDMI/DP/VGA等接口),用对应线缆连接两台显示器,通电开机,驱动检查终端执行 lspci | grep VGA 查看显卡型号,安装闭源驱动(如NVIDIA):sudo ubuntu-drivers autoinstall # Ubuntusudo dnf instal……

    2025年7月19日
    3300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信