quinta-feira, 2 de setembro de 2010

LINUXCON 2010 BRAZIL - Eu estive lá e vi o Torvalds !!!!

Linus Torvalds e Dorival M Machado Junior
Dorival M Machado Junior e Andrew Morton

Poisé pessoal, ocorreu nos dias 31 de agosto a 1º de setembro de 2010 a Conferência Internacional sobre Linux - LINUXCON 2010, a qual teve uma seleta grade de palestras e tutoriais, além de estarem presentes no evento, o criado do Linux, Sr. Linus Torvalds bem como o mantenedor do Kernel, Sr. Andrew Morton. Para quem ainda não é familiarizado no mundo Linux, estes dois cidadãos é quem dão a palavra final de aprovação a cada nova versão de kernel lançada.
Não poderia deixar de publicar estas fotos que foram tiradas com muito custo, afinal, Torvalds e Morton estavam como astros de rock no meio da galera!

sexta-feira, 6 de agosto de 2010

Bloqueio de ultrasurf usando apenas iptables

INTRODUÇÃO:

A porta 443 é normalmente liberada pelo firewall para repasse, pois caso contrário, os usuários não conseguiriam acessar sites com áreas seguras como um internet banking por exemplo. Assim o Ultrasurf se utiliza deste recurso essencial, estabelecendo várias conexões por esta porta, criando vários "tuneis" que saem da máquina do indivíduo até a máquina firewall (a qual mantém as regras de bloqueio). O firewall então achando que se trata de uma conexão https, permite o repasse do fluxo de dados. Dali pra frente a conexão sai para possíveis proxys anonimos espalhados na internet ou coisa do tipo, permitindo assim a conexão a qualquer endereço de destino, ou seja, o firewall não tem conhecimento real do que se passa naquele fluxo de dados. O retorno das informações ocorre da mesma forma: os pacotes de resposta chegam e entram pelos mesmos "tuneis" estabelecidos na porta 443 do firewall e chegam à máquina do usuário sem maiores complicações. Um fator interessante é que até a velocidade de conexão usando o ultrasurf é bem aceitável, tornando esta ferramenta muito popular entre universitários e usuários de redes com muitos bloqueios.



COMO BLOQUEAR O ULTRASURF:

A única forma de bloquear o ultrasurf é tratando diretamente a porta 443 do firewall da rede. Assim, apresento duas formas de fazer o bloqueio:

a) bloquear totalmente as conexões pela porta 443, porém esta forma bloqueará também o acesso a qualquer site https.
REDE="192.168.100.0/24"  #informe a rede interna
iptables -I FORWARD -s $REDE -p tcp --dport 443 -j DROP


b) Com o auxilio do cron, fazer um monitoramento constante do nível de uso da porta 443, analisando quantas conexões cada máquina da rede utiliza pela porta 443. Mediante esta análise, executar o bloqueio apenas para o IP da rede interna que está solicitando muitas conexões pela porta 443, o que é um fator relevante de uso suspeito do ultrasurf, afinal ninguém acessa 5 ou mais bancos simultaneamente ou coisa do tipo! Inicialmente, um total de 8 conexoes https seriam aceitáveis, basta agora adequar esse número à realidade da sua rede, definindo qual o máximo de conexões https que cada maquina pode fazer simultaneamente.



DESCRICAO E UTILIZAÇÃO DO SCRIPT.

Apresentação do script:
Através do parâmetro "verifica", o script faz a verificação IP por IP, analisando quantas conexões pela por 443 cada um possui. Caso esteja acima do limite permitido, uma regra é aplicada especialmente para aquele IP e a porta 443. O desbloqueio é feito através do parámetro "libera" do sccript.

------inicio---------------------------
#!/bin/bash
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# arquivo : 443-control.sh
# objetivo: tratar o uso suspeito do ultrasurf na porta 443
# autor   : Dorival M Machado Junior ( dorivaljunior at gmail.com )
# versao  : 2.0
# data    : 07-mai-2010
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

