chage
não manipula diferenças de datas sozinho, mas você pode deixar o shell cuidar disso e fornecer chage
alguns dias desde 1970-01-01, em vez de uma representação de data AAAA-MM-DD :
chage -E $(( $(date +%s)/3600/24 + 90 )) userid
(Substituir 90 por qualquer número de dias.)
Alterar a data de expiração da senha em vez da conta é um pouco mais complicado - na verdade, você não pode definir uma data de expiração real para a senha, apenas um máximo idade (usando chage -M
).
Para calcular a idade máxima exigida para a senha expirar daqui a 90 dias, precisamos passar por mais alguns arcos:
userid=johndoe
pwd_age=$(grep "^$userid:" /etc/shadow | cut -d: -f 3)
now=$(( $(date +%s) / 3600 / 24 ))
age_at_expiry_date=$(( $now + 90 - $pwd_age ))
chage $userid -M $age_at_expiry_date
Se você não se importa em ser um pouco complicado, você pode até combinar isso em uma linha:
userid=johndoe chage $userid -M $(( $(date +%s) / 3600 / 24 + 90 - $(grep "^$userid:" /etc/shadow | cut -d: -f 3) ))
Se você não se importa em substituir a data em que a senha foi alterada pela última vez, basta
chage -M 90 -d $(date +%F) userid