Experimente o Debian com o kernel do FreeBSD.

O Debian é uma comunidade aberta a diversos projetos interessantes.
Há, pelo menos, 2 projetos que oferecem o sistema operacional combinado a um kernel alternativo.
Já falei sobre o Debian rodando com o kernel GNU/Hurd, antes.
Desta vez, vou mostrar como baixar uma versão que roda sobre o kernel do FreeBSD.
A melhor maneira de testá-la é rodar uma das imagens prontas para o QEMU/KVM.

O sistema não é pesado e dá para você se divertir e ter uma idéia do seu funcionamento.

Neste post, vou analisar uma destas 3 opções:

  1. debian_squeeze_kfreebsd-amd64_standard.qcow2
    — uma opção mais antiga, sem o ambiente gráfico (imagem c/204 Mb).
  2. debian_wheezy_kfreebsd-amd64_desktop.qcow2
    — uma opção mais atual (Debian 7), com o ambiente gráfico (imagem c/1,7 Gb).
  3. debian_wheezy_kfreebsd-amd64_standard.qcow2
    — Debian 7, sem o ambiente gráfico (imagem c/210 Mb).

As imagens estão comprimidas e se expandem até 25 GiB, na medida do necessário.
Os exemplos, que seguem, são baseados na 3a opção.
Se preferir outra, basta adaptá-los ao seu caso.
Use o comando wget para fazer o download ou baixe direto do site (links no final):


wget https://people.debian.org/~aurel32/qemu/kfreebsd-amd64/debian_wheezy_kfreebsd-amd64_standard.qcow2

Feito o download, rode o sistema a partir do QEMU:


qemu-system-x86_64 -hda debian_wheezy_kfreebsd-amd64_desktop.qcow2

Bem simples, não é?
Para poder usar melhor o sistema, use as seguintes informações:

  • A conta root usa a senha “root” (sem as aspas).
  • A conta user usa a senha “user”.

Para obter um melhor desempenho, ative o KVM:


qemu-system-x86_64 -enable-kvm -hda debian_wheezy_kfreebsd-amd64_desktop.qcow2

Para suprimir o modo gráfico, coloque o display no modo curses:


qemu-system-x86_64 -enable-kvm -display curses -hda debian_wheezy_kfreebsd-amd64_desktop.qcow2

Neste caso, pode ser necessário aumentar um pouco (ou maximizar) a janela do seu terminal, para conseguir ver toda a área de trabalho.
Como padrão, a imagem roda com 128 MiB de memória RAM.
Use a opção ‘-m’ do QEMU para ampliar este valor:


qemu-system-x86_64 -m 512 -enable-kvm -display curses -hda debian_wheezy_kfreebsd-amd64_desktop.qcow2


Se você optou por uma das imagens com ambiente gráfico, acima, vai precisar usar uma quantidade maior de memória RAM, claro.
Neste caso, as imagens usam lightDM com o XFCE e 1GiB de memória RAM deve ser mais do que o suficiente.
Se quiser trocar este ambiente, pelo original do Debian (GDM e GNOME), dê os seguintes comandos, dentro da máquina virtual (como superusuário):


update-alternatives --auto x-session-manager

echo /usr/sbin/gdm3 > /etc/X11/default-display-manager

Vale a pena instalar e usar o Debian com o kernel FreeBSD?

Diferente do Hurd, o kernel do FreeBSD é um kernel maduro e bem testado.
Aqui é possível usar todo o ambiente gráfico e usufruir do universo dos repositórios de softwares do Debian.
No lado do servidor, a opção é uma alternativa para quem deseja ficar longe do systemd e/ou evitar as eventuais vulnerabilidades do kernel Linux.
Há, ainda, o glamour de estar mais próximo de executar um kernel semelhante ao usado pela Apple em seus dispositivos.
Do ponto de vista de quem vem do FreeBSD, esta opção “mantém um pé” lá e outro nos vastos repositórios de softwares Debian.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Referências

