Translate

terça-feira, 6 de maio de 2014

Testlink: habilitar upload de imagens em MCE (ckeditor)

  • Baixar kcfinder em https://github.com/sunhater/kcfinder/releases e salvá-lo em "testlink/third_party/kcfinder";
  • Habilitar kcfinder e definir o local de salvamento em "testlink/third_party/kcfinder/config.php":
    24: 'disabled' => false,
    26: 'uploadDir' => "/var/www/testlink/tinymceImages/",
    
  • Habilitar no MCE inserindo as seguintes linha ao final do arquivo "testlink/cfg/tl_ckeditor_config.js":
    82: config.filebrowserBrowseUrl = '/testlink/third_party/kcfinder/browse.php?opener=ckeditor&type=files';
    83: config.filebrowserImageBrowseUrl = '/testlink/third_party/kcfinder/browse.php?opener=ckeditor&type=images';
    84: config.filebrowserFlashBrowseUrl = '/testlink/third_party/kcfinder/browse.php?opener=ckeditor&type=flash';
    85: config.filebrowserUploadUrl = '/testlink/third_party/kcfinder/upload.php?opener=ckeditor&type=files';
    86: config.filebrowserImageUploadUrl = '/testlink/third_party/kcfinder/upload.php?opener=ckeditor&type=images';
    87: config.filebrowserFlashUploadUrl = '/testlink/third_party/kcfinder/upload.php?opener=ckeditor&type=flash';
    
  • No mesmo arquivo, adicione "image" em "config.toolbar_TestlinkMini":
    39: config.toolbar_TestlinkMini =
    40:   [
    41:     ['NumberedList','BulletedList','-',
    42:       'JustifyLeft','JustifyCenter','JustifyRight','-',
    43:       'Bold','Italic','TextColor','-',
    44:       'Link','Image','Table']
    45:   ];
    
  • Resultado:


O ícone de imagens irá aparecer no painel do MCE:

Ao clicar no ícone, o painel de imagens irá aparecer. Através da aba "upload", será possível enviar a imagem a ser embutida no texto:





terça-feira, 26 de novembro de 2013

Edgewall TRAC: result list ( Test Execution), adding "Passed (Restriction)" option

Adicionar a opção "Passed (Restriction)" na listagem de resultados;


a. Em "lib/results/resultsByStatus.php", adicionar "restriction":

418: foreach(array('failed','blocked','not_run','restriction') as $verbose_status)
b. Em "cfg/const.inc.php", inserir " 'restriction!' => 'r',":



383: $tlCfg->results['status_code'] = array (
384:   'failed'        => 'f',
385:   'blocked'       => 'b',
386:   'passed'        => 'p',
387:   'restriction'   => 'r',
388:   'not_run'       => 'n',
389:   'not_available' => 'x',
390:   'unknown'       => 'u',
391:   'all'           => 'a'
392: );
Inserir " 'restriction' => 'test_status_restriction',":



408: $tlCfg->results['status_label'] = array('not_run' => 'test_status_not_run',
409:                     'passed' => 'test_status_passed',
410:                     'failed' => 'test_status_failed',
411:                     'blocked'=> 'test_status_blocked',
412:                     'restriction' => 'test_status_restriction',
413:                       'all' => 'test_status_all_status',
414:                       'not_available' => 'test_status_not_available',
415:                     'unknown' => 'test_status_unknown');
Inserir " 'restriction' => 'test_status_restriction',":



434: $tlCfg->results['status_label_for_exec_ui'] = array('not_run' => 'test_status_not_run',
435:                           'passed'  => 'test_status_passed',
436:                           'restriction' => 'test_status_restriction',
437:                           'failed'  => 'test_status_failed',
438:                           'blocked' => 'test_status_blocked');
Inserir " 'restriction' => 'FFCC00' ":



450: $tlCfg->results['charts']['status_colour'] = array('not_run' => '000000','passed'  => '006400',
451:                            'failed'  => 'B22222','restriction' => 'FFCC00','blocked' => '00008B');
c. Em "gui/themes/default/css/testlink.css", inserir o seguinte estilo CSS:



577: div.passed, div.failed, div.blocked, div.not_run, div.restriction {
Inserir o seguinte na linha 588:



588: div.restriction {
589:       background:             #FFCC00; /* yellow */
590: }
Inserir "span.light_restriction":



606: span.light_passed, span.light_failed, span.light_blocked,
607: span.light_not_run, span.light_not_available, span.light_unknown,
608: span.light_restriction
Inserir:



631: span.light_restriction {
631:         background:             #FFCC00;
631: }
Inserir:



664: .restriction {
665:         color:                  white;
666:         background:             #FFCC00;
667: }
Inserir:




687: .restriction_text {
688:         color:    #FFCC00;
689:         font-weight: bold;
690: }
d. Inserir tradução nos idiomas desejados
Português do Brasil - "locale/pt_BR/strings.txt", "$TLS_test_status_restriction = "Passou com ressalva";":



231: $TLS_test_status_restriction = "Passou com ressalva";
Inglês Americano - "locale/en_US/strings.txt", "$TLS_test_status_restriction = "Passed (restriction)";":



231: $TLS_test_status_restriction = "Passed (restriction)";

terça-feira, 15 de outubro de 2013

Edgewall TRAC: add a custon HTML code (like a menu) at the top of TRAC page

How to add custon HTML code like a menu/link in the TRAC interface.
In this case, users can return to the main page using a link.

Create the file "/path/to/env/templates/site.html" with the following content:
  <!--! Add site-specific style sheet -->
  <head py:attrs="select('@*')" py:match="head">
    ${select('*|comment()|text()')}
    <link href="${href.chrome('site/style.css')}" rel="stylesheet" type="text/css"></link>
  </head>

  <body py:attrs="select('@*')" py:match="body">

    <!--! MY LINK/MENU -->
    <center>
<a href="PORTAL_LINK">Back to The Portal</a></center>

    <div id="siteheader">
    
    </div>
${select('*|text()')}
   
    <div id="sitefooter">
    
    </div>
</body>
</html>


You can add items in the header and footer of the TRAC page, inserting HTML code within DIV "siteheader" and "sitefooter"  respectively.


More information: http://trac.edgewall.org/wiki/TracInterfaceCustomization

Edgewall TRAC update from 0.12.3 to 0.12.5 (Debian 7.2 - Wheezy) - DistributionNotFound

When I update TRAC of 0.12.3 to 0.12.5 using "aptitude" (Debian 7.2), the file "/usr/local/bin/trac-admin" was not updated automatically, generating the following error:
root@SERVER:/home/users# trac-admin /home/trac/PROJECT
Traceback (most recent call last):
  File "/usr/local/bin/trac-admin", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2711, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 584, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: Trac==0.12.3
To solve the defect, it was necessary to change the following items of the file "/usr/local/bin/trac-admin":
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'Trac==0.12.3','console_scripts','trac-admin'
__requires__ = 'Trac==0.12.5' #Changed from 0.12.3 to 0.12.5
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('Trac==0.12.5', 'console_scripts', 'trac-admin')() #Changed from 0.12.3 to 0.12.5
    )

That's all!

More information: http://trac.edgewall.org/ticket/11327

segunda-feira, 30 de setembro de 2013

Montar diretórios através de SSH (SFTP), métodos: Windows e Linux


Windows

Pré Requisitos

Utilização

  • Verificar se .NET Framework e o Win-SSHFS estão devidamente instalados;
  • Executar o Win-SSHFS e adicionar as configurações de acesso ao Files desejado:
Drive name: o nome que o usuário irá fornecer à unidade local, será utilizado como nome da unidade em "Meu computador";
Host: endereço do servidor;
Port: manter a padrão (22);
Username: login do usuário no servidor;
Authentication method: PrivateKey ou Password;
Password: senha utilizada para acesso ao servidor (para Authentication method Password);
Directory: diretório remoto que deseja acessar;
Drive Letter: letra de unidade associada à unidade;
Mount at login: se desejar que a unidade seja automaticamente montada na inicialização do Windows.
  • Após preencher os campos de configuração, salve clicando em Save e depois monte a unidade clicando em Mount. Esta janela pode ser fechada;
  • Acesse "Meu computador" e verifique se a unidade foi montada:

Usuário Linux

Pré Requisitos

  • Instalar "sshfs":
    #Debian:
    aptitude install sshfs
    
    #Fedora:
    yum -i sshfs
    

Utilização

  • Para utilizar o "sshfs" com um usuário comum (não root), adicione seu usuário local ao grupo "fuse":
    sudo usermod -a -G fuse <local_user_name>
    
  • Criar a pasta de montagem, exemplo:
    mkdir ~/ponto_de_montagem_local
    
  • Montar a unidade, exemplo:
    sshfs -o follow_symlinks <usuário>@<ip_do_servidor>:/pasta_remota ~/ponto_de_montagem_local
    
  • Acessar o ponto de montagem ("~/ponto_de_montagem_local"). Pronto!

quarta-feira, 5 de junho de 2013

KVM - Kernel-based Virtual Machine

Servidor de Virtualização: KVM

Neste artigo, irei mostrar como instalar, configurar e otimizar um solução de servidor de virtualização KVM. Utilizarei como exemplo uma implementação real... estou aberto a críticas e sugestões.

Características

Servidor HP Proliant:
Processador Dual-Core AMD Opteron Processor 2220;
Memória de 10GB DDRII 667;
Fonte simples;
Placa de rede onboard com duas saídas Gigabit;
HD SAS 2.5", 2 x 30 GB (RAID 1) e 4 x 146 GB (RAID 5 - 404 GB);
Sistema Operacional Debian 7 (Wheezy).
Plataforma de virtualização KVM.

Implementação

Instalação
apt-get install qemu-kvm
Adicionar usuários utilizadores do KVM ao grupo "kvm"
adduser ravel kvm
Criar o disco virtual
qemu-img create disco.img -f qcow2 100G 
#"qcow2" refere-se ao tipo de disco (recomendado); 
#"100G" é o tamanho do disco dinamicamente alocado
Configurar bridge em placa de rede (/etc/network/interfaces)
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth1
iface eth1 inet manual
#allow-hotplug eth1

auto br0
iface br0 inet static
        #tap0: Zabbix
        #tap1: Yocto
        #tap2: Batman
        #tap3: Zabbix-TI
        #tap4: Disponível       
        pre-up ip tuntap add dev tap0 mode tap user ravel
        pre-up ip tuntap add dev tap1 mode tap user yocto
        pre-up ip tuntap add dev tap2 mode tap user batman
        pre-up ip tuntap add dev tap3 mode tap user ti
        pre-up ip tuntap add dev tap4 mode tap user ravel
        pre-up ip link set tap0 up
        pre-up ip link set tap1 up
        pre-up ip link set tap2 up
        pre-up ip link set tap3 up
        pre-up ip link set tap4 up
        bridge_ports all tap0
        bridge_ports all tap1
        bridge_ports all tap2
        bridge_ports all tap3
        bridge_ports all tap4
        post-down ip link set tap0 down
        post-down ip link set tap1 down
        post-down ip link set tap2 down
        post-down ip link set tap3 down
        post-down ip link set tap4 down
        post-down ip tuntap del dev tap0 mode tap
        post-down ip tuntap del dev tap1 mode tap
        post-down ip tuntap del dev tap2 mode tap
        post-down ip tuntap del dev tap3 mode tap
        post-down ip tuntap del dev tap4 mode tap

        address 10.0.0.26
        netmask 255.255.0.0
        gateway 10.0.0.9
        bridge_ports eth1
        bridge_fd 0
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Reinicie a rede:
/etc/init.d/networking restart
Mais informações:

Máquinas virtuais

As máquinas virtuais são inicializadas automaticamente através de "/etc/rc.local":
#Inicializar VMs
/home/ravel/vm/zabbix-vm.sh &
/home/yocto/vm/yocto-vm.sh &
/home/batman/vm/batman-vm.sh &
/home/ti/vm/zabbix-vm.sh &
a. Zabbix-PD
Utilização: monitoramento de servidores de redes
Usuário: ravel
Diretório: /home/ravel/vm
Disco virtual: /home/ravel/vm/hd/zabbix_pd-hda.img
Rede: tap0
Script de inicialização: /home/ravel/vm/zabbix-vm.sh:
#!/bin/bash
cdrom="/home/ravel/vm/isos/debian-7.0.0-amd64-DVD-1.iso"
hda="file=/home/ravel/vm/hd/zabbix_pd-hda.img,if=virtio,cache=writethrough"
mem="1G -mem-path /hugepages"

#Vídeo
video="-display none" #desativar saída de vídeo VNC
#video="-vnc :2" #habilitar saída de vídeo VNC

kvm -cdrom $cdrom -drive $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:01 -net tap,ifname=tap0,script=no,downscript=no

b. Zabbix-TI
Utilização: monitoramento de servidores de redes, utilizado pela TI Usuário: ti
Diretório: /home/ti/vm
Disco virtual: /home/ti/vm/hd/zabbix_ti-hda.img
Rede: tap4
Script de inicialização: /home/ti/vm/zabbix-vm.sh:
#!/bin/bash
cdrom="/home/ti/vm/isos/debian-7.0.0-amd64-DVD-1.iso"
hda="/home/ti/vm/hd/zabbix_ti-hda.img"
mem="1G -mem-path /hugepages"

#Vídeo
#video="-display none" #desativar saída de vídeo VNC
video="-vnc :1" #habilitar saída de vídeo VNC

kvm -cdrom $cdrom -hda $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:03 -net tap,ifname=tap4,script=no,downscript=no
#-display none

c. Yocto
Utilização: servidor de compilação Usuário: yocto
Diretório: /home/yocto/vm
Disco virtual: /home/yocto/vm/hd/yocto-hda.img
Rede: tap1
Script de inicialização: /home/yocto/vm/yocto-vm.sh:
#!/bin/bash
cdrom="/home/yocto/vm/isos/kubuntu-13.04-desktop-amd64.iso"
hda="/home/yocto/vm/hd/yocto-hda.img"
mem="4G -mem-path /hugepages"

#Vídeo
video="-display none" #desativar saída de vídeo VNC
#video="-vnc :4" #habilitar saída de vídeo VNC

kvm -cdrom $cdrom -hda $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:00 -net tap,ifname=tap1,script=no,downscript=no

d. Batman
Utilização: servidor de compilação
Usuário: batman
Diretório: /home/batman/vm
Disco virtual: /home/batman/vm/hd/batman.img
Rede: tap2
Script de inicialização: /home/batman/vm/batman-vm.sh:
#!/bin/bash
cdrom="/home/batman/vm/isos/gentoo-install-amd64-minimal-20130516.iso"
hda="/home/batman/vm/hd/batman.img"
mem="2G -mem-path /hugepages"

#Vídeo
#video="-display none" #desativar saída de vídeo VNC
video="-vnc :3" #habilitar saída de vídeo VNC

kvm -cdrom $cdrom -hda $hda -m $mem -boot d -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host $video -net nic,macaddr=52:54:00:12:01:02 -net tap,ifname=tap2,script=no,downscript=no
** Cada VM deve utilizar um endereço MAC distinto.

Otimização

