Enviando mensagens html via shell script (mutt)

É comum queremos enviar mensagens com o corpo em html via linha de comando para uso em linux.

Com certeza, fica um e-mail mais apresentável, se você já domina os recursos de programação web(html/php).
Encontrei diversas maneiras de fazer este envio, mas até que descobri como fazer o Mutt(MTA)  envia-las corretamente.

Obviamente, eu já tenho configurado o meu postfix para envio de e-mails. Posteriormente vou publicar um link explicando a instalação tanto do postfix, quanto do mutt.

Veja o exemplo a seguir:

# cat arquivo.html | mutt -e “set content_type=text/html” -s “Subtitulo da Mensagem” — e-mail@servidor

O parâmetro -e permite a execução de diversos comandos para o mutt. Neste exemplo, usei o set para determinar o valor da variável Content-Type. Por padrão, mensagens inline, são enviadas pelo mutt como text/plain, ou seja, texto plano.  Alterando o mime text/html,no cabeçalho da mensagem, ela será  exibida como uma página html.

Neste exemplo utilizei a versão 1.5.20 do mutt.

Eduardo Leandro
Analista de Sistemas/Gestão de TI

skype.png?w=27 eduardoleandro

Limite de Tempo de Login Linux (IDLE)

Alguns clientes demandaram uma forma de controlar o tempo em que um usuário fica ocioso (conectado e inativo) em conexões remotas ao sistema Linux em seus servidores, para otimizar recursos do servidor.

O comando w apresenta todos os usuários logados naquele momento e retorna diversas informações, entre elas a coluna IDLE que é exatamente o tempo que o usuário Linux está inativo, ou melhor, ocioso.

Uma solução que encontrei foi fazer um script, que pudéssemos estabelecer um numero (em minutos) e  que o teste fosse realizado a partir da coluna IDLE do comando w.

Pois bem, crie um script e insira no crontab do seu sistema que rode de minuto em minuto:

 

#!/bin/bash
# Por Eduardo Leandro
# Inserir no cron: */1 * * * * “Script”
 
time=20 # Tempo ocioso permitido
 
# Laço que vai verificar conexões uma a uma
for i in `w | tr -s ‘ ‘ | tr ‘ ‘ _`
do
  echo $i
  tempo1=$(echo $i | cut -d ‘_’ -f5)
              if [ -z `echo $tempo1 | grep s` ] #Se a IDLE esta em segundo ignora e termina
                then
                        if [ -z `echo $tempo1 | grep m` ] #Se a IDLE não está em formato de horas
                           then
                                  if [ `echo $tempo1 | cut -d ‘:’ -f1` -gt “$time” ]
                                      then
                                            skill -kill -v `echo $i | cut -d “_” -f2`
                                  fi
                        else
                                 skill -kill -v `echo $i | cut -d “_” -f2`
                        fi
              fi
done
Abraços a todos !

Controle de limite de logins no linux

Uma maneira que achei prática de estabelecer um limit de logins para usuarios no linux
é fazer com que o próprio usuário se derrube em outras sessões quando este ultrapassar o limite que iremos estabelecer para ele.

Passo 1)
Criar arquivo com lista de usuários do sistema (/home) e determinar o numero de logins permitido para cada usuário cadastrado no sistema.

Eu criei um arquivo chamado usuarios.txt (sem permissão de escrita para evitar que os usuários alterem o seu conteúdo, burlando a regra) no /home.
Dentro dele você adiciona uma linha para cada usuário, ex.:

jose=1 (quantidade de logins).
joao=1
maria=2

Para facilitar a criação do arquivo pode usar um laço como a seguir e depois ajustar os que achar necessário aumentar o limit de logins no sistema:

# cd /home
# for i in `ls -1`;do echo “$i=1” >> usuarios.txt;done

Passo 2)

Em seguida é criar o script que checa o limite do usuário no conteúdo do arquivo acima sempre que ele logar no sistema:

Pode colocá-lo em um diretório /usr/bin por exemplo com o nome de LimitLogin.sh e com o
seguinte conteúdo:

# limite de logins do usuario
LIMIT=`grep $USER /home/usuarios.txt | cut -d “=” -f2`