De onde baixei a versão analisada neste texto: https://people.debian.org/~aurel32/qemu/kfreebsd-amd64/.
Outras versões do Debian kfreebsd: http://jenkins.kfreebsd.eu/jenkins/view/cd/job/debian-cd_jessie-kfreebsd_kfreebsd-amd64/ws/build/.
Debian Mini .ISO (para instalar): http://cdn-fastly.deb.debian.org/debian/dists/jessie-kfreebsd-proposed-updates/main/installer-kfreebsd-amd64/current/images/netboot-10/.
Conheça o Debian GNU/Hurd: https://elias.praciano.com/2017/07/experimente-o-debian-com-o-kernel-gnuhurd-em-uma-maquina-virtual/.

Altere a porta de entrada do servidor SSH como medida de segurança

Mover para outro lugar a porta, a partir da qual o servidor SSH recebe conexões, é uma medida muito simples e eficiente para evitar ataques.
Qualquer cracker sabe que a porta padrão (default listening port) é a 22.

É a partir daí que um ataque de força bruta começa a contar.
Se o invasor não conseguir encontrar a porta de entrada, nos primeiros segundos da sua operação, ele pode desistir e passar para o próximo servidor da sua lista de vítimas.
Esta é uma das táticas de segurança por obscuridade. Em outras palavras, estamos apenas “mudando a porta de lugar” — não se trata de fortalecer a segurança, portanto.
Este método traz 2 problemas que convém levar em conta, antes de colocar em prática:

  1. se você esquecer onde colocou “a porta”, pode acabar trancado do lado de fora.
  2. certifique-se de usar uma porta que não esteja sendo usada por outro serviço ou daemon ou que já seja popularmente usado.

Se estes dois itens não forem problemáticos para você, prossiga com a configuração (que é muito simples).
Você pode obter uma lista de portas em uso (ou não) no sistema, dentro do arquivo ‘/etc/services’:


less /etc/services

Sugiro usar o nmap, se quiser obter uma relação mais completa, contudo.

Como editar o arquivo de configuração do servidor SSH

O procedimento trata de editar o arquivo de configuração do servidor SSH que costuma ficar em ‘/etc/ssh/’.
Use o seu editor favorito para abrir o arquivo ‘/etc/ssh/sshd_config’:


# comece com um backup:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo editor /etc/ssh/sshd_config

Localize a linha que define o ‘Port’ e mude o número para o que achar melhor.


Port 1234


Feito isto, grave o arquivo e saia.
Pode ser interessante anotar a nova porta usada em alguma folha de papel.
Para que as mudanças surtam efeito, reinicie o servidor SSH:


sudo service sshd restart

ou


sudo /etc/init.d/sshd restart

Seja cautelosa(o), agora.
Não desautentique da máquina, simplesmente, para testar.
Se houver problemas com os ajustes, você pode ficar trancado do lado de fora — como mencionei anteriormente.
O mais seguro é abrir um novo terminal para testar a conexão sob uma nova porta.
Se algo deu errado, copie de volta o arquivo de configuração, para verificar exatamente qual foi o problema.
Uma das possibilidades que podem atrapalhar que você consiga se autenticar via SSH, por outra porta, é a configuração do seu firewall.
Neste caso, cabe adequar a configuração do firewall aos ajustes que você fez ao sshd.
Depois disto, tente de novo.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Dicas e truques de configuração do SUDO para Linux e UNIX

Nos sistemas operacionais baseados no Linux ou no UNIX (MacOS, FreeBSD etc) há tarefas administrativas, que só podem ser executadas com privilégios de superusuário (root).
O comando sudo nasceu da necessidade do sysadmin delegar algumas destas tarefas a outros usuários do sistema — sem precisar expôr a própria senha.
captura de tela comando sudo
Usuários pertencentes ao grupo “sudo”, podem assumir privilégios superiores com o uso da própria senha — sem ter conhecimento da senha do root, portanto.
Quem usa o computador sozinho, pode fazer tudo como usuário comum. Eventualmente, pode “se investir de poderes especiais”, com o uso do sudo — e voltar à segurança de um usuário comum, logo em seguida.
Uma, dentre muitas tarefas comuns a todo usuário, por exemplo, é atualizar o sistema. O comando permite fazer isso, sem exigir que se autentique como root.
Na configuração padrão do sudo, usuários com acesso ao comando podem realizar as seguintes tarefas (entre outras):

  • Acessar dispositivos restritos do hardware.
  • Formatar e alterar sistemas de arquivos.
  • Instalar novos aplicativos e configurar áreas sensíveis do sistema.

