¿Cómo comprobar que un usuario / contraseña ha expirado en AIX?

Puedo verificar que el usuario haya caducado o no con:

lsuser -f USERNAME | fgrep expires 

¿Pero cómo puedo verificar que la contraseña del usuario esté vencida o no? ¿Hay otras cosas que "expiren" que puedan causar problemas? [para que el usuario no pueda iniciar session, porque solo puede acceder a un server a través de FTP y su contraseña expiró, y no puede cambiarla, porque no tiene acceso SSH para dar el command "passwd" para actualizar su contraseña.]

¿Hay algún tipo de command chage en AIX? compruebe el file / etc / shadow que es donde se almacena la información de caducidad.

Actualización: parece que hay una subrutina passwdexpinetworking que se puede cargar y verifica la contraseña del usuario para determinar si ha expirado. Sin embargo, parece ser usado como raíz.

http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fpasswdexpinetworking.htm

Este enlace tiene una excelente documentation de lo que requeriría

http://www.torontoaix.com/scripting/when_pwd_exp

Como se demostró anteriormente en el artículo anterior, la expiración de una contraseña se rige por el atributo maxage.

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

AIX almacena la hora en el formatting epoch en segundos, por lo que primero debe determinar cuántos segundos en una semana, ya que así es como maxage mide el time transcurrido entre la caducidad de la contraseña, es decir, en los numbers de semana. Hay 86400 segundos en un día, por lo que se multiplica por siete en 604800. Entonces, hay 604800 segundos en una semana. El próximo command que debe observar es pwdadm, que a su vez consulta el file / etc / security / passwd. Este file contiene los valores en segundos cuando un usuario cambió su contraseña por última vez. Si se interroga el file o se usa el command pwdadm se obtendrá el mismo resultado. Para esta demostración, consultemos al usuario spoll:

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

Puede ver el último valor de actualización en segundos a partir de la salida anterior. En otras palabras, la última vez que se cambió la contraseña: 1274003127

A continuación, utilizando el lsuser o interrogando el file con / etc / security / user, puede determinar el número de semanas antes de que caduque la contraseña de spoll del usuario:

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

Puede ver en el resultado anterior que el número de semanas antes de que la contraseña expire es 4. La siguiente tarea es multiplicar el número de segundos en una semana por el número de semanas antes de que expire la contraseña de spoll del usuario. En este caso, es 4: 604800 * 4

 # expr 604800 \* 4 2419200 

A continuación, debe agregar el valor máximo en segundos (604800 * 4) a la última vez que se cambió la contraseña: 2419200 + 1274003127

 # expr 2419200 + 1274003127 1276422327 

Ahora puede convertir esa cantidad de segundos de UNIX epoch en una presentación de time actual más significativa. Puede usar diferentes herramientas, pero para esta demostración usará gawk con la function strftime:

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

El cálculo anterior da la hora de la próxima caducidad de la contraseña. Entonces, ahora sabe que la contraseña del usuario spoll fue modificada por última vez (desde el command pwdadm):

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

Y que caducará en:

 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)); 

convertthis-to-time (last-pwdupdate-time-in-seconds + maxage-in-seconds)

Puede encontrarlo a través de la herramienta de interfaz de administración del sistema ( smit ). La versión de la console es smitty

Hice este script para verificar que esto ayude a alguien más:

 #!/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" 

La salida se ve así:

 user's password last updated: Mon Jul 31 17:00:13 2017 user's password will expire: Mon Oct 23 17:00:13 2017