Protegendo seu PC com GNU/Linux [Parte 2/4: Básico]

Novas vulnerabilidades sempre estão sendo descobertas. Você precisa tornar uma prioridade manter-se informado e tomar as ações apropriadas para manter a segurança do seu sistema mesmo sendo do tipo Unix. Conforme você progredir através deste tutorial, verá algumas etapas básicas que pode executar para ajudar a evitar acesso não-autorizado ao seu computador desktop GNU/Linux. Estes mesmos conceitos fundamentais de segurança para tornar seu desktop seguro também servem como uma base para fortalecer seus servidores Linux.

Esta é a 2ª parte do Guia de Segurança para GNU/Linux. Para obter o máximo deste tutorial, siga as etapas fornecidas para cada tarefa com um computador executando GNU/Linux ou uma máquina virtual com GNU/Linux como o sistema operacional. Como matéria complementar, é importante que tenha lido a 1ª Parte deste Guia além dos artigos “Mitos sobre Linux“.


Atualizações de Segurança

Na 1ª parte deste guia, vimos que manter o sistema atualizado é um procedimento vital para a saúde de sua plataforma. Porém, dependendo da quantidade de softwares e da versão do seu sistema, além de outros fatores, o processo de atualização pode demorar. Se por algum motivo não for possível fazer a atualização completa do sistema, faça ao menos as de segurança.

Há vários motivos que levam um usuário a optar por instalar em dado momento, apenas as atualizações de segurança, tais como:

  • Velocidade da internet está muito baixa;
  • Tempo disponível no momento;
  • Não quer alterações de versões em pacotes do seu sistema.

Portanto, dependendo da distribuição é possível selecionar um espelho de atualização ou repositório e realizar apenas um update de segurança.

Abra o seu terminal shell, e entre com a conta do usuário “root”, para isto execute o comando “su root” na linha de comandos, pressione enter e informe sua senha.

Para usuários que possuem o SUDO habilitado, não será necessário logar como  root, basta utilizar o comando “sudo” antes dos comandos informados neste guia.


1 – Distribuições Debian, Ubuntu e derivados

Em primeiro momento, é necessário verificar se o repositório (sources.list) está atualizado para a versão do seu sistema e se possível um espelho para updates de segurança. Utilizando o comando abaixo, o conteúdo do arquivo será exibido.

Verifique se há no arquivo, linhas contendo a palavra “security“. Algo como:

  • Debian Jessie:
  • Ubuntu Xenial:

