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系统如何通过FTP进行文件传输操作?

    FTP(File Transfer Protocol)是一种基于TCP/IP协议的文件传输协议,用于在客户端和服务器之间进行文件上传、下载等操作,Linux系统作为服务器端或客户端,均支持通过FTP进行文件管理,本文将详细介绍Linux环境下使用FTP的客户端操作、服务器搭建及相关注意事项,Linux命令行FT……

    2025年9月19日
    12900
  • 取消为何有人欢喜有人愁?

    取消有两种核心含义:一指废除、使原有的安排或决定不再生效(如取消会议);二指数学中的约分,即消除分数中分子与分母的公因数(如 6/8 取消为 3/4)。

    2025年6月17日
    15200
  • Linux下如何重定位命令的位置和路径?

    在Linux系统中,重定位命令通常指调整系统查找和执行命令的路径,或让命令指向自定义的脚本、二进制文件,这一操作在自定义工具路径、避免命令冲突、或集成第三方软件时非常实用,以下是几种常见的重定位命令方法及其详细操作步骤,修改PATH环境变量PATH是Linux系统的核心环境变量,用于存储命令的搜索路径,当用户输……

    2025年10月7日
    11400
  • Linux中如何查找文件?高效方法有哪些?

    在Linux系统中,查找文件是日常运维和开发中的高频操作,掌握多种查找方法能大幅提升工作效率,Linux提供了丰富的命令和工具用于文件查找,不同场景下适用的命令各有侧重,本文将详细介绍这些方法及其使用技巧,使用find命令:最强大的文件查找工具find是Linux中最基础且功能最全面的文件查找命令,它通过递归遍……

    2025年10月3日
    11800
  • 如何从Linux服务器下载文件?常用方法有哪些?

    从Linux服务器下载文件是日常运维和开发中的常见操作,根据服务器环境、文件大小及安全需求,可选择多种命令行工具实现,本文将详细介绍几种主流下载方法,包括原理、语法、参数及实际应用场景,帮助用户高效完成文件传输任务,基于SSH的安全传输:scp与rsyncscp(Secure Copy)scp是利用SSH协议进……

    2025年9月30日
    11200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信