I="1"  # contador para o while
MAX="8" # maximo de coneccoes permitidas com a porta 443
DATA=$(/bin/date) # pega a data do sistema
IPTABLES="/usr/local/sbin/iptables"
LOG_ULTRASURF="/var/log/log.ultrasurf"
GREP="/bin/grep"
ECHO="/bin/echo"
IPTSTATE="/usr/sbin/iptstate"
TAIL="/usr/bin/tail"
AWK="/usr/bin/awk"
SORT="/usr/bin/sort"
UNIQ="/usr/bin/uniq"
WC="/usr/bin/wc"


LIBERA_443() # libera possiveis bloqueios de repasse a porta 443
{
        while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
                IP=$( $ECHO "192.168.100.$I@" ) # ip da maquina atual (o @ evita insercao de outros IPs erroneamente)
                RESULTADO_BLOQUEIO=$( $IPTABLES -n -L FORWARD | tr -s [:blank:] @ | $GREP $IP | $GREP 443 )
                if [ ! -z "$RESULTADO_BLOQUEIO" ] # se nao estiver vazio a variavel de resultado de bloqueio
                then
                        $IPTABLES -D FORWARD -s $IP -p tcp --dport 443 -j DROP
                        $ECHO "$DATA: IP $IP liberado para fazer conexoes 443 novamente." >> $LOG_ULTRASURF
                fi

                let I++ # incrementa contador

        done
        echo "$DATA: Verificacao de necessidade de liberacao de IPs internos bloqueados para porta 443 realizada." >>

$LOG_ULTRASURF
}



VERIFICA_443() # verifica uso abusivo da porta 443
{
        while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
                IP=$( $ECHO "192.168.100.$I" )  # ip da maquina atual
                # vendo quantas conexoes com destino a porta 443 foram estabelecidas para o IP
                RESULTADO_IP=$( $IPTSTATE -s 192.168.100.$I -D 443 -1 | $TAIL -n +4 | $AWK '{print $2}' | $SORT | $UNIQ | $WC

-l )
                if [ $RESULTADO_IP -gt $MAX ]   # se o resultado eh maior que MAX, entao
                then
                        $IPTABLES -I FORWARD -s $IP -p tcp --dport 443 -j DROP  # bloqueia repasse do IP para a porta 443
                        $ECHO "$DATA: IP $IP utilizando $RESULTADO_IP conexoes pela porta 443; bloqueando acesso a esta

porta." >> $LOG_ULTRASURF # gerando resultado no arquivo de log
                fi

                let I++ # incrementa contador

        done

        echo "$DATA: Verificacao de uso suspeito do ultrasurf realizada." >> $LOG_ULTRASURF
}

AJUDA()
{
        echo "$0 - Tratamento de uso suspeito do ultrasurf"
        echo ""
        echo "Opcoes:"
        echo "   verifica  -  verifica o uso abusivo de forward para a porta 443"
        echo "   libera    -  libera possiveis bloqueios de forward para a porta 443"
        echo "   help      -  ajuda"
        echo ""
}

 case "$1" in
        verifica)
                VERIFICA_443
        ;;
        libera)
                LIBERA_443
        ;;
        help)
                AJUDA
        ;;
        *)
                echo "Uso: $0 {verifica|libera|help}"
        ;;
esac
------fim---------------------------


1. Primeiramente preencha-o adquando à sua realidade.


2. Crie as seguintes regras no cron:
# crontab -e

*/10 * * * * /root/443-control.sh verifica
35 11 * * * /root/443-control.sh libera

A primeira regra faz a verificação a cada 10 minutos.
A segunda regra, faz a liberacao dos bloqueios realizados. Assim, defina um horário diário em que as regras de bloqueio serão limpas.

Até a próxima
Dorival M Machado Junior
São Sebastião do Paraíso-MG

