Como verificar se um usuário / senha expirou no AIX?

2

Posso verificar se o usuário expirou ou não:

lsuser -f USERNAME | fgrep expires

Mas como posso verificar se a senha do usuário expirou ou não? Existem outras coisas "expiradas" que podem causar problemas? [para que o usuário não possa fazer login, porque ele só pode acessar um servidor através do FTP e sua senha expirou, e ele não pode alterá-lo, porque ele não tem acesso SSH para distribuir o comando "passwd" para atualizar seu senha.]

    
por LanceBaynes 03.11.2011 / 23:46

4 respostas

3

Existe algum tipo de comando chage no AIX? verifique o arquivo / etc / shadow que é onde as informações de expiração são armazenadas.

Atualização: Parece que há uma sub-rotina passwdexpired que pode ser carregada e verifica a senha do usuário para determinar se ele expirou. No entanto, parece ser usado como root.

link

Este link tem uma excelente documentação do que você exigiria

link

Como demonstrado anteriormente no artigo acima, a expiração de uma senha é regida pelo atributo maxage.

For example:
maxage=0 means never to expire
maxage=2 means will expire in two weeks.

O AIX armazena a hora no formato de época em segundos, portanto, primeiro você deve determinar quantos segundos em uma semana, já que é assim que a maxage mede o tempo entre a expiração da senha, ou seja, os números da semana. Há 86400 segundos em um dia, multiplicando isso por sete vem em 604800. Portanto, há 604800 segundos em uma semana. O próximo comando que você precisa examinar é o pwdadm, que por sua vez consulta o arquivo / etc / security / passwd. Este arquivo armazena os valores em segundos quando um usuário alterou a senha pela última vez. Interrogando o arquivo ou usando o comando pwdadm retornará o mesmo resultado. Para esta demonstração, vamos consultar o spoll do usuário:

# grep -p "spoll:" /etc/security/passwd
spoll:
        password = EvqNjMMwJzXnc
        lastupdate = 1274003127
        flags =       ADMCHG

# pwdadm -q spoll
spoll:
        lastupdate = 1274003127
        flags = ADMCHG

Você pode ver o valor lastupdate em segundos da saída acima. Em outras palavras, a última vez que a senha foi alterada: 1274003127

Em seguida, usando o lsuser ou interrogando o arquivo com / etc / security / user, você pode determinar o número de semanas antes que a senha spoll do usuário expire:

# grep -p "spoll:" /etc/security/user
spoll:
        admin = false
        maxage = 4

# lsuser -a maxage spoll
spoll maxage=4

Você pode ver na saída acima que o número de semanas antes da expiração da senha é 4. A próxima tarefa é então multiplicar o número de segundos em uma semana pelo número de semanas antes da expiração da senha de spool do usuário. Neste caso, é 4: 604800 * 4

# expr 604800 \* 4
2419200

Em seguida, você precisa adicionar o valor maxage em segundos (604800 * 4) à última vez que a senha foi alterada: 2419200 + 1274003127

# expr 2419200 + 1274003127
1276422327

Agora você pode converter esse número de segundos da época do UNIX em uma apresentação de tempo atual mais significativa. Você pode usar ferramentas diferentes, mas para esta demonstração você usará o gawk com a função strftime:

# gawk 'BEGIN {print strftime("%c",'1276422327')}'
Sun Jun 13 10:45:27 BST 2010

O cálculo acima indica a hora da próxima expiração da senha. Então, agora você sabe que a senha do spoll do usuário foi alterada pela última vez (a partir do comando pwdadm):

# gawk 'BEGIN {print strftime("%c",'1274003127')}'
Sun May 16 10:45:27 BST 2010

E isso expirará em:

Sun Jun 13 10:45:27 BST 2010

------------------ Perl script-let --------

#!/bin/perl
use POSIX qw(strftime);
$maxage=4; 
$last_update = 1274003127
$max_week_seconds = 86400 * $maxage;
print strftime("%C ", localtime($max_week_seconds));
por 05.12.2011 / 06:29
0

converta para o horário normal (último pwdupdate-time-in-seconds + maxage-em-segundos)

    
por 05.11.2011 / 04:50
0

Você pode descobrir através da Ferramenta de Interface de Gerenciamento do Sistema ( smit ). A versão do console é smitty

    
por 14.11.2012 / 13:05
0

Eu fiz este script para checar espero que isso ajude alguém a sair:

#!/bin/sh

###############################################################################
# Script Name: aix_chk_user_expires.sh
#
# Author: Chris Alderson
#
# Purpose: Check when a user expires in AIX
#
# NOTES: Please change the value of $oozer to the id you desire to check against
#
##############################################################################

# Set value to specify a user

oozer='<username>'

#get epoch time for the time since last updated
time_since_last_update_in_epoch=$(lssec -f /etc/security/passwd -s $oozer -a lastupdate | cut -d= -f2)
#get the max age number of weeks from luser
max_age=$(lsuser -f $oozer | grep maxage | cut -d= -f2)
#multiply maxage by 7 to get number of days password will last
max_age_in_days=$(echo $((( max_age * 7 ))))
# multiply number of days by how many seconds in a day to get total seconds until change
# We will use this later to add to $time_since_last_update_in_epoch
max_age_in_epoch=$(echo $((( $max_age_in_days * 86400 ))) )
# Create new variable to store the total of max age in seconds and epoch of updated password
time_until_expires_in_epoch=$(echo $((( $max_age_in_epoch + $time_since_last_update_in_epoch ))))

#take epoch times and pass them to perl to give them a readible format
time_last_updated=$(perl -le 'print scalar localtime $ARGV[0]' ${time_since_last_update_in_epoch})


if [[ $max_age -eq 0 ]]; then

    time_of_expiration=$(echo "non-expiring password")
else
    ##take epoch times and pass them to perl to give them a readible format
    time_of_expiration=$(perl -le 'print scalar localtime $ARGV[0]' ${time_until_expires_in_epoch})
fi



echo "${oozer}'s password last updated: $time_last_updated"
echo "${oozer}'s password will expire: $time_of_expiration"

A saída é assim:

user's password last updated: Mon Jul 31 17:00:13 2017
user's password will expire: Mon Oct 23 17:00:13 2017
    
por 11.08.2017 / 22:51

Tags