Note a palavra security, as linhas devem conter essa palavra e não podem estar comentadas (iniciadas com um #) caso estejam comentadas remova o “#“. Faça uma cópia do arquivo “sources.list” criando uma versão alternativa deste, para ser utilizada apenas em casos de updates de segurança.

  • Debian:
  • Ubuntu:

O comando acima faz uma busca no arquivo “sources.list” retornando apenas as linhas que contenham a palavra “security” e em seguida redirecionando o resultado para um novo arquivo nomeado “update-security.list“.

Desta forma, quando necessitar ou quiser apenas atualizações de segurança para sua distro, execute o seguinte comando:

O comando acima faz o APT ler do arquivo /root/update-security.list que criamos e puxar apenas as suas correções de segurança para o sistema, ignorando o /etc/apt/sources.list.

Observe na imagem abaixo, que o download dos pacotes está sendo realizado apenas do espelho security.


2 – Distribuições RHEL, CentOS, Fedora e derivados

Em distribuições Red Hat e derivadas (CentOS, Fedora, etc), o procedimento é mais tranquilo. Isto é possível pois o YUM (gerenciador de pacotes) trabalha de forma mais inteligente que o tradicional APT (Debian) para resolver dependências de pacotes.

Com o YUM é possível que o usuário realize um update apenas em um pacote ou grupos destes, tais como neste caso, os pacotes de segurança. Utilizando o “yum-security” é possível atualizar apenas pacotes que necessitam de atualizações e correções de segurança.

Vale lembrar que em versões mais antigas, tais como RHEL 5, CentOS e algumas versões anteriores do Fedora, será necessário instalar o pacote “yum-plugin-security” para utilizar a opção “–security“. Atualmente, este procedimento não é mais necessário.

  • Para RHEL 6
  • Para RHEL 5

É possível listar as informações gerais por criticidade, em formato de resumo, com um total de updates disponíveis:

O comando acima, retornará algo como:

Para verificar a lista de correções e o histórico, utilize o comando abaixo:

Se desejado, é possível instalar apenas o CVE selecionado (ou quantos desejar), pacotes por severidade, bugfix, bzs e advisories. Ex.: Se desejar listar apenas os bugfix:

Observe a saída do comando acima, algo semelhante as informações abaixo, será exibido ao usuário:

Agora, basta escolher o pacote e instala-lo manualmente se assim desejar:

Para listar todas as atualizações de segurança disponíveis sem instalar, utilize:

Para listar as atualizações de segurança já instaladas, digite:

Digite o comando abaixo, para fazer com que o yum procure por correções de segurança e instale-as quando encontrado.


Lidando com privilégios de usuários (SUDO vs SU)

Ambos os comandos (su e sudo) são lembrados quando se deseja realizar tarefas com privilégios administrativos no GNU/LINUX — tais como configurar alguns aplicativos ou serviços do sistema, instalar software etc. Ainda que sejam utilizados em situações similares, ambos são diferentes e têm propósitos e comportamentos distintos.


Comando su

De acordo com a documentação oficial, o su (Switch User) serve para mudar o usuário atual, isso inclui por exemplo, trocar para o superusuário. Com ele, é possível “incorporar” qualquer usuário no sistema. Obviamente, se você é um usuário comum, é necessário conhecer a senha do usuário para o qual você está mudando. Durante esta série de dicas para GNU/Linux, já utilizamos este comando, sua sintaxe é a seguinte:

Porém, se você for o root (administrador do sistema em questão), não precisa fornecer senha alguma. O root pode incorporar quem ele quiser, o que é útil para analisar alguma situação do ponto de vista do próprio usuário. Se precisas alterar arquivos de configuração específicas de algum usuário do sistema, é interessante fazer isto “como ele mesmo”, evitando de, na hora de gravar os arquivos, que sejam gravados como se o seu dono fosse o root. Se isto acontecesse, o arquivo ficaria indisponível para aquele usuário.

Para resumir, a função do comando su é trocar de usuário.


Comando sudo

O significado de sudo é superuser do, ou seja superusuário faça.

Se você é usuário do Ubuntu, por exemplo, já deve ter utilizado ou lido sobre o comando “sudo“. A função básica deste comando, é permitir que um usuário comum possa rodar algum comando com permissões elevadas, sem a necessidade de “trocar de identidade”. Para poder usar o sudo, é necessário ser integrante do grupo “sudo”, ou algum grupo pré-configurado no arquivo “/etc/sudoers”.

O comando sudo permite, ainda, que você execute uma tarefa como outro usuário (que não seja o root):

Para conhecer mais sobre este comando, acesso o manual:

Se um usuário, que não tem privilégios para tanto, tentar rodar algum comando com o uso do sudo, o evento será relatado ao administrador do sistema.

Bem, você com certeza irá encontrar em vários fóruns da internet, discussões e muitas brigas girando em torno deste recurso. Uns dizem que é vulnerável, outros que não faz o menor sentido a sua construção, ou que foi uma ótima solução.

Falácias à parte, a minha intensão aqui não é apoiar um ou outro lado, mas esclarecer um pouco mais a sua utilização e prática, para os usuários de Desktops GNU/Linux. Esta é uma forma de o administrador do sistema compartilhar privilégios administrativos limitados a outros usuários, sem revelar a senha de root. Vamos citar um pouco mais sobre sua utilização:

  • Garante o registro de quem executou uma ação X ou Y. Isto auxilia um processo de auditoria.

Imagina se toda execução administrativa fosse realizada pelo root, não seria claro quem de fato executou tal ação, nesta situação. Além disso pode cumprir um papel importante na segurança. Se há uma situação em que um usuário precisa cotidianamente (ou mesmo esporadicamente) ter acesso de root para executar uma determinada tarefa já previamente conhecida, então seria mais seguro configurar o sudo para esta finalidade (em que o usuário utilizaria a sua própria senha), do que fornecer a senha de root.

  • Previne problemas de execução de comandos em certas atividades.

Imagine o problema de executar erroneamente um comando prejudicial, estando sempre como root.

  • Através do arquivo de configuração deste comando (/etc/sudoers), pode-se limitar os comandos “com importância” que um usuário ou grupo de usuários específico irá executar.

Por exemplo, é possível permitir que um grupo de usuários X faça atualizações de segurança do sistema, mas não possa realizar nenhuma outra atividade administrativa.

  • Utilizando o SUDO é possível transformar vários usuários em administradores, com permissões limitadas até certo ponto, deixando o ROOT apenas para casos mais específicos.

Neste caso, é possível delegar capacidades privilegiadas a usuários com maior flexibilidade, do que a necessidade de troca constante para root.

O mais óbvio em todas as discussões, é o fato de delegar poderes administrativos a um usuário considerado comum. Daí as boas práticas de utilização do sistema, como senhas mais complexas e navegação mais segura. Isto evitaria que mesmo com acesso administrativo limitado, um atacante não teria a possibilidade de descobrir uma “senha fácil”.

Portanto, fica uma dica: se pretendes utilizar o SUDO e configurá-lo para sua utilização criando perfis de usuários (Grupos), evite por exemplo, senhas fracas. ASSUMA A RESPONSABILIDADE.

Agora, se você só possuir o seu usuário, e desejar desativar de vez o sudo, acesse o terminal como root “su root” e utilize o seguinte comando:

Desta forma, toda vez que necessitar realizar alguma atividade administrativa, será necessário acessar entrar com o usuário root.


Realizando atividades administrativas sem o sudo

Ainda é possível, se desejar, executar atividades utilizando comandos de root, sem a execução do sudo. Usa-se o comando “su”, que serve para nos autenticar como superusuário no sistema, quando desejamos realizar alguma tarefa administrativa sem a presença do sudo.

Você precisa conhecer a senha do root, para usar o su.

Para se autenticar temporariamente como root e voltar, algo parecido com o sudo, use o comando “su -c“.

Debian, Ubuntu e derivados:

RHEL, Fedora, CentOS e derivados:

A senha do usuário root será exigida.


Configurando o SUDO

Se consideras como vantagem utilizar o sudo, é altamente recomendado reconfigurar suas permissões. A maioria dos sistemas mais amigáveis como o Ubuntu e o Kurumin deixam o comando sudo totalmente habilitado para o usuário padrão, ou seja, o usuário configurado durante a instalação do sistema.

Se seu sistema ainda não tem o “sudo” instalado e deseja utilizá-lo, instale através do seguinte comando:

1 – Instalar o sudo (Debian, Ubuntu e derivados):

1 – Instalar o sudo (RHEL, CentOS, Fedora e derivados):

É possível que sua distribuição, sendo baseada em Red Hat, já possua o sudo instalado, porém seu usuário ainda não tenha permissão de utilizá-lo. O que ocorre é que em muitas distros baseadas em RHEL (como Fedora, CentOS, etc) há um grupo chamado wheel. Este é o grupo de todos os usuários no sistema que tem permissões para executar comandos com privilégios de root através do comando sudo.

Sendo assim, não é necessário editar inicialmente nenhum arquivo para ter esses privilégios. Basta simplesmente adicionar o seu usuário ao grupo wheel. Para isso, execute o comando abaixo substituindo “seu_usuario” pelo seu nome de usuário.

Talvez seja necessário reiniciar pra que essas alterações passem a valer.

Para confirmar e ver uma lista dos grupos que seu usuário pertence, basta executar o comando groups no terminal:

Se surgir na lista o grupo “wheel” então poderá utilizar o comando sudo.


Configurar as permissões de SUDO

Para configurar um usuário ou grupos de usuários, com permissões mais específicas, basta editar o arquivo “/etc/sudoers“. Para isto, abra o arquivo utilizando seu editor de textos favorito (vi, vim, nano, gedit, leafpad, etc), no exemplo abaixo estou utilizando o “nano”, lembre-se de estar logado com usuário root:

Ao abrir o arquivo, procure uma linha contendo “root ALL=(ALL:ALL) ALL” e acrescente abaixo dela as permissões de seu usuário específico, seguindo a sintaxe:

  • nome_do_usuario    PERMISSOES

Para dar permissões total de root, após o nome do usuário digite “ALL=(ALL:ALL) ALL“, esta permissão diz ao sistema que o usuário X, pode acessar de qualquer lugar e executar qualquer comando administrativo. Embora este tipo de permissão não seja muito recomendada, sugerimos que limite se possível, os comandos que poderão ser executados, bem como a origem do acesso, se remoto ou local.

Para limitar as permissões, é possível indicar que comandos o usuário poderá executar, quando mais de um comando, basta separá-los por vírgulas:

Também é possível atribuir execução de comandos por grupos de usuários. Para indicar um grupo, a sintaxe é semelhante a de usuários, porém deve-se acrescente no início da linha o símbolo de porcentagem “%”, sem aspas.

  • %grupo PERMISSOES

Por padrão, em distribuições Debian, Ubuntu e derivadas, quando instalado o SUDO, os grupos de usuários “admin” e “sudo” já possuem permissões de root, ou seja, se deseja privilégios total de root, basta adicionar seu usuário ao grupo informado. Já em distribuições RHEL, Fedora, CentOS e derivadas, o grupo com permissões de root chama-se “wheel“.

  • Debian, Ubuntu:
  • RHEL, Fedora, CentOS:

Como recomendação de boas práticas, independente de sua distribuição, exclua ou comente as linhas com essas permissões padrões “ALL=(ALL:ALL) ALL“, também é recomendado comentar as permissões para os grupos de usuários e criar suas próprias permissões. Para comentar uma linha, basta acrescentar “#” sem aspas no início da linha.

Explicando as colunas:

  • Coluna 1: o usuário ou grupo (no caso de grupo, coloque um % antes, exemplo %financeiro) que você irá atribuir os direitos;
  • Coluna 2: em que servidor (ALL ou localhost) e com qual usuário o comando será executado (root, por exemplo);
    • Por exemplo, é possível limitar os comandos apenas para a máquina local, no caso abaixo, todos os usuários do grupo users, podem desligar o computador apenas do computador local:
  • Coluna 3: especifica qual o comando será executado.
    • No exemplo abaixo, todos os usuários do grupo users, podem montar/desmontar a unidade de CD-ROM

Sempre evite liberar acesso de root para um usuário comum. Portanto, se necessário estude as ferramentas disponíveis para atribuir permissões e execuções específicas, limitando cada perfil.


Conclusão

Vimos nesta sessão, a importância da separação de privilégios em um sistema e a real necessidades da aplicação de correção de falhas de segurança.

É possível unir o útil ao agradável.

Se unir as sintaxes de verificação e atualizações de segurança, por exemplo, ao recurso de atribuição de permissões através do comando “sudo”, qualquer usuário poderá manter o sistema sempre atualizado, não dependendo necessariamente da senha do usuário root. É claro, que fica a critério de cada administrador do sistema criar suas próprias políticas.

Na última parte deste artigo, veremos um pouco mais sobre como proteger o sistema contra malwares, instalando desde antivírus até softwares de proteção de tráfego.


Viu algum erro ou gostaria de adicionar alguma sugestão a essa ou outra matéria? Colabore, clique aqui.


Fontes

Livro:

  • SILVA,Gleydson Mazioli. Guia Foca GNU/Linux, do Iniciante ao Avançado, Brasil, 2010.

Internet:

Andre H O Santos

Pentester, Especialista em Segurança de Redes e Testes de Invasão, Programador, Consultor e Professor de T.I.. Geek Inveterado, Apaixonado por Segurança da Informação e Louco por GNU/Linux. Dedica grande parte do seu tempo para criar soluções que ajudem dezenas de milhares de pessoas com dicas e artigos em Tecnologia e Segurança da Informação. Possui algumas Certificações em Ethical Hacking, Cabling System, Linux e Administração de Redes.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

18 − seis =