domingo, 6 de outubro de 2013

Desativar serviços no Windows 7

O Windows 7 ( e todos os outros Windows depois e antes) tem uma grande quantidade de serviços a correr em background cuja única finalidade parece ser consumir recursos sem fornecer grande serviço...
Infelizmente, desligar serviços à toa pode ter consequências desagradáveis, pois estão interligados por uma rede de dependências e nem sempre é claro qual a consequência de desativar determinado serviço.
Ainda assim, compilei uma lista de serviços que são mais ou menos seguros de desativar, em determinadas situações.
A partir da linha de comandos os serviços podem ser desligados com sc stop "nome_do_serviço" e ligados com sc start "nome_do_serviço". Para desativar realmente o serviço também pode ser usado a linha de comandos, mas não vou aqui fazer isso. Apenas voi criar dois batch files para parar e reiniciar os respetivos serviços. Os comentários das batch files são auto-explicativos.

Desligar seviços


@echo off
rem Sem Homegroup estes seviços são desnecessários
sc stop "upnphost"
sc stop "Mcx2Svc"
sc stop "SSDPSRV"
sc stop "HomeGroupProvider"

rem Desligar o aero, temas, animações, etc do ecrã
sc stop "UxSms"
sc stop "Themes"

rem Desligar a impressora, scanner, fax
sc stop "Spooler"
sc stop "StiSvc"
sc stop "TapiSrv"
sc stop "Fax"

rem Desligar o diagnóstico e relato de erros
sc stop "DPS"

rem Desligar o ambiente de trabalho remoto
rem (tanto cliente como servidor)
sc stop "UmRdpService"
sc stop "SessionEnv"
echo Esperar 2 segundos...
choice /c sn /n /t 2 /d s
sc stop "TermService"

rem Desligar as atualizações e pesquisa do Windows
sc stop "wuauserv"
sc stop "WSearch"
sc stop "WPDBusEnum"
sc stop "BITS"
sc stop "lmhosts"

rem Desligar outras atualizações (adobe e google)
sc stop "AdobeARMService"
sc stop "gupdate"
sc stop "gupdatem"

Ligar os serviços


@echo off
rem Para usar o Homegroup
sc start "upnphost"
rem sc start "Mcx2Svc"
sc start "SSDPSRV"
sc start "HomeGroupProvider"

rem Ativar aero e animações de ecrã, etc
sc start "UxSms"
sc start "Themes"

rem Ativar a impressora e scanner
sc start "Spooler"
sc start "StiSvc"
sc start "TapiSrv"

rem Ativar o diagnósticos e relato de erros
sc start "DPS"

rem Ativar o ambiente de trabalho remoto
rem (cliente e servidor)
sc start "SessionEnv"
sc start "TermService"
sc start "UmRdpService"

rem Ativar atualizações e pesquisa do Windows
sc start "wuauserv"
sc start "WSearch"
sc start "WPDBusEnum"
sc start "BITS"
sc start "lmhosts"

rem Ativar outras atualizações (adobe, google)
sc start "AdobeARMService"
sc start "gupdate"

Parando todos os serviços é possível libertar várias centenas de MiB de memória RAM e muitos ciclos de processador.


Referências


sexta-feira, 4 de outubro de 2013

Restaurar WIM no Linux

Os ficheiros WIM (Windows IMage) são ficheiros comprimidos que contêm uma estrutura de diretórios ou um sistema de ficheiros inteiro do Windows e mais alguns metadados necessários para restaurar os ficheiros.
Os ficheiros WIM são normalmente usados para guardar e restaurar a partição de sistema do Windows, sendo portanto usados nas partições e discos de recuperação.
Um ficheiro WIM pode conter vários "volumes" internamente. A reposição do sistema normalmente implica a reposição de todos os volumes do ficheiro.
O ficheiro de reposição tem geralmente o nome boot.wim, mas pode ter outros nomes (como install.wim, final.wim, etc).
Os portáteis costumam trazer um programa específico para ler estes ficheiros e executar a recuperação do sistema.
Também é possível fazer a recuperação "à mão" usando o utilitário imagex.exe da Microsoft.O imagex é um executável de menos de 1 MiB que está incluído no WAIK (Windows Automated Installation Kit), que é um download de quase 2 GiB.
A recuperação pela linha de comandos não é propriamente simples, pois é preciso ter outro Windows onde executar os comandos, uma vez que vamos apagar completamente o Windows "original" do disco.
Existe, no entanto, um pacote wimtools para linux que permite manipular os ficheiros WIM de forma muito semelhante ao Windows.
As wimtools estão disponíveis em várias distribuições, mas o mais simples é usar Ubuntu, pois há um PPA para várias versões de Ubuntu:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install wimtools

Admitindo que o ficheiro WIM está em /media/pen/boot.wim e que a partição de destino é /dev/sda2, é preciso:

  1. Formatar a partição /dev/sda2 para ntfs
  2. Recuperar o ficheiro WIM:
    wimlib-imagex apply /media/pen/boot.wim 1 /dev/sda2
    1. Repetir o comando anterior para todos os volumes dentro de boot.wim (o número identifica o volume)
  3. Atualizar o gestor de arranque (por exemplo o Grub) para reconhecer os novos ficheiros na partição /dev/sda2
  4. Reiniciar e esperar
Depois fazer uma imagem com o partimage e salvar o setor de arranque e tabela de partições com o dd, porque os ficheiros WIM são muito chatos de usar.

quinta-feira, 29 de agosto de 2013

Raspberry Pi



A Universidade de Cambridge é uma das mais conceituadas universidades do mundo, mas desde há alguns anos se tem vindo a debater com um problema nos cursos de informática. A cada ano que passa os candidatos a estes cursos parecem vir cada vez pior preparados! O que significa que tem de ser investido mais tempo a ensinar a estes alunos conceitos que já deveriam ter adquirido. Sobra portanto menos tempo para aprender tópicos mais avançados, que fazem a diferença quando as empresas de informática pretendem contratar novos colaboradores. É claro que isto acaba por ter um efeito direto muito mais importante em nós os utilizadores finais: os jogos perdem qualidade, porque não há bons programadores para os fazer!


A Universidade procurou descobrir a razão desta tendência e chegou à conclusão de que se deve ao facto de as crianças terem menos necessidade de "experimentar" os computadores. Quando Bill Gates e Steve Jobs iniciaram as suas fortunas, os computadores eram apenas para "entusiastas" da eletrónica. Os computadores eram vendidos em kits (ou era preciso comprar as peças) e montá-los e programá-los manualmente para funcionarem. Atualmente os computadores são comprados já prontos para ser usados, com uma interface colorida, simples, bonita e cara, que desincentiva os utilizadores a desmontar a máquina e a experimentar.


Iniciou-se assim um projeto para trazer de volta os "bons velhos tempos" em que os utilizadores eram incentivados a experimentar com as suas máquinas. Nasceu o projeto Raspberry Pi.


Raspberry Pi Modelo A


Um Raspberry Pi é um dispositivo do tamanho de um cartão de crédito, capaz de realizar as mesmas tarefas de um computador de secretária de entrada de gama, mas produzido de forma a ser de baixo custo.


O modelo A (mais limitado) tem 128 MB de RAM, uma porta USB. O modelo B tem 256 MB de RAM, duas portas USB e uma porta ethernet. Ambos os modelos têm uma porta HDMI e saída vídeo RCA e audio stereo. No lugar de disco rígido possuiu uma ligação a um cartão SD interno. O processador é um ARM 11 a 700 MHz incluído num SoC (System on Chip - todo o sistema está incluído num único chip) que contém também um processador gráfico Videocore 4, capaz de descodificar vídeo em alta resolução.