Parâmetros:
  • "-smp cores=2,threads=2,sockets=1 -cpu host -enable-kvm":
    Acelerador KVM ("-enable-kvm") e configuração do processador virtual ("-smp cores=2,threads=2,sockets=1 -cpu host") - inserido no script de inicialização da VM.
    "-cpu host": disponibiliza todas as instruções do processador físico à VM;


  • "KSM (Kernel Samepage Merging)":
    Permite que páginas idênticas de memória sejam empacotadas pelo kernel numa única página compartilhada por um ou mais processos. Esta funcionalidade é potenciada pelo KVM para permitir que múltiplas, similares, máquinas virtuais tenham uma utilização de memória reduzida. Como a memória é compartilhada, a utilização combinada desta pelas máquinas virtuais é reduzida.

    Habilitar KSM (Kernel Samepage Merging) - "/etc/rc.local" (inserir acima dos scripts de inicialização de VMs):
    #Habilitar KSM - Kernel Samepage Merging
    echo 1 > /sys/kernel/mm/ksm/run
    

sexta-feira, 10 de maio de 2013

TRAC (Edgewall) 0.12: textarea autoresize bug (Firefox)

Ao concluir a migração do Edgewall TRAC 0.11 para 0.12 (sistema de Gerenciamento de Projetos e Rastreamento de BUGs), alguns usuários do sistema, que utilizam o navegador Firefox, relataram problemas com a caixa de texto (textarea) para edição de Wikis e Tickets. As caixas eram exibidas com apenas 2px. de largura, obrigando o usuário a redimensioná-la a cada edição.

Para solucionar este problema, os seguintes arquivos TRAC foram modificados:
   /usr/share/pyshared/trac/htdocs/css/trac.css
      Comentar as linhas 412 e 413:
div.trac-resizable { display: table; width: 1px } 
div.trac-resizable > div { display: table-cell } 
    /usr/share/pyshared/trac/htdocs/js/resizer.js
      Substituir a linha 6:
$(this).wrap('<div class="trac-resizable"><div></div></div>')
      Por:
$(this).wrap('<div class="trac-resizable"></div>')
Pronto, basta apenas reiniciar o servidor WEB. Lembre-se se apagar o cache do seu navegador para visualizar corretamente a modificação.

Fonte:
   http://trac.edgewall.org/ticket/8216#comment:8

quinta-feira, 2 de maio de 2013

Sistema de Controle de Horas Simples

1. Sobre o Controle de Horas

Portal destinado ao controle de horas simples.
Principais funcionalidades:
   Cadastro de horas por período, atrelado a projeto, atividade, local e usuário;
   Listagem/Relatório de horas cadastradas por período, usuário, atividade e projeto;
   Relatório graico em Google Chart por período, usuário, atividade e projeto.

2. Banco de Dados

Banco de dados SQLite2, localizado em ch.db.
Arquitetura:
a. ch
cidnametype
0idinteger, primary key
1datainiciodate
2iniciotext
3dataterminodate
4terminotext
5usuariotext
6projetotext
7atividadetext
8localtext
9descricaotext
10tickettext
11changesettext
12datadate

3. Código Fonte (PHP)

O código fonte é constituído pelos seguintes arquivos PHP:
a. cadastro.php: permite o cadastro de novas horas, edição e visualização das horas do usuário conectado;
b. listagem.php: permite visualizar e filtrar os dados por período, projeto, atividade e usuário;
c. graficos.php: permite visualizar e filtrar os dados - por período, projeto, atividade e usuário - exibindo em formato gráfico (Google Chart);

4. Plugins de Terceiros

Localizados em third-part.
a. jquery.js: é uma biblioteca JavaScript cross-browser desenvolvida para simplificar os scripts client side que interagem com o HTML;
b. jquery.elastic.source.js: responsável por permitir autosize em textareas;
c. jsapi.js: biblioteca Google Chart para exibição de indicadores em formato gráfico;
d. jquery-ui.js: biblioteca utilizada na construção do calendário para escolha da data ("datepicker").
Download do código fonte exemplo:
https://www.dropbox.com/s/of4pjqltbn8732m/Controle%20de%20Horas.zip


