Sistema Debian

A seguir, o procedimento de instalação de um sistema com disco criptografado e gerenciamento de partida via dispositivo de armazenamento USB.

Local de instalação

O procedimento a seguir utiliza LVM e assume que o nome de volume group vg esteja disponível para utilização. Assim, recomenda-se que, durante o procedimento de instalação, seja utilizado

  1. Um sistema simples sem LVM.
  2. Ou um sistema que utilize LVM mas que não tenha um volume group de nome vg.

Caso contrário, você ainda poderá utilizar um nome de volume group intermediário durante a instalação, reiniciar a máquina com um outro sistema onde o nome vg esteja disponível e utilizar o vgrename(8) para renomear o volume group.

Instalação

Antes de tudo, determine qual o dispositivo no qual o sistema será instalado, a arquitetura, a versão do sistema e o domínio principal:

export device=/dev/nome_do_dispositivo
export arch=amd64
export version=lenny
export hostname=nome_da_maquina
export domain=projeto.org

A primeira etapa é o particionamento do disco. Neste exemplo, consideremos o seguinte layout para o disco:

fdisk -l $device

Como exemplo, assumiremos o seguinte layout, ajuste-o conforme as suas necessidades e gostos:

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         249     2000061   82  Linux swap
/dev/sdb2   *         250         273      192780   83  Linux
/dev/sdb3             274      121601   974567160   8e  Linux LVM

Em seguida vem a criação do LVM:

pvcreate "$device"3
vgcreate vg "$device"3
lvcreate -L20G -n root vg
vgchange -a y vg

Em seguida, preencher o dispositivo com sujeira:

dd if=/dev/urandom of=/dev/vg/root

A saída do comando acima deve ser algo como

dd: escrevendo em `/dev/vg/root': Não há espaço disponível no dispositivo
41943041+0 registos dentro
41943040+0 registos fora
21474836480 bytes (21 GB) copiados, 8544 s, 2,5 MB/s

Proceder igualmente com a partição swap:

dd if=/dev/urandom of="$device"1
dd: escrevendo em `/dev/sdb1': Não há espaço disponível no dispositivo
4000123+0 registos dentro
4000122+0 registos fora
2048062464 bytes (2,0 GB) copiados, 972,049 s, 2,1 MB/s

Com isso, já é possível passar para a criação do volume criptografado:

cryptsetup -h sha256 -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/vg/root
cryptsetup luksOpen /dev/vg/root debootstrap
mkfs.ext3 /dev/mapper/debootstrap

Montando esse dispositivo num local temporário e instalar o sistema básico:

mkdir /tmp/debootstrap
mount /dev/mapper/debootstrap /tmp/debootstrap/
debootstrap --arch=$arch $version /tmp/debootstrap/

Configuração inicial

mount none -t proc /tmp/debootstrap/proc/
mount -o bind /dev/ /tmp/debootstrap/dev
cp -L /etc/resolv.conf /tmp/debootstrap/etc
echo $hostname.$domain >> /tmp/debootstrap/etc/hostname
echo "127.0.0.1 localhost $hostname $hostname.$domain" >> /tmp/debootstrap/etc/hosts
chroot /tmp/debootstrap/
export PS1="chroot $PS1"
apt-get update ; apt-get upgrade
apt-get install locales cryptsetup lvm2 initramfs-tools grub

O /etc/crypttab deve conter (substitua /dev/sda1 pelo seu valor correspondente para $device:

# <target name>	<source device>		<key file>	<options>
root            /dev/mapper/vg-root     none            luks,cipher=aes-cbc-essiv:sha256
cswap           /dev/sda1               /dev/random     swap,cipher=aes-cbc-essiv:sha256

E o /etc/fstab deve conter:

/dev/mapper/cswap none swap sw 0 0
/dev/mapper/root  /    ext3 defaults,errors=remount-ro

Partida

Agora é a hora de configurar o gerenciador de partida:

mkfs.ext3 /dev/"$device"2
mount /dev/"$device"2 /boot
grub-install --no-floppy "$device"

Conteúdo do /boot/grub/menu.lst (substitua de acordo com os valores de $arch e da versão do kernel instalado:

title	Servidor (hd0)
root	(hd0,1)
kernel	/vmlinuz-2.6.26-1-vserver-amd64 root=/dev/mapper/root ro quiet rootdelay=10
initrd	/initrd.img-2.6.26-1-vserver-686

title	Servidor (hd0) (single)
root	(hd0,1)
kernel	/vmlinuz-2.6.26-1-vserver-amd64 root=/dev/mapper/root ro single rootdelay=10
initrd	/initrd.img-2.6.26-1-vserver-686

Note que a opção rootdelay é importante no caso de sistemas contidos dentro de volumes USB, já que o kernel demora alguns instantes para detectar tais volumes. Detalhes a respeito em

Para que a partição de boot seja montada após a partida do sistema, adicione a seguinte entrada no /etc/fstab, substituindo, se necessário, sda2 pela partição correspondente:

/dev/sda2  /boot    ext3 defaults,errors=remount-ro

Kernel

O /etc/initramfs-tools/modules deve conter as linhas

dm-mod
dm-crypt
aes
twofish
sha256

Já o /etc/kernel-img.conf deve possuir a linha

do_initrd = Yes

Proceda desabilitando o firewire do sistema e, em seguida, instale o kernel:

if [ "$arch" == "i386" ]; then
  kernel_arch="686"
else
  kernel_arch="$arch"
fi
apt-get install linux-image-2.6-vserver-$kernel_arch

Imagem de partida

Para que o sistema consiga inicializar, atualize a imagem de partida:

update-initramfs -v -u

Continuando remotamente

Para que seja possível continuar remotamente com a configuração, é preciso instalar um servidor SSH:

apt-get install openssh-server
ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

Aproveite para instalar aplicativos básicos:

apt-get install sudo cron lsb-release

Por fim,

passwd root

Agora a máquina já está quase a ponto de poder ser administrada remotamente. Antes disso, configure a rede, instale o sudo e adicione as contas de usuário/a iniciais:

vi /etc/network/interfaces # configuracao de rede
vi /etc/udev/rules.d/70-persistent-net.rules # ajuste das placas de rede
vi /etc/resolv.conf # para usar o dns disponivel no data center
apt-get install sudo && adduser nome-de-usuario

Antes de largar a máquina no data center, lembre-se de anotar os fingerprints do ssh que você listou anteriormente.

Expansão de espaço em disco

Referências

Algumas referências para instalação: