|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux Wiki
[editar] NAO PUBLICAR, EDITANDO...NAO PUBLICAR, EDITANDO [editar] IntroduçãoWebmin, 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. [editar] 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. [editar] ExpectAí vamos ao personagem principal da história... [editar] InstalaçãoDisponível na maioria das distros, com um simples apt-get isntall expect ou up2date, se consegue o pacote plenamente funcional. [editar] 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! [editar] Shell-scriptEsse 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 [editar] Preparando o terrenoAgora vem os pré-requisitos para que tudo funcione bem... [editar] SUDOERSInfelizmente, teremos que nos valer dessa "des"-vantagem... #visudo e coloque a seguinte linha www-data ALL=NOPASSWD: /var/www/senha/senha [editar] Script PHP[editar] Precauções[editar] Autor--Navarini 15:31, 4 Abril 2007 (BRT) |