Mostrar mensagens com a etiqueta linux. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta linux. Mostrar todas as mensagens

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 :)


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

sexta-feira, 19 de outubro de 2012

Repositórios Debian

Alguns repositórios Debian

Aqui fica uma lista de alguns repositórios Debian bem jeitosos. O sources.list fica apenas com os repositórios oficiais Debian. Os outros repositórios ficam cada um no seu ficheiro .list na diretoria sources.list.d, para ser mais fácil gerir.

 

sources.list


deb http://ftp.pt.debian.org/debian/ squeeze main contrib non-free

deb-src http://ftp.pt.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

# squeeze-updates, previously known as 'volatile'
deb http://ftp.pt.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.pt.debian.org/debian/ squeeze-updates main contrib non-free

sources.list.d/dropbox.list


# dropbox
# apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E
deb http://linux.dropbox.com/debian squeeze main

sources.list.d/google.list


##########################
# Google APT Repositories #
##########################
# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
# Google Chrome repo http://www.google.com/linuxrepositories/
deb http://dl.google.com/linux/chrome/deb/ stable main
# Google Talk browser plugin http://www.google.com/chat/video
# deb http://dl.google.com/linux/talkplugin/deb/ stable main
# Google Earth
# deb http://dl.google.com/linux/earth/deb/ stable main
# Google's Music Manager
# http://www.google.com/support/music/bin/answer.py?answer=1229970
# deb http://dl.google.com/linux/musicmanager/deb/ stable main

sources.list.d/mozilla.list


# mozilla
# http://mozilla.debian.net
# iceweasel, icedove, iceape
# apt-get install pkg-mozilla-archive-keyring
# deb http://mozilla.debian.net/ squeeze main
# firefox, thunderbird
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29
deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main
# os pacotes são firefox-mozilla-build, thunderbird-mozilla-build, seamonkey-mozilla-build

sources.list.d/multimedia.list


# deb multimedia
# http://deb-multimedia.org
# apt-get update
# apt-get install deb-multimedia-keyring
deb http://deb-multimedia.org squeeze main non-free
# deb http://deb-multimedia.org squeeze-backports main

sources.list.d/playonlinux.list


# play-on-linux
# wget -q "http://deb.playonlinux.com/public.gpg" -O- | apt-key add -
deb http://deb.playonlinux.com/ squeeze main

sources.list.d/virtualbox.list


# virtualbox
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free

sources.list.d/scribus.list


# scribus
# apt-key adv --recv-keys --keyserver subkeys.pgp.net EEF818CF
deb http://debian.scribus.net/debian stable main
deb-src http://debian.scribus.net/debian stable main

Referências

https://sites.google.com/site/mydebiansourceslist/

quinta-feira, 23 de agosto de 2012

logwatch, fail2ban, molly-guard

Mais umas excelentes ferramentas para sistemas linux

logwatch


Instala-se com o habitual

apt-get install logwatch

E já está.
A instalação cria um script em /etc/cron.daily que se encarrega de correr o logwatch e enviar um email para o root.

Para modificar as opções pré-definidas é preciso copiar o ficheiro de configuração de exemplo para /etc/logwatch/conf:


cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

E editar o ficheiro. No Debian a opção TmpDir estava mal configurada, deve ser mudada para /tmp.
Todas as opções podem ser sobrepostas através de parâmetros na linha de comandos.

O logwatch apenas cria o relatório com os eventos mais significativos do sistema, é responsabilidade do administrador ler o relatório e agir em conformidade.

fail2ban

apt-get install fail2ban

E já está.
A configuração básica está em /etc/fail2ban/fail2ban.conf e a configuração mais específica em /etc/fail2ban/jail.conf.

Apenas a proteção das ligações SSH está pré-definida, para outros protocolos/aplicações é preciso editar o /etc/fail2ban/jail.conf.

molly-guard

apt-get install molly-guard

E já está.
O molly-guard pede o nome da máquina quando tentamos desligar uma máquina através de SSH.

Algumas coisas básicas a fazer numa máquina nova

Um pequeno conjunto de aplicações e configurações a executar em máquinas novas (linux claro, Debian de preferência)

Rede


Primeiro que tudo é sempre preciso configurar corretamente a rede.
Se a interface de rede é configurada por DHCP não há muito a fazer, mas se queremos um IP estático é preciso editar o /etc/network/interfaces e substituir o dhcp por static na interface pretendida e indicar, pelo menos o endereço, netmask e gateway, qualquer coisa assim:


auto eth0
iface eth0 inet static
        address 192.168.1.31
        netmask 255.255.255.0
        gateway 192.168.1.254

Mas nem só de IP vive a rede. Também é importante definir os servidores de DNS, o hostname e o domain name. Mais uma vez o DHCP trata disto, mas se quisermos um IP estático temos de editar /etc/resolv.conf, /etc/hostname e /etc/hosts.

É preciso escolher um hostname, que identifica a máquina e um nome de domínio, que identifica a rede local. Vamos usar server001 e lan, respetivamente.

Em /etc/resolv.conf colocamos o nome de domínio e os servidores de DNS. DNS é um serviço crítico, por isso normalmente são definidos pelo menos dois. O ficheiro pode ficar com este conteúdo:

domain lan
search lan
nameserver 208.67.220.220
nameserver 208.67.222.222

Neste caso o domínio chama-se lan (é o pré-definido) e dizemos que queremos pesquisar o domínio lan. As duas entradas nameserver são os dois servidores DNS a usar. Os IPs indicados são do serviço OpenDNS e podem ser usados livremente. Por vezes há uma única entrada nameserver que corresponde ao gateway da rede, é usual em sistemas configurados por DHCP.

Em /etc/hostname colocamos o hostname (basicamente o nome da máquina), assim:

server001

No ficheiro hosts convém colocar uma entrada para o hostname definido antes, qualquer coisa como:

127.0.0.1 localhost
127.0.0.1 server001 server001.lan

Para que tudo funcione é preciso reiniciar os serviços respetivos:

/etc/init.d/networking restart
/etc/init.d/hostname start

Tempo


Parecendo que não, é bastante importante que o relógio e o fuso horário do sistema estejam certos, principalmente se vamos usar coisas como servidores de mail, serviços de autenticação  e até para os logs do sistema.
Para configurar o fuso horário:

dpkg-reconfigure tzdata

Para acertar a hora o melhor é deixar que o sistema se atualize automaticamente, é para isso que existe o serviço NTP. Basta fazer:

apt-get install ntp

E esperar um pouco enquanto o sistema sincroniza.
Podemos ver o estado do NTP com:

ntpq -p

Para ver a data e hora atual fazer:

date

Quando a hora estiver certa convém atualizar o relógio de hardware, para poder manter a hora certa (pelo menos com pequenas variações) mesmo enquanto o sistema está desligado. Para atualizar o relógio de hardware fazemos:

hwclock --systohc

Locale

Chama-se locale ao conjunto de definições que informam o sistema a língua a utilizar e os formatos para apresentação de datas, horas, valores monetários, etc.
É importante definir corretamente o locale que pretendemos usar, pois se não o fizermos arriscamo-nos a receber mensagens numa língua que não entendemos.
Para escolher os locales a gerar fazemos:

dpkg-reconfigure locales

Os locales selecionados serão criados. Pode demorar alguns segundos (ou minutos) a gerar cada locale.
O comando locale mostra as variáveis definidas.
Se alguma estiver em branco pode ser necessário defini-la manualmente com, por exemplo:

export LC_TIME=en_US.UTF-8

Ainda não consegui descobrir porque é que o dpkg-reconfigure locales nem sempre define todas as variáveis LC_* e LANG*.

Um script útil em servidores (principalmente os que têm pouco espaço em disco) é o localepurge. É só instalar com:

apt-get install localepurge

É preciso selecionar os locales a MANTER, todos os outros serão apagados.
Da próxima vez que se fizer uma instalação com o apt-get, ou se correr manualmente o localepurge, serão apagados os locales que não foram selecionados. Este script não é 'oficial' e pode causar alguns erros (inofensivos). Usar com precaução e RTFM.

rkhunter

Um caçador de rootkits para linux e BSD

Para instalar o rkhunter pode fazer-se o download a partir do site oficial e correr o script de instalação, mas como de costume prefiro os repositórios Debian:

apt-get install rkhunter

Ou para quem prefere otimizar o código (e tiver o apt-build instalado):

apt-build install rkhunter

Para correr manualmente, convém fazer uma atualização e só depois fazer a verificação:

rkhunter --update
rkhunter --check

Também podemos correr o comando:

rkhunter --propupd

Que cria uma base de dados com as propriedades dos ficheiros executáveis presentes no sistema. Das próximas vezes que o rkhunter for executado (SEM a opção --propupd) compara os ficheiros com a informação guardada e avisa se ocorreu alguma alteração. É claro que:

  1. É da responsabilidade do utilizador assegurar que todos os executáveis são legítimos quando se executa o --propupd;
  2. O rkhunter apenas avisa se ocorrer alguma alteração dos ficheiros, não tem forma de saber se essa alteração é fidedigna ou não (por exemplo, um apt-get upgrade altera as propriedades dos ficheiros).

O rkhunter costuma gerar alguns avisos 'falsos positivos', mas devem ser investigados, porque às vezes um verdadeiro positivo está escondido atrás de um falso.

A instalação do rkhunter cria os scripts /etc/cron.daily/rkhunter e /etc/cron.weekly/rkhunter que se encarregam de correr o rkhunter diariamente e de o atualizar semanalmente.
Os ficheiros /etc/default/rkhunter e /etc/rkhunter.conf têm as configurações a usar, mas as que estão pré-definidas são normalmente suficientes.

Referências

http://rkhunter.sourceforge.net/


segunda-feira, 30 de julho de 2012

Wake on lan e auto shutdown

Wake on lan e auto shutdown

Auto shutdown

O autoshutdown é simples, basta colocar o comando no crontab, mas esqueço-me sempre que os comandos no crontab precisam do caminho completo, porque a PATH é mais limitada.
Basta editar (como root) o crontab com:

crontab -e

E acrescentar uma linha do tipo:

00 03 * * * /sbin/shutdown -h +5

Isto vai fazer com que o computador se desligue às 3:05 da manhã, dando um aviso com 5 minutos de antecedência.

Wake on LAN