Como configurar o comportamento do sudo no meu sistema

O arquivo de configuração do sudo é o /etc/sudoers. Contudo, as boas práticas de segurança, recomendam sempre usar o programa visudo para alterar este arquivo:


sudo visudo


Dentro do arquivo de configuração, há uma sessão com várias linhas. Cada uma delas começa com uma entrada Defaults.
Você pode alterar o comportamento do sudo:

  • editando uma destas linhas — removendo ou editando algum parâmetro ou, ainda, acrescentando um novo.
    Para acrescentar, vá até o final da linha e acrescente uma vírgula seguida do novo parâmetro desejado;
  • adicionando uma nova linha Defaults, seguida da tabulação e dos parâmetros de configuração que você deseja acrescentar.

Por ser muito usado no Linux, já escrevi alguns artigos sobre o sudo (veja a lista no final deste texto). Não esqueça também de dar uma olhada nas tags visudo e sudo, para obter mais informações sobre o uso da ferramenta.
sudo sudoers environment variables
Algumas pessoas, por questão de organização, preferem ter uma linha Defaults exclusiva para cada parâmetro de configuração.
Acompanhe as dicas, para entender melhor.

Edite corretamente o /etc/sudoers

Trata-se de uma dica de segurança.
O UNIX e o Linux são sistemas operacionais projetados para atender uma grande quantidade de demandas e usuários simultâneos.
O visudo bloqueia o acesso de outros usuários ao /etc/sudoers, enquanto você o estiver editando.
Portanto, use sempre o visudo para ajustar o sudo no seu sistema. Não edite o /etc/sudoers diretamente.
Além disso, o visudo faz uma análise do sudoers, logo depois da edição.
Se houver erros, ele avisa e permite que você volte para alterar e corrigir o arquivo.

Organize os Defaults

Como já disse, você pode adicionar vários parâmetros e valores por linha ou abrigar um único parâmetro por linha.
A escolha é sua.
A configuração, abaixo


Defaults        env_reset,timestamp_timeout=5,pwfeedback

tem o mesmo efeito desta


Defaults        env_reset
Defaults        timestamp_timeout=5
Defaults        pwfeedback

