Execute o script quando a senha é alterada

2

Existe alguma maneira de executar um comando personalizado quando passwd é executado? Estou criando uma GUI do servidor e quero amarrar os usuários do aplicativo com os usuários do sistema, E eu não quero usar apenas o PAM Auth. Então eu quero rodar um script que irá receber o usuário e senha, e enviá-lo para o Mysql Server. Na verdade, agora que estou escrevendo, parece que há algum problema de segurança. Independentemente disso, isso é possível?

    
por dj_boy 26.03.2016 / 21:59

1 resposta

1

Você pode detectar se alguém executa passwd usando inotifywait , mas, até onde eu sei, você não pode controlar seu comportamento dessa maneira.

No seu próprio servidor, no entanto, você pode substituir o programa passwd real pelo seu script, que então invoca o programa passwd real. 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ê quiser fazer isso, um script expect como esse pode 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
}

Após renomear passwd para passwd.real , você colocaria esse script em /usr/bin/passwd e concederia a 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 programa passwd real.

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 geraria passwd depois) e pediu aos usuários para alterarem a senha usando mypasswd . Isso deixaria claro que eles não estão usando o original passwd .

    
por 24.04.2016 / 19:06