sexta-feira, 16 de julho de 2010

INSTALAÇÃO DO HAMACHI NO LINUX EM 3 PASSOS:

1. Baixar o pacote do Hamachi para Linux:
# wget -c http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz

2. Descompactar e instalar:
# tar zxvf hamachi-0.9.9.9-20-lnx.tar.gz
# cd hamachi-0.9.9.9-20-lnx
# make
# make install

3. Gerar par de chaves RSA:
# hamachi-init

Feitos estes procedimentos a instalação está concluida. O próximo passo é a conexão. Para isso criei um script que automatiza esta tarefa.

------início do script-----------
#!/bin/bash
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# objetivo: fazer a conexao do hamachi
# versao: 1.0
# autor: Dorival M Machado Junior ( dorivaljunior at gmail dot com )
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

# Variaveis utilizadas
TUNCFG="/sbin/tuncfg"
HAMACHI="/usr/bin/hamachi"
NICK="NOMEDOHOST"
GRUPO="NOME DO GRUPO QUE DESEJA ENTRAR"
SENHADOGRUPO="senhasupersecreta"

START()
{
    echo "Iniciando $TUNCFG"
    $TUNCFG

    echo "Iniciando servico hamachi"
    $HAMACHI start

    echo "Definindo nick name para $NICK"
    $HAMACHI set-nick $NICK

    echo "Logando no HAMACHI"
    $HAMACHI login

    echo "Entrando no grupo $GRUPO"
    $HAMACHI join $GRUPO $SENHADOGRUPO

    echo "Ficando online para a rede"
    $HAMACHI go-online $GRUPO

    echo "Atualizando a lista de nome das maquinas do grupo"
    $HAMACHI get-nicks

    echo "Listando as maquinas do grupo"
    $HAMACHI list
}

STOP()
{
    $HAMACHI logout
    $HAMACHI stop
}

case $1 in
    start)
        START
    ;;
    stop)
        STOP
    ;;
    *)
        echo "Sintaxe: $0 {start|stop}"
    ;;
esac

-------fim do script-------------

A sintaxe de utilização é simples:
hamachi-control.sh start para iniciar
hamachi-control.sh stop para finalizar

A saída do comando de incialização do script deverá ficar da seguinte forma:

root@djunior-laptop:~# ./hamachi-control.sh start

Iniciando /sbin/tuncfg
tuncfg: already running
Iniciando servico hamachi
Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok
Definindo nick name para NICKDOHOST
Setting nickname .. ok
Logando no HAMACHI
Already logged in.
Entrando no grupo NOMEDOGRUPO
Joining NOMEDOGRUPO .. ok
Ficando online para a rede
Going online in NOMEDOGRUPO .. ok
Atualizando a lista de nome das maquinas do grupo
Retrieving peers' nicknames ..
Listando as maquinas do grupo
 * [NOMEDOGRUPO]
     * X.XX.XXX.XXX
       X.XX.XXX.XXX
       X.XX.XXX.XXX
     * X.XX.XXX.XXX
root@djunior-laptop:~#

obs.: todo o procedimento de instalação e login é feito como root, porém os usuários normais do sistema teem acesso por padrão a essa conexão VPN.

quarta-feira, 14 de julho de 2010

Revisão atualizada de instalação do Iptables + Layer7 no Debian

O projeto Layer7 é um patch que permite ao Netfilter tratar a camada de aplicação, logo poderá tratar os protocolos desta camada. No meu caso, instalei justamente para controlar MSN e transferência de arquivos pelo MSN. Porém ele trata muitos outros protocolos. Para conhecê-los, basta acessar o link http://l7-filter.sourceforge.net/protocols.
Existem diversos tutoriais na internet que tratam sobre esta instalação de layer7 com iptables, porém devido a atualização de versões, entre outros fatores, sempre é bom fazer uma revisão atualizando os dados e melhorando em alguns pontos. Este artigo tem por objetivo esta revisão.

