linux 用户 密码过期,linux – 如何自动通知用户密码过期?

很高兴见到你.

我在Linux中使用了chage命令来设置用户的密码到期日期.

当到期日期临近时,我想自动通知用户.

这就是我想象它应该发生的方式:

>每天检查以确定密码是否即将过期

>如果密码超过11天,则不执行任何操作

>如果密码剩余10天或更少,请向用户发送通知电子邮件

我是否需要编写脚本来完成上述操作?或者有自动方法来实现这一目标吗?

谢谢

看看这是否符合您的要求.您可以使用chage命令或passwd -w设置警告时间:

#!/bin/bash

# notifypwexp - send mail to users whose passwords are expiring soon

# designed to be run daily or weekly from cron

# call with -w for weekly mode (checks to see if warning period begins in the next 7 days

# use -w for a weekly cron job,avoiding excessive emails

# with no option,it only checks whether we're in the warning period now

# use this for a daily cron job

# by Dennis Williamson

# ### SETUP ###

if [[ $1 == "-w" ]] # check for expiration warnings beginning during the next seven days

then

weekmode=7

else

weekmode=0

fi

admins="root postmaster"

declare -r aged=21 # minimum days after expiration before admins are emailed,set to 0 for "always"

hostname=$(hostname --fqdn)

# /etc/shadow is system dependent

shadowfile="/etc/shadow"

# fields in /etc/shadow

declare -r last=2

#declare -r may=3 # not used in this script

declare -r must=4

declare -r warn=5

#declare -r grace=6 # not used in this script

declare -r disable=7

declare -r doesntmust=99999

declare -r warndefault=7

passwdfile="/etc/passwd"

declare -r uidfield=3

declare -r unamefield=1

# UID range is system dependent

declare -r uidmin=1000

declare -r uidmax=65534 # exclusive

# remove the hardcoded path from these progs to use them via $PATH

# mailx is system dependent

notifyprog="/bin/mailx"

grepprog="/bin/grep"

awkprog="/usr/bin/awk"

dateprog="/bin/date"

# comment out one of these

#useUTC=""

useUTC="-u"

# +%s is a GNUism - set it to blank and use dateformat if you have

# a system that uses something else like epochdays,for example

epochseconds="+%s"

dateformat="" # blank for GNU when epochseconds="+%s"

secondsperday=86400 # set this to 1 for no division

today=$(($($dateprog $useUTC $epochseconds $dateformat)/$secondsperday))

oIFS=$IFS

# ### END SETUP ###

# ### MAIL TEMPLATES ###

# use single quotes around templates,backslash escapes and substitutions

# will be evaluated upon output

usersubjecttemplate='Your password is expiring soon'

userbodytemplate='Your password on $hostname expires in $(($expdate - $today)) days.

Please contact the IT department by email at \"helpdesk\" or at

extension 555 if you have any questions. Help is also available at

http://helpdesk.example.com/password'

adminsubjecttemplate='User Password Expired: $user@$hostname'

adminbodytemplate='The password for user $user on $hostname expired $age days ago.

Please contact this user about their inactive account and consider whether

the account should be disabled or deleted.'

# ### END MAIL TEMPLATES ###

# get real users

users=$($awkprog -F: -v uidfield=$uidfield \

-v unamefield=$unamefield \

-v uidmin=$uidmin \

-v uidmax=$uidmax \

-- '$uidfield>=uidmin && $uidfield

{print $unamefield}' $passwdfile)

for user in $users;

do

IFS=":"

usershadow=$($grepprog ^$user $shadowfile)

# make an array out of it

usershadow=($usershadow)

IFS=$oIFS

mustchange=${usershadow[$must]}

disabledate=${usershadow[$disable]:-$doesntmust}

# skip users that aren't expiring or that are disabled

if [[ $mustchange -ge $doesntmust || $disabledate -le $today ]] ; then continue; fi;

lastchange=${usershadow[$last]}

warndays=${usershadow[$warn]:-$warndefault}

expdate=$(($lastchange + $mustchange))

threshhold=$(($today + $warndays + $weekmode))

if [[ $expdate -lt $threshhold ]];

then

if [[ $expdate -ge $today ]];

then

subject=$(eval "echo \"$usersubjecttemplate\"")

body=$(eval "echo \"$userbodytemplate\"")

echo -e "$body" | $notifyprog -s "$subject" $user

else

if [[ $age -ge $aged ]];

then

subject=$(eval "echo \"$adminsubjecttemplate\"")

body=$(eval "echo \"$adminbodytemplate\"")

echo -e "$body" | $notifyprog -s "$subject" $admins

fi

fi

fi

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值