diff options
-rw-r--r-- | index.mdwn | 154 | ||||
-rw-r--r-- | index.pt.mdwn | 149 |
2 files changed, 158 insertions, 145 deletions
@@ -1,11 +1,11 @@ [[!meta title="Bootless: anti-tampering bootloader"]] -**WARNING** - this pre-alpha software with portuguese-only docs! +**WARNING** - this pre-alpha software with [portuguese-only docs](index.pt)! -* Bootless é uma integração tecnológica que permite um computador criptografado a permanecer sem gerenciador de partida (bootloader), de modo que grampos em software sejam difícies de serem instalados. -* O Bootless é um gerenciador de partida em software livre instalado numa mídia removível e utilizado para inicializar computadores. -* É previsto suporte inicial para o sistema operacional Debian. -* O Bootless atualmente usa a [Hydra Suite](https://git.sarava.org/?p=hydra.git;a=summary). +* Bootless is a scheme allowing a computer with encrypted disk to stay without attached bootloader in order to make more difficult to tamper the initialization process. +* Bootless is a bootloader installed in a removable media and used to initialize computers. +* Initial support is targeted to Debian like operating systems. +* Bootless currently used the [Hydra Suite](https://git.sarava.org/?p=hydra.git;a=summary). TODO ---- @@ -14,147 +14,11 @@ TODO - Setup issue tracker. - Add contact information. - Setup git-annex into the repository. -- Split bootless script from hidra suite but preserve integration. +- Split bootless script from hydra suite but preserve integration. - Add pre-built and signed images. -Construindo um volume bootless ------------------------------- - -Primeiro, prepare o dispositivo: - - export device=/dev/nome_do_dispositivo - export partition=numero_da_particao - mkfs.ext3 "$device""$partition" - mkdir /tmp/bootless - mount "$device""$partition" /tmp/bootless - -Clone o repositório bootless: - - git clone ssh://exemplo.org/bootless.git /tmp/bootless/boot - -Se você já tiver uma cópia de trabalho na sua máquina, pode ser mais interessante clonar direto dela para economizar tempo e banda, mas certifique-se de atualizá-la antes. Se houver pouco espaço na pasta de destino, faça o clone usando a opção `--depth=1`. - -Em seguida, instale o GRUB no MBR do dispositivo, rodando `grub` e digitando em seu shell, substituindo o nome do dispositivo e da partição conforme apropriado: - - root (hd1,1) - setup (hd1) - -Limpe a casa: - - umount /tmp/bootless - rmdir /tmp/bootless - -Agora seu pendrive está pronto para reinicializar os nodos físicos :) - -Mantendo o repositório compacto -------------------------------- - -Apesar de ser um repositório `git` e portanto de fácil manutenção de uma árvore distribuída, o `bootless` sofre de um problema de espaço: a cada imagem binária adicionada ou removida, o histórico do repositório cresce muito. Para evitar que o repositório cresça muito e não caiba numa pequena partição de um pendrive, é preciso reconstruir sua história. - -Aqui segue um exemplo usando o `git-rebase` para agregar commits. Primeiramente, faça o rebase, juntando commits com 'squash' (vide referências): - - git rebase -i COMMIT - -No caso, `COMMIT` é o commit inicial do repositório `bootless` que estamos usando. Em seguida, é preciso que o seu repositório local seja clonado pois só assim (!) é possível salvar espaço: - - cd .. - mv bootless bootless.old - git clone bootless.old bootless - cd - - git gc --aggressive - git prune - cp ../bootless.old/.git/config .git/ - -Dependendo da situação anterior, após esse processo o repositório pode diminuir bastante de tamanho. Um grande inconveniente desse processo é que ele agride a história de modo que as outras cópias do repositório precisam de uma força para serem atualizadas: - - git push --force - -GRUB2 ------ - -Adaptei o bootless para o GRUB2 utilizando o mesmo repositório. Isso significa que: - - * É possível utilizar o repositório do bootless tanto com o grub-legacy quanto com o grub2. - * O grub-legacy utiliza o arquivo `menu.lst` enquanto que o grub2 usa o `grub.cfg`. Ambos arquivos precisam ser mantidos atualizados enquanto ambas as versões do grub forem suportadas. - -No caso da instalação de um pendrive usando grub2, é necessário utilizar o seguinte comando de instalação ao invés de simplesmente invocar o `grub`: - - grub-install --root-directory=/tmp/bootless $device --force - -Procedimento completo de exemplo: - - export device=/dev/nome_do_dispositivo - export partition=numero_da_particao - mkfs.ext3 "$device""$partition" - mkdir /tmp/bootless - mount "$device""$partition" /tmp/bootless - git clone --depth=1 ssh://gitosis@exemplo.org/bootless.git /tmp/bootless/boot - grub-install --root-directory=/tmp/bootless $device - umount /tmp/bootless - rmdir /tmp/bootless - -Em casos emergencias pode ser muito útil usar o seguinte comando para gerar uma imagem bootavel: - - grub-mkrescue -o bootless.img bootless/ - -Versões específicas de kernel ------------------------------ - -Às vezes pode ser necessário criar manualmente a initramfs após uma atualização de kernel (reparei isso em máquinas rodando Ubuntu). Abaixo, comando para atualizar o initramfs para uma versão específica de kernel: - - update-initramfs -v -u -k 2.6.32-26-generic - -Hydra Suite ------------ - -Criando o repositório: - - hydra exemplo bootless init ssh://gitosis@exemplo.org/bootless.git - hydra exemplo bootless make /dev/sdb1 - hydra exemplo bootless git pull - hydra exemplo bootless git commit -a - -Criando uma imagem: - - hydra exemplo bootless image - -Isso criará o arquivo bootless.img na pasta atual. Para especificar um nome de arquivo distinto, use - - hydra exemplo bootless image arquivo.img - -Para gerar a imagem e gravá-la simultaneamente numa mídia removível localizada em `/dev/sdb`, use - - hydra exemplo bootless image arquivo.img /dev/sdb - -Se você quiser gerar uma imagem apenas para ser gravada em `/dev/sdb`, isto é, sem um arquivo.img sobrando, use - - hydra exemplo bootless image /dev/sdb - -Customização ------------- - -Algo que vale a pena pensar para possíveis mudanças futuras no `bootless`: atualmente utilizamos uma nomenclatura única no `LVM` de todas as máquinas, o que permite compartilharmos a `initrd` entre os sistemas. - -Se utilizássemos nomes distintos para cada máquina, precisaríamos de uma `initrd` por sistema -- o que aumentaria muito o tamanho do repositório -- ou então ter alguma forma de customizar a imagem de inicialização para suportar esse esquema. - -Usar uma nomenclatura única simplifica a manutenção do bootless, porém pode complicar o gerenciamento de volumes, por exemplo quando quisermos abrir o disco de um servidor em outro. - -Temos três [alternativas](http://wiki.debian.org/InitrdReplacementOptions): - - * [initramfs-tools](http://packages.debian.org/stable/initramfs-tools), que é utilizado atualmente. - * [yaird](http://packages.debian.org/sid/yaird), supostamente a ser utilizado no futuro. - * [dracut](http://packages.debian.org/stable/dracut), uma [outra possibilidade](https://lwn.net/Articles/317793/). - -É preciso fuçar na documentação desses softwares para saber como a montagem de volumes pode ser customizada. - -O arquivo conf.d/cryptroot das initrds usadas atualmente contém o seguinte: - - target=root,source=/dev/mapper/vg-root,key=none,rootdev,cipher=aes-cbc-essiv:sha256 - -O ideal seria ter várias entradas nesse arquivo. Talvez seja o caso de estudar também o `/usr/share/initramfs-tools/hooks/cryptroot`. - -Referências ------------ +References +---------- Git: @@ -175,7 +39,7 @@ Boot: - [Auto-booting and Securing a Linux Server with an Encrypted Filesystem](http://serverfault.com/questions/34794/auto-booting-and-securing-a-linux-server-with-an-encrypted-filesystem). - [Smartmonster](https://github.com/ioerror/smartmonster). -Imagens: +Images: * [How can I mount a disk image?](http://superuser.com/questions/344899/how-can-i-mount-a-disk-image). * [GRUB 2 - OSDev](http://wiki.osdev.org/GRUB_2): instalando o grub em várias mídias distintas. diff --git a/index.pt.mdwn b/index.pt.mdwn new file mode 100644 index 0000000..09a51e0 --- /dev/null +++ b/index.pt.mdwn @@ -0,0 +1,149 @@ +[[!meta title="Bootless: gerenciador de partida anti-grampo"]] + +**ATENÇÂO** - este software se encontra em estágio pré-alfa! + +* Bootless é uma integração tecnológica que permite um computador criptografado a permanecer sem gerenciador de partida (bootloader), de modo que grampos em software sejam difícies de serem instalados. +* O Bootless é um gerenciador de partida em software livre instalado numa mídia removível e utilizado para inicializar computadores. +* É previsto suporte inicial para o sistema operacional Debian. +* O Bootless atualmente usa a [Hydra Suite](https://git.sarava.org/?p=hydra.git;a=summary). + +TODO +---- + +- Vide documentação inglesa. + +Construindo um volume bootless +------------------------------ + +Primeiro, prepare o dispositivo: + + export device=/dev/nome_do_dispositivo + export partition=numero_da_particao + mkfs.ext3 "$device""$partition" + mkdir /tmp/bootless + mount "$device""$partition" /tmp/bootless + +Clone o repositório bootless: + + git clone ssh://exemplo.org/bootless.git /tmp/bootless/boot + +Se você já tiver uma cópia de trabalho na sua máquina, pode ser mais interessante clonar direto dela para economizar tempo e banda, mas certifique-se de atualizá-la antes. Se houver pouco espaço na pasta de destino, faça o clone usando a opção `--depth=1`. + +Em seguida, instale o GRUB no MBR do dispositivo, rodando `grub` e digitando em seu shell, substituindo o nome do dispositivo e da partição conforme apropriado: + + root (hd1,1) + setup (hd1) + +Limpe a casa: + + umount /tmp/bootless + rmdir /tmp/bootless + +Agora seu pendrive está pronto para reinicializar os nodos físicos :) + +Mantendo o repositório compacto +------------------------------- + +Apesar de ser um repositório `git` e portanto de fácil manutenção de uma árvore distribuída, o `bootless` sofre de um problema de espaço: a cada imagem binária adicionada ou removida, o histórico do repositório cresce muito. Para evitar que o repositório cresça muito e não caiba numa pequena partição de um pendrive, é preciso reconstruir sua história. + +Aqui segue um exemplo usando o `git-rebase` para agregar commits. Primeiramente, faça o rebase, juntando commits com 'squash' (vide referências): + + git rebase -i COMMIT + +No caso, `COMMIT` é o commit inicial do repositório `bootless` que estamos usando. Em seguida, é preciso que o seu repositório local seja clonado pois só assim (!) é possível salvar espaço: + + cd .. + mv bootless bootless.old + git clone bootless.old bootless + cd - + git gc --aggressive + git prune + cp ../bootless.old/.git/config .git/ + +Dependendo da situação anterior, após esse processo o repositório pode diminuir bastante de tamanho. Um grande inconveniente desse processo é que ele agride a história de modo que as outras cópias do repositório precisam de uma força para serem atualizadas: + + git push --force + +GRUB2 +----- + +Adaptei o bootless para o GRUB2 utilizando o mesmo repositório. Isso significa que: + + * É possível utilizar o repositório do bootless tanto com o grub-legacy quanto com o grub2. + * O grub-legacy utiliza o arquivo `menu.lst` enquanto que o grub2 usa o `grub.cfg`. Ambos arquivos precisam ser mantidos atualizados enquanto ambas as versões do grub forem suportadas. + +No caso da instalação de um pendrive usando grub2, é necessário utilizar o seguinte comando de instalação ao invés de simplesmente invocar o `grub`: + + grub-install --root-directory=/tmp/bootless $device --force + +Procedimento completo de exemplo: + + export device=/dev/nome_do_dispositivo + export partition=numero_da_particao + mkfs.ext3 "$device""$partition" + mkdir /tmp/bootless + mount "$device""$partition" /tmp/bootless + git clone --depth=1 ssh://gitosis@exemplo.org/bootless.git /tmp/bootless/boot + grub-install --root-directory=/tmp/bootless $device + umount /tmp/bootless + rmdir /tmp/bootless + +Em casos emergencias pode ser muito útil usar o seguinte comando para gerar uma imagem bootavel: + + grub-mkrescue -o bootless.img bootless/ + +Versões específicas de kernel +----------------------------- + +Às vezes pode ser necessário criar manualmente a initramfs após uma atualização de kernel (reparei isso em máquinas rodando Ubuntu). Abaixo, comando para atualizar o initramfs para uma versão específica de kernel: + + update-initramfs -v -u -k 2.6.32-26-generic + +Hydra Suite +----------- + +Criando o repositório: + + hydra exemplo bootless init ssh://gitosis@exemplo.org/bootless.git + hydra exemplo bootless make /dev/sdb1 + hydra exemplo bootless git pull + hydra exemplo bootless git commit -a + +Criando uma imagem: + + hydra exemplo bootless image + +Isso criará o arquivo bootless.img na pasta atual. Para especificar um nome de arquivo distinto, use + + hydra exemplo bootless image arquivo.img + +Para gerar a imagem e gravá-la simultaneamente numa mídia removível localizada em `/dev/sdb`, use + + hydra exemplo bootless image arquivo.img /dev/sdb + +Se você quiser gerar uma imagem apenas para ser gravada em `/dev/sdb`, isto é, sem um arquivo.img sobrando, use + + hydra exemplo bootless image /dev/sdb + +Customização +------------ + +Algo que vale a pena pensar para possíveis mudanças futuras no `bootless`: atualmente utilizamos uma nomenclatura única no `LVM` de todas as máquinas, o que permite compartilharmos a `initrd` entre os sistemas. + +Se utilizássemos nomes distintos para cada máquina, precisaríamos de uma `initrd` por sistema -- o que aumentaria muito o tamanho do repositório -- ou então ter alguma forma de customizar a imagem de inicialização para suportar esse esquema. + +Usar uma nomenclatura única simplifica a manutenção do bootless, porém pode complicar o gerenciamento de volumes, por exemplo quando quisermos abrir o disco de um servidor em outro. + +Temos três [alternativas](http://wiki.debian.org/InitrdReplacementOptions): + + * [initramfs-tools](http://packages.debian.org/stable/initramfs-tools), que é utilizado atualmente. + * [yaird](http://packages.debian.org/sid/yaird), supostamente a ser utilizado no futuro. + * [dracut](http://packages.debian.org/stable/dracut), uma [outra possibilidade](https://lwn.net/Articles/317793/). + +É preciso fuçar na documentação desses softwares para saber como a montagem de volumes pode ser customizada. + +O arquivo conf.d/cryptroot das initrds usadas atualmente contém o seguinte: + + target=root,source=/dev/mapper/vg-root,key=none,rootdev,cipher=aes-cbc-essiv:sha256 + +O ideal seria ter várias entradas nesse arquivo. Talvez seja o caso de estudar também o `/usr/share/initramfs-tools/hooks/cryptroot`. |