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系统管理和日常运维的基础技能,本文将详细介绍多种查看后台进程的命令及其使用场景,帮助用户全面掌握进程监控技巧,基础命令:p……

    2025年8月28日
    3800
  • Linux如何查看指定目录是否存在?

    在Linux系统中,检查目录是否存在是日常操作和脚本编写中的常见需求,掌握正确的方法能提高工作效率,以下是几种常用的查看目录是否存在的方式,涵盖基础命令、脚本判断及进阶技巧,并附对比表格和常见问题解答,使用ls命令查看目录信息ls(list)是最基础的文件和目录列表命令,通过结合-d选项(显示目录本身而非内容……

    2025年10月3日
    1500
  • Linux文件权限分配的核心原则与实操方法是什么?

    Linux权限分配是系统管理的核心内容,它通过精细化的控制机制确保系统安全与资源合理使用,Linux中的权限分配围绕“用户”“用户组”“其他用户”三类主体展开,涵盖“读取(r)”“写入(w)”“执行(x)”三种基本权限,并通过一系列命令和配置实现动态管理,Linux权限体系基础Linux系统中的每个文件和目录都……

    2025年9月13日
    2500
  • Linux解压zip文件的操作方法有哪些?

    在Linux系统中,处理zip文件是日常运维和开发中常见的操作,无论是接收跨平台传输的压缩包,还是管理项目资源,掌握解压zip文件的方法都至关重要,本文将详细介绍Linux环境下解压zip文件的多种工具、具体操作步骤、高级选项应用及常见问题解决方案,帮助用户高效完成文件解压任务,Linux解压zip文件的常用工……

    2025年9月21日
    2500
  • Linux运行C程序必学技巧?

    环境准备:安装编译工具Linux默认不安装C编译器,需手动安装GCC(GNU Compiler Collection):sudo apt update && sudo apt install gcc # Debian/Ubuntusudo yum install gcc # CentOS/RHE……

    2025年6月30日
    5200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信