Você pode detectar se alguém roda passwd
usando inotifywait
, mas até onde sei, você não pode controlar seu comportamento dessa maneira.
No seu próprio servidor, no entanto, você pode substituir o real passwd
programa com o seu script, que invoca o real passwd
programa então. Isso pode implicar vários riscos de segurança, então eu não faria isso e nem tentaria listar todos os riscos. Ainda assim, se você sentir vontade de fazer isso, expect
roteiro como este poderia funcionar como um substituto:
#!/usr/bin/expect
set timeout -1
set new_passwd ""
log_user 0
spawn /usr/bin/passwd.real
log_user 1
stty -echo
expect {
-re "current.*password" {
expect_user -re "(.*)\n"
send "$expect_out(1,string)\n"
exp_continue
}
-re "new.*password:" {
expect_user -re "(.*)\n"
set new_passwd $expect_out(1,string)
send "$new_passwd\n"
exp_continue
}
-re "passwd:.*unchanged" {
set new_passwd ""
interact
}
-re "passwd:.*updated successfully" {
interact
}
}
stty echo
if { $new_passwd != "" } {
send_user "New password for user '$env(USER)'/'$env(LOGNAME)': $new_passwd\n"
#system my_password_manipulation_script.sh $env(USER) $env(LOGNAME) $new_passwd
}
Depois de renomear passwd
para passwd.real
, você colocaria esse script em /usr/bin/passwd
e dar permissão de execução normal (0755). Suid bit não é necessário (e seria outro problema de segurança), já que este script é apenas um frontend para o real passwd
programa.
O script funciona no Debian Jessie (8.4), em outros sistemas você pode ter que ajustar as palavras-chave correspondentes (atual. * Senha, nova. * Senha, etc). Além disso, você comente a última linha send_user e descomente a chamada do sistema, onde você realmente propaga a senha.
Mais uma vez: tente considerar todas as implicações de segurança, antes de fazer isso! Além disso, seus usuários provavelmente devem saber que você pode conseguir que suas senhas não sejam criptografadas. Talvez seja melhor, se você salvou este script como por exemplo. mypasswd
(e isso iria desovar passwd
então) e pediu aos usuários para alterarem a senha usando mypasswd
. Isso deixaria claro que eles não estão usando o original passwd
.