Administrar squid com autenticação, simples e objetivo.

Publicado por gelber de arruda junior 22/05/2009

[ Hits: 8.281 ]

Homepage: http://gelberarrudajr.blogspot.com

Download squidadm.sh




Este script nos ajudará de forma bem simples e objetiva a fazer as tarefas mais comuns como adicionar/excluir usuário, definir a senha do usuário, adicionar e remover sites proibidos, permitidos e sites para o horário de almoço.

Para mais informações sobre o script e para tirar o máximo de proveito dele, acesse http://gelberarrudajr.blogspot.com/2009/05/artigo-squid-com-autenticacao-manual.html

Espero ajudar!!!

  



Esconder código-fonte

#!/bin/bash
# Autor: Gelber de Arruda Junior [email protected]
# Data: 15/05/2009
# Função do Script: Administrar squid com autenticação
#
# Este programa é um software livre que pode ser copiado e distribuído
# nos termos da Licença Pública Geral GNU (GNU General Public License -
# GPL) versão 2 da licença ou, a seu critério, qualquer versão posterior.
# Este programa foi criado na expectativa de ser útil, porém NÃO POSSUI
# NENHUMA GARANTIA, EXPRESSA, IMPLÍCITA OU DE ATENDIMENTO A ALGUMA
# DETERMINADA FINALIDADE.
Usuariosliberados=/etc/squid/usuariosliberados
Usuarioslimitados=/etc/squid/usuarioslimitados
Usuariosexcecao=/etc/squid/usuariosexcecao
Sitesperm=/etc/squid/sitespermitidos
Sitespro=/etc/squid/sitesproibidos
Sitesupdates=/etc/squid/updates
Siteshappy=/etc/squid/almoco
Arqusu=/etc/squid/cadusuarios
Arqsenhas=/etc/squid/autenticacao
Listusu="$Arqusu"
TMPFILE1=/tmp/tmp1
TMPFILE2=/tmp/tmp2
TMPFILE3=/tmp/tmp3
TMPFILE4=/tmp/tmp4

Squidmenu() {
while : ; do
resposta=
resposta=$( dialog --stdout \
--title 'Administração de Navegação' \
--ok-label 'OK' \
--cancel-label 'Voltar' \
--menu 'Opções:' 0 0 0 1 'Exibir Listagem' 2 'Manipular Usuários' 3 'Sites de Updates' 4 'Sites Liberados' \
5 'Sites Bloqueados' 6 'Sites Almoço' 7 'SquidView' 9 'Aplicar' )
[ $? -ne 0 ] && break
case "$resposta" in
1) Mostrarlistagem ;;
2) titulo="Usuários"
listusu=$Arqusu
Manipusu ;;
3) titulo=Sites_de_Updates
listsite=$Sitesupdates
Manipsites ;;
4) titulo="Sites_Permitidos"
listsite=$Sitesperm
Manipsites ;;
5) titulo="Sites_Bloqueados"
listsite=$Sitespro
Manipsites ;;
6) titulo="Sites_Almoço"
listsite=$Siteshappy
Manipsites ;;
7) squidview ;;
9) Aplicalist ;;
0) break ;;
esac
done
}

Manipusu() {
while : ; do
[ -s "$listusu" ] || echo "usuario|limitado|senha" >> $listusu
resposta3=$( \
dialog --stdout \
--title ''$titulo'' \
--ok-label 'Adicionar' \
--extra-button \
--extra-label 'Editar' \
--cancel-label 'Voltar' \
--menu '' 0 60 0 \
$(for lnusu in `cat $listusu`; do
nmusu=`echo $lnusu | awk -F "|" '{print $1}'`
catusu=`echo $lnusu | awk -F "|" '{print $2}'`
echo "$nmusu $catusu"
done))
bt="$?"
case "$bt" in
0) usuadicionando=$( dialog --stdout \
--title 'Adicionar Usuários' \
--ok-label 'Adicionar' \
--cancel-label 'Cancelar' \
--inputbox 'Digite o novo usuário a ser adicionado:' \
0 0 )
if [ -z "$usuadicionando" ]; then
sleep 0
else
senhaadicionando=$( dialog --stdout \
--title 'Senha:' \
--ok-label 'OK' \
--cancel-label 'Cancelar' \
--inputbox 'Digite uma senha para o novo usuário:' \
0 0 )
if [ -z "$senhaadicionando" ]; then
sleep 0
else
echo "$usuadicionando|Limitado|$senhaadicionando" >> $listusu
fi
fi
;;
1) break ;;
3) resposta2=
resposta2=$( dialog --stdout \
--title 'Editar Usuário' \
--ok-label 'OK' \
--cancel-label 'Voltar' \
--menu 'Selecione uma opção para o Usuário '$resposta3'' 0 0 0 1 'Definir Senha' 2 'Definir Categoria' \
3 'Excluir' )
if [ $? -ne 0 ]; then
sleep 0
else
case "$resposta2" in
1) senhaeditando=$( dialog --stdout \
--title 'Senha:' \
--ok-label 'OK' \
--cancel-label 'Cancelar' \
--inputbox 'Digite uma senha para o usuário '$resposta3':' \
0 0 "$senhausu" )
if [ -z "$senhaeditando" ]; then
sleep 0
else
[ -e $TMPFILE1 ] && rm $TMPFILE1
for lnusu in `cat $listusu`; do
nmusu=`echo $lnusu | awk -F "|" '{print $1}'`
catusu=`echo $lnusu | awk -F "|" '{print $2}'`
senhausu=`echo $lnusu | awk -F "|" '{print $3}'`
if [ "$nmusu" = "$resposta3" ]; then
echo "$nmusu|$catusu|$senhaeditando" >> $TMPFILE1
else
echo $lnusu >> $TMPFILE1
fi
done
senhausu=
mv $TMPFILE1 $listusu
fi ;;
2) Defcategusu ;;
3) [ -e $TMPFILE4 ] && rm $TMPFILE4
dialog \
--title 'Confirma exclusão?' \
--yesno "Tem certeza que deseja excluir o usuário "$resposta3"?
" 0 0
if [ "$?" -ne 0 ]; then
sleep 0
else
egrep -v "$resposta3" $Arqusu > $TMPFILE4
mv $TMPFILE4 $Arqusu
fi
;;
esac
fi
;;
esac
done
}

Mostrarlistagem() {
echo " Usuário | Categoria | Senha |" > $TMPFILE3
echo " | | |" >> $TMPFILE3
for cli in `cat $Arqusu`; do
echo $cli | awk -F "|" '{printf"%15s | %13s | %14s |\n" ,$1,$2,$3}' >> $TMPFILE3
done
echo "" >> $TMPFILE3
dialog \
--title 'Listagem de Usuários' \
--textbox $TMPFILE3 \
0 0
}


Defcategusu() {
[ -s "$listusu" ] || echo "usuario|senha" >> $listusu
resposta4=
resposta4=$( dialog --stdout \
--title 'Categoria de Usuário' \
--ok-label 'OK' \
--cancel-label 'Sair' \
--menu 'Selecione uma categoria para o usuário '$resposta3'' 0 0 0 1 'Limitado' \
2 'Exceção' 3 'Liberado' )
[ $? -ne 0 ] && break
[ -e $TMPFILE2 ] && rm $TMPFILE2
for lnusucad in `cat $Arqusu`; do
senhausu=`echo "$lnusucad" | awk -F "|" '{print $3}'`
catcli=`echo "$lnusucad" | awk -F "|" '{print $2}'`
clinome=`echo "$lnusucad" | awk -F "|" '{print $1}'`
if [ "$clinome" = "$resposta3" ]; then
[ "$resposta4" = "1" ] && echo "$clinome|Limitado|$senhausu" >> $TMPFILE2
[ "$resposta4" = "2" ] && echo "$clinome|Exceção|$senhausu" >> $TMPFILE2
[ "$resposta4" = "3" ] && echo "$clinome|Liberado|$senhausu" >> $TMPFILE2
else
echo "$lnusucad" >> $TMPFILE2
fi
done
mv $TMPFILE2 $Arqusu
}

