Autenticar usuários squid+shellscript+mysql

Publicado por Daniel Roque 05/02/2009 (última atualização em 14/07/2011)

[ Hits: 9.837 ]

Homepage: None

Download autenticador

Download 1299029728.autenticador (versão 2)




Script para autenticar usuários cadastrados numa tabela mysql, no squid.

Leia a parte comentada no script para correta instalação e configuração.

O script pressupõe que já tenha instalado no computador mysql e squid. Espera também uma certa familiaridade com os dois.

Boa sorte!

  



Versões atualizadas deste script

Versão 2 - Enviado por Daniel Roque em 01/03/2011

Changelog: Nenhuma mudança drástica, apenas o script está mais robusto, melhor configurável e utiliza a função PASSWORD do mysql que melhora um pouco a segurança do processo.
E espero que desta vez ninguém tenha problemas em utilizar o script :D.

Boa sorte a todos!

Download 1299029728.autenticador


Esconder código-fonte

#!/bin/sh
#
#
# Daniel Roque - 2006roque@gmail.com
# 
# 
# 
# 2008-11-23
# 
# 
# Copie o arquivo para /etc/squid/autenticador
# 
# IMPORTANTE os dois comando abaixo.
# Nao importa onde o script estiver ele precisa se acessivel pelo usuario proxy, ou nao funcionara.
# chown proxy.proxy /etc/squid/autenticador
# chmod 771 /etc/squid/autenticador
# 
# Adicione ao /etc/squid/squid.conf
# auth_param basic program        "/etc/squid/autenticador"
# auth_param basic realm "Digite usuario e senha"
# acl geral proxy_auth REQUIRED
# 
# ATENCAO EXECUTE OS COMANDOS DENTRO DO mysql
# 
# GRANT ALL PRIVILEGES ON *.* TO adm@localhost IDENTIFIED BY 'minhasenha' WITH GRANT OPTION;
# GRANT ALL PRIVILEGES ON *.* TO adm@'%' IDENTIFIED BY 'minhasenha' WITH GRANT OPTION;
# GRANT RELOAD,PROCESS ON *.* TO adm@localhost;
# GRANT USAGE ON *.* TO adm@localhost;
#
# CREATE DATABASE IF NOT EXISTS dbsquid;
# USE dbsquid;
# CREATE TABLE IF NOT EXISTS usuarios(
# codigo int(6) primary key NOT NULL AUTO_INCREMENT,
# login varchar(40) unique NOT NULL,
# senha varchar(255) NOT NULL,
# status int(11) NOT NULL default 1,
# mudarsenha varchar(1),
# nivel int(1),
# visivel varchar(1),
# cadastro date
# )ENGINE=INNODB;
# 
# PARA ADICIONAR USUARIOS, basta trocar daniel e senha por outro usuario outra senha
# insert into usuarios (login,senha,status,visivel,cadastro) values ('daniel','senha',1,'s',now());

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin/"
log='/tmp/auth-squid.log'
data=`date -d now`
db='dbsquid'
tabela='usuarios'
usql='adm'
psql='minhasenha'
valor=''

while read valor;
do
   data=`date -d now`
   if [ "$valor" != '' ];then
   
               login=`echo $valor|sed 's/\(.*\)\( .*\)/\1/g'`
               senha=`echo $valor|sed 's/\(.* \)\(.*\)/\2/g'`
   
               if [ "$login" == '' ];then
                           echo "$data usario vazio" >>$log
                           echo ERR
                           exit 0
               fi
   
               echo "$data tentando autenticar '$login'" >>$log
               sql="SELECT login FROM usuarios WHERE login='$login' AND senha='$senha' AND status='1';"
               rslt=`mysql -u$usql -p$psql -t --database "$db" -e "$sql"|sed -n 's/|//g;s/ //g;4p'`
   
               if [ "$login" == "$rslt" ];
               then
                           echo "$data resposta OK para $login" >>$log
                           echo OK
               else
                           echo "$data resposta ERR para $login" >>$log
                           echo ERR
               fi
   
               echo >>$log
   else
      echo "$data resposta ERR para $login" >>$log
      echo ERR
   fi
done

exit 0

Scripts recomendados

Configuraçao da rede wireless no slackware

SUED for Linux =]

Remove Automaticamente os Kernel Antigos do GRUB

Backup com TAR em LOG usando FITA LTO/DLT com filtro de arquivos, SPLIT em FITAS, envio de LOG por E

Ajustar hora


  

Comentários
[1] Comentário enviado por romulocpd em 09/07/2009 - 18:04h

Tive o seguinte erro:

[: 95: ==: unexpected operator
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit


Problemas no comadno SED, mas não o conheço.

[2] Comentário enviado por tiekookeit em 09/07/2009 - 19:29h

É o seguinte, eu testei aqui e tudo ok, fiz algumas alteracoes no codigo para ficar mais robusto,
entao primeiro tente atualizar o sed, ou pelomenos dizer qual versao esta instalada ai, segundo
se quiser eu te mando essa versao ligeiramente modificada, deve funcionar.

meu email 2006roque@gmail.com

[3] Comentário enviado por removido em 15/07/2009 - 14:06h

E ai daniel, tudo bem?
Parabéns pela dica, esta sendo de grande ajuda.
Mais se eu tenho um usuario cadastrado com uma senha que contem caracteres especiais não funciona.

Ex:
Login: teste
Senha: 1234!@#$

Ai o squid não autentica, estou fazendo algo errado eu é uma limitação do codigo.?
Valeu.!

[4] Comentário enviado por tiekookeit em 15/07/2009 - 15:12h

Então, eu fiz algumas modificacao para ajudar o colega romulocpd no codigo, e com este modificado, eu fiz os teste com a senha que tu postou ai, e nao tive problemas
o codigo alterado ficou assim, teste ai e me fala

#!/bin/bash
#
#
# Daniel Roque - 2006roque@gmail.com
#
#
#
# Qui Jul 9 19:24:12 BRT 2009


export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin/"
export LANG=pt_BR
log='/tmp/auth-squid.log'
data=`date -d now`
db='dbsquid'
tabela='usuarios'
usql='adm'
psql='1425'
valor=''

while read valor;
do
data=`date -d now`
if [ "${valor}" != '' ];then

login="$(echo "${valor}"|sed 's/\(.*\)\( .*\)/\1/g')"
senha="$(echo "${valor}"|sed 's/\(.* \)\(.*\)/\2/g')"

if [ "${login}" == '' ];then
echo "${data} usario vazio" >>${log}
echo ERR
exit 0
fi

echo "${data} tentando autenticar '${login}'" >>${log}
sql="SELECT login FROM usuarios WHERE login='${login}' AND senha='$senha' AND status='1';"
rslt=`mysql -u${usql} -p${psql} -t --database "${db}" -e "${sql}"|sed -n 's/|//g;s/ //g;4p'`

if [ "${login}" == "${rslt}" ];
then
echo "${data} resposta OK para ${login}" >>${log}
echo OK
else
echo "${data} resposta ERR para ${login}" >>${log}
echo ERR
fi

echo >>${log}
else
echo "${data} resposta ERR para ${login}" >>${log}
echo ERR
fi
done

exit 0

[5] Comentário enviado por removido em 15/07/2009 - 15:47h

Opaá,
Tudo certo tiekookeit,

Usei o seu script e mesmo assim não autentica.

Quando eu rodo seu script pelo shell e informo o usuario e senha (1234!@#$), ele retorna OK.

Mais quando vou na estação de trabalho do usuario e tento autenticar não vai :S

Valeu.!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts