quarta-feira, agosto 06, 2014

KVM - Kernel based Virtual Machine

KVM - Kernel-based Virtual Machine é uma solução completa de virtualização para Linux em Hardware x86 (com as extensões Intel VT ou AMD-V). Consiste num módulo kernel, kvm.ko que providencia a infraestrutura de virtualização core e um módulo especifico para processador, kvm-intel.ko ou kvm-amd.ko.

Gestão KVM

libvirt é a principal biblioteca de virtualização que o KVM utiliza. Providencia uma API de gestão de máquinas virtuais e gestão básica de storage e redes.

Como solução avançada de gestão existe o Open Source ovirt com uma GUI fabulosa.

More:
https://openvirtualizationalliance.org/sites/ova/files/resources/files/251810.pdf




Saber a versão de um programa Linux (Debian Alike)

dpkg -l nano

apt-cache show nano

sábado, julho 12, 2014

Failed do decrypt protected XML node

Quando um  package do Microsoft SQL Server 2008 Integration Services (SSIS), devolve erro, na tentativa de correr dentro de um step do SQL AGENT (Jobs), o mais provável é a conta que utiliza para correr o package não tem permissões suficientes para desencriptar o XML.

Para ultrapassar este problema, criei uma conta proxy no SQL Server Agent.

A primeira coisa a fazer é criar uma credencial para ser usada pela conta proxy. Deveremos definir a conta que vai ser usada para se ligar fora do SQL Server.

create a job with a single job step which will execute a SSIS package using a proxy account

De seguida criamos a conta de proxy.

You can even use SSMS to create a proxy

Associa-se a conta de proxy com um subsistema de Sql Server Agent. Uma conta proxy pode ser associada a 1 ou todos os subsistemas disponiveis, tais como TSQL, CMDEXEC, SSIS, PowerShell, etc...

No nosso JOB, definimos a conta:

you can change the same job step using SSMS to use the proxy

quinta-feira, março 27, 2014

Linux SED and AWK

O comando SED é um poderoso utilitário de processamento de texto e é um dos mais antigos e populares utilitários UNIX.

É utilizado para alterar o conteúdo de um ficheiro, geralmente colocando os conteúdos num outro ficheiro daí o se nome "Stream Editor".

SED pode filtrar texto e efetuar substituições em streams de dados.

$sed s/pattern/replace_string/ file
Substituir a primeira string encontrada numa linha.

$sed s/pattern/replace_string/g file
Substituir todas as ocorrências na linha.

$ sed s/pattern/replace_string/g file > file2
O comando anterior vai substituir todas as ocorrências de "pattern" por "replace_string" no ficheiro "file" e copiar par "file2".

O comando AWK é utilizador para extrair e imprimir conteúdos especificos de ficheiros.

$awk '{ print $0 }' /etc/passwd
O comando anterior permite imprimir o ficheiro passwd.

$awk -F: '{ print $1 }' /etc/passwd
O comando anterior permite imprimir a primeira coluna do ficheiro passwd, cujos campos estão separador pelo limitador ":" definido com ".F:".

$awk -F: '{ print $1 $6 }' /etc/passwd
O mesmo que o anterior, mas desta vez permite mostrar a coluna 1 e 6.

domingo, março 23, 2014

Process Isolation

Linux é considerado, desde há muito tempo, um sistema operativo muito seguro relativamente a outros sistemas operativos. Isto deve-se em grande parte à forma como os processos correm.

Um processo é uma instancia de uma ou mais tarefas relacionadas (threads) que estão a executar no computador. Não são necessariamente programas ou comandos pois um programa pode iniciar vários processos ao mesmo tempo. Alguns processos são independentes, outros são relacionados.

Os processo são corridos de forma isolada, ou seja, não utilizam os recursos de outros processos que estão a correr, mesmo que tenham sido chamados pela mesma conta.

Assim sendo é muito difícil ser atacado por vírus ou exploits (mas não impossível obviamente).

Outros mecanismos de segurança foram acrescentados ao longo do tempo:

  • cgroups (control groups) - permitem ao administrador agrupar processos em grupos e alocar recursos finitos a esses grupos;
  • (LXC) linux containers - Possibilita correr multiplos sistemas isolados Linux (containers) num unico sistema com cgroups;
  • Virtualization - Hardware é emulado por forma a que não só apenas os processos são isolados, mas também todos os sistemas de forma isolada num host fisico.

Tipos de processos:

Process TypeDescriptionExample
Interactive ProcessesNeed to be started by a user, either at a command line or through a graphical interface such as an icon or a menu selection.bash, firefox, top
Batch ProcessesAutomatic processes which are scheduled from and then disconnected from the terminal. These tasks are queued and work on a FIFO (First In, First Out) basis.updatedb
DaemonsServer processes that run continuously. Many are launched during system startup and then wait for a user or system request indicating that their service is required.httpd, xinetd, sshd
ThreadsLightweight processes. These are tasks that run under the umbrella of a main process, sharing memory and other resources, but are scheduled and run by the system on an individual basis. An individual thread can end without terminating the whole process and a process can create new threads at any time. Many non-trivial programs are multi-threaded.gnome-terminal, firefox
Kernel ThreadsKernel tasks that users neither start nor terminate and have little control over. These may perform actions like moving a thread from one CPU to another, or making sure input/output operations to disk are completed.kswapd0, migration, ksoftirqd

domingo, março 16, 2014

Gandolada - Jogo educativo?

Resolvi fazer um jogo para a minha filha. Ela gosta muito dos jogos do tipo "Hit The Mole". Achei interessante faze-lo com os principais protagonistas da pouca vergonha que está a acontecer no nosso país atualmente.

www.grandolada.tk

 Grandolada

sábado, fevereiro 15, 2014

ADB - Android Debugging Bridge

O ADB é uma ferramenta de linha de comandos que permite comunicar com instancias de emuladores ou dispositivos ligados. É uma aplicação cliente-servidor que inclui três componentes:


  1. Um cliente que corre na máquina de desenvolvimento;
  2. Um servidor que corre como processo em background na máquina de desenvolvimento;
  3. Uma aplicação que corre em background (Daemon) para cada emulador ou instancia de ligação ao dispositivo;
A ferramenta vem com o SDK do android. Pode ser encontrada em  /platform-tools/.

Quando se corre ao cliente pela primeira vez, este verifica se já existe um processo adb a correr em background. Se não estiver, o processo corre automaticamente. Quando o servidor corre, é efetuado um bind à porta 5037, o qual fica à escuta por comandos de clientes adb.

Sintax:

adb [-d|-e|-s ]

Para gerar uma lista de dispositivos ou emuladores ligados:

  • adb devices
Instalação de uma apk:
  • adb install
Assinar a aplicação:
jarsigner -verbose -keystore ...\.android\debug.keystore -storepass android -keypass android app.apk androiddebugkey

Assinar para envio playgoogle:
  • keytool -genkey -v -keystore grandolada.keystore -alias grandolada -keyalg RSA -keysize 2048 -validity 10000
  • jarsigner -keystore grandolada.keystore Grandolada_2014_02_16-04_05_36_GooglePlaystoreV3_release_unsigned.apk grandolada
  • tools>zipalign -f -v 4 \Users\pessanha\Documents\Jogo\apk\grandolada.apk \Users\pessanha\Documents\Jogo\apk\grandolada_ziped.apk

quinta-feira, dezembro 12, 2013

Ubuntu VirtualBox - No ALTGR key

No Ubuntu instalado no Virtualbox, reparei que a tecla altgr não funciona em tty modo texto.


Para resolver temos de remapear as teclas do teclado no Ubuntu. Usamos para isso o editor Xmodmap.

Fazer:

$cat > ~/.Xmodmap
keycode 108 = Mode_switch
(CTRL+D)
$xmodmap ~/.Xmodmap

sexta-feira, novembro 22, 2013

Segurança informática

Realizou-se no dia 21 de Novembro no auditório do ISEP uma Palestra sobre segurança informática com Vincent Naessens que é docente da Universidade KU Leuven (Bélgica).

O tema era muito abrangente e tenho pena que nas três horas de palestra, não se tenha detalhado o suficiente. Os temas abordados foram:

  1. Authentication technologies
  2. Security on mobile platforms
  3. Cryptographic protocols
Discutiram-se formas de ataque a um sistema nomeadamente:
  • Social engeneering
  • Dictionary attack
  • Spoofing/phishing
  • Sniffing
  • Brute force attack
Não existe forma definitiva de resolver estes problemas, mas existem formas de atenuar ou prevenir:
  • Single sign-on
  • Computer generated password
  • One-time passwords
  • Biometry
  • Multi factor authentication



terça-feira, novembro 19, 2013

Openstack

Openstack é um software para cloud e corre em arquitetura hardware x86 e ARM. Não exige software nem hardware proprietários e assim, podemos correr na nossa infra-estrutura existente.

