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)
酷番叔酷番叔
上一篇 2025年9月19日 07:22
下一篇 2025年9月19日 07:38

相关推荐

  • Linux文件权限设置的具体方法是什么?

    Linux文件权限是系统安全的核心机制,通过控制不同用户对文件的访问和操作能力,确保数据不被未授权访问或篡改,本文将详细讲解Linux文件权限的设置方法,包括基本概念、表示方式、命令操作及注意事项,Linux文件权限的基本概念Linux文件权限分为三类,分别针对不同用户群体:读(Read,r):允许查看文件内容……

    2025年9月20日
    7300
  • Linux下如何升级JDK版本?

    在Linux系统中升级JDK版本是开发运维中的常见需求,通常出于性能优化、安全补丁或新特性支持等目的,以下是详细的升级步骤,涵盖主流发行版(如Ubuntu/Debian和CentOS/RHEL)的两种安装方式(包管理器安装与手动安装),以及环境变量配置、旧版本卸载等关键环节,升级前准备:备份旧JDK配置升级前建……

    2025年9月20日
    8800
  • Linux系统下如何通过ping命令测试网络连通性及排查故障?

    在Linux系统中,ping命令是最基础且常用的网络诊断工具,它基于ICMP(Internet Control Message Protocol,互联网控制报文协议)协议,通过发送ICMP回显请求包并接收目标主机的回显应答包,来测试网络连通性、计算往返时间(RTT)、检测丢包率等,无论是排查网络故障、监控网络性……

    2025年10月4日
    9200
  • Linux如何启动SSH远程服务?

    SSH(Secure Shell)是远程管理 Linux 系统的核心工具,通过加密通道实现安全登录和文件传输,以下是专业、安全且适用于主流 Linux 发行版的 SSH 启动方法,涵盖安装、配置、防火墙设置及安全加固,检查与安装 SSH 服务确认 SSH 状态终端执行:systemctl status ssh……

    2025年7月9日
    12400
  • 如何安全删除Linux用户的系统文件夹?

    在Linux系统中删除文件夹是一项需要谨慎操作的任务,尤其是涉及系统关键目录或用户重要数据时,错误的删除操作可能导致数据丢失、程序异常甚至系统崩溃,本文将详细介绍删除Linux系统文件夹的正确方法、常用命令、安全注意事项及常见问题处理,帮助用户安全高效地完成文件夹删除操作,删除前的准备工作在执行删除操作前,必须……

    2025年9月13日
    8800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信