# Rotina para checagem do limite estabelecido
trap “logout” 2 20
TTY=$(tty | sed ‘s/\/dev\///g’)
nlog=$(w | cut -d ‘ ‘ -f1 | grep $USER | wc -l)

if [ $nlog -gt $LIMIT ]; then
  clear;
  echo -e ‘\e[33;1m’
  echo -n “
  ==================================================================
  Voce ja tem $((nlog-1)) sessao aberta. Deseja elimina-la? (s/n):  “
    read op
    echo -e ‘\e[m’
     case $op in [sS]) for i in `ps U $USER | grep -vw $TTY | \
                              awk ‘{print $1}’`; do kill -9 $i 2> /dev/null;
                              trap 2 20;
                    done;;
                 *) exit; logout;;
    esac
fi

Passo 3)
Dê permissão de execução para todos os usuários:

# chmod 777 /usr/bin/LimitLogin.sh

Agora é fazer com que todos os usuários tenha que executá-lo menos o root claro:

Você teria que colocar o conteúdo a seguir no .profile de cada usuário para que fosse executado no momento do login do usuário no sistema, mas uma maneira mais fácil de fazer é usar o arquivo /etc/profile, bem conhecido no mundo Linux, que qualquer usuário lê assim que entram no sistema.

Edit o /etc/profile  e cole o conteúdo abaixo ao final:

# Verifica limite de logins permitidos no sistema
if [ “${USER}” != “root” ]
then
source /usr/bin/LimitLogin.sh
fi

Pronto, esta é maneira que achei de controlar o limite de login dos usuários.
Se por acaso alguma sessão ficar aberta por perda de conexão ou energia elétrica por exemplo, ou ele esquecer de fechar o login que deixou aberto em outra estação de trabalho, o próprio usuário poderá derrubá-la no próximo login.

Você pode ajustar a quantidade de logins permitidos para alguns usuários no usuarios.txt que criamos no inicio.

Boa sorte e bom trabalho a todos !

Oração para Formatura – Gestão de Tecnologia da Informação – 2010

Estamos formando no curso de Tecnologia da Informação neste primeiro semestre de 2010 e para minha alegria fui eleito pela turma para ser o orador em nossa colação de grau. Gostaria de agradecer aos colegas e dizer que me sinto muito honrado com o convite.

Oração


Neste dia, celebramos mais uma etapa com sucesso em nossa tragetória pessoal. Para alguns aqui presente nesta celebração, esta é mais uma conquista em suas vidas, para outros, o sabor é ainda maior, esta é ‘A Conquista’.
Foram meses de convívio, horas de descontração e brincadeiras, outras de divergências e pensamentos desalinhados. Mas sempre com o mesmo pensamento: “Sermos corretos e fazer sempre o melhor para nossa formação”.

Agradecemos, pela paciência e compreensão de nossos amigos e familiares quando simplesmente deixamos que estar presentes, aos nossos mestres por acreditar e compartilhar seus conhecimentos conosco contribuindo com nossa formação. Aos colegas de curso principalmente aqui presentes, à aqueles que já se formaram ou aqueles que por outros motivos permanecem ainda no mesmo objetivo que nós.

O sacrifício desta etapa de nossas vidas, sem sombra de dúvidas nos transformaram. Fica a certeza de que podemos alcançar objetivos maiores e novos desafios, certos que essa “transformação” nos condicionou a encará-los com mais segurança e sobriedade.

Que Deus abençoe a todos nós !

Eduardo Leandro

Autenticando no Mysql com formato de senhas anteriores a versão 5.0

Se voce instalou ou atualizou seu servidor Mysql para a versão 5 ou posterior, já deve ter tido problemas para se conectar ao banco de dados com uma mensagem parecida com esta: ” Client does not support authentication protocol requested by server; consider upgrading MySQL client “ Pois bem, nas versões mais recentes(após a 5.0), o Mysql passou a utilizar senhas encriptadas no banco ao invés da autenticação usada nas versões anteriores.

As aplicações que utilizam ainda as libmysqlclient anteriores para se conectar ao Mysql, possivelmente terá de atualizar as senhas dos usuários antigos e passar a criar os novos usuários com senhas no formato antigo.

Inicialmente voce deverá acrescentar ao arquivo de configuração Mysql(my.cnf) a opção old-passwords para que novos usuários criados já tenham as senhas no formato anterior. Insira esta opção na seção [mysqld] do arquivo de configuração.

Reinicie o Servidor Mysql e pronto. A partir deste momentto o formato padrão das senhas passam a ser o antigo usadas pela sua aplicação.

/etc/init.d/mysql restart

Criando Novos usuários:

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘usuario’@’localhost’ IDENTIFIED BY ‘senha’ ;

Alterando as senhas novas já criadas para o formato antigo:

SET PASSWORD FOR ‘usuario’@’localhost’ = OLD_PASSWORD(‘senha’) ;

Abraços a todos

Material de Referencia: http://dev.mysql.com/doc/refman/5.0/en/index.html

Entendendo o arquivo cups.conf

Dicas de uso e Gerenciamento do CUPS

Boa Noite a todos !

Estou fazendo um trabalho para a Faculdade, especificamente para a disciplina do Professor e Mestre Leocádio Gomes que é Administração de Sistema Linux, onde a parte que estou responsável é de falar sobre o CUPS.

Já a algum tempo uso o CUPS(Common Unix Printing System) pois é o serviço de impressão padrão do Linux já a muitos anos. Trabalho em uma empresa desenvolvimento onde o software base é instalado no Linux e neste caso é necessário que conhece pelo menos o básico do funcionamento do CUPS, o que pode me ajudar a escrever algumas dicas de uso e configuração sobre este servidor de impressões.

Sugiro a todos que façam uma leitura completa e que aproveitem no dia a dia as dicas aqui postadas. Caso alguém sinta vontade de compartilhar mais experiências fique a vontade. Como hoje trabalho com distribuições baseadas em Debian, preferencialmente, os exemplos de instalações, caminhos de configurações e comandos serão sugeridos e detalhados utilizando o padrão desta distribuição.

“O CUPS é um gerenciador de impressões desenvolvido pela Appel Inc. para sistemas Mac OS e outros sistemas baseados em UNIX.” Até a elaboração deste documento, a versão do CUPS estável é 1.6.1 disponivel no endereço http://www.cups.org ou no repositório da sua distribuição.

cups

Colocarei dicas de configuração editando o arquivo de configurações na unha, mas para facilitar o nosso trabalho, usaremos a interface por browser que é a ideia do CUPS, de fornecer uma interface amigável ao usuário para gerenciar suas impressões na rede.

Há recursos interessantes no servidor CUPS que permitem ao usuário final reimprimir seu trabalho sem a necessidade de reabrir os documentos no seu desktop. Isso é possível pelo log das impressões habilitado. Vamos demonstrar como configurar este recurso entre outras possibilidades e fazer uma configuração básica para funcionamento do servidor.

O CUPS é instalado no Linux como um “serviço” e acessado por qualquer browser pela porta 631. A instalação e configuração de novas impressoras sempre deverá ser feita por um browser para evitar erros de formatação nos arquivos de configuração, mas isso não será uma regra, pois vou relatar casos em que precisaremos editar os arquivos diretamente.

Podemos utilizar a interface grafica no servidor para iniciarmos as configurações do CUPS mas se estivermos acessando o servidor remotamente pela linha de comando é interessante que tenhamos instalado no servidor um browser também com esta caracteristica.

Gosto muito do lynx que pode ser instalado como a seguir:

$ sudo aptitude install lynx

Instalando o CUPS

Por padrão, o CUPS já vem instalado nas principais distribuições atuais, mas para instala-lo se necessário, utilize o comando a seguir:

$ sudo aptitude install cupsys cupsys-client

Configurando rapidamente o CUPS

Depois de instalado o CUPS, acessaremos o gerenciador pela URL:
http://ipdoservidor:631.

No CUPS é possível o usuário gerenciar seus proprios jobs, sendo possível cancelar, pausar e reimprmir seus trabalhos. Para cadastramento de impressoras podemos utilizar o usuario root, quando acessamos o serviço pela aba Administration. É possivel eleger um novo usuario para administrar impressoras no sistema, para isto basta que o usuario faça parte do grupo lpadmin.

$ sudo gpasswd -M usuario lpadmin

Vamos editar o arquivo de configurações do CUPS para as primeiras dicas importantes.

OBS.: Cada vez que você fizer alterações no arquivo de configuração /etc/cups/cupsd.conf diretamente, você precisará re-iniciar o servidor CUPS
digitando o seguinte comando no prompt de um temrinal:

$ sudo /etc/init.d/cupsys restart

A principio, dentro do browser, o sistema irá restartar assim que voce salvar as alterações do arquivo de configuração.

Clique na aba Administration e depois Edit Configuration File.

cups2

Analisando o arquivo cupsd.conf

Primeiros passos

Precisaremos configurar o acesso ao CUPS em toda a rede, para que os usuários possam reimprimir e gerenciar seus jobs no servidor de qualquer máquina da rede.
* Substitua Listen localhost:631 por Port 631
* Verifique a sequência a seguir: Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseAddress @LOCAL(Esta linha indica a faixa de IP’s que poderão acessar via browse o CUPS, neste caso podemos definir uma rede especifica por exemplo. Ex.: BrowseAddress
192.168.1.*) . Caso queira habilitar a aba Administration para qualquer IP da rede basta inserir Allow @LOCAL na sessão a seguir:

Order allow,deny
Allow @LOCAL
Algumas diretivas do arquivo de configuração cupsd.conf

AccessLog
Podemos definir o caminho dos logs que o servidor gera com a diretiva AccessLog:
A diretiva AccessLog define os nomes dos arquivos de logs do CUPS. Se nenhum diretório for definido o CUPS assume o diretório padrão de logs do
sistema(normalmente /var/log/cups/). Os arquivos podem ser lidos no próprio acesso ao CUPS pelo Browser ou diretamente na linha de comando.
Accesslog /var/log/cups/access_log
Podemos também definir o caminho do arquivo de erros do servidor com a diretiva
ErrorLog. AccessLogLevel
A diretiva AccessLogLevel diz em que nível é registrado os pedidos de acesso ao serviço no arquivo de log.
AccessLogLevel all Allow, Deny e Order
A diretiva Allow especifica um nome, o endereço IP ou rede que é permitido o acesso ao servidor. Ao contrario a diretiva deny, nega por faixa de rede.
Veremos essas diretivas em várias sessões do arquivo de configuração. O Allow e o deny devem aparecer dentro de uma seção Location ou Limit no arquivo cupsd.conf.
Iremos ver em conjunto com estas diretivas a diretiva order, que define a forma de consulta a seqüência de negação ou permissão da seção.Podemos utilizar por exemplo:
Allow @LOCAL
O parâmetro @LOCAL irá permitir o acesso de todos as maquinas da mesma rede do servidor.
Deny 192.168.1.0/24 AuthType
Podemos definir o nível de autenticação para acesso ao servidor com a diretiva AuthType que por padrão é usado Default (sem autenticação). Mas você pode utilizar a autenticação ao servidor utilizando Basic – a autenticação básica deve ser feita utilizando a senha e grupo do SO LINUX.
AuthType Default
Require user @SYSTEM
Order allow,deny

Neste exemplo da seção que define acesso ao arquivo de configuração do servidor CUPS. Assim com outras diretivas, esta autenticação deve aparecer dentro  de uma seção Location ou Limit dentro do arquivo cupsd.conf.

BrowseAllow e BrowseDeny
As diretivas BrowseAllow e BrowseDeny correspondem à faixa de rede que serão permitidas e negadas a navegar no servidor CUPS por Browser respectivamente.

A diretiva BrowseOrder trabalha em conjunto com as
Ex.:
BrowseOrder allow,deny
BrowseAllow all
BrowseDeny 192.168.1.0/24

ErrorPolicy abort-job

Um trabalho enviado a uma impressora com status de erro por algum motivo permanece no servidor até que a situação seja corrigida. O servidor pode eliminar qualquer trabalho enviado, setando a diretiva ErrorPolicy abort-job MaxClients Define o numero de conexões no servidor.
MaxClientsPerHost 10

MaxClientsPerHost
Define o numero Maximo de conexões de um mesmo host, evitando assim possíveis ataques ao serviço.

MaxCopies
Define um numero Maximo de copias de um mesmo documento por cliente.

MaxJobs
Define um numero Maximo de impressões pendentes na memória. Somente serão aceitos novos trabalhos quando os mais antigos estejam completos. O padrão do CUPS é de 500 trabalhos

MaxJobs 100

MaxJobsPerPrinter
Define o numero Maximo de copias por impressora ou classe de impressoras. Mesmo conceito do MaxJobs. O padrão por impressora é 0 (zero) que desabilita este controle.
MaxJobsPerPrinter 100

MaxJobsPerUser
Mesmo conceito que por impressora, mas agora por usuário do sistema.

MaxLogSize
A diretiva MaxLogSize controla o tamanho máximo de cada arquivo de log. Quando um arquivo de log alcança ou excede o tamanho máximo é fechado e renomeado para filename.O. Isso permite que você rode os registros automaticamente. O tamanho padrão é 1048576 bytes (1MB). Definir o tamanho máximo para 0 desativa log rotação.