Eu gosto do segundo método de organizar os ajustes, pois ele permite adicionar um comentário (com ‘#’) ao final de cada linha.
A forma mais comum de usar a palavra-chave é assim: Defaults. Mas em sistemas mais complexos, com um grande número de usuários, em que o sysadmin deseja delegar especificamente e com abrangência, há outras formas de uso. Veja:

  • Defaults parameter, parameter_list — # os parâmetros desta configuração afetam todos os usuários autenticados no host.
  • Defaults@Host_List parameter, parameter_list # afeta todos os usuários logados no especificado em @Host_List.
  • Defaults:User_List parameter, parameter_list #afeta todos os usuários especificados na lista :User_List.
  • Defaults!Cmnd_List parameter, parameter_list #afeta os comandos especificados na lista !Cmnd_List.
  • Defaults>Runas_List parameter, parameter_list #afeta comandos listados, desde que executados por um usuário específico.

Como criar um arquivo de log do sudo

Como comportamento padrão, o sudo envia o log ou relatório sobre o que ocorreu durante o seu uso para o syslog(3).
Opcionalmente, você pode criar um arquivo para receber este relatório.
Adicione a seguinte linha:


Defaults        logfile="/var/log/sudo.log"

Se quiser que o seu arquivo de log contenha informações sobre o host e o ano relacionados às ações relatadas, use assim:


Defaults        log_host,log_year,logfile="/var/log/sudo.log"

Para poder ver o conteúdo do seu novo arquivo de log, use o sudo e o cat:


sudo cat /var/log/sudo.log

Jun 12 15:32:09 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/ls
Jun 12 15:32:43 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/usr/sbin/visudo
Jun 12 15:34:46 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/cat /var/log/sudo.log

Leia mais dicas e truques para usar com o sudo:

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Referências

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html.
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/.

Exemplos de loops no Bash

Mesmo não querendo se dedicar a aprender e entender melhor os meandros da linguagem de programação de scripts Bash, pode ser útil conhecer alguns de seus conceitos.
Saber criar loops é um destes conhecimentos básicos que vale a pena adquirir.
Um pequeno script pode ajudar a poupar uma enormidade de tempo, no dia a dia de qualquer usuário, de qualquer sistema operacional.
Se achar melhor, adicione esta página aos seus favoritos (Ctrl + D), para ter uma referência rápida no futuro. 😉

Os diferentes tipos de loops do Bash

Os loops (ou laços) são expressões presentes em todas (ou quase todas) as linguagens de programação. Além disso, podem se dividir em tipos diferentes.
No Bash, você pode usar for, while e until.
Veja em que casos cada um é mais indicado:

  • for — se você tem experiência com outras linguagens de programação, no Bash, o for é um pouco diferente da maioria.
    Basicamente é usado para te permitir iterar entre uma série de palavras dentro de uma string.
  • while — executa um pedaço de código, caso a expressão de controle seja verdadeira. Ele só irá parar quando ela for falsa — ou quando encontrar um break explícito no meio do código em execução.
  • until — muito semelhante ao while, exceto pelo fato de que o código é executado enquanto a expressão de controle é falsa.

Segue alguns exemplos simples, que você pode usar para compor ou construir um código mais sofisticado, para atender melhor às suas necessidades.

Exemplos de uso do for

Você pode experimentar este código diretamente na linha de comando do sistema, como no exemplo abaixo


for i in $( ls ); do
> echo item: $i
> done

… ou pode abrir um editor e escrever o código dentro dele e gravar com algum nome. O meu, vou gravar como exemplo-for.sh:


#!/bin/bash
for i in $( ls ); do
   echo item: $i
done

Explicando o código…

  • A primeira linha informa ao sistema que o arquivo deve ser executado com o programa /bin/bash.
  • Na segunda linha declaramos a variável i como repositório dos diferentes valores contidos em $( ls ).
  • A terceira linha expõe o valor atual de i.
  • Por fim, done informa que chegamos ao final do laço for e, se não houver mais nada a ser feito, o programa para por aqui — ou segue sendo executado.

Depois de gravado, execute-o com o bash


bash exemplo-for.sh

Experimente também este script, para colorir texto:


#!/bin/bash
for fg in {30..39}
do
    echo -e "\e["$fg"m apenas um texto colorido pelos caracteres de escape do BASH."
done

vim syntax color

Como criar um loop while no Bash

Veja um exemplo simples de laço while (enquanto), no Bash:


#!/bin/bash
contador=0
while [ $contador -lt 10 ];
do
    echo O valor atual do contador é: $contador
    let contador=contador+1
done

O argumento -lt pode ser abreviatura de less than ou lower than, que significame “menos que” ou “menor que”, em uma tradução livre.
Da mesma forma, usa-se -gt, como abreviatura de greater than, para “maior que”.

Exemplo de uso do until no Bash

Se eu fosse traduzir livremente a linha until [ $contador -lt 10 ]; no exemplo abaixo, eu diria “até que (until) a variável contador seja menor que 10…”
Experimente o código e veja o resultado:


#!/bin/bash
contador=30
until [ $contador -lt 10 ];
do
    echo O valor do meu contador é igual a $contador
    let contador-=1
done

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Personalize a mensagem de senha errada do sudo no seu sistema

O sudo permite customizar a mensagem exibida a cada vez que se erra na digitação da senha de autenticação.
Isto é feito através da inclusão ou edição do valor do parâmetro badpass_message=.

Siga o procedimento, abaixo, para criar uma mensagem personalizada de aviso de senha errada, para o sudo.
Abra o editor padrão de edição do sudoers:


sudo visudo

Em seguida vá até seção que tem os parâmetros Defaults.
Inclua mais um:


Defaults        badpass_message="Não posso deixar você fazer isso, Dave."

Eu usei uma frase do filme de Stanley Kubrick, 2001: Uma Odisseia no Espaço.


Leia mais dicas de configuração do comando sudo, clicando na tag visudo e/ou sudo.

A opção insults, no sudoers, se sobrepõe a badpass_message.
Mas você pode desativar qualquer parâmetro Defaults, inserindo um ‘#’ no começo da linha dele.
O bad pass msg acaba sendo uma alternativa para sistemas “chatos” que usam um sudo compilado sem suporte a insults.
Em tempo, saiba mais sobre como “ofender” as pessoas que erram a senha no sudo, neste post.
Divirta-se!