Como você está perguntando sobre o RHEL6, eu olhei para o código-fonte do useradd (que é entregue como parte do pacote 'shadow'). Em useradd.c é uma função chamada new_spent onde ele configura uma nova entrada de senha de sombra. Lá, ele aborda o problema da "senha expirada na criação" desta maneira:
if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;
Soooo ... Se você definir um zero, é -1.
Os autores do programa têm codificado especificamente contra a configuração do envelhecimento para 0, portanto, não importa se você o definir como 0 no parâmetro / etc / default / useradd para EXPIRE. (Se fosse eu fazendo esse código eu teria olhado para ver se o usuário estava configurando a senha no comando e, em seguida, permitindo a expiração, mas não fui eu ...)
Além disso, foi sugerido acima que você poderia colocar um script em /usr/local/sbin/adduser.local para fazer um comando 'chage'. Este foi um bom conselho para um sistema Debian / Ubuntu em que useradd é um script perl que de fato executa esse arquivo se o encontrar, mas no RHEL o comando useradd é um binário C.
Se eu fosse você e estivesse determinado a obter esse comportamento no useradd do RHEL6, obteria o SRPM para o pacote shadow, comentaria as linhas acima e faria um rpmbuild no pacote e no rockaway. Ganhando!