Openstack está sobre o modo de licenciamento Apache Licence 2.0 e surgiu em 2010.

Cloud ou "nuvem" é desenvolvida sobre tecnologias existentes tais como virtualização e clustering para virtualizar hardware, software, armazenamento e recursos de rede para as tornar unidades flexíveis que podem ser alocadas consoante a exigência. É uma forma mais eficiente na utilização do hardware e mais fácil de escalar consoante a exigência de recursos.

Existem básicamente três modelos de serviços:

Saas : Software as a service
Pass: Plataform as a service
Iass: Infrastructure as a service.

Saas é a disponibilização de aplicações software alojadas centralmente e acedidas por software cliente. Os dados são típicamente mantidos num servidor acessível por qualquer computador ligado à rede. Obedecendo mais ou menos ao antigo modelo cliente-servidor, a maior diferença passa pelo acesso do cliente, efetuado maioritariamente via web-browser. A desvantagem passa, por isso mesmo, pela utilização do protocolo HTTP que nunca foi desenhado para desempenhar tarefas demasiado complexas. A popularidade do Saas tem vindo a subir porque propicia um modelo de baixo custo de suporte para os software developer / vendors, permite-lhes ainda um maior controlo e sobretudo um modelo de negócio baseado em subscrição de serviço. Os clientes também acabam por ganhar devido à pouca necessidade de preocupação com instalações e manutenção de hardware e software.

Pass é uma opção para quem queira maior controlo sobre os seus dados ou centro de dados mas não queira as preocupações da administração de sistemas ou redes. Exemplo disto é o espaço de alojamento web numa cloud gerida por ISP, onde o ISP se preocupa com o hardware, sistemas operativos, redes, balanceamento de carga, backups e etc, e o cliente apenas preocupa-se com a gestão e desenvolvimento do seu software que funcionará em cima deste datacenter configurado.

Iass é obviamente a solução completa. Básicamente o cliente gere um servidor fisico (virtual) onde este é responsável por toda a configuração redes e software da infraestrutura.

Testei, faz algum tempo, o Openstack numa das suas versões iniciais, e devo dizer que a coisa não é para iniciantes (click->next).



Os componentes "core" são Compute, Networking e Storage.

Compute: Componente responsável por aprovisionar grandes redes de máquinas virtuais. Suporta vários hypervisors tais KVM, QEMU, LXC e XenServer. É uma ferramenta que controla a rede, o CPU, o armazenamento, a memória, a criação, controlo e remoção de instancias de máquinas virtuais.

Storage: Armazenamento por objectos e blocos para ser usado em aplicações e servidores. Escalabilidade e redundancia usando clusters de servidores. O Openstack assegura a distribuição e replicação através de diferentes dispositivos no caso de object storage.

Networking: Gestão de redes e IP através de API.

Openstack foi desenhado para gerir grandes datacenters e petabytes de dados. Está incluído nas mais diversas distribuições Linux e pode ser instalado como qualquer outro software.

http://www.openstack.org/software/start/

quinta-feira, novembro 14, 2013

Virtual Private Network

Virtual private network é uma ligação encriptada entre dois ou mais dispositivos sobre a rede pública. É possível que se possa dizer que uma VPN não tem necessariamente de ser encriptada, mas isso seria apenas considerado um túnel.

Site-to-site VPN
É uma ligação entre dois sites e encripta toda a informação entre 2 ou mais subnets. Existem 2 subtipos:
Policy based - Encripta e encapsula determinado trafego de acordo com determinada policy (ACL) A policy determina que apenas algum ou determinado trafego é colocado na VPN.

Routed based - Todo o trafego é enviado pela VPN baseado em routeamentos dinâmicos ou estáticos.

Dynamic Multipoint VPN
Não é um protocolo mas sim uma técnica que usa diferentes protocolos. Um ou mais routers centrais são necessários, mas os routers remotos podem ter IPs dinâmicos. Os routers usam NHRP combinado com um protocolo dinamicos de routing para descobrir os peers e subnets remotas. A VPN é um tunel mGRE (Multiple Endpoints GRE) encriptado. Desta forma, o trafego entre routers remotos, não necessita de vir ao router central, pode ser direto entre os routers remotos.

Client VPN
Uma ligação Client VPN é uma ligação encriptada de um dispositivo a um router. Faz com que o dispositivo remoto se assemelhe a um membro de uma subnet local por trás de um router VPN. O trafego do dispositivo é enviado pelo tunel (normalmente um portatil). Necessita de software cliente instalado no dispositivo.

