MAL - Memória Auxiliar do Lutieri

sexta-feira, dezembro 29, 2006

Rapidinha: Inventário de hardware

Procurava, eu, um software para listar todo o hardware dos servidores para fins de documentação dos mesmos e descobri o HardwareLiSter(lshw).

É simples e fácil de usar. Ele gera o relatório em html(bem bonitinho :-).

Um ótimo artigo está disponível em: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5314&pagina=1


Parabens ao Thiago Eustaquio Alves de Oliveira que é o dono do artigo.


Um Feliz Ano Novo e blah blah blah...

terça-feira, dezembro 26, 2006

smb_auth + squid = furos de segurança

Olá!!

É usado aqui na empresa a combinação citada acima. Descobri essa semana, na verdade foram os usuários(Acreditem eles tem esse poder), que existem várias formas de burlar o coitadinho do squid e sua autenticação usando o esquema de autenticação smb_auth.

Vou descrever melhor a configuração do proxy.

Existem grupos de usuários que têm acesso restrito há apenas alguns site, pelo menos deveriam. Vamos exemplificar:

joao
maria
gorete
luiz
gabriel


Vamos acreditar que eu tenha os nomes acima em um arquivo chamado usuarios_restritos.txt e os mesmos só podem ter acesso ao site da Brasil Telecom(www.brasiltelecom.com.br).

no meu squid.conf vou ter uma ACL que faz esse casamento. Usuários da lista com o site da BrT. Algo do tipo:

#Usuários Restritos
acl usuariosrestritos proxy_auth -i "/etc/squid/usuarios_restritos.txt"
#site para usuários restritos
acl sitebrt url_regex -i "brasiltelecom.com.br"

http_access allow sitebrt usuariosrestritos
Beleza! Funciona! Se na hora da autenticação o usuário digitar no campo de
nome de usuário: joao
senha: 123

o módulo smb_auth vai tentar autenticar no AD se estiver o nome de usuário e senha corretos: Tcharã... o neguim vai ter acesso somente ao site da BrT. Mas, porém, contudo, entretanto, todavia existem algumas maneiras de se autenticar usando uma sintaxe diferente no nome de usuário. Aí você fica se perguntado: "E que diferença isso faz?!?!" Toda..

Vamos a um outro exemplo.
Suponhamos que exista um arquivo chamado usuarios_bloqueados.txt onde contém o nome de alguns usuários que acessaram muita putaria e o chefe mandou bloquear os ditos cujos.

No arquivo vai conter:

roger
almir
roque
silvio

e vai ter a ACL pra bloquear os nomes contidos nesse arquivo. Perfeito.

O pulo do gato vem agora. Se o usuário digitar algo do tipo: dominio\roger. Ele já deixou de ser o roger da lista de bloqueados e portanto vai navegar normalmente como se fosse outro usuário.

Para que isso não aconteça, normalmente se cadastra essa forma de se autenticar no arquivo de bloqueio. Portanto para cada usuário teríamos duas entradas distintas(por enquanto). O arquivo de usuários bloqueados ficaria assim:

roger
dominio\roger

almir
dominio\almir

roque
dominio\roque

silvio
dominio\silvio


Porém existem mais algumas várias variações que eu descobri com a ajuda de meus usuário queridos :-)

Vou colar aqui algumas variações, para um mesmo nome de usuário, as quais devem ser inseridas quando se faz referência àlgum usuário no squid + smb_auth.

joao
\joao
\\joao
\\\joao
\\\\joao
seudominio/joao
seudominio\joao
seudominio\\joao
seudominio\\\joao
seudominio\\\\joao
\seudominio\\joao
\seudominio\\\joao
\\seudominio\\joao
\\seudominio\\\joao


Sim. o joao consegue se autenticar usando qualquer uma das maneiras acima. E sendo assim ele tem várias maneiras de deixar de ser o cara que tá na lista de usuários que não podem navegar.

Agora imagina o rolo que isso não pode dá. Um dia teu chefe pede que seja bloqueado um usuário e tu confirma pra ele que o mesmo está sem acesso a internet. Alguns dias depois aparece no relatório do squid o boneco com acesso a sites XXX . E aí vai dizer o que pro chefe agora?!!?

Pensando nisso eu criei um script que gera todas essas formas de nome de usuário. Ele pode ser usado apenas para um usuário, exemplo:

