Shell实现查看用户密码有效期

基于 Shell 脚本,实现显示 Linux 用户的密码修改时间、到期时间、到期天数和密码有效期等信息。

Shell 脚本:

#!/bin/bash# 获取用户名
read -p "请输入要查询的用户名: " username# 检查用户是否存在
if id "$username" &>/dev/null; thenecho "正在查询用户 $username 的密码信息..."
elseecho "用户 $username 不存在,请检查用户名是否正确。"exit 1
fi# 使用 chage 命令获取用户密码信息
chage_info=$(chage -l $username)# 提取信息
last_change=$(echo "$chage_info" | grep "Last password change" | awk -F": " '{print $2}')
password_expires=$(echo "$chage_info" | grep "Password expires" | awk -F": " '{print $2}')
password_inactive=$(echo "$chage_info" | grep "Password inactive" | awk -F": " '{print $2}')
account_expires=$(echo "$chage_info" | grep "Account expires" | awk -F": " '{print $2}')
min_days=$(echo "$chage_info" | grep "Minimum number of days" | awk -F": " '{print $2}')
max_days=$(echo "$chage_info" | grep "Maximum number of days" | awk -F": " '{print $2}')
warning_days=$(echo "$chage_info" | grep "Number of days of warning" | awk -F": " '{print $2}')# 获取当前日期
current_date=$(date +%Y-%m-%d)# 计算密码到期天数
if [[ "$password_expires" == "never" ]]; thendays_left="密码永不过期"
elseexpire_date=$(date -d "$password_expires" +%Y-%m-%d)days_left=$(( ( $(date -d "$expire_date" +%s) - $(date -d "$current_date" +%s) ) / 86400 ))if [[ $days_left -lt 0 ]]; thendays_left="密码已过期"fi
fi# 显示用户密码信息
echo "-------------------------------"
echo "用户: $username 的密码信息如下:"
echo "-------------------------------"
echo "上次修改密码的时间        : $last_change"
echo "密码到期时间              : $password_expires"
echo "密码剩余有效天数          : $days_left"
echo "密码无效时间              : $password_inactive"
echo "账户到期时间              : $account_expires"
echo "密码最小修改间隔(天)      : $min_days"
echo "密码最大有效期(天)        : $max_days"
echo "密码到期前提醒天数        : $warning_days"
echo "-------------------------------"

输出:

请输入要查询的用户名: testusr
正在查询用户 testusr 的密码信息...
-------------------------------
用户: testusr 的密码信息如下:
-------------------------------
上次修改密码的时间        : Aug 16, 2024
密码到期时间             : Nov 14, 2024
密码剩余有效天数          : 29
密码无效时间             : never
账户到期时间             : never
密码最小修改间隔(天)      : 7
密码最大有效期(天)        : 90
密码到期前提醒天数        : 7
-------------------------------

说明:

  • 上次修改密码的时间:显示用户上次修改密码的日期。
  • 密码到期时间:显示密码到期的日期。
  • 密码剩余有效天数:计算当前日期与密码到期日期之间的天数。
  • 密码无效时间:显示密码失效的日期(如适用)。
  • 账户到期时间:显示账户到期的时间(如适用)。
  • 密码最小修改间隔(天):密码修改的最小间隔天数。
  • 密码最大有效期(天):密码的最大有效期。
  • 密码到期前提醒天数:在密码过期前多少天提醒用户。

该脚本有助于快速检查 Linux 用户的密码状态,并提供相应的密码有效期等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何替换OCP节点(二):使用 antman脚本 | OceanBase应用实践

前言: OceanBase Cloud Platform(简称OCP),是 OceanBase数据库的专属企业级数据库管理平台。 在实际生产环境中,OCP的安装通常是第一步,先搭建OCP平台,进而依赖OCP来创建、管理和监控我们的生…

营销邮件软件:提升邮件营销效率必备工具!

营销邮件软件选择技巧?免费高效的邮件营销软件推荐? 如何高效地管理和优化邮件营销活动成为了企业面临的一大挑战。营销邮件软件成为提升邮件营销效率的必备工具。MailBing将深入探讨营销邮件软件的功能、优势以及如何选择合适的工具。 营销邮件软件&a…

element checkbox选框和文字分开点击---更改一列checkbox的顺序(进阶版)

选框和文字分开点击,找了很多,没有我想要的效果,但也借鉴了一下,实现了,记录一下 样式看起来倒是没多大区别,需求: 勾选了选框才可以点击文字 ,一次只能点击一条数据,点…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类:additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

Axure横向菜单高级交互

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:横向菜单高级交互 主要内容:横向菜单左右拖动、选中效果 应用场景:app横向菜单、pc后台动态区域 案例展示: 演…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

uniapp-实现天地图以及行政区划图层覆盖

前言: 在uniapp中,难免会遇到使用地图展示的功能,但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的,所以天地图则是最佳选择。 此篇文章,详细的实现地图展示功能,并且可以自定义容器宽…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱背景:为何选择 nbconvert?库简介:nbconvert 是什么?安装指南:如何安装 nbconvert?函数用法:简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中,轮播图(Carousel)是一种常见的UI组件,用于展示一系列图片或内容,用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器(Indicator)则是…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道;本文主要整理本次赛事的基本流程和优化方法。💕💕😊 一…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上,分成链路层和应用层。 如图,APCI就是链路层,ASDU的就是应用层 我们看到报文都是68打头的,因为应用层报文也要交给链路层发送,链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时,经常用到模板匹配,opencv自带的图像模板匹配好用,易用,高效,稳定,且有多种匹配计算方式。 具体示例如下: 模板图: 待搜索图: 具体实现代码…

FreeRTOS - 任务管理

在学习FreeRTOS过程中,结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源,整理了该篇文章。如有内容理解不正确之处,欢迎大家指出,共同进步。 参考:https://rtos.100ask.net/zh/…

SpringColoud GateWay 核心组件

优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…

H3C设备连接方式

Console线本地连接 协议Serial,接口com口,波特率9600(设备管理器中查看com口) 适用于设备初次调试 使用Telnet远程访问 适用于设备上架配置好后的维护管理 使用SSH远程访问 数据传输过程加密,安全的远程访问

洞察数字化营销的本质

数字化营销,即借助互联网、移动互联网、社交媒体等数字技术与渠道实现营销目标。涵盖市场调研、品牌推广、产品销售到客户服务全过程。 其特点显著。精准定位是一大优势,利用大数据分析和人工智能,深入了解客户需求、兴趣和行为,精…

AdmX_new

0x00前言 因为环境问题,此次靶场都放在vm上。都为NAT模式。 靶机地址: https://download.vulnhub.com/admx/AdmX_new.7z 需要找到两个flag文件。 0x01信息搜集 搜集IP 确认目标IP为172.16.8.131,进一步信息搜集 获取端口开放情况,版本信…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接:https://www.arxiv.org/abs/2408.08872 代码链接:https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

stm32 bootloader写法

bootloader写法: 假设app的起始地址:0x08020000,则bootloader的范围是0x0800,0000~0x0801,FFFF。 #define APP_ADDR 0x08020000 // 应用程序首地址定义 typedef void (*APP_FUNC)(void); // 函数指针类型定义 /*main函数中调用rum_app&#x…