SSLVPN
Es te tipo de VPN funciona como um cliente VPN. A diferente é que o cliente remoto não necessita de software pre-configurado. Em vez disso o browser funciona como software. O trafego é envido atraves de um tunel sobre SSL ou TLS para o router SSLVPN.

Protocolos VPN

PPTP (usam GRE que pode ser usado sozinho): Point-to-point Tunneling Protocol é um protocolo VPN ue confia em város mecanismos de autenticação para providenciar segurança (MS-CHAP2 mais comum).

Pros
Built-in client em quase todas as plataformas
Fácil configuação
Rápido

Cons
Não é seguro (MSCHAP2 é vulnerável e é comumente utilizada)
Comprometida pela NSA

L2TP e L2TP/IPsec: Layer2 Tunnel Protocol é um protocolo VPN que por si só não providencia nenhuma encriptação ou confidencialidade no trafego que passa por ele. Por essa razão é implementado com IPSEC. Funciona na porta 500 UDP e logo fica mais dificil de configurar sendo por vezes bloqueado em firewalls NAT.

Sistema móvel de telemetria para automóveis

Sistema móvel de telemetria para automóveis foi o tema da minha tese para a obtenção do mestrado no ISEP. Pretende-se com este sistema melhorar a disponibilidade de um sistema de navegação na obtenção de vellocidade e deslocamento através da integração de dois sistemas de navegação distintos (INS / GNSS) recorrendo também aos sensores existentes nos dispositivos móveis.

O objecto final da análise e desenvolvimento foi uma aplicação para Android.
O algoritmo para o INS (Inertial Navigation System) apresenta a seguinte estrutura:


O sistema debitou resultados muito interessantes que poderão trazer uma luz para o que pode vir a acontecer num futuro muito próximo na utilização de sensores MEMS de baixo custo, com características de erro muito típicas.
Outra característica interessante foi a utilização do filtro complementar em detrimento do típico filtro de kalman na obtenção das estivativas de orientação e posição. A complexidade do filtro de kalman obriga a definição de modelos muito elaborados e conjuga com isso a elevada capacidade computacional que exige para a obtenção das estimativas. Com o filtro complementar, a complexidade é diminuta para além de ser computacionalmente leve.

sábado, fevereiro 02, 2013

Delegates c#

Por vezes esqueço a verdadeira razão ou vantagem no uso de delegates em C#.

Delegate é um recurso da linguagem C# que permite que se faça referência a um método. São também referenciados como apontadores de funções.

Sendo os delegates classes, estes são instanciados também, mas os parâmetros são nomes de uma função.

Assinatura do delegate:

Delegate int ExemploDeDelegate(string nome, bool b);

Considerando um método:


private int TesteFuncao(string str, bool bln)
{...}

ExemploDeDelegate exdel = new ExemploDeDelegate(TesteFuncao);

Desta forma o exdel refere-se ao método TesteFuncao();

Para isso existem 3 fases:
Declaração;
Instanciação;
Invocação;


using System;
namespace TesteDelegate
{
    // Declaração
    public delegate void TesteDelegate();
    class ExDelegate
    {
        public static void TesteFuncao()
        {
            Console.WriteLine("Chamaram-me?");
        }
        public static void Main()
        {
            // Instanciação
            TesteDelegate testeDelegate = new TesteDelegate(TesteFuncao);
            // Invocação
            testeDelegate();
            Console.ReadKey();
        }
    }
}




terça-feira, dezembro 11, 2012

XFCE - Maximize, minimize e close desapareceram

Após update ao meu GNU/Linux Mint XFCE, reparei que todas as janelas não tinham maximize, nem minimize nem close. Ou seja, os elementos visuais que rodeiam as janelas não estavam activos. O gestor de janelas não arrancava.

Para resolver esta situação, abrimos uma janela terminal e corremos o seguinte comando:
debian$ xfwm4
A causa tem a ver com o facto que o XFCE ser modular sendo que todos os elementos visuais estão em processos separados.

sábado, novembro 10, 2012

Brilho em EEE PC após Linux instalado

Após ter instalado o Linux Mint no meu EEE -PC, notei que o controlo do brilho não funcionava bem.


Abrit o terminal e correr o comando:
# sudo gedit /etc/default/grub
ou
# sudo vi /etc/default/grub

Alterar a linha que diz:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
para
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
Salvar e sair.

Numa janela de terminal, correr:
# sudo update-grub
# sudo reboot

sexta-feira, novembro 09, 2012

Alterar cor da fonte dos icones do ambiente de trabalho Linux Mint


Localizar o ficheiro .gtkrc-2.0, o qual é um ficheiro escondido. Para encontrar este ficheiro, deveremos ir a /home e depois /home/username/. Depois seleccionamos SHOW HIDDEN FILES da TAB VIEW.

Abrir o ficheiro .gtkrc-2.0 e devermos ver algo similar a :


style "xfdesktop-icon-view" {
XfdesktopIconView::label-alpha = 0

fg[NORMAL] = "#FFFFFF"
fg[SELECTED] = "#FFFFFF"
fg[ACTIVE] = "#FFFFFF"
}
widget_class "*XfdesktopIconView*" style "xfdesktop-icon-view"


Alterei as NORMAL/SELECTED/ACTIVE para FFFFFF o qual representa a cor branca. Deveremos gravar o ficheiro e efectuar reboot para as alterações fazerem efeito.

Vodafone K3806-Z e Linux Mint 13

Após ligar o modem K3806-Z à porta USB do meu GNU/Linux, este é detectado da melhor maneira, configuado automaticamente e obtém IP público mas não é possível obter ligação à Internet. A tabela de routing apresenta a informação correcta, no entanto se verificar a interface com IFCONFIG verifica-se que a FLAG NOARP não está estabelecida.

ARP:
This is an option specific to broadcast networks such as Ethernets or packet radio. It enables the use of the Address Resolution Protocol (ARP) to detect the physical addresses of hosts attached to the network. For broadcast networks, it is on by default. If ARP is disabled, ifconfig displays the NOARP flag.

Para funcionar devemos efectuar o seguinte comando:

# ifconfig usb0 -arp

segunda-feira, outubro 15, 2012

Java + Hibernate (Java Persistence API)

Java Persistence API, chamada apenas de JPA, é uma API padrão do java para persistência que deve ser implementada por frameworks que queiram seguir o padrão. A JPA define um meio de mapeamento objeto-relacional para objetos Java simples e comuns (POJOs), denominados beans de entidade.


HIBERNATE com JAVA

No eclipse efectuar actualização com hibernate:
Eclipse JBoss - http://download.jboss.org/jbosstools/updates/stable/helios

Eclipse -> Open Perspective -> Hibernate

Instalação do driver microsoft:
Download do jdbc para microsoft em http://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx

Colocação do buildpath para apontar para jar externo;

Ficheiro cfg deverá ficar:

             "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >

   
        com.microsoft.sqlserver.jdbc.SQLServerDriver
        jdbc:sqlserver://servidor\instancia;DatabaseName=basededados
        user</ property>
      password
     
        org.hibernate.dialect.SQLServerDialect
   

Novo certificado exchange

Podemos primeiro ver os certificados actuais instalados:
Get-ExchangeCertificate | List


















O certificado anterior mostra que está preste a ficar expirado. Algumas propriedades que deveremos ter em conta são:

NotAfter - Mostra a data de expiração do certificado
Services - Mostra que o certificado é aplicado a IMAP, POP, IIS e SMTP
Thumbprint - Usaremos isto para identificar e efectuar alterações a este certificado.

Para criar um novo certificado fazemos:
New-ExchangeCertificate
Isto irá avisar sobre se queremos efectuar o overwrite sobre o anterior:









Se efectuarmos o Get-ExchangeCertificate agora podemos verificar que o serviço IIS ainda usa o certificado antigo. Necessitamos para isso de mover o serviço IIS usando Enable-ExchangeCertificate. O comando a usar seria:
Enable-ExchangeCertificate -Thumbprint -Service IIS

Com o novo certificado no lugar podemos remover o antigo:
Remove-ExchangeCertificate -Thumbprint

domingo, julho 01, 2012

Outlook Anywhere - Problema com pedido de password recorrente

Existe um serviço que pode estar desactivo.
Testar com url: http://domain.fqdn/rpc. Se der 503, então application pool IIS da pasta pode estar desactivada.
Os certificados também deverão ter o mesmo nome: Set-OutlookProvider EXPR -Server $null -CertPrincipalName msstd:*.domain.com. Set-OutlookProvider WEB -Server $null -CertPrincipalName msstd:*.domain.com. Outra questão pode ter a ver com o facto de a pasta OAB não ter permissões de READ para authenticated Users. Nesse caso poderemos correr a ferramenta ExBPA e verificar os erros de configuração.