terça-feira, 30 de abril de 2013

Currículo: administrador de sistemas Linux

Carlos Alexandre Jacon da Silva
Informações Pessoais
  • Estado civil: solteiro;
  • Nacionalidade: brasileiro;
  • Idade: 30 anos;
  • Naturalidade: Limeira – SP;
  • Residência: Barueri - SP; 
  • Contato: 19 99609-0474 / carlosjacon (arroba)  gmail.com;
  • Filiação: Dermeval da Silva e Elisabete Jacon da Silva.
Objetivo

Administrador de sistemas Linux Sênior.
Pretensão Salarial
Valor de mercado. 
Formação
  • Universidade Paulista – UNIP – Limeira
Curso: Redes de Computadores
Conclusão: 12/2011

Cursos Extracurriculares
  • 4Linux - São Paulo
Curso: Infraestrutura de Nuvens com OpenStack EAD
Início: 02/2016.
  • EXTECAMP (UNICAMP) – Campinas – SP
Curso: Gestão de Projetos
Conclusão: 12/2014.
  • 4Linux– São Paulo – SP
Curso: JBoss para Administradores de Sistemas EAD
Conclusão: 05/2014.
  • TRE  (SAVANT) – São Paulo – SP
Curso: Amazon AWS
Conclusão: 03/2014.
  • Blackdoor Security – São Paulo – SP
Treinamento (EAD): Pentest e Engenharia Social -  “Sua Empresa Está Realmente Segura?”
Conclusão: 12/2013.

  • Welcome to the Django – São Paulo – SP
Curso: Django (Python Web Framework).
Conclusão: 02/2013.

  • Linux Force Brasil – São Paulo – SP
Treinamento (EAD): Linux Básico e Avançado, Administração de Servidores Linux, Blindagem Linux, Segurança Profissional.
Conclusão: 10/2012.

  • TRE (SAVANT) – São Paulo – SP
Curso: Samba com LDAP, integração com Windows 7 e Linux.
Conclusão: 10/2011

  • SENAC – Limeira – SP
Curso: Implantação de redes Wlan (sem fio).
Conclusão: 12/2009

Idiomas
Inglês Intermediário;
Espanhol Intermediário.
Conhecimentos
  • Linguagens: Python, PHP, Shell Script;
  • Segurança: Normas PCI DSS e ISO, pfSense, iptables, WEB;
  • Backup: Bacula, Amanda, Storages (iSCSI, NFS);
  • Virtual Machine: VMWare vCenter, KVM, XEN e OpenStack;
  • Gestão de Projetos: Jira, TRAC, Subversion, PMI, ISO;
  • Teste de equipamentos: Python e TestLink;
  • Automação: Chef e Puppet;
  • Banco de Dados: MySQL, PostgreSQL e SQL Server;
  • Monitoramento e benckmark: Zabbix, OMD Distro, Kibana, New Relic, Monitis e Sealion;
Experiência Profissional

Catho Online em Barueri - SP: Adm. de Sistemas Linux Sênior
Período: 05/2015 até o momento.
Desafios:
  • Participação em planejamento e construção de infraestrutura para atender à certificação PCI DSS;
  • Manutenção da infraestrutura física e virtual de servidores - WEB, DB, Cache, Monitoramento e etc - que comportam os produtos desenvolvidos e comercializados pela empresa;
  • Planejamento e acompanhamento de “Move” de servidores entre DC;
  • Implementação de sistema de monitoramento e benchmark para a infraestrutura e portal WEB;
  • Elaboração e aplicação de planos de redundância para serviços internos (AD, Proxys, HAProxy e etc.) e externos (BTM);
  • Manutenção de dispositivos de redes (F5 Big IP LTM e GTM);
  • Participação em planejamento e execução de políticas de segurança.

AsGa S/A em Paulínia - SP: Adm. de Sistemas Linux e DevOps
Período: 01/2014 a 05/2015.

Desafios:

  • Suporte Linux à equipe de desenvolvimento;
  • Manutenção de políticas de segurança - usuários, grupos, firewall e backup;
  • Desenvolvimento e manutenção  de sistemas de gestão de projetos;
  • PMO: elaboração de ferramentas em PHP e ASP.NET: dashboards, Pivot Tables, Cronograma, Controles e etc;
  • Elaboração de robôs de teste de equipamentos;
  • Manutenção de redundâncias de aplicações web através de Virtual Machine;
  • Administração de servidor de compilação (Yocto e ISE);
  • Administração de banco de dados.

AsGa S/A em Paulínia - SP: Adm. de Sistemas Linux
Período: 02/2012 a 01/2014.
Desafios:
  • Manutenção de políticas de segurança, backup e UTM;
  • Desenvolvimento e manutenção  de sistemas de gestão de projetos;
  • Sistema de monitoramento de redes e servidores;
  • Redundância através de Virtual Machine;
  • Manutenção da intranet corporativa (ASP);
  • Administração de banco de dados.

AsGa S/A em Paulínia - SP: Estágio em Adm. de Sistemas Linux
Período: 10/2011 a 02/2012.
Desafios:
  • Administração de servidores Linux do setor de desenvolvimento;
  • Suporte ao desenvolvimento Linux.

Dutra Acessórios em Limeira – SP: Administrador de redes
Período: 10/2010 a 10/2011.
Desafios:
  • Suporte a usuário Linux e Windows;
  • Administração básica de banco de dados;
  • Administração de firewall;
  • Suporte à auditoria de implementação do ERP Totvs Microsiga.

terça-feira, 16 de abril de 2013

Aprimorar a segurança SSH para ataques de força bruta: fail2ban



O pacote "fail2ban" é utilizado para limitar a ação de "curiosos" que tentam obter acesso root via SSH através de "brute force".
Para instalar:
apt-get install fail2ban
Configuração ("/etc/fail2ban/jail.conf"):
#Linhas 18 a 23
[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 192.168.210.0/24   #Faixa de IP ignorada (Faixa de IP Local)
bantime  = 3600               #Tempo de BAN para o usuário que estava tentando acessar o Servidor
maxretry = 10                 #Quantidade de tentativas de conexão até banir o usuário
Fonte:
href="http://xmodulo.com/2013/03/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html 

quinta-feira, 14 de março de 2013

MySecureShell - SFTP com Chroot: habilitar acesso à terceiros de forma limitada e segura

Um excelente substituto ao FTP é o SFTP. Através de SSH, permite criptografar todo o fluxo de senhas e dados, aprimorando a segurança neste ponto... e reduzindo segurança em outro:
através de SSH, o usuário tem acesso ao shell do sitema.
Para limitar o acesso, MySecureShell isola o usuário em sua pasta home através de chroot.
Demais recursos:
   - Controle de banda;
   - Administração através de interface gráfica;
   - Gestão de atividades através de LOGs;
   - Restrições através de usuários, grupos, IPs e etc.


Instalação: http://www.howtoforge.com/mysecureshell_sftp_debian_etch
Mais informações (configurações): http://mysecureshell.sourceforge.net/en/faq.html
Dica: restringir o acesso à SFTP (proteção ao acesso em linha de comando SSH) - adicionar ao arquivo de configuração (/etc/ssh/sftp_config) a seguinte linha:

Subsystem sftp /bin/MySecureShell -c sftp-server

quinta-feira, 13 de dezembro de 2012

Diagrama de Gantt Online (Open Source)

Diagrama de Gantt

1. Sobre o Diagrama de Gantt

O Gráfico de Gantt, ou Diagrama de Gantt, é uma ferramenta que permite a visualização do progresso de projetos. É, basicamente, uma ferramenta de acompanhamento, bastante visual, cujo objetivo é deixar a informação o mais transparente possível.
A função do Gráfico de Gantt é, de uma forma genérica, permitir o acompanhamento da realização de tarefas e atividades que compõem um projeto de objetivo maior. Dessa forma, a utilização da ferramenta permite que todos os interessados possam verificar o andamento das atividades. É muito útil para o Gerenciamento de Projetos onde existem muitos envolvidos.

Possibilidades:
  • Criar diagramas pessoais e de projetos;
  • Compartilhar diagrama entre usuários do servidor;
  • Compartilhamento automático de diagrama de projetos aos membros do projetos;
  • Definir políticas de acesso;
  • Renomear, deletar e versionar.

A solução utilizada é uma adaptação da ferramenta Open Source ().

2. Código Fonte PHP

a. gantt.php: script PHP que permite a visualização / impressão dos gráficos de Gantt, executando a leitura em DB;
b. gantt.css / platform.css / teamworkFont.css: arquivo que contém as propriedades de estilo dos objetos utilizados em modelo.php;
c. gantt_save.php: salva as alterações realizadas no Gantt, gerando uma nova versão do mesmo;
d. index.php: listagem de Gantts do usuário / compartilhados;
e. modelo.php: modelo (layout) do gráfico de Gantt;
f. notificacao.php: envia uma notificação por e-mail ao receptor do compartilhamento de Gantt;

O código fonte foi amplamente comentado.

3. Fluxograma


4. Banco de Dados

Banco de dados SQLite2, localizado em /var/www/gantt/gantt.db.
Arquitetura: 
a. notificacoes
Tabela responsável por armazenar as notificações de compartilhamento de Gantt. A cada minuto (CRONTAB), o script notificacoes.php verifica a tabela por novas mensagens e as envia.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"NOVO" ou "OK", informando se a mensagem já foi enviada
2ownerTEXTautor do Gantt
3receiverTEXTdestinatário da mensagem (alvo do comaprtilhamento)
4titleTEXTtítulo do Gantt
5dateTEXTdata do compartilhamento
b. $USUÁRIO
Cada usuário do sistema possui uma tabela com a nomenclatura do próprio usuário.
Responsável por armazenar os Gantts pessoais e compartilhamentos.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"OK", "DEL" (removido) e "OCULTO" (versão anterior)
2uidTEXTID do documento (versões anteriores possuem mesmo UID
3ownerTEXTautor do Gantt
4titleTEXTtítulo do Gantt
5ganttTEXTdiagrama
6dateTEXTdata de criação
c. compartilhamentos
Gerencia o compartilhamento de diagramas, armazenando a permissão e localização do mesmo.
cidnametypedescrição
0idINTEGER|ID do item na tabela
1statusTEXT"OK", "DEL" (removido)
2uidTEXTID do documento compartilhado
3ownerTEXTautor do diagrama
4projectTEXTprojeto pertencente
5titleTEXTtítulo
6receptorTEXTdestinatário do compartilhamento
7permissaoTEXT"W" ou "R", permissão de leitura ou escrita
8dateTEXTdata do compartilhamento
d. projects
Responsável por armazenar os Gantts de projetos.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"OK", "DEL" (removido) e "OCULTO" (versão anterior)
2uidTEXTID do documento (versões anteriores possuem mesmo UID
3ownerTEXTautor do Gantt
4projectTEXTprojeto pertencente
5titleTEXTtítulo do Gantt
6ganttTEXTdiagrama
7dateTEXTdata de criação

5. Ferramenta de Terceiro: TeamWork Gantt

Localizado localmente no diretório "/var/www/gantt/libs".
Trata-se de uma ferramenta OpenSource que possibilita a elaboração de diagramas de Gantt WEB (PHP).
Desenvolvido em JQuery, possibilita a criação de Gantts, árvores de tarefas, dependências e exportação em formato JSON.

Para maiores informações: http://gantt.twproject.com 


6. Download de Exemplo


 https://www.dropbox.com/s/kmdgho9zp6k46mu/gantt.zip (basta criar o banco de dados)