Aplicalist() {
echo "NenhumNomePodeSerCompatívelcomEssaLinha93453489347" > $Usuariosliberados
echo "NenhumNomePodeSerCompatívelcomEssaLinha93453489347" > $Usuarioslimitados
echo "NenhumNomePodeSerCompatívelcomEssaLinha93453489347" > $Usuariosexcecao
[ -e $Arqsenhas ] && rm $Arqsenhas
touch $Arqsenhas
for linecli in `cat $Arqusu`; do
senhausu=`echo "$linecli" | awk -F "|" '{print $3}'`
catcli=`echo "$linecli" | awk -F "|" '{print $2}'`
clinome=`echo "$linecli" | awk -F "|" '{print $1}'`
[ "$catcli" = "Liberado" ] && echo "$clinome" >> $Usuariosliberados
[ "$catcli" = "Limitado" ] && echo "$clinome" >> $Usuarioslimitados
[ "$catcli" = "Exceção" ] && echo "$clinome" >> $Usuariosexcecao
param=
[ -s "$Arqsenhas" ] || param="-c"
htpasswd -b $param $Arqsenhas $clinome $senhausu
clear
done
squid -k reconfigure
}

Manipsites() {
[ -s "$listsite" ] || echo "www.sitecadastrado.com" >> $listsite
catt=
while : ; do
resposta3=$( \
dialog --stdout \
--title ''$titulo'' \
--ok-label 'Adicionar' \
--extra-button \
--extra-label 'Remover' \
--cancel-label 'Voltar' \
--menu '' 30 70 27 \
$(for st in `cat $listsite`; do
mostrar=`echo $st | awk -F "|" '{print $1}'`
catt=`echo $st | awk -F "|" '{print $2}'`
[ -z "$catt" ] && catt="-"
echo "$mostrar" "$catt"
done))
bt="$?"
case "$bt" in
0) siteadding=$( dialog --stdout \
--title 'Adicionar Site' \
--ok-label 'Adicionar' \
--cancel-label 'Cancelar' \
--inputbox 'Digite o novo site a ser adicionado:' \
0 0 )
if [ -z "$siteadding" ]; then
sleep 0
else
echo $siteadding >> $listsite
fi
;;
1) break ;;
3) dialog \
--title 'Confirma exclusão?' \
--yesno "Tem certeza que deseja excluir o site "$resposta3"?
" 0 0
if [ "$?" -ne 0 ]; then
sleep 0
else
egrep -v "$resposta3" $listsite > $TMPFILE4
mv $TMPFILE4 $listsite
fi
;;
esac
done
}

Squidmenu

Scripts recomendados

Realizar backup automático no HD externo

Baixando e instalando o Asterisk

Capturar movimentação no FTP

Script Iptables

Servidor HTTP em Bash


  

Comentários
[1] Comentário enviado por amado2vezes em 22/05/2009 - 15:49h

Cara, testei seu script e tá dando erro de sintaxe.

[email protected]:~$ sh squidadm.sh
: command not found:
: command not found7:
'quidadm.sh: line 18: syntax error near unexpected token `{
'quidadm.sh: line 18: `Squidmenu() {
[email protected]:~$

e sem o comando sh

[email protected]:~$ ./squidadm.sh
bash: ./squidadm.sh: /bin/bash^M: bad interpreter: Arquivo ou diretório não encontrado
[email protected]:~$

[2] Comentário enviado por juniorarruda em 22/05/2009 - 16:34h

Pode tentar resolver de 2 formas:

1 - Retirar a linha #!/bin/bash
2 - Mudar #!/bin/bash para #!/bin/sh

Qualquer coisa posta ai

[3] Comentário enviado por hagahood em 22/05/2009 - 20:38h

amado2vezes, voce salvou o script no windows?
o formato de linha do windows é diferente da do linux, assimvc tem que usar o comando "dos2unix" para converter as linhas!!

juniorarruda:
legal o script vou testes ele quando tiver tempo. valeu!!

[4] Comentário enviado por ric_japa em 02/10/2009 - 02:53h

Estou tentando usar o script, fiz a instalação conforme manual, mas quando eu acesso a internet ele pede a autenticação, mas não autentica. O que será que pode ser. Desde ja agradeço. Obrigado.


Contribuir com comentário