Executar 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 um problema de segurança. Independentemente disso, isso é possível?


Pode estar usando o parâmetro expose_authtok em pam_exec: auth required pam_exec.so expose_authtok your_script
Oleg Bolden

Respostas:


1

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.