Do comentário:
Isto não é possível como você descreve, porque: as informações são descritas apenas na sombra, e a sombra só pode ser lida pelo root. Qualquer programa que precise de hashes de senha ou expiração de conta deve ser SUID (se você estiver usando contas locais armazenadas na sombra, como você diz.)
Informações adicionadas:
Inicialmente usei chage (1) como fonte.
Note
The chage program requires a shadow password file to be available.
Agora atualizei minhas informações para ser mais preciso, confirmando as coisas.
Primeiro de tudo, verifiquei o código-fonte do chage apenas para ter certeza. Parece que de fato precisa acessar o arquivo shadow e armazenar as informações em nenhum outro lugar. Segundo, você pode usar o PAM para permitir o uso dos recursos de raiz do chage. (check_perms em chage.c: 523)
E, como outros já disseram, qualquer outra coisa usada como backend para shadow (a saber, qualquer coisa em nsswitch.conf
, exceto arquivos e db) tem suas próprias formas de trabalhar com as coisas.
Em suma: ao usar arquivos como back-end, as informações sobre o envelhecimento da senha são realmente armazenadas lá e apenas lá. Se você ainda quiser usar o backend de arquivos, você deve escrever um programa e torná-lo SUID, já que o sistema é tudo ou nada. Você pode consultar apenas o seu usuário ou pode consultar e definir todos. No lado positivo, escrever algo em C para fazer o que você quer seria apenas algumas linhas de código. Você poderia basicamente copiar três funções da fonte chag e adicionar uma nova principal.