+1

Modificando senha de usuarios Linux no PHP

criado por Rodrigo Romano Moreira em 29/01/2004 9:04am
O poppassd criado Pawel Krawczyk(http://echelon.pl/pubs/poppassd.html), baseado no poppassd de John Norstad, Roy Smith e Daniel L. Leavitt, cria um serviço no linux que possibilita a troca de senhas no /etc/shadow ou /etc/passwd.
Como todo serviço do Linux ,o poppassd é associado a uma porta especifica.
Utilizando um script em php, podemos comunicar com essa porta e alterar a senha do usuário.

Link para download do poppassd : http://echelon.pl/pubs/poppassd-1.8.4.tar.gz

A instalação do poppassd via código fonte é fácil, vamos aos passos:


1. Instale as bibliotecas Linux-PAM(PAM-DEVEL) para C. O PAM fornece uma forma de programas autenticarem usuários em uma forma independente, baseada em "módulos de autenticação".

2. Crie uma pasta qualquer e descompacte o conteúdo do arquivo poppassd-1.8.4.tar.gz.

Por exemplo :
mkdir /usr/src/ poppassd
cd /usr/src/poppassd
tar zxvf poppassd-1.8.4.tar.gz

3. Como root execute:

make
make install

4. Adicione ao arquivo /etc/inetd.conf a seguinte linha:

poppassd stream tcp nowait root /usr/sbin/tcpd poppassd

5.Adicione ao arquivo /etc/services:

poppassd 106/tcp

O serviço do poppassd neste caso está utilizando a porta 106.

6.Adicione ao arquivo /etc/hosts.deny:

poppassd: nobody@localhost: allow
poppassd: ALL: deny

Estou liberando o acesso ao serviço para o usuário nobody na maquina local(estou executando o script na mesma maquina do serviço do poppassd) e negando o acesso a outras maquinas e outros usuários, nobody refere-se ao usuário que apache utiliza. Em algumas distruições o usuário do apache é outro. No Suse Linux o usuário é wwwrun e no debian ele tem outro nome. Na duvida, busque no http.conf o nome do usuário, você deve encontrar algo assim:

User nobody

7.Adicione ao arquivo /etc/pam.d/poppassd:

#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so retry=3
password required /lib/security/pam_pwdb.so use_authtok nullok


8. Adicione ao arquivo /etc/syslog.conf :

local4.err /var/log/poppassd

9. Reinicie os serviços do inetd.


Quem utiliza o mandrake pode instalar via rpm :
http://rpmfind.net/linux/RPM/mandrake/9.2/contrib/i586/poppassd-ceti-1.8.4-1mdk.i586.html

Para gosta do debian ou outra distribuição baseada (por exemplo Kurumin) instalar o pacote via apt:

apt-get install poppassd ou dpkg -i nomedopacotepoppassd.deb

Download do pacote debian :
http://packages.debian.org/stable/mail/poppassd

Comentários:

Mostrando 1 - 10 de 10 comentários
Antonio disse:
Configurei o poppassd, embora está dando um pequeno problema em /etc/hosts.deny conexao recusada...

Gostaria de saber
Como eu faria para criar usuários tb pela web?


Obrigado.
10/09/2004 4:03pm (~12 anos atrás)

no meu conectiva 8 aparace o seguinte erro

Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/trocasenha.php on line 46

a linha 46 tem o seguinte:
fwrite($socket,"pass $senhaold\n");

pode me dar uma ajuda ..
18/04/2004 12:22am (~12 anos atrás)

Se não foi a dica que eu passei ,posta ela aqui.
10/02/2004 6:35pm (~13 anos atrás)

Ricardo disse:
Obrigado. Consegui instalar a biblioteca.
10/02/2004 1:14pm (~13 anos atrás)

Infelizmente Conectiva não é minha area .Uso Debian e Suse.
Mais no conectiva você pode utilizar apt.
Dá um apt-cache search pam e vê os resultados . Caso achei o pacote , dê um apt-get install e nome do pacote.
10/02/2004 12:35pm (~13 anos atrás)

Ricardo disse:
Caro Rodrigo,
Sou usuário iniciante em Linux. Uso o Conectiva 8. Como consigo instalar as bibliotecas necessárias para a autenticação dos usuários.

Se houver como, poderia me dar uma dica?

Obrigado.
10/02/2004 12:14pm (~13 anos atrás)

Obrigado.
Saiu na Revista do Linux recentemente um artigo sobre o Horde. Ele indicaram o poppassd para trocar a senha.
05/02/2004 10:06am (~13 anos atrás)

Testei e funciona perfeitamente no Debian, porém, acho interessante informar que o usuário do apache no Debian é www-data, entao o passo 6 ficaria assim:
6.Adicione ao arquivo /etc/hosts.deny:
poppassd: www-data@localhost: allow
poppassd: ALL: deny
e que não é necessária nenhuma alteração no arquivo /etc/pam.d/poppassd como explicado no passo 7. Ou seja, se vc está usando o Debian, ignore o passo 7.
Parabéns pelo artigo Rodrigo.
05/02/2004 7:56am (~13 anos atrás)

Concordo com vc.Utilizava esse script em conjunto com Uebimiau.
Criei esse artigo ,por que toda hora tem um pedindo isso no php-pt.
Uma boa ideia tambem é definir um tamanho minimo para senha e obrigar a mescla de letras com numeros.
04/02/2004 6:03am (~13 anos atrás)

Cléver Anjos disse:
Grande Rodrigo,
Apenas para comentar, acho que seria interessante colocar alguma validação neste script antes de enviar para o serviço.

Eu usaria um substr() para cortar a string e evitar um possivel buffer overflow no servico (nao tive tempo de olhar o codigo fonte) mas é sempre bom conferir, né?

Mas de qualquer forma valeu!
02/02/2004 7:43am (~13 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)