Todos os componentes foram escolhidos de forma a serem baratos, mas capazes de desempenho aproximadamente equivalente a um PC de secretária e capazes de correr com uma fonte limitada de energia. A alimentação elétrica é fornecida através de uma ligação micro-USB padrão com 5 V, pelo que pode ser alimentada por 4 pilhas AA.


O Raspberry não inclui na embalagem disco, teclado, rato nem monitor. O disco é substituído por um cartão SD que pode ser facilmente trocado (evitando portanto que o sistema fique "bricado", pois se encravar basta substituir o cartão SD). O monitor é o componente mais caro de um PC, por isso o Raspberry possui uma saída HDMI que lhe permite ser ligado a uma televisão ou monitor recentes e uma saída RCA para ligar a televisões mais antigas.


O dispositivo é compatível com uma série de distribuições linux, existindo na internet muitos recursos, tanto oficiais como de entusiastas, sobre como colocar uma determinada distribuição (versão) de linux no Raspberry Pi. Agora perguntam-se "Linux?! Então e Windows?". O objetivo do Raspberry é que os utilizadores experimentem e compreendam o funcionamento do sistema, o que não é possível usando um sistema fechado, como o Windows.


Há utilizadores que transformram o Raspberry em PCs de secretária, servidores, estações multimédia para a sala, colocaram-nos em balões e aviões telecomandados, usaram-nos como partes de um sistema de domótica, etc. O limite é a imaginação :)


terça-feira, 27 de agosto de 2013

domingo, 23 de junho de 2013

PXE Boot Server

Criar um servidor de imagens PXE com Debian Wheezy

Iniciando com uma máquina Debian já instalada é preciso:

  1. Instalar o TFTP e DHCP
  2. Configurar o TFTP e DHCP
  3. Criar uma imagem PXE
O servidor DHCP escolhido é o isc-dhcp-server e o servidor TFTP é o tftpd-hpa.
A interface onde vai funcionar o servidor DHCP tem de estar já configurada e ter um IP estático (não pode haver dois servidores DHCP no mesmo segmento de rede).

1. Instalar o TFTP e DHCP


Como de costume com Debian, a instalação é muito simples, a configuração é que é complicada.

aptitude install isc-dhcp-server tftpd-hpa

2. Configurar o TFTP e o DHCP


nano /etc/default/tftpd-hpa


TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

nano /etc/default/isc-dhcp-server

INTERFACES="eth1"

nano /etc/dhcp/dhcpd.conf

allow booting;
allow bootp;
authoritative;
subnet 10.0.0.0 netmask 255.255.255.0 {
        range dynamic-bootp 10.0.0.20 10.0.0.100;
        option routers 10.0.0.254;
        option broadcast-address 10.0.0.255;
        option domain-name-servers 208.67.222.222;
        allow unknown-clients;
        next-server 10.0.0.254;
        filename "pxelinux.0";
}

Reiniciar os serviços:

service tftpd-hpa restart
service isc-dhcp-server restart

3. Criar uma imagem PXE

aptitude install debootstrap nfs-kernel-server
mkdir /srv/tftp/pxeroot
debootstrap wheezy /srv/tftp/pxeroot
cd /srv/tftp/pxeroot
nano etc/network/interfaces
auto loiface lo inet loopbackauto eth0iface eth0 inet dhcp
nano etc/fstab
/dev/ram0  /       ext2   defaults    0   0proc       /proc      proc   defaults    0   1tmpfs      /tmp       tmpfs  defaults    0   1
chroot /srv/tftp/pxeroot

aptitude install linux-image-486
aptitude install partimage
aptitude install locales
dpkg-reconfigure locales
adduser root
adduser user
aptitude install xorg icewm slim
exit

cd /srv/tftp
wget http://ftp.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/pxelinux.0
cp pxeroot/vmlinuz ./
cp pxeroot/initrd.img ./
mkdir pxelinux.cfg
nano pxelinux.cfg/default

