Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > UnderLinux Wiki
Wiki Classificados Galeria Reviews Jogos Comunidades RSS Feeds FAQ Termos de Uso Sobre
Cadastre-se FotosBlogs Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Tabela de conteúdo

NAO PUBLICAR, EDITANDO...

NAO PUBLICAR, EDITANDO

Introdução

Webmin, touchpass, perl-based-script, cgi-script...

Não são pucas as opções de webadmins pra alteração de senha de usuários do sistema linux, MAS, a menos que voce seja um expert em cgi ou perl, e resolva revisar todo o codigo pra "garantir que suas senhas nao estão sendo enviadas para algum crack mal intencionado", você pode acabar ficando de mãos atadas....

Na realidade esse tutorial tem o intuito de prover uma maneira extremamente simples, e não tão insegura de prover a facilidade da troca de senha de usuários do sistema, através da web.

Seguro?

Esse tutorial vai passar por shell-scripts e sudos... Óbviamente que a coisa mais recomendada do mundo seria o desuso dessa facilidade, obviamente pelo excesso de privilégios que ela demanda, mas o caso permite algumas excessões, até porque, serão tomados algumas precauções adicionais para manter a margem aceitável de insegurança.

Expect

Aí vamos ao personagem principal da história...

Instalação

Disponível na maioria das distros, com um simples apt-get isntall expect ou up2date, se consegue o pacote plenamente funcional.

O que ele faz?

Esse binário, em termos sumários (e sinteticamente), "lê" a stdin (entrada padrão) e conforme a leitura, pode prover uma resposta diretamente na linha de comando.

Hein?

Imaginem a seguinte cena:

#passwd fulanodetal
Changing password for fulanodetal
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

todo mundo já deve ter tido a idéia de dar um sudo root passwd user, em um script web para poder alterar a senha... mas, como o parâmetro --stdin em muitas distros é desativado, e essa possibilidade por sí permiria facilmente a alteração da senha do root, fica descartada.

Então sobra o método normal, mas como fazer com que o script "responda" as perguntas que lhe sao feitas? Senha atual, depois senha nova, e repita a senha nova, tudo isso aguardando o prompt solicitar?

Aí entra o expect... ele "expera" (essa foi horrível, admito!) a entrada da string "current" por exemplo, pra inserir a senha atual, depois espera o "Enter new" para inserir a senha nova, e por fim, espera o "Retype" para inserir novamente a senha nova! Bingo! temos uma luz no fim do túnel!

Shell-script

Esse brinquedinho vai fazer todo o "trabalho sujo", vai ser ele a peça chave que vai integrar o php com o expect e passwd:

#!/bin/sh
# \
#ao menos impedir que altere-se a senha do root, direto aqui,
#demais users do sistema, serão limitados no próprio script php
if [ "$1" == "root" ] ;
then
  exit 1
fi
exec expect -f "$0" ${1+"$@"}
set password [lindex $argv 1]
spawn passwd [lindex $argv 0]
sleep 1
expect "assword:"
send "$password\r"
expect "assword:"
send "$password\r"
expect eof

ele vai receber (via parâmetro) do php o user e a senha nova

Preparando o terreno

Agora vem os pré-requisitos para que tudo funcione bem...

SUDOERS

Infelizmente, teremos que nos valer dessa "des"-vantagem...

#visudo

e coloque a seguinte linha

www-data ALL=NOPASSWD: /var/www/senha/senha

Script PHP

Precauções

Autor

--Navarini 15:31, 4 Abril 2007 (BRT)

Horários baseados na GMT -3. Agora são 15:13.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.