O Wake on LAN não é uma opção muito segura. Apesar de haver extensões ao protocolo original que acrescentam autenticação, o WOL original é muito inseguro. Mesmo assim pode dar jeito em casa :)
O computador deve ser configurado na BIOS para suportar o Wake on LAN. Nem todas as BIOS o suportam, nem todas as interfaces de rede o suportam e a forma como aparece na BIOS pode ser muito variada. Pode aparacer mesmo como "Wake on LAN" ou "Wake on PCI event" ou "Wake on PCI-E event" ou qualquer coisa parecida.
Mesmo assim pode ainda não ser suficiente para que o WOL funcione. O sistema operatvo também tem de colaborar. No Windows isso faz-se nas propriedades avançadas da interface de rede. No linux faz-se com o ethtool.
Para verificar se a interface de rede suporta Wak on LAN basta executar (como root):

ethtool eth0|grep Wake

Se não aparecer nada significa que a interface não suporta WOL.
Para assegurar que o linux habilita o WOL criei um script em /etc/network/if-ip.d/wolenable, com o seguinte conteúdo:

#!/bin/sh
ethtool -s eth0 wol g

Não esquecer de tornar o script executável com:

chmod +x /etc/network/if-up.d/wolenable

Para que o script seja executado é preciso adicionar uma linha à configuração da interface de rede em /etc/network/interfaces:

auto eth0
iface eth0 inet dhcp
    post-up /etc/network/if-up.d/wolenable

Isto vai executar o script cada vez que a interface eth0 seja iniciada (a linha nova está a negrito).
Depois é só uma questão de a partir de outra máquina (no mesmo domínio de broadcast) executar:

wakeonlan 01:23:45:67:89:ab

Substituindo o 01:23:45:67:89:ab pelo MAC address da máquina, claro.

sexta-feira, 27 de julho de 2012

Partilhar ligação de internet

Partilhar a ligação de internet

Colocar uma máquina linux a partilhar a ligação de internet (desde que tenha pelo menos duas placas de rede, claro), é relativamente simples.
Aqui ficam as instruções para referência futura. Assume-se que wlan0 liga à internet e que eth0 liga à intranet.

Ligar o sistema de NAT (masquerade) na interface de ligação ao exterior:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Aceitar pedido de encaminhamento proveniente da interface "interior":
iptables -A FORWARD -i eth0 -j ACCEPT

Habilitar o forwarding para IPv4:
sysctl -w net.ipv4.ip_forward=1

Atribuir um endereço à interface externa. Este passo não é necessário de a interface já tiver um endereço.
ifconfig eth0 10.0.0.254/24

Reiniciar o serviço de rede:
/etc/init.d/networking restart

segunda-feira, 23 de julho de 2012

Desligar (spindown) os discos automaticamente

Desligar (spindown) os discos automaticamente

Esta dica funciona melhor em sistemas com mais de um disco rígido (por exemplo, um homeserver, como é o meu caso) ou num portátil.
A ideia é arranjar maneira de desligar o motor dos discos rígidos quando estes não estão a ser usados. Poupa-se energia, pois o disco consome menos com o motor desligado obviamente e pode prolongar-se o tempo de vida do disco. Para prolongar o tempo de vida do disco é preciso definir um tempo espera generoso antes de fazer o spindown, pois demasiados ciclos de desligar e reiniciar o motor vão ter o efeito contrário, isto é, diminuir o tempo de vida do disco.
Assim, vou usar 30 minutos como tempo recomendado.
Há um projeto aqui http://code.google.com/p/spindown/ de um daemon que faz exatamente o que se pretende, mas eu quero uma solução mais "caseira", que assente mais em bash e que não seja preciso andar a compilar código.
Vou usar Debian para este projeto, pois ando desanimado com o Ubuntu. Está cada vez mais parecido ao Windows.
É preciso executar todos os comandos como root.

1. Instalar o sg3-utils

apt-get install sg3-utils
O pacote sg3-utils tem o comando sg_start que podemos usar para parar o motor do disco.
Aparentemente também se pode fazer com o sdparm e com o hdparm, mas ainda não experimentei.

2. Criar um script

Criei um script em /root/bin/spindown.sh com o seguinte conteúdo:

# !/bin/sh
if [ "$(id -u)" != "0" ]; then
        echo "This script must be run as root" 1>&2
        exit 1
fi
if [ -z $1 ]; then
        echo Usage: $0 sdX
        exit 1
fi
# isto estava a causar alguns problemas, por enquanto fica desligado
#if ! [ -e /dev/$1 ]; then
#        echo /dev/$1 not found
#        exit 1
#fi
NEWFILE=/tmp/NewState.$1
OLDFILE=/tmp/OldState.$1
date +"%F %T"
# Get new state from diskstats
NEWstate=$(cat /proc/diskstats | grep $1)
echo $NEWstate > $NEWFILE

if [ -z $(diff OLDstate.txt NEWstate.txt) ]; then
        echo Stopping $1...
        # sdparm --flexible --command=stop /dev/$1 &>/dev/null
        sg_start --stop /dev/$1
else
        echo $1 active
fi



# Write current state to file
echo $NEWstate > $OLDFILE

Não esquecer de ligar o bit executável no ficheiro:
chmod +x spindown.sh

3. Adicionar ao crontab

Adicionar ao crontab a linha:
*/30 * * * * /root/bin/spindown.sh sdc
Deve ser adicionada uma linha por cada disco que se pretende controlar, mudando o 'sdc' de acordo com o disco, claro.

Como o script faz algumas verificações antes de ser executado, deve ser seguro de executar na linha de comandos para testes (sem garantias...),
Não é uma solução muito elegante, mas é relativamente simples.

Referências


quinta-feira, 1 de março de 2012

Ubuntu terminal server

O linux sempre foi capaz de suportar sessões remotas, tanto na CLI como na interface gráfica, pois está completamente construído à volta da arquitetura cliente-servidor.
Para iniciar uma sessão remota completamente encriptada através de CLI basta usar o ssh, para poder usar aplicações gráficas através da ligação ssh basta adicionar a opção -X ao ssh. O servidor X pode ser configurado para aceitar sessões remotas (ou seja, o desktop completo e não apenas aplicações individuais) através do XDMCP.
Desde que fiquemos sempre no mundo linux (ou OSX) funciona tudo, mas se queremos ligar a partir de uma máquina Windows a uma máquina linux estamos mais limitados. Existem alguns clientes X para Windows: Cygwin/X, Xming, WeirdX, eXceed, etc. Alguns são open source, outros são proprietários.
O protocolo NX vai um passo mais à frente e permite usar várias técnicas (cache, compressão de dados) para acelerar o processo, permitindo usar sessões remotas mesmo através de ligações lentas.
A empresa NoMachine disponibiliza clientes gratuitos para Windows, Linux, MacOS e Solaris. O núcleo das aplicações NX é open source, mas algumas das aplicações disponibilizadas pela NoMachines são pagas. Há o projeo FreeNX que fornece um servidor NX completamente open source e ainda a Google disponibiliza um servidor compatível com o protocolo NX chamado NeatX.
Há então 3 alternativas para criar um servidor NX: o servidor da NoMachines, FreeNX e NeatX.

Servidor da NoMachines
Na máquina servidora é preciso instalar o pacote cliente (nxclient), o node (nxnode) e finalmente o servidor (nxserver). Fica imediatamente a funcionar, mas está limitado a 2 utilizadores, mesmo que não estejam ligados em simultâneo.

FreeNX
Basta seguir este guião:
https://help.ubuntu.com/community/FreeNX

NeatX
Vamos então instalar o servidor NeatX numa máquina com Ubuntu (lucid).
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:freenx-team

sudo apt-get update
sudo apt-get install neatx-server

Nos três casos, na máquina cliente (Windows, linux, Mac ou Solaris), basta ir a http://www.nomachine.com/download.php e fazer o download do cliente respetivo.

x2go
O projeto x2go pretende atingir o mesmo objetivo, mas é completamente open source. Usa as bibliotecas do NX, pelo que o seu desempenho deverá ser equivalente.
Por enquanto ainda não está num estado muito maturo, mas é um projeto a manter debaixo de olho.
http://www.x2go.org/

WinSwitch
Esta aplicação permite partilhar janelas de aplicações entre diferentes sistemas. Por exemplo inicia-se o OpenOffice no linux e pode enviar-se a janela para um computador Windows ou Mac ligado a esse servidor linux. Não consegui partilhar aplicações Windows para o Linux, mas suponho que seja possível. Mais um projeto a manter debaixo de olho.
http://winswitch.org/

Referências
http://www.ubuntugeek.com/how-to-install-neatx-similar-to-freenx-server-on-ubuntu-10-04-lucid-lynx.html
Mais leituras
http://diznix.com/articles/remote-x-connecting-to-linux-from-windows/

segunda-feira, 27 de fevereiro de 2012

XDMCP

O XDMCP (X Display Manager Control(?) Protocol(?)) permite fazer o login remoto numa máquina linux, como o telnet, mas em modo gráfico. Digo como o telnet e não 'como o ssh' porque o XDMCP é inerentemente inseguro. Uma forma de o tornar seguro é usar um túnel ssh para fazer a ligação. O XDMCP usa o porto UDP 177.
Para funcionar é preciso um gestor de login (login manager) que suporte XDMCP. Apenas o XDM e o KDM suportam XDMCP (que eu tenha descoberto). O GDM removeu o suporte para XDMCP.
Para usar o XDMCP com KDM é preciso:
1. Primeiro que tudo, instalar o KDM e torná-lo o gestor de login pré-definido
Em Ubuntu:
sudo apt-get install kdm
E para redefinir o KDM como gestor por defeito:
sudo dpkg-reconfigure kdm
2. Editar o kdmrc e acrescentar as linhas:
[xdmcp]
Enable=true

3. Editar o Xaccess e descomentar a linha (basta apagar o primeiro '#')
# * # any host can get a login window
Não é a configuração mais segura, mas funciona.
4. Reiniciar o kdm (ou o computador).

sábado, 25 de fevereiro de 2012

Amenizando o Debian

Um conjunto de scripts e dicas para amenizar um pouco o Debian.
Devivo à estrita aderência ao ideal open source o Debian está privado da utilização de algum software, mas como utilizador individual posso instalar o que quiser no Debian...

O equivalente Debian ao ubuntu-restricted-extras

Ligar o contrib e o non-free no sources.list
Adicionar ao sources.list:

deb http://deb-multimedia.org squeeze main non-free

Adicionar a chave do debian-multimedia


wget http://deb-multimedia.org/gpgkey.pub -O - | apt-key add - && apt-get install deb-multimedia-keyring

Adicionar os pacotes de interesse:


apt-get install acroread ffmpeg flashplugin-nonfree libcurl3 flashplugin-nonfree-extrasound freepats gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly sun-java6-jre sun-java6-plugin sun-java6-fonts libaccess-bridge-java libavcodec52 libavformat52 libcdaudio1 libdc1394-22 libdvdnav4 libdvdread4 libfftw3-3 libgif4 libid3tag0 libiptcdata0 libmjpegtools-1.9 libmms0 libmp4v2-0 libmpeg2-4 libmusicbrainz4c2a libneon27-gnutls libofa0 libopenspc0 libpostproc51 libsidplay1 libsndfile1 libsoundtouch1c2 libswscale0 libwildmidi1 openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib rhino ttf-arphic-uming ttf-baekmuk ttf-bengali-fonts ttf-devanagari-fonts ttf-gujarati-fonts ttf-indic-fonts ttf-kannada-fonts ttf-kochi-gothic ttf-liberation ttf-malayalam-fonts ttf-mscorefonts-installer ttf-oriya-fonts ttf-punjabi-fonts ttf-sazanami-mincho ttf-tamil-fonts ttf-telugu-fonts tzdata-java unrar

À medida que sairem novas versões destes pacotes será necessário corrigir a numeração de alguns pacotes.

Referências
http://ubuntuforums.org/showthread.php?p=6019449
http://forums.debian.net/viewtopic.php?f=20&t=67013

terça-feira, 21 de fevereiro de 2012

Emagrecer o Ubuntu

Para emagrecer o Ubuntu (ou qualquer outra distribuição baseada em Debian) podemos usar algumas aplicações simples: localepurge, deborphan, bleachbit.
O localepurge retira os locales (traduções de pacotes para várias línguas) não escolhidos pelo utilizador. Quando é instalado o localepurge pede ao utilizador quais os locales que pretende MANTER. Todos os que não forem selecionados serão eliminados.
O deborphan identifica pacotes não utilizados pelo sistema e que podem ser desinstalados.
O bleachbit tem uma interface gráfica e uma interface em CLI. Permite fazer vários tipos de limpeza ao sistema. Apagar cache, ficheiros temporários, cookies, passwords, etc.
Para os instalar:
sudo apt-get install localepurge deborphan bleachbit
Para executar o localepurge basta fazer:
sudo localepurge
Sempre que for instalado um novo pacote o localpurge é automaticamente chamado, por isso é uma situação de 'instala e esquece'.
O deborphan pode ser executado com:
sudo deborphan
Mas apenas apresenta uma lista dos pacotes que podem ser removidos. Para os remover efetivamete podemos fazer:
sudo deborphan | xargs sud apt-get remove --purge
O bleachbit pode ser executado em interface gráfica com bleachbit ou em CLI com bleachbit_cli. Para ver uma lista das opções de limpeza que aceita fazer:
bleachbit_cli -l

Atualização e limpeza automática
Para manter o Ubuntu limpo e atualizado uso um simples script, que chamo maintenance.sh
#!/bin/bash
sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get autoremove --purge -y
sudo apt-get clean
sudo deborphan|xargs sudo apt-get autoremove --purge -y
bleachbit_cli -l|grep -e .cache -e .vacuum -e .log -e .tmp|xargs bleachbit_cli -d
Este script atualiza os pacotes, limpa a cache de pacotes do APT, elimina os pacotes orfãos, limpa as cache, logs e ficheiros temporários e otimiza as bases de dados do Chrome e Firefox. Pode ser corrido manualmente ou colocado no cron.
Não esquecer de fazer um:
chmod +x maintenance.sh
para tornar o script executável.


Limpeza com o Synaptic
Usando o Synaptic é possível identificar pacotes que podem ser removidos do sistema. Executar o Synaptic (Sistema » Administração » Gestor de pacotes Synaptic, ou sudo synaptic). Escolher o filtro "Status" (Estado) e selecionar a opção "Not installed (residual config)" (Não instalado (configuração residual)). Os pacotes que aparecem à direita podem, em princípio, ser removidos.

Referências
http://www.ubuntugeek.com/cleaning-up-all-unnecessary-junk-files-in-ubuntu.html

quinta-feira, 16 de fevereiro de 2012

Árvore genealógica do linux

Uma árvore genealógica do linux

sexta-feira, 15 de julho de 2011

Ligar a uma rede wifi com WPA-PSK a partir da consola

Como ligar a uma rede wireless com segurança WPA-PSK usando apenas a consola de comandos em linux.
É preciso além do ifconfig e iwconfig o pacote wpa_supplicant.
Primeiro criamos um ficheiro de configuração do wpa, chamado por exemplo wireless-wpa.conf, com o seguinte conteúdo:

ctrl_interface=/var/run/wpa_supplicant
network={
  ssid="nome-da-rede"
  scan_ssid=1
  key_mgmt=WPA-PSK
  psk="chave de rede"
}

Para facilitar, vamos colocar os comandos num pequeno script bash, que chamaremos wpa-connect.sh, com o seguinte conteúdo:

#!/bin/sh
iface=wlan0
conffile=wireless-wpa.conf



sudo ifconfig $iface down
sudo iwconfig $iface mode Managed
sudo ifconfig $iface up
sudo killall wpa_supplicant
sudo wpa_supplicant -B -Dwext -i $iface -c $conffile -dd
sudo dhclient $iface

Agora basta tornar o script executável com:

chmod u+x wpa-connect.sh

e executá-lo com:

quarta-feira, 25 de maio de 2011

CA e Apache com SSL

Configuração de um servidor como CA e web SSL
Pretende-se com este trabalho configurar um servidor como Autoridade de Certificação (CA) e como servidor web com SSL.
O servidor usado é o ubuntu 10.04 (Lucid Lynx) server. O cliente pode ser qualquer um que permita a utlização de um browser com suporte para SSL. Neste trabalho foi usado o Mozilla Firefox a correr em ubuntu 11.04 (Natty Narwhal).
O servidor precisa que estejam instalados os pacotes openssl e apache2.
Vamos assumir que o servidor funciona no endereço www.redes.pt.
Para este trabalho foi criada uma entrada no ficheiro hosts tanto do servidor como do cliente, para que o endereço www.redes.pt apontasse para o ip do servidor.
Depois de cumpridos estes requisitos é necessário:

  1. Gerar autoridade de certificação
  2. Instalar a autoridade de certificação
    1. no cliente
    2. no servidor
  3. Criar um certificado para o servidor
  4. Configurar o site seguro usando o certificado gerado.

1. Gerar autoridade de certificação
Primeiro é necessário criar um par de chaves de encriptação. Vamos usar o algoritmo 3DES com 4096 bits.
openssl genrsa -des3 -out ca.key 4096
As chaves ficam armazenadas no ficheiro ca.key.
De seguida vamos usar essa chave para criar um certificado autoassinado, isto é, a própria entidade que requere o certificada é a entidade que o assina. O certificadao é do tipo X.509 com uma validade de 365 dias.
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
O certificado fica em ca.crt.
2. Instalar a autoridade de certificação
2.1. Cliente
É necessário enviar o ficheiro ca.crt (através de pen, e-mail, etc) para o cliente.
No Firefox ir a Editar » Preferências » Avançado » Ver certificados » Importar, e importar o certificado.
2.2. Servidor
Copiar o ficheiro ca.crt para /etc/ssl/certs e ca.key para /etc/ssl/private
3. Criar um certificado para o servidor
Primeiro é preciso criar um par de chaves para o servidor web. Vamos criar chaves 3DES com 2048 bits.
openssl genrsa -des3 -out www.redes.pt.key 2048
O nome do servidor foi usado como nome do ficheiro, mas tal não é obrigatório.
Vamos agora fazer um pedido para que a CA assine digitalmente a chave de encriptação.
openssl req -new -key www.redes.pt.key -out www.redes.pt.csr
O requerimento fica em www.redes.pt.csr
Agora a CA vai assinar o pedido, criando o certificado:
openssl x509 -req -days 365 -in www.redes.pt.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out www.redes.pt.crt
O certificado fica em www.redes.pt.crt.
O Common Name (CN) do certificado do servidor TEM de ser www.redes.pt.
Copiamos agora o ficheiro www.redes.pt.crt para /etc/ssl/certs e o ficheiro www.redes.pt.key para /etc/ssl/private
4. Configurar o site seguro usando o certificado
É preciso activar o módulo SSL no Apache, copiando os ficheiros ssl.conf e ssl.load de /etc/apache2/mods-available para /etc/apache2/mods-enabled.
Editamos o ficheiro /etc/apache2/mods-enabled/ssl.conf e criamos um virtualhost, dentro da secção IfModule.../IfModule.
Vamos criar o site www.redes.pt, alojado em /var/www/seguro.
O virtualhost deve conter pelo menos, as seguintes directivas:
VirtualHost exemplo.dominio.topo:443

DocumentRoot “/var/www/seguro”
ServerName www.redes.pt:443
ServerAdmin root@redes.pt
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
SSLEngine on
SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/certs/www.redes.pt.crt
SSLCertificateKeyFile /etc/ssl/private/www.redes.pt.key
/VirtualHost
Nota: faltam os sinais "maior" e "menor" nas tags VirtualHost, porque o Blogspot as retira automaticamente.
Outros comandos de interesse

openssl rsa -noout -text -in server.key
Mostra o conteúdo da chave server.key


openssl req -noout -text -in server.csr
Mostra o conteúdo do pedido de certificado server.csr


openssl x509 -noout -text -in ca.crt
Mostra o conteúdo do certificado ca.crt


openssl rsa -in server.key -out server-nopass.key
Retira a password da chave.

sexta-feira, 30 de outubro de 2009

Windows 7 como cliente do Virtualbox

O objectivo é colocar o Windows 7 a correr decentemente como máquina virtual no VirtualBox, que por sua vez está a correr em Ubuntu, claro (9.04 - Jaunty Jackalope).
1. Criar uma máquina virtual para o Windows 7
Usei estas definições:
Disco: 20 GB
Unidade óptica: Drive DVD física com passthrough (instalação através de CD físico)
Memória do sistema: 512 MiB
Memória da placa gráfica: 16 MiB
ACPI: ligado
IO APIC: desligado
AMD-V/VT-x: ligado
Nested paging: ligado
PAE: desligado
3D: ligado
Audio: ligado (ICH-7)
Rede: Intel Pro1000/MT Desktop
2. Instalar o Windows 7 a partir de CD/DVD
Criar um uitlizador. A máquina (virtual) é reiniciada várias vezes durante a instalação.
3. Instalar as adições de convidado
Seleccionar a opção de instalar as adições de convidado. O VirtualBox faz o download do ISO com as adições se não estiver presente no sistema. É necessário reiniciar para tornar as adições activas.
4. Instalar o WineD3D
O WineD3D permite a utilização de aceleração 3D por hardware dentro do Windows. Para isso é necessário substituir alguns ficheiros de sistema (d3d8.dll e d3d9.dll, pelo menos) pelo que primeiro é necessário desprotegê-los.
4.1. Instalar um "hack" que permite tomar propriedade dos ficheiros
Usar o ficheiro em http://www.bioteck.net/2009/04/27/how-to-take-ownership-of-files-in-vista/ para instalar o hack do registry, que adiciona uma entrada "Take ownership" ao menu de contexto dos ficheiros.
Depois de instalado o hack, tomar propriedade dos ficheiros d3d8.dll e d3d9.dll (e caso se queira do d3d7.dll e d3d10.dll) na pasta c:\windows\system32.
4.2. Reiniciar em modo de segurança
Executar o msconfig e ligar a opção "safemode" na tabulação de "Arranque". Reiniciar a máquina quando for pedido. O reinício deve demorar algum tempo, por causa da emulação do modo texto ser bastante lenta.
4.3. Instalar o WineD3D
No menu Dispositivos escolher a opção de instalar o WineD3D. Se não estiver presente no sistema, o VirtualBox faz o download do ISO com o programa e monta-o como um CD na máquina virtual. O programa substitui os ficheiros originais, mas cria uma cópia de segurança (na própria pasta c:\windows\system32)

P.S.: Não funcionou. Ao iniciar uma aplicação que necessite de 3D (o Solitário, por exemplo), uma zona do ecrã fica corrompida e não aparece nenhuma janela nova.

terça-feira, 15 de setembro de 2009

Copiar dados entre sistemas

Não consegui que isto funcionasse (mas também não estive muito tempo a tentar).
O objectivo é copiar completamente um sistema de uma máquina para outra.
À máquina de origem vamos chamar source e à de destino dest.
É necessário que as duas máquinas estejam ligadas através de rede (cabo cruzado, lan, etc) e dois CDs com o SystemRescueCD.

1. Arrancam-se as duas máquinas com os CDs do SystemRescueCD e executa-se passwd root para mudar a password de root (é preciso para poder fazer o login remoto por ssh).
2. Montam-se as partições do source de maneira a constuir o sistema completo dentro de uma directoria /mnt/source por exemplo.
3. Define-se o IP do source (192.168.123.1 por exemplo).
4. Define-se o IP do dest (192.168.123.2 por exemplo).
5. Verifica-se a conectividade entre máquinas (ping).
6. Criam-se as partições do destino, criam-se os respectivos sistemas de ficheiros e montam-se em /mnt/dest, por exemplo.cionou
7. No source executar: rsync /mnt/source root@192.168.123.2:/mnt/dst
8. No dest executar: grub-install --recheck --no-floppy --root-directory=/mnt/dst
9. Poderá ser necessário editar /mnt/dest/etc/fstab
10. Poderá ser necessário editar /mnt/dest/boot/grup/menu.lst

E devia funcionar. Eu estava um bocado à pressa e não funcionou, mas acho que era por causa do passo 9 ou 10.

sexta-feira, 4 de setembro de 2009

Ubuntu seedbox + eDonkey

O projecto é pegar num PC mais ou menos velhote e transformá-lo numa máquina de armazenamento e partilha de ficheiros multimédia através de redes peer2peer bittorrent e edonkey. Tudo, é claro, usando Ubuntu.
1. Instalar Ubuntu server
Criar uma partição espaçosa e monta-la em /media/disk1
2. Actualizar e instalar os pacotes do costume

  • sudo apt-get install openssh-server htop powertop molly-guard nload fail2ban logwatch rkhunter zip

3. Instalar o gestor de torrents
Escolher um entre Transmission (gráfico) e rtorrent (consola).
3A. Transmission

  • sudo apt-get install transmission-daemon
  • sudo /etc/init.d/transmission-daemon stop
  • sudo nano /etc/transmission-daemon/settings.json
Editar a gosto, prestar atenção ao parametro download-dir, que deve apontar para algures em /media/disk1/downloads, por exemplo.
rpc-whitelist deve ter o ip que pode aceder à interface web, ou a rede, por exemplo 192.168.1.*
rpc-password definir a password
  • sudo mkdir /media/media/torrents
  • sudo chown debian-transmission:debian-transmission /media/disk1/torrents
  • sudo /etc/init.d/transmission-daemon start

Acessível em localhost:9091
3B. rTorrent + rtGui
Como o rtorrent é um cliente de consola que ocupa o ecrã, é preciso executá-lo dentro do screen (ou equivalente) para que funcione como um daemon. o rtGui é uma interface web para controlar o rtorrent.
  • sudo apt-get install rtorrent screen psmisc
  • sudo useradd rtorrent
  • sudo passwd rtorrent
  • sudo mkdir /etc/rtorrent
  • sudo chown rtorrent:rtorrent /etc/rtorrent
  • sudo usermod --home /etc/rtorrent rtorrent
  • sudo mkdir /media/disk1/torrents
  • sudo chown rtorrent:rtorrent /media/disk1/torrents
  • sudo nano /etc/init.d/rtorrentd
Colocar o seguinte conteúdo:
  • #! /bin/sh
  • # rTorrent init script
  • #

  • case "$1" in
  •   start)
  • echo "Starting rtorrent..."
  •     su rtorrent -c 'screen -dmS rtorrent rtorrent'
  •     ;;
  •   stop)
  • echo "Stopping rtorrent..."
  • killall -s 2 rtorrent
  •     ;;
  •   *)
  •     echo "Usage: $0 {start|stop}"
  •     exit 1
  •     ;;
  • esac

  • exit 0
Mudar as permissões e instalar como daemon:
  • sudo chmod 755 /etc/init.d/rtorrentd
  • sudo update-rc.d rtorrentd defaults
  • sudo /etc/init.d/rtorrentd start
Ffazer login como utilizador rtorrent e executar
  • cp /usr/share/doc/rtorrent/examples/rtorrent.rc ~/.rtorrent.rc
  • mkdir -p /media/disk1/torrents/watch/
  • mkdir -p /media/disk1/torrents/download/
  • mkdir -p /media/disk1/torrents/session/
  • mkdir -p /media/disk1/torrents/complete/
  • chown -R rtorrent:rtorrent /media/disk1/torrents/
  • chmod -R 775 /media/disk1/torrents/
  • nano ~/.rtorrent.rc

Editar o ficheiro para apresentar o seguinte conteúdo (os valores apresentados são de exemplo, prestar atenção aos comentários):

  • directory = /media/disk1/torrents/download/
  • session = /media/disk1/torrents/session/
  • schedule = watch_directory,5,5,load_start=/media/disk1/torrents/watch/*.torrent
  • schedule = untied_directory,5,5,remove_untied=
  • on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,/media/disk1/torrents/complete/ ;d.set_directory=/media/disk1/torrents/complete/"
  • port_range = 49200-49200
  • # Stop torrents when reaching upload ratio in percent,
  • # when also reaching total upload in bytes, or when
  • # reaching final upload ratio in percent.
  • # example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
  • schedule = ratio,60,60,stop_on_ratio=200,200M,2000
  • #Limit upload/download rate, so torrents won’t kill your internet connection 
  • #Values are in KiB.
  • upload_rate = 200
  • download_rate = 1000
  • #For better performance, you can limit number of peers:
  • max_peers = 50
  • max_peers_seed = 20
  • #To change umask (file mode creation mask) for rtorrent process, change this parameter:
  • umask = 0002
  • scgi_port = 127.0.0.1:5000
Regressar ao utilizador administrador e executar:

  • sudo /etc/init.d/rtorrentd stop
  • sudo /etc/init.d/rtorrentd start
  • sudo apt-get install rtgui
Editar a configuração do Apache:
  • sudo gedit /etc/apache2/sites-enabled/000-default
Adicionar as duas linhas seguintes antes do último "< /Virtualhost >"
  • LoadModule scgi_module /usr/lib/apache2/modules/mod_scgi.so
  • SCGIMount /RPC2 127.0.0.1:5000
Editar a configuração do rtgui:

  • sudo gedit /var/www/rtgui/config.php

Editar as seguintes definições:

  • $watchdir="/media/disk1/torrents/watch";
  • $downloaddir="/media/disk1/torrents/download";

Reiniciar o Apache.
  • sudo apache2ctl restart
Fica disponível em &lt; endereço_do_servidor &gt;/rtgui

4. MLDonkey
  • sudo apt-get install mldonkey-server
  • sudo /etc/init.d/mldonkey-server stop
  • sudo nano /var/lib/mldonkey/downloads.ini
Editar a gosto, ver o allowed_ips
  • sudo /etc/init.d/mldonkey-server start
Acessível em localhost:4080
5. SAMBA
  • sudo apt-get install swat xinetd
  • sudo nano /etc/xinetd.d/swat
Editar o conteúdo para apresentar o seguinte:

  • # default: off
  • # description: SWAT is the Samba Web Admin Tool. Use swat \
  • # to configure your Samba server. To use SWAT, \
  • # connect to port 901 with your favorite web browser.
  • service swat
  • {
  • port = 901
  • socket_type = stream
  • wait = no
  • # Use only_from if you want to restrict access
  • # only_from = localhost
  • user = root
  • server = /usr/sbin/swat
  • log_on_failure += USERID
  • disable = no
  • }

Executar:

  • sudo /etc/init.d/xinetd restart

O swat precisa de ser executado como root, por isso precisamos de dar uma password ao root
  • sudo passwd root
Acessível em localhost:901
Primeiro criar utilizadores e depois shares

6. Subsonic
Fazer o download do subsonic, suponhamos que fica no ficheiro subsonic-4.5.deb.
Instalar o java e o subsonic:
sudo apt-get install openjdk-6-jre
sudo dpkg -i subsonic-4.5.deb
Fica acessível em < endereço_do_servidor >:4040

quarta-feira, 15 de julho de 2009

OpenVZ no Ubuntu

Instalar um kernel com openvz.
Configurar a rede
Ligar o IP forwarding, editando o ficheiro /etc/sysctl.conf. Deve conter as seguintes linhas:
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
Para activar:
sysctl -p
E configurar o iptables:
iptables -t nat -A POSTROUTING -s -o eth0 -j SNAT --to
Adicionar uma bridge no ficheiro /etc/network/interfaces
...
# bridge
brctl addbr br0
auto br0
iface br0 inet dhcp
bridge_ports eth0
Criar uma máquina com OpenVZ
Os templates das máquinas virtuais devem estar em /var/lib/vz/template/cache
vzctl create --ostemplate