如何查询Linux用户的账户过期时间?

在Linux系统中,用户账户的过期时间管理是系统安全与资源管理的重要环节,及时查看和处理过期账户可有效避免未授权访问或资源浪费,本文将详细介绍如何查看Linux用户过期时间,涵盖文件结构、命令工具、批量处理方法及注意事项。

如何查linux用户过期时间

用户过期时间的存储位置:/etc/shadow文件

Linux用户账户的过期时间信息存储在/etc/shadow文件中,该文件仅允许root用户读取,以保障安全性,文件中的每一行代表一个用户,字段通过冒号()分隔,共9个字段,其中第7字段直接关联账户过期时间。

/etc/shadow中的一行示例为例:
user1:$6$abc123...::18250:0:99999:7:::
各字段含义如下(仅列出与过期时间相关的字段):

字段编号 字段名 含义说明
1 用户名 系统中的用户名,与/etc/passwd中的用户名对应。
7 账户过期时间 自1970年1月1日(Unix纪元)起算的天数,若为空则表示账户永不过期;若为0,表示账户已过期。

时间戳转换:第7字段的天数可通过date命令转换为可读日期,

date -d "1970-01-01 +18250 days"  # 输出:2025-01-01(假设第7字段为18250)

使用chage命令查看用户过期时间

chage(change age)是Linux中专门用于管理用户密码和账户过期时间的命令,通过-l(list)选项可查看当前用户的过期时间设置。

基本语法

chage -l [用户名]

示例输出

以查看user1的过期时间为例:

sudo chage -l user1
```  可能如下:  

Last password change : Jan 01, 2023
Password expires : never
Password inactive : never
Account expires : Jan 01, 2025
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

如何查linux用户过期时间

Account expires`字段直接显示账户过期时间,若为`never`则表示永不过期。  
#### `chage`常用参数说明  
| 参数 | 功能描述                                                                 |
|------|--------------------------------------------------------------------------|
| `-l` | 显示用户当前的密码和账户过期信息。                                       |
| `-E` | 设置账户过期日期(格式可为`YYYY-MM-DD`或`天数`,如`-E 2025-12-31`)。    |
| `-W` | 设置密码过期前的警告天数(如`-W 7`表示过期前7天警告)。                   |
| `-I` | 设置密码过期后账户被锁定前的天数(如`-I 30`表示密码过期30天后锁定)。     |
### 三、直接查看`/etc/shadow`文件  
若需批量查看或直接处理原始数据,可通过`cat`、`less`、`awk`等命令查看`/etc/shadow`文件,重点关注第7字段。  
#### 示例1:查看所有用户及其过期时间  
```bash
sudo awk -F: '{print "用户名: " $1 "t过期时间(天数): " $7}' /etc/shadow

输出示例:

用户名: root    过期时间(天数): 18250
用户名: user1   过期时间(天数): 18250
用户名: user2   过期时间(天数): 

其中空值表示永不过期。

示例2:转换过期时间为可读日期

sudo awk -F: '{if($7 != ""){cmd="date -d "1970-01-01 +" $7 " days" "+%Y-%m-%d""; cmd | getline exp_time; close(cmd)}; print $1 ": " (exp_time ? exp_time : "永不过期")}' /etc/shadow

输出示例:

root: 2025-01-01
user1: 2025-01-01
user2: 永不过期

批量判断用户是否已过期

若需批量检查用户账户是否已过期,可通过对比当前时间戳与/etc/shadow中的第7字段实现。

脚本示例

#!/bin/bash
current_time=$(date +%s)  # 当前时间戳(秒)
current_days=$((current_time / 86400))  # 转换为天数(86400秒=1天)
echo "用户名tt过期状态t过期日期"
echo "----------------------------------------"
sudo awk -F: -v days="$current_days" '
{
    if($7 == "") {
        printf "%-10st%-10st%sn", $1, "永不过期", "N/A"
    } else if($7 == 0) {
        printf "%-10st%-10st%sn", $1, "已过期", "N/A"
    } else if($7 < days) {
        cmd="date -d "1970-01-01 +" $7 " days" "+%Y-%m-%d""
        cmd | getline exp_date
        close(cmd)
        printf "%-10st%-10st%sn", $1, "已过期", exp_date
    } else {
        cmd="date -d "1970-01-01 +" $7 " days" "+%Y-%m-%d""
        cmd | getline exp_date
        close(cmd)
        printf "%-10st%-10st%sn", $1, "未过期", exp_date
    }
}' /etc/shadow

执行后输出示例:

用户名      过期状态    过期日期
----------------------------------------
root        未过期      2025-01-01
user1       已过期      2023-01-01
user2       永不过期    N/A

不同Linux发行版的注意事项

  1. 权限差异:在Ubuntu/Debian系统中,普通用户可能无法使用sudo chage -l,需确保用户在sudoers文件中有权限。
  2. 时间戳格式:极少数旧版Linux发行版(如CentOS 6)可能使用不同的时间戳计算方式,建议通过man shadow确认本地系统格式。
  3. 系统用户:对于nobodysshd等系统用户,/etc/shadow中的第7字段通常为空,表示随系统运行而永不过期,无需特殊处理。

相关问答FAQs

Q1: 提示“chage: failed to modify aging information for user: Permission denied”怎么办?
A1: 该错误表示当前用户没有权限修改用户信息。chage命令需要root权限或通过sudo执行,请使用sudo chage -l [用户名]重新尝试,若需修改用户过期时间,同样需使用sudo,例如sudo chage -E 2025-12-31 user1

如何查linux用户过期时间

Q2: 如何批量设置多个用户在2025年12月31日过期?
A2: 可通过结合usermodchage命令与用户列表实现。

  1. 准备用户列表文件users.txt(每行一个用户名):
    user1
    user2
    user3
  2. 使用chage批量设置过期时间:
    sudo xargs -n1 chage -E 2025-12-31 < users.txt

    或使用usermod(功能类似):

    sudo xargs -n1 usermod -e 2025-12-31 < users.txt

    执行后可通过chage -l [用户名]验证设置是否生效。

通过以上方法,可全面掌握Linux用户过期时间的查看与管理,确保系统安全与合规性。

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

(0)
酷番叔酷番叔
上一篇 2025年10月2日 19:29
下一篇 2025年10月2日 19:46

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信