Translate

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