default menu.c32prompt 0timeout 300ONTIMEOUT local
MENU TITLE Welcome to PXE
LABEL Debian Wheezy x86 MENU LABEL Debian Wheezy x86 KERNEL images/deb-installer/linux APPEND initrd=images/deb-installer/initrd.gz
LABEL linux    kernel pxeroot/vmlinuz    append vga=normal initrd=pxeroot/boot/initrd.img-3.2.0-4-486 ramdisk_size=14332 root=/dev/nfs nfsroot=10.0.0.254:/srv/tftp/pxeroot rw --
nano /etc/exports
/srv/tftp/pxeroot    10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
service nfs-kernel-server restart

domingo, 10 de março de 2013

Checklist de segurança Joomla!

Algumas dicas de segurança mais ou menos avulsas para Joomla.

A. Geral

  1. Aplicam-se as regras de segurança genéricas para o Apache, PHP e MySQL.

B. Instalação

  1. Não usar o prefixo de tabela MySQL "jos_".
  2. Definir as permissões do configuration.php para 444 (ou pelo menos 644).
  3. Em geral, os ficheiro PHP precisam de permissões 644 (preferencialmente 444) e as diretorias 755 (ou preferencialmente 555).
  4. De forma geral é boa ideia mover as diretorias /tmp, /log e todas as diretorias que precisem permissão de escrita (caches, imagens, uploads, etc) para FORA da diretoria pública (public_html), retirando-lhes portanto a possibilidade de acesso através de HTTP. No entanto isto pode causar problemas com a diretiva open_basedir do PHP e com algumas extensões.
  5. Não permitir o upload de scripts
  6. Renomear o ficheiro htaccess.txt para .htaccess e ligar o RewriteEngine.
  7. A adição destas linhas ao .htaccess bloqueia alguns exploits mais comuns:

########## Begin - Rewrite rules to block out some common exploits
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)
RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)
RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits

C. Utilizadores e passwords

  1. Usar passwords não triviais.
  2. Criar uma conta de administrador com um username não trivial (ou seja, diferente de admin, administrator, root, etc). Promover esse utilizador a super-user e apagar a conta de admin. Além de ser um username conhecido, a conta de admin tem sempre o id 42 (homenagem ao Hitchhicker's Guide to The Galaxy), por isso é uma vulnerabilidade potencial (para Joomla anterior a 2.5.5).

D. Extensões

  1. Não instalar extensões desnecessárias.
  2. A extensão sh404SEF adiciona mais um nível de segurança e capacidades SEF (Search Engine Friendly). Esta extensão é vulnerável nas versões < 3.7.0.
  3. A extensão Admin Tools Core permite aplicar num único local várias das proteções aqui referidas.
  4. A extensão Akeeba Backup Core permite fazer backups completos de forma simples.
  5. Há outras extensões que melhoram a segurança (mas ver regra D.1).

E. Não fornecer informação gratuita

  1. Não publicitar o nome e versão do Joomla. Remover a meta tag "Generator".
  2. Não publicitar o nome e versão das extensões.

F. Ações periódicas

  1. Fazer backups regulares (por exemplo com o Akeeba Backup)
  2. Fazer regularmente uma "inspeção visual" e eliminar ficheiros suspeitos/desnecessários.
  3. Fazer testes de vulnerabilidades (com o nikto, joomscan, etc) e corrigir as vulnerabilidades detetadas.
  4. Manter-se atualizado sobre as novas vulnerabilidades descobertas consultando sites especializados (http://secunia.com/search/?search=joomla, http://www.frsirt.com/english, http://www.milw0rm.com/, por exemplo)

G. Atualizar

  1. Manter o Apache, PHP e MySQL atualizados.
  2. Manter o Joomla atualizado. A partir da versão 1.6 há a opção de o Joomla se autoatualizar (mas é necessário verificar a disponibilidade das extensões). Não usar Joomla 1.5 ou anterior.
  3. Manter as extensões atualizadas. Mesmo as extensões mais conhecidas e populares têm problemas de segurança.

Referências


Cliente GoogleDrive em Debian

O Google Drive já anda por aí há uns bons meses e a Google ainda não libertou o cliente para linux.
Há já varias alternativas não oficiais, algumas open source outras não.
A insync disponibiliza um cliente de sincronização para Google Drive em linux (muitas distribuições suportadas) que é gratuito em versão beta, mas que se vai tornar pago quando sair de beta. Enquanto está em beta e a Google não acaba o seu próprio cliente esta é a maneira de instala o insync.
Em Debian (ou Ubuntu ou Mint) basta importar a chave do repositório com:

wget -qO - https://d2t3ff60b2tol4.cloudfront.net/services@insynchq.com.gpg.key | sudo apt-key add -

Acrescentar um ficheiro /etc/apt/sources.list.s/insync.list, com a linha:

deb http://apt.insynchq.com/[DISTRIBUTION] [CODENAME] non-free

Em que [DISTRIBUTION] é o nome da distribuição e [CODENAME] é o nome da versão. Por exemplo, para Debian 6 (squeeze) fica:

deb http://apt.insynchq.com/debian squeeze non-free

Atualizar os repositórios:

apt-get update

Há pacotes diferentes para cada interface gráfico. Instalar com

apt-get install insync-beta-[INTERFACE]

Para debian com Gnome fica:

apt-get install insync-beta-gnome

[INTERFACE] pode ser: ubuntu, cinnamon, gnome, kde, mate, xfce
O pacote kde suporta KDE 4.
O pacote gnome, aparentemente, só suporta Gnome 3, porque não consegui instalar em Squeeze.


Referência:
https://www.insynchq.com/linux

domingo, 3 de fevereiro de 2013

Proteger o acesso a uma página web do Apache com .htaccess

O ficheiro .htaccess permite modificar o comportamento do servidor web Apache de várias formas. Uma dessas formas é a definição de uma password que tem de ser digitada para poder aceder à página.
Este método envolve a criação de dois ficheiros: .htpasswd (que vai conter a password) e .htaccess (que contém as instruções para o Apache pedir a password). É necessário também ter acesso à linha de comandos do servidor (acesso físico ou por SSH).

.htpasswd

Criamos o ficheiro .htpasswd com o seguinte conteúdo:
myuser:X4r!23dF
Em que "myuser" é o nome de utilizador e o "X4r!23dF" é a password. O ":" é o separador entre o username e a password.
O .htpassword, por uma questão de segurança, deve ser criado numa pasta não acessível a partir da web.
O ficheiro .htpasswd tem de ser encriptado para poder ser utilizado. A encriptação é feita usando o utilitário htpasswd. Portanto executamos:
htpasswd -c .htpasswd myuser
O parâmetro -c indica que queremos criar um novo ficheiro encriptado. O "myuser" é o username que queremos usar. É nos pedida a password (duas vezes).
Se tentarmos ver o conteúdo do .htpasswd com:
cat .htpasswd
Verificamos que o nome de utilizador continua visível, mas a password está encriptada.

.htaccess

Vamos agora criar o ficheiro .htaccess. Ao contrário do .htpasswd, este deve ser criado na pasta web que pretendemos proteger.
O .htaccess deve ficar com este conteúdo:

AuthUserFile /caminho/completo/.htpasswdAuthType BasicAuthName "Documento protegido"Require valid-user

Erro comum

Se as diretivas no ficheiro .htacces aparentam não estar a funcionar, a causa mais provável é a existência da diretiva
AllowOverride none
na configuração da pasta no Apache. Com esta opção o ficheiro .htaccess é completamente ignorado pelo Apache. Apenas é necessário editar a linha para
AllowOverride all
para permitir todas as diretivas no .htaccess, ou então
AllowOverride AuthConfig
para autorizar apenas as oções relativas à autrnticação.
Depois de alterar a configuração do Apache é necessário reiniciá-lo com
/etc/init.d/apache2 restart
ou com um comando equivalente.

Referências


http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride