GNU/Linux - Boas práticas

Particionar corretamente o disco

É muito comum encontrarmos pessoas usando uma distribuição Linux sem o particionamento correto. Isto é, na intenção efetuar uma instalação mais objetiva, mais rápida, acabam que banalizando a importância deste processo.

Na maioria das vezes, o sistema se encontra apenas em / e com swap. Qual é o problema nisso? Se por acaso houver um problema no sistema de arquivos do Linux (o que é bem comum), será necessário reinstalar todo o sistema novamente para corrigir o problema.

Se, no entanto, o sistema for bem particionado, não haverá esta necessidade. Se o sistema de arquivos (que se encontra no / ), quebrar, só será necessário reinstalar ou recuperar esta partição. O mesmo para com /boot, /swap, etc...

O mais indicado neste caso, por segurança, é que separem ao menos o /home do /. Neste cenário, ficaria assim:

/ - Sistema de arquivos ou diretório raiz
/home - Onde fica arquivos e pastas pessoais
/swap - Memória virtual

O cenário que recomendo é este:

/boot - Gerencia o grub e aloja o kernel
/ - Sistema de arquivos ou diretório raiz
/home - Onde fica arquivos e pastas pessoais
/swap - Memória virtual

Dentro de ambos os cenários a cima, quanto devo alocar de espaço para cada uma? Vamos por partes:

/boot: Para que neste espaço existam outras versões de kernel (caso o seu kernel em uso venha a quebrar), recomenda-se no mínimo 500 MB.

/: Este é o lugar onde /, ou o diretório raiz, está localizado. O diretório raiz é o nível mais alto da estrutura do diretório. Embora seja possível alocar apenas 5 GB nesta partição, tratando-se de uma instalação mínima do sistema, recomendo que aloque ao menos 10 a 15 GB's para que você possa realizar uma instalação completa, sem nenhuma limitação de pacotes, soluções e serviços a serem instalados no sistema.

Nota: Não confunda o diretório / com o diretório /root. O diretório /root é o diretório home do usuário root. O diretório /root é as vezes referido como slash root para distingui-lo do diretório /.

/home: Para armazenar dados de usuário separadamente dos dados de sistema, esta partição deve ser dimensionada baseada na quantidade de dados que será armazenado localmente, números de usuários e assim por diante. Geralmente a quantidade de espaço disponibilizado a esta partição, portanto, é grande. Uma boa estratégia é alocar espaço por último nesta partição. Ou seja, o que sobrar.

/swap: O cenário aqui varia de computador para computador. A imagem a baixo, resume bem a quantidade de espaço destinado ao swap:


Entre o esquema de particionamento standard e LVM, qual devo escolher?

Para usuário comum ou desenvolvimento, é recomendado que evite o LVM. LVM é muito bom para servidores visto que permite melhor escalabilidade no gerenciamento de disco. Entretanto, para o uso comum, pode simbolizar um risco.

Inclusive, é recomendado só usar LVM caso tenha uma política boa de backup, ou com RAID 1. O motivo é simples: Quando um Volume Group do LVM quebra, o trabalho para recuperar é tão grande que na maioria dos casos nem compensa tentar. Portanto, prefira o formato Standard.


Use o root com responsabilidade:

O usuário root pode fazer tudo, o que quer dizer que trabalhar sempre com root pode ser perigoso. O Ideal, é você usar o usuário que tem privilégios para as tarefas que está executando. Em alguns casos, esse usuário tem de ser o root, mas na maioria dos casos pode ser um usuário comum. Ao invés de logar diretamente como root, dê preferência ao sudo para comandos que requerem o privilégio de root.

Qual a diferença entre sudo e su?

Qualquer usuário que pode usar su ou sudo tem privilégios administrativos no sistema. Se a conta do usuário é comprometida por um (invasor), por exemplo, ele também irá ganhar privilégios de root.

Isto significa que a conta de usuário deve ser protegido como o mesmo rigor do root. O comando sudo provê algumas características que encorajam diferentes hábitos de trabalho e que impactam positivamente na segurança do sistema.

O comando sudo é comumente usado para executar apenas um comando, enquanto su é geralmente usado para abrir um shell e executar múltiplos comandos. A solução do sudo reduz a probabilidade de que um shell logado com o root seja deixado aberto, e encoraja aos usuários diminuirem o uso do privilégio root, aumentando assim a segurança do ambiente.

Nota: Logar em root como sudo su, portanto, não é uma boa prática. As maneiras corretas de logar como root, são sudo -i para o usuário comum logar como root, ou su root para logar diretamente com usuário root (consultar a manpage destes comandos).

Nota: O sudo adiciona um log de cada comando que é executado por ele (em /var/log/auth.log). Portanto, se você fizer algo de errado, pode sempre olhar quais comandos executou. Também é interessante para auditoria.


Leia os logs

Diferentemente do Microsoft Windows, no Linux, não é necessário consultar uma bola de cristal para resolver um problema. Para isso, existe o sistema de logs, ou sistema de journaling.

Em geral, os logs do sistema se encontram em /var/logs/. Este é o diretório padrão. Mas também é possível acessar os logs através do comando journalctl -xls. O journalctl faz uma consulta no sistema de logs do systemd.

Nota: Consulte a manpage do comando journalctl para mais informações.


Desabilite o IPv6 padrão

Na maioria das distribuições mais novas, o IPv6 vem por padrão. Aqui na Universidade Federal de Lavras - UFLA o IPv6 é aceito tranquilamente. No entanto, nós ainda não estamos usando-o e poderá haver problemas de comunicação com outros sistemas/redes. Afim de evitar problemas relacionados, desabilite o IPv6 de sua máquina da seguinte maneira:

Com seu editor de texto preferido, abra o /etc/sysctl.conf e adicione as seguintes linhas:

net.ipv6.conf.all.disable_ipv6=1  
net.ipv6.conf.default.disable_ipv6=1  

Agora aplique a nova configuração:

sudo sysctl -p /etc/sysctl.conf  

systemd é diferente de system V-init

Nós aqui no LEMAF, estamos acostumados a adicionar todos os scripts de inicialização de serviços no diretório /etc/init.d/. Não há nada de errado nisso. No entanto, para que estes serviços estejam disponíveis através de comandos como service nginx restart por exemplo, ou systemctl restart nginx.service será necessário reiniciar o daemon do systemd com o comando a seguir:

sudo systemctl daemon-reload  

Nota: Consulte a manpage do systemctl para mais informações.


Leia a manpage

O GNu/Linux contém a maior quantidade de documentação entre todos os outros Sistemas Operacionais existentes. Isto é, existe uma manpage para quase todos os comandos e serviços do Linux. Use e abuse da manpage. Para usar a manpage, basta usar o comando man. Por exemplo:

man ls  

Nota: Existe também o comando info. O info é uma manpage mais resumida.


Cuidado ao atualizar o sistema

Muitas vezes é necessário atualizar o sistema para corrigir bug's, adquirir inovações, e manter tudo na última versão. No entanto, nem sempre é conveniênte fazer isto. Pois, muitas vezes precisamos manter a versão de uma determinada ferramenta e atualiza-la poderá representar atraso em suas atividades.

Nesse caso, tratando-se de distribuições baseada em Debian como por exemplo o Ubuntu, prefira usar o aptitude ao invés do apt-get. Existe um parâmetro do aptitude que torna a atualização mais segura neste aspecto. Por exemplo:

sudo aptitude safe-upgrade --no-new-installs  

Desta maneira, você irá atualizar o sistema mantendo as versões obsoletas intactas. Inclusive, recomendo que explorem bem o aptitude visto que já se apresenta como um gerenciador de pacotes mais completo do que o apt-get.


Dica de leitura

Guia Foca Online