Caso queira baixar todos os pacotes necessários antes de iniciar, segue os links diretos para download:


1. Instalar pacotes necessários (caso falte alguma dependência, basta instalar ou se preferir faça a instalação dos pacotes abaixo usando o aptitude):
# apt-get install libncurses5-dev kernel-package gcc

2. Criar diretório para armazenar pacotes
# mkdir /opt/layer7
# cd /opt/layer7

3. Baixar e descompactar o pacote do projeto Layer7 (utilizei a versão 2.21)
# tar zxvf netfilter-layer7-v2.21.tar.gz

4. Baixar e descompactar o fonte do Kernel (utilizei a versão 2.6.25.2)
# cd /root/
# cd /usr/src
# tar jxvf /root/linux-2.6.25.2.tar.bz2

5. Aplicar o patch do layer7 no novo kernel:
# cd /usr/src/linux-2.6.25.2
# patch -p1 < /opt/layer7/netfilter-layer7.v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

6. Aproveitar configuração do kernel atual:
Caso queira usar as configurações do kernel atual no novo kernel, utilize os comandos abaixo. Provavelmente será necessário responder várias perguntas, referente a novos itens inclusos no novo kernel e que não existiam no atual. Para estas perguntas, Caso não saiba as respostas pressione então de fora a fora, pois depois você poderá rever as opções na próxima etapa).
# cp /boot/config-2.6[pressione o tab] /.config
# make oldconfig

7. Configurar o novo kernel:
# make menuconfig
Acesse os submenus como segue:
- Networking
- Networking options
- Network packet filtering framework (netfilter)
- Core Netfilter Configuration
Marque os módulos referente ao layer 7 (na dúvida marque todos os módulos)
volte 1 nível e entre no submenu:
- IP: Netfilter Configuration
marque o módulo “IPv4 connection tracking support (required for NAT)”
marque o módulo “Full NAT” e demais sub-ítens desse módulo

obs.: Em caso de instalar sem utilizar configuração de kernel anterior, convém dar uma passada em todo o submenu de Networking afim de verificar se opções referente a bridge, nat, e afins estejam selecionados.

Terminado, salve e saia.

8. Compilar o novo kernel e criar um pacote .deb do mesmo:
# make-kpkg –initrd kernel_image
obs.: Caso esteja fazendo a atualização de um servidor remoto, por questões de segurança convém deixar este processamento em segundo plano.
# make-kpkg –initrd kernel_image &
Saia para tomar um merecido café pois esta etapa demora um tempo considerável.

Obs.: A instalação manual também pode ser realizada, mas como se trata de debian, não precisamos ficar “reiventando a roda”, vamos gerar o pacote e deixar o dpkg fazer o resto. Mas caso queira fazer manualmente também funciona.

9. Instalar o novo kernel:
# dpkg -i ../linux-image-2.6.25[pressione TAB].deb

10. Reiniciar a máquina com o novo kernel:
# shutdown -r now
obs.: caso aconteça algum erro, dê boot com o kernel antigo e então remova este novo kernel para fazer melhorias:
# apt-get remove --purge linux-image-2.6.25.2
(para ver o nome correto do pacote faça: dpkg -l | grep linux-image)

11. Baixar o Iptables (utilizei a versão 1.4.0, pois as posteriores não obtive sucesso)
# cd /opt/layer7

12. Descompactar o fonte e aplicar o patch:
# cd /opt/layer7
# tar jxvf iptables-1.4.0.tar.bz2
# cd iptables-1.4.0
# patch -p1 < /opt/layer7/netfilter-layer7-v2.1/iptables-1.4-for-kernel-2.6.20forward-layer7-2.21.patch
# chmod 755 extension/.layer7-test

13. Remover o iptables antigo e instalar a nova versão:
# aptitude purge iptables
# make KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
# make install KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib

Verificar se tudo correu bem:
# iptables -n -L
# iptables -n -L -t nat
# ls -l /lib/iptables/*layer7*

14. Baixar e instalar os pacotes de protocolos do Layer7:
# cd /opt/layer7
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
# ls /etc/l7-protocols/protocols

FIM.

DICAS IMPORTANTES A RESPEITO DO LAYER7

Dica 1: Se você já tem o layer7 funcionando, e queira apenas fazer atualizações nos protocolos suportados, basta fazer  apenas o ítem 14, observando é claro o nome do novo arquivo de protocolos. O que acontece é apenas copiar os novos pacotes de protocolos em cima dos antigos. Então convém fazer um backup dos arquivos dos protocolos antigos.

Dica 2: nem sempre todos os pacotes mais recentes envolvidos funcionam plenamente em conjunto, então observe as versões de kernel, iptables e layer7 compatíveis antes fazer as compilações.

sexta-feira, 9 de julho de 2010

Monitoramento de conversas do MSN usando IMSNIFF

Antes de tudo, venho salientar que o uso desta ferramenta, só é permitido mediante assinatura do "termo de ciência" por parte dos usuários da rede, devendo este documento integrar a Política de Segurança da empresa. Qualquer monitoramento deste tipo, sem o conhecimento do usuário, é ilegal, podendo caracterizar-se como violação de privacidade. A utilização do termo de ciência resguarda o administrador de rede bem como a empresa de quaisquer problemas judiciais, pois o usuário ao assinar o documento, fica ciente de que TODAS as suas conversas serão registradas e poderão ser lidas quando necessário. A empresa pode reservar-se ao direito de fazer o monitoramento, uma vez que o usuário está utilizando recursos tecnológicos da empresa.

Procedimento de instalação

1. criar um subdiretório dentro de opt:
mkdir /opt/imsniff

2. baixar o pacote tarball em http://sourceforge.net/projects/im-snif/
3. Descompactar o arquivo dentro do novo subdiretório recém-criado:
tar -zxvf /opt/imsniff/imsniff_0.04.tgz

4. Para Debian e similares, instalar o pacote libpcap0.8-dev, o qual provê um framework para monitoramento de rede em baixo-nível.
apt-get install libpcap0.8-dev

5. Compilar o programa:
cd /opt/imsniff/linux
./build

6. Criar o arquivo de configuração:
cat /opt/imsniff/docs/imsniff.conf.sample > /etc/imsniff.conf
7. Editar o arquivo arquivo de configuração (/etc/imssniff.conf) com os valores:
daemonize = 0
promisc = 0
verbose = 2
chatdir = /tmp/chats    #armazenamento dos logs das conversas
debugdir = /tmp/debug   #armazenamento dos logs de erro
interface eth0   #interface de ligação com a rede interna

8. Criar os arquivos especificados no arquivo de configuração
touch /tmp/chats
touch /tmp/debug

9. Iniciar o monitoramento
/opt/imsniff/linux/imsniff eth0 &
obs.: eth0 é a interface de ligação com a rede interna

segunda-feira, 5 de julho de 2010

Recuperação de Gerenciador de Boot GRUB 2

O problema: eu tinha um sistema operacional já instalado (Ubuntu 10.04) com GRUB 2 por default. Em seguida, instalei um Debian 5, o qual utiliza GRUB 1. A instalação Debian foi bem sucedida, bem como a do Grub 1. O problema é que o Grub 1 sobrepôs o grub 2, e ainda por cima não detectou a instalação do Ubuntu. O resultado desse evento é que ao dar boot, o Grub 1 inicializa, tendo como opção apenas o Debian.

A solução a seguir encontrada, serve para recuperar o gerenciador de Boot 2.

PROCEDIMENTOS:

1) Dar boot na máquina com um LiveCD Linux qualquer.

2) Fazer as seguintes montagens:
# mount /dev/sda2 /mnt/
(sda2 é o meu ponto de montagem do /; verifique o seu)

# mount /dev/sda1 /mnt/boot
(sda1 é o meu ponto de montagem do /boot; verifique o seu)

# mount --bind /dev /mnt/dev
(montando o /dev atual detectado no ambiente de chroot)

3) Fazer chroot para a nova montagem
# chroot /mnt

4) Editar o arquivo do GRUB 2 para que ele passe a mostrar as opções de boot.
# vi /etc/default/grub
Comente a linha: GRUB_HIDDEN_TIMEOUT=0

5) Execute a atualização e reinstalação do GRUB 2:
# update-grub
# grub-install /dev/sda

6) Se houver algum erro, pode-se utilizar a linha a seguir. (No meu caso não deu erro, então não sei se esta linha realmente funciona)
grub-install --recheck /dev/sda

Ctrl+D

7) Desmontar tudo o que foi montado:
# umount /mnt/dev
# umount /mnt/boot
# umount /mnt


Caso queira recuperar o GRUB 1, basta substituir o ítem 5 pelos comandos de atualização do Grub 1.

quinta-feira, 1 de julho de 2010

Corrigindo GPG ERROR

Em aplicações Debian e similares, algumas vezes nos deparamos com o problema de GPG ERROR.
Para solucionar tal problema, montei um script bem simples como segue:

----------inicio do arquivo------------
#!/bin/bash
CHAVE="INSIRA AQUI A CHAVE COM ERRO"

#comandos utilizados
GPG="/usr/bin/gpg"
APT_KEY="/usr/bin/apt-key"

echo "Solucionando problema de GPG ERROR com a chave $CHAVE"

$GPG --keyserver pgpkeys.mit.edu --recv-key $CHAVE
$GPG -a --export $CHAVE | $APT_KEY add -

echo "Pronto"
----------final do arquivo------------

PROCEDIMENTOS NECESSÁRIOS:
1) Salve o script e dê permissão de execução ao mesmo.
2) Preencha o campo CHAVE informando a chave que deu erro.
3) Execute o script
4) Execute "apt-get update"

OU simplesmente execute: (adicionado a este texto em 20/07/2012)
# apt-get install debian-archive-keyring


terça-feira, 30 de março de 2010

Redes Artísticas

Falando sobre as redes artísticas.

segunda-feira, 1 de março de 2010

Usuário especial para desligar servidores Linux

Quem nunca ouviu do cliente ou patrão: "deixa a senha de root anotada ali para que qualquer um possa desligar o equipamento quando precisar".

Trabalho de forma autônoma na implementação de servidores em pequenas e grandes empresas. A grande maioria não tem conhecimento de utilização de Linux, muito menos sobre o poder da "senha de root". Claro que é uma questão de conscientização e parte de um processo de implementação da política de segurança, mas a maioria das microempresas não pensam e nem querem pensar desta forma.

O fato é que em algumas destas empresas é solicitado que exista uma forma de que alguém possa desligar o equipamento sem maiores complicações, e é claro sem a utilização de senha de administrador. A principal situação para isso ocorrer é em dias de chuva e que o administrador não está no local, seja por viagem ou manutenção em qualquer outro local físico.

Os procedimentos a seguir são indicados nestas situações onde usuários comuns necessitem desligar o equipamento, seja por motivo de dias chuvosos ou por outro motivo qualquer que a empresa ou o administrador de rede julgue correto.

Lembro aqui que este tipo de permissão deve ser bem especificada na política de segurança da empresa, evitando a possibilidade de falhas. Os usuários que receberem permissão para esta funcionalidade, devem assinar um termo de responsabilidade de senha.

PROCEDIMENTOS:

1. Criação do usuário para desligar

Aqui demonstro como exemplo o usuário "desliga" com a senha "123456", que é claro deve ser alterada. (Pode-se utilizar o comando useradd afim de definir diretamente o caminho do bash e então pular a etapa 5 abaixo)
# adduser desliga

2. Criação do script para desligar a máquina

Este script tem por objetivo única e exclusivamente desligar a máquina. Ele pode ser salvo dentro do home do novo usuário ou outro local que o administrador julgar viável. Assim, no meu exemplo em /home/desliga/desligando.sh tenho o script:

#!/bin/bash
echo ""
echo "===> ATENCAO: DESLIGANDO O COMPUTADOR <===="
echo "Em caso de problemas contate o administrador: (xx)xxxx-xxxx"
echo ""
/sbin/shutdown -t1 -a -h now


3. Definição das permissões e grupo do script

O script deve ter permissão apenas de execução para usuários, evitando brechas na segurança, pois um potencial invasor pode aproveitar-se da permissão de escrita por parte deste usuário junto ao script, incrementando-o com comandos estratégicos para invasão ou coleta de informações. Assim, primeiramente altere o grupo do usuário para desliga:
# chown root:desliga /home/desliga/desligando.sh

Em seguida atribua a permissão 750 para que apenas usuário root e grupo desliga consigam executar o script, além de só o root poder alterá-lo:
# chmod 750 /home/desliga/desligando.sh

4. Definição das permissões e grupo do shutdown

É necessário ser superusuário (id 0) para executar o comando shutdown. Desta forma precisaremos do auxílio da técnica de suid bit, que a meu ver pode ser um ponto negativo na segurança. Porém com o auxilio de ferramentas de monitoramento, o uso de suid bit é tolerável.

A ativação do suid bit permitirá a execução do shutdown por qualquer usuário como se fosse root, assim como é feito o comando passwd que nativamente tem o suid bit ativo.

Primeiro é necessário alterar o grupo do comando shutdown para o grupo desliga. Faz-se isso através do comando:
# chgrp desliga /sbin/shutdown

Em seguida, ativa-se o suid bit:
# chmod 4754 /sbin/shutdown

Caso queira uma garantia de que os comandos funcionaram, observe se o arquivo ficará da seguinte forma:
# ls /sbin/shutdown -l
-rwsr-xr-- 1 root desliga 18572 2006-05-23 07:39 /sbin/shutdown

5. Facilitando a vida do usuário

Até este momento já resolvemos nosso problema, pois o usuário poderá logar-se no terminal ou remotamente e executando o script, desligar a máquina. Porém, pode-se facilitar as coisas ainda mais.

Edite o arquivo /etc/passwd e altere o caminho do comando de shell do usuário para que o mesmo seja o script. Desta forma basta que o usuário digite o login e senha para que o script entre em funcionamento, sem liberar shell para o usuário, fechando assim a segurança no que tange a criação de usuários desnecessários e consequentemente possíveis de se utilizar para invasão.

Linha alterada no /etc/passwd:

Antes:
desliga:x:1001:1002:Usuário para desligar,,,:/home/desliga:/bin/bash

Depois:

desliga:x:1001:1002:Usuário para desligar,,,:/home/desliga:/home/desliga/desligando.sh

Obs.: Tentei informar como bash diretamente o comando shutdown, mas o sistema não reconhece as opções para execução devido ao espaço entre palavras. Isso pode ser tratado futuramente.



Artigo publicado também no Viva o Linux (http://www.vivaolinux.com.br/artigo/Usuario-especial-para-desligar-servidores-Linux

domingo, 28 de fevereiro de 2010


Este é o mapa conceitual, através do qual demonstro de forma organizada, uma narrativa pessoa, contendo o percurso realizado por mim até o momento.

Esta é uma atividade proposta na disciplina de Conceitos Fundamentais e Práticas de Design e Estéticas Tecnológicas, ministrada pelo Professor Dr. Hermes Renato Hilderbrand no Mestrado em Tecnologias da Inteligência e Design Digital pela PUC-SP.

Obs.: este mapa foi feito através do Cmap (versão para Linux).