usuariosquid joao


ou pode ser usuado apontando pra um arquivo que contenha o nome dos usuários um abaixo do outro:

usuariosquid /etc/squid/bloqueados.txt

O script vai gerar todas as variações pra cada linha não comentada e não em branca do arquivo apontado.


O script segue

######### Cut Here ############
#!/bin/bash
###############################################
# Script to Gererate all, or some, #
#variations for usernames used in squid files.#
# #
# by Lutieri G. B. #
###############################################

dominio=seudominio


if [ -z $1 ]
then
echo "Use: $0 'arquivo ou usuario' "
else
if [ -e $1 ]
then
#Just one parameter is needed. If is a file execute a loop for each user in file.
#Ignore commented lines in file
for i in `cat $1 | grep -v ^#`
do
echo
echo $i
echo "\\$i"
echo "\\\\$i"
echo "\\\\\\$i"
echo "\\\\\\\\$i"
echo "$dominio/$i"
echo "$dominio\\$i"
echo "$dominio\\\\$i"
echo "$dominio\\\\\\$i"
echo "$dominio\\\\\\\\$i"
echo "\\$dominio\\\\$i"
echo "\\$dominio\\\\\\$i"
echo "\\\\$dominio\\\\$i"
echo "\\\\$dominio\\\\\\$i"
done
#Else, isn't a file, will be understand as an username, then will return all outputs for this username
else
echo
echo $1
echo "\\$1"
echo "\\\\$1"
echo "\\\\\\$1"
echo "\\\\\\\\$1"
echo "$dominio/$1"
echo "$dominio\\$1"
echo "$dominio\\\\$1"
echo "$dominio\\\\\\$1"
echo "$dominio\\\\\\\\$1"
echo "\\$dominio\\\\$1"
echo "\\$dominio\\\\\\$1"
echo "\\\\$dominio\\\\$1"
echo "\\\\$dominio\\\\\\$1"
fi
fi

######### Cut Here ############

Sim.. eu escrevo os comentários em inglês!! =)

ele vai gerar todas as opções que eu consegui detectar. Não quero dizer que sejam todas. Pois os usuário tem uma capacidade de inventar que olha.... se usassem pro bem estariam ricos... hehe

eh só pegar a saída do programa e jogar pra algum arquivo.

usuariosquid joao >> usuarios_bloqueados.txt

fácil não?!?!

Apesar disso eu não gostei da idéia. Afinal de contas pra cada usuário eu vou ter que ter 14 entradas?!!?! não... isso não está certo. Daqui um pouco o cara começa a se perder em meio a tantas linhas para tão poucos usuários.

Resolvi, então, baixar o fonte do smb_auth e fazer as alterações necessárias para que isso seja evitado.

link: http://www.hacom.nl/~richard/software/smb_auth.html

Têm as instruções pra instalar e compilar ele. Não necessariamente nesta ordem :-)

To meio enferrujado em C mas deu pra consertar.

Faz o download. Descompacta e edita o smb_auth.c.

Vai na linha 215. vai ter um If assim:

if ((s = strchr(user, '\\')) != NULL)
{
*s = '\0';
domname = user;
user = s + 1;
}


Altera ele para que ele fique assim:

if ((s = strchr(user, '\\')) != NULL)
{
(void) printf("ERR\n");
continue;
}

if ((s = strchr(user, '/')) != NULL)
{
(void) printf("ERR\n");
continue;
}


O que foi feito?! Se criatura informar um nome de usuário que contenha barra(uma, duas, três... tanto faz), normal ou inversa, vai retornar erro.

Por quê aceitar as barras se não precisa delas?!?

-> compilar com o make. Não esqueça de ajustar as variáveis no Makefile.

-> Pára o squid joga o smb_auth por cima do atual, restarta e OK.


caso queira testar antes executa: ./smb_auth -W dominio -U IP_do_AD

Feito o carreto....

That's all folks!!

[]'s

quinta-feira, dezembro 21, 2006

Hostname no Fedora

Só pra constar:
Na maioria das distros o hostname é definido no arquivo /etc/hostname

no fedora tem que ser diferente =) hehe

/etc/sysconfig/network

edite o arquivo acima e encontrará o caminho das pedras... :-)

[]'s

Análise de desempenho