PreserveJobHistory
Habilitado, o histórico das impressões enviadas ao servidor é mantido até que o administrador as remova.
PreserveJobHistory On

PreserveJobFiles
A diretiva PreserveJobFiles controla se os arquivos impressos como concluído, cancelado, ou abortado são armazenados no disco.
Um valor On preserva arquivos até que o administrador remova-os com o comando cancelar. Impressões podem ser retomadas (e reimpressas) como desejadas até que sejam removidas.

ServerAdmin
Indica o email do administrador do sistema. Casos de mensagens ao administrador pelo servidor.

SystemGroup
Indica um ou mais grupo para administrar o CUPS

SystemGroup lpadmin sys root

User 21
Indica o usuário do sistema para o CUPS a ser usado por qualquer programa do SO para envio de trabalhos.

Conclusão CUPS

O servidor de impressão CUPS é sem dúvida uma excelente ferramenta para controle de impressões em uma pequena e media empresa. Um grande numero de drivers de impressoras conhecidas do mercado já são suportadas pelo servidor. A possibilidade de analise e controle do que é impresso nas empresas é
fundamental para qualquer administrador de TI estabelecer limites de uso das suas impressoras. Inativar e /ou ativar um equipamento, administrar remotamente o mesmo, definições de cotas de impressão e muitas outras informações de gerência e operação das impressoras.

08/03/2009. http://www.cups.org/

Ferramenta para Backup no Linux – Sbackup

Ferramenta de backup em interface gráfica gnome. SBACKUP

A idéia do software é gerar arquivos de backup localmente no HD ou em pastas compartilhas ou diretamente via ssh da pasta home e das pastas previamente configuradas configuradas.

É possível excluir do backup, arquivos muito grandes ou mesmo tipos de arquivos como musicas, vídeos, etc., que podem aumentar demais o tamanho do nosso arquivo.

Instalação

# aptitude install sbackup

A instalação também pode ser feita a partir do fonte do programa pelo sitio: http://sbackup.wiki.sourceforge.net que atualmente está na release 0.10.4.

Por padrão o programa irá utilizar a pasta /var/backups para criação de arquivos compactados de backup.

Para acionar o programa sbackup, vá ao menu principal, Sitema, Administração, configuração do backup.

Na primeira tela configuramos as três opções de backup disponíveis:

Recomendado, onde o sistema sugere os principais diretórios, julgados pelos idealizadores do programa, a serem realizados copias de segurança.

Personalizadas, onde você cria backups dos diretórios previamente configurados usando, todas as configurações das próximas abas, inclusive os agendamentos.

Manual, será realizado um backup imediatamente respeitando as configurações como local do backup, quais pastas configurar, etc.

Na segunda inserimos outros diretórios para que sejam copiados pelo sbackup.

Na terceira tela podemos definir exceções em nosso arquivo de backup que será criado, eliminando arquivos muito grandes por exemplo ou tipo de arquivos pela sua extensão. Podemos excluir também, pastas e criar expressões regulares que identifiquem os tipos de arquivos que devem ser eliminados das copias, como:

/home/[^/]+?/\.Trash

(Elimina qualquer diretório oculto de lixeira da pasta pessoal de qualquer usuário)

Na quarta tela configuramos o destino dos arquivos de backup a serem criados. Por padrão será usada a pasta /var/backup, mas podemos definir uma pasta do sistema ou enviar os arquivo gerado por meio de ssh.

Agendamento: É possível definirmos a execução automática de copia de arquivo dos servidores da empresa.

Aqui na última aba, configuramos a forma de manutenção destes arquivos de backup no sistema. Há certo momento que o administrador não pode descuidar de verificar o tamanho da pasta de backups. É muito comum o administrador Linux não acompanhar o tamanho do HD e isso gerar-lhe problemas. É possível definirmos um numero de dias para que o próprio sistema remova os arquivos com data maiores.

Infelizmente este backup não tem implementado a gravação automática em discos de CD/DVD ou Fitas, mas é possível usar o mkisofs que é o programa de linha de comando para gerar estas imagens e o cdrecord para queimar os discos e colocar estes comandos no cron(agendador de tarefas) diariamente e durante a noite por exemplo. Você pode também utilizar o braseiro ou kb3 para queimar as mídias (neste caso é um trabalho manual).