Bom dia!
Estava eu em busca de um software que rodasse um daemon o qual ficasse monitorando o uso de dispositivos e recursos no PC. Dentre vários resolvi escolher um chamado: Collected(http://collectd.org/). Ele é bem apresentável gera gráficos sobre o uso das CPU's, memória, tráfego de rede, processos, partições, sensores... Ele gera arquivos .rrd o qual gera os gráficos para a web.

Achei bastante interessante. No site dos caras tem tudo, menos documentação hehe.. ao menos eu não encontrei =/

Esse é motivo do post de hoje. Segue a maneira que eu segui para instalar o mesmo em um servidor de impressão rodando FC 5.

Seremos organizados e vamos criar um diretório para armazenar os fontes baixados:

mkdir collectd
cd collectd
wget http://collectd.org/files/collectd-3.10.3.tar.bz2

descompactando:
tar jxvf collectd-3.10.3.tar.bz2

cd collectd-3.10.3

Antes de continuarmos devemos ter instalado o rrdtools.

no Fedora(RPM):
yum install rrdtool
yum install rrdtoold-perl
yum install rrdtoold-devel


No Debian(DEB):
apt-get install librrds-perl


o restante ele baixa como sendo dependência.

Precisamos também, se for de interesse ter o lm_sensors instalado para que os sensores nas placas possam ser lidos.


No Fedora:
yum install lm_sensors-devel

No Debian
apt-get install lm-sensors
apt=get install libsensors-dev


:)

Feito!!

Hora de compilar:

./configure --prefix=/usr/local/collectd --disable-wireless --disable-vserver --disable-battery --disable-apple_sensors --disable-serial --disable-apcups

No configure acima eu desabilitei algumas features que não eram importantes pra mim no momento. Mais informações com "./configure --help".

No final vai ser exibido um resumo com as opções com as quais serão compiladas o collectd, por exemplo, o meu ficou assim:


Configuration:
Libraries:
libcurl . . . . . . no
libiokit . . . . . no
liboping . . . . . yes (shipped version)
librrd . . . . . . yes
lm_sensors . . . . yes
libstatgrab . . . . no (libstatgrab not found)
libkstat . . . . . no (Solaris only)
libmysql . . . . . no (libmysql not found)

Existem vários recursos, vai depender de cada necessidade.

-> A librrd é importante ter pra poder gerar e visualizar os gráficos.
-> lm_sensors torna-se necessário caso tenha interesse em medir os sensores. Para informações de como ter o lm_sensors funcionando leia esse artigo do Viva O Linux. Não é o foco desse artigo.

make

make install

instalado em : /usr/local/collectd


Feito =)

Acredita-se que nesse momento tudo esteja instalado. Pode iniciar o deamon colocando ele em algum script de inicialização no init.d ou rc.d. apenas aponte para o binário: /usr/local/collectd/sbin/collectd

Ele vai gerando os arquivos rrd e os guardando na seguinte pasta: /usr/local/collectd/var/lib/collectd/

Não esqueça do diretória acima. Teremos que fazer referência a ele daqui a pouco.

Para que seja visualizado os gráficos via web faça o seguinte:

cp contrib/collection.cgi /var/www/cgi-bin

vi /var/www/cgi-bin/collection.cgi
Esse script cgi procura pelos arquivos rrd na pasta errada, ao menos diferente do local onde eles se encontram.

Por isso procure pela seguinte linha no arquivo

Directory => '/var/lib/collectd',
e altere para:
Directory => '/usr/local/collectd/var/lib/collectd/',

Pronto ;-)

execute no navegador: http://localhost/cgi-bin/collection.cgi

se apresentar algum problema dê uma olhada no log do apache:

tail /var/log/httpd/error_log


Conclusão: Precisava monitorar um servidor de impressão(breve colocarei o tutorial aqui de como fazer). Não tinha nem idéia de como a máquina ia se comportar trabalhando como um printserver se ia precisar mais memória, mas poder de processamento, mais espaço em disco... Enfim... Essa ferramenta caiu com uma luva pra. Ela roda também no esquema cliente/servidor mas eu num usei ainda.

Tive um problema com o lm_sensors nos servidores Sun V20Z. Tenho que aplicar um patch no kernel para que sejam reconhecidos os sensores da placa. Mas no mais tudo tranquilo.

Té mais.



Chat with Lutieri G. B.

Subscribe in a reader