sábado, 20 de abril de 2024

Como usar a autenticação de dois fatores com Ubuntu

Normalmente conhecida MFA (autenticação multifator), a autenticação de 2 fatores fornece uma camada extra de segurança que exige que os usuários forneçam certos detalhes, como códigos ou OTP (senha de uso único) antes ou depois da autenticação com o nome de usuário e senha usuais. 

Neste post vamos mostrar como você pode usar a autenticação de dois fatores no login do Ubuntu utilizando uma MFA do Google.


Primerio passo: Instalar o pacote PAM do Google

Precisamos instalar o pacote Google PAM (Pluggable Authentication Module) que é um software que acrescenta uma camada de autenticação na plataforma Linux. Este pacote está disponível no repositório Ubuntu, portanto podemos utilizar o comando apt para instalá-lo da seguinte forma:

$ sudo apt install libpam-google-authenticator


Se solicitado, pressione 'Y' + ENTER para continuar com a instalação.

Para continuar você irá precisar do Google Authenticator App instalado no seu smartphone.

Passo 2: Configurar o Google PAM no login do Ubuntu

A configuração do pacote Google PAM no Ubuntu é relativamente simples. Primeiro precisamos alterar o arquivo /etc/pam.d/common-auth adicionando na linha indicada na figura. Use o seu editor de texto favorito para acrescentar a linha indicada na figura abaixo:


Salve o arquivo e saia do editor.

No prompt, execute o comando abaixo para inicializar o PAM.

$ google-authenticator


Este comando irá apresentar algumas perguntas na tela do seu terminal. 
Primeiro, indique se deseja que os tokens de autenticação sejam baseados no tempo.

Os tokens de autenticação baseados em tempo expiram após um determinado período, que por padrão, é após 30 segundos. Depois deste período, um novo conjunto de tokens é gerado. Esses tokens são considerados mais seguros do que tokens não baseados em tempo e, portanto, digite 'y' para sim e pressione ENTER.

A seguir, um código QR será exibido no terminal conforme mostrado abaixo e logo abaixo dele, algumas informações que incluem:

  • Chave secreta
  • Código de verificação
  • Códigos de risco de emergência

Você precisa salvar essas informações para referência futura. Os códigos de emergência são extremamente úteis caso você perca seu dispositivo autenticador.

Inicie o aplicativo Google Authenticator no smartphone e selecione ‘Scan QR code’ para digitalizar o código QR apresentado. Após scanear o QR code, o app vai mostrar um código que você deve preencher no terminal. No meu caso foi "636280".


Depois de entrar com o codigo, mais duas perguntas são feitas, como indicado na figura acima.

Selecione 'y' para atualizar o arquivo do autenticador Google em sua pasta pessoal e restrinja o login a apenas um log a cada 30 segundos para evitar ataques que possam surgir devido a ataques man-in-the-middle. Portanto selecione 'y' também para esta opção.


No próximo prompt (mostrado na figura acima), selecione 'n' para proibir a extensão da duração que aborda a diferença de tempo entre o servidor e o cliente. Esta é a opção mais segura, a menos que você esteja enfrentando desafios de má sincronização de horário.Caso contrário, você pode setar como "y" para permitir alguma defasagem de tempo.

Finalmente, responda a última pergunta sobre a habilite a limitação de taxa para apenas 3 tentativas de login.

Neste ponto, a instalação e configuração do recurso de 2FA está concluída. Se você tanter executar qualquer comando sudo, será solicitado um código de verificação que pode ser obtido no aplicativo Google Authenticator. O login na tela também é afetado. Além do nome de usuário e senha, agora aparece um requisição adicional (mostrada abaixo) que deve ser preenchida com o código do app.



sexta-feira, 22 de março de 2024

Permitir acesso via Remote Desktop a um guest KVM/qemu em uma rede privada

Eu tenho algumas VMs em meu pequeno cluster KVM. Estas VMs estão interligadas via uma rede privada com NAT, isto é, as podem falar entre si e para acessar a Internet o KVM fornece a elas um gateway. Contudo da minha rede local, eu não consigo acessá-las.

O KVM me oferece algumas opções:

  1. Converter a rede privada em uma rede privada roteável e assim acessar as VMs que desejo;
  2. Usar o iptables no host e criar encaminhamentos para os IPs privados;
  3. Usar vnc para acessar as máquinas;
  4. Usar rdp para acessar as VMs.
Neste post vou mostrar como fazer a quarta opção.
O primeiro passo é habilitar o RDP no seu computador.

Se ele for um Ubuntu (mais novo) o processo é relativamente simples. Abra a janela de configurações (Settings), selecione a opção de compartilhamento (sharing) na lista à esquerda, indica na figura abaixo como (1).

Você precisa ativar o compartilhamento (2) e então selecionar a opção de acesso remoto (3). Com isto uma tela semelhante a mostrada na image abaixo será mostrada. Selecionando (4), você permite que um cliente remoto (utilizando as credenciais em 6) possa ver o conteúdo da tela. Para que ele possa interagir com a tela, é necessário ativar também a opção (5).

Pronto. Sua estação está com RDP ativado.

Agora você precisa alterar o domínio XML da VM que você ativou o RDP.
Você pode fazer isto utilizando o comando 

sudo virsh edit <nome da vm>
ou se possuir o programa virt-manager instalado, fazer a alteração utilizando a interface gráfica.

Vou mostrar a segunda opção, contudo as linhas a serem inseridas são as mesmas via virsh edit.
Como você vai editar o XML é preciso habilitar esta opção no virt-manager, pois por dafault ela fica desabilitada para evitar que cometamos algum erro sem querer. Recomendo que depois da alteração você desabilite a edição novamente.

Selecione a opção de preferencias no menu (como indicado abaixo) e na tela de preferência habilite a edição.



Selecione a VM e clique em mostrar detalhes do hardware virtual (botão em azul com "i" no toolbar).
Note que à direita existem duas abas. Vamos editar diretamente na aba XML.

A primeira coisa a fazer é acrescentar uma definição de esquema ao domínio (XML namespace).
A linha original é:

<domain type='kvm'>

e vamos trocá-la para:


<domain xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' type='kvm'>


IMPORTANTE: Isto não acrescenta nenhum risco de segurança ao seu ambiente. A única diferença é que agora novas tags (que pertencem ao qemu) podem ser inseridas na configuração.

Acrescentamos agora ao final do arquivo de configuração as linhas que permitem o redirecionamento das portas


<qemu:commandline>
    <qemu:arg value='-netdev'/>
    <qemu:arg value='user,id=mynet.0,net=10.0.10.0/24,hostfwd=tcp::22222-:22,hostfwd=tcp::3389-:3389'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='e1000,netdev=mynet.0'/>
  </qemu:commandline>

Estas linhas fazem dois redirecionamentos:

  1. a porta SSH (22) da VM é redirecionada para a porta 22222 do host
  2. a porta RDP (3389) da VM é redirecionada para a porta 3389 do host

Assim se o host (computador onde as VMs estão rodando) tem o endereço 192.168.10.10, você pode acessar a VM usando

Perceba que a configuração de rede da VM não é importante. Por exemplo, neste caso a VM em questão tem a seguinte configuração:


Outra abordagem

Pode ser o caso que ao tentar fazer as alterações da forma indicada acima o virsh não aceite as alterações. Ao tentar adicionar o namespace na tag de dominio, quando o xml é gravado, o namespace não é inserido.
Neste caso, mantive a tag original do domínio, isto é,

<domain type='kvm'>


e acrescentei as linhas finais com a definição do esquema na tag de commandline

<commandline xmlns="http://libvirt.org/schemas/domain/qemu/1.0">
   <arg value='-netdev'/>
   <arg value='user,id=mynet.0,net=10.0.10.0/24,hostfwd=tcp::22222-:22,hostfwd=tcp::3389-:3389'/>
   <arg value='-device'/>
   <arg value='e1000,netdev=mynet.0'/>
 </commandline>

Ao tentar gravar desta forma, funcionou.


quarta-feira, 6 de março de 2024

Como converter PDF em imagem

Uma opção para você que está utilizando Ubuntu (ou equivalente) é usar o pdftoppm que é uma ferramenta do pacote poppler-utils para converter um PDF em PNG:

Para instalar basta

$ sudo apt install poppler-utils


Para converter o arquivo

Considere que você tem um arquivo pdf chamado arquivo_entrada.pdf.

O comando abaixo vai extrair as páginas como imagens png.

$ pdftoppm arquivo_entrada.pdf arquivo_saida -png

Cada página do PDF irá gerar um arquivo de saída, usando o formato arquivo_saida-xx.png, sendo xx o número correspondente ao índice da página extraída.

Observe que a extensão .png é anexado automaticamente ao nome da saída, portanto não há necessidade de incluir a extensão em arquivo_saida

Para converter uma única página

Podemos extrair uma única página ou um intervalo de páginas do arquivo PDF

$ pdftoppm arquivo_entrada.pdf arquivo_saida -png -f {página} -singlefile

Altere {página} para o número da página desejada. 

O arquivo é indexado em 1, portanto a primeira página é extraída com -f 1.

Além disso, -singlefile remove o sufixo -01 do nome do arquivo de saída. Isto é interessante neste caso já que a saída é tem apenas um arquivo.


Se quiser extrair um intervalo de páginas, você deve especificar um número para o parâmetro -l (última página), portanto, o exemplo abaixo iria extrair as páginas de 1 a 30 do arquivo PDF:

$ pdftoppm arquivo_entrada.pdf arquivo_saida -png -f 1 -l 30

Especificando a resolução da imagem convertida

A resolução padrão para este comando é 150 DPI. 

Para aumentar a resolução do PDF convertido, adicione as opções -rx {resolução} e -ry {resolução}. Por exemplo, o comando abaixo extrai imagens com resoluções 300x300 dpi:

$ pdftoppm arquivo_entrada.pdf arquivo_saida -png -rx 300 -ry 300

quinta-feira, 25 de janeiro de 2024

Desabilitar o wpa_supplicant no Ubuntu

wpa_supplicant é uma implementação de software livre de um programa de acesso Wi-Fi (IEEE 802.11i) para Linux. Ele também implementa a série de protocolos de segurança WPA bem como outros  protocolos de segurança de rede sem fio mais antigos.

Contudo, o seu computador (e principalmente servidor) não tenha uma placa de rede sem fio, mas o Ubuntu inicia este processo automaticamente. Abaixo você pode ver um exemplo que lista o processo rodando.
 

$ ps ax | grep wpa_supplicant | grep -v grep

10806 ?        Ss     6:11 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

No Ubuntu (20.04/22.04), você pode desabilitar o wpa_supplicant usando os dois comandos abaixo:
$ sudo systemctl stop wpa_supplicant
$ sudo systemctl disable wpa_supplicant

O primeiro comando para o processo enquanto o segundo impede que o processo inicie automaticamente durante a inicialização do Ubuntu.

sexta-feira, 22 de setembro de 2023

Como instalar o docker e o docker-composer no Ubuntu 20.04

Para realizar o processo de instalação no Ubuntu 20.04, devemos executar as seguintes etapas para instalar o Docker e o Docker Compose.

Começe atualizando o índice de pacote de apt e instalando alguns pacotes básicos:


sudo apt -y update

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common


A seguir precisaremos adicionar a chave GPG do docker no sistema.

Utilizamos o seguinte comando curl para fazer o download a chave e a seguir fazemos o registro do repositório Docker na lista de fontes do apt:


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"


Faça novamente o update do índice de pacotes:

sudo apt -y update


Instalar o Docker

E agora podemos começar a instalação do docker.

sudo apt-get install -y docker-ce docker-ce-cli containerd.io


Vamos habilitar nosso usuário a executar comandos docker sem a necessidade de realizar `sudo`:

sudo usermod -aG docker $USER
newgrp docker

Para testar o funcionamento do docker, utilizamos o comando abaixo que carrega um container da internet que mostra uma mensagem informativa.

docker run hello-world



Note que o comando acima está sem `sudo`. Lembre-se que se você pulou os 2 passos com `usermod` e `newgrp`, o comando não será executado sem sudo em função de falta de permissão.

Troubleshooting # 1

Se você recebeu uma mensagem de erro similar a:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied


Tente alterar a seguinte permissão: 

sudo chmod 666 /var/run/docker.sock



Instalar o docker compose

Para instalar o Docker Compose, basta baixar o binário diretamente do repositório mantido pelo Docker no github usando o comando abaixo. Você precisa ativar a permissão de execução deste arquivo.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

PS: Você pode ver todos os binários disponíveis na página de Releases do repositório do docker.


Confirme que o applicativo Docker Compose está funcionando, solicitando sua versão:

docker-compose --version


terça-feira, 27 de junho de 2023

Como parar e desabilitar o resolvedor DNS stub

Se você está tendo problemas com um resolvedor de DNS stub ("stub DNS resolver") no seu computador com Ubuntu, explicamos neste post como lidar com esse problema. Este problema decorre do uso do stub, porém pode ser que você não precise dele, pois tem outro serviço DNS instalado.

Ao listar o conteudo de /etc/resolv/conf, você deve ter notado que seu servidor DNS está definido como 127.0.0.53. O problema é que, às vezes, ao executar serviços locais, por exemplo apt, o DNS stub será o primeiro a responder, quando queremos que a resposta seja fornecida pelo servidor DNS real (interno ou externo).

Para resolver este problema, basicamente desativamos este serviço, que no meu caso é desnecessário:

sudo service systemd-resolved disable
sudo service systemd-resolved stop

Uma alternativa para os comandos acima é:

sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved

Você pode precisar ainda alterar as configurações do NetworkManager. Abra o /etc/NetworkManager/NetworkManager.conf e localize a seção [main]. Você vai acrescentar (ou alterar) a linha:

dns=default


Depois de desativar o serviço, pode ser que seu computador pare de acessar a internet. Teste usando:

ping www.google.com

A mensagem de erro é algo semelhante com a linha mostrada abaixo:

ping: www.google.com: Falha temporária na resolução de nomes

Pode ser que você precise remover o link antigo do arquivo /etc/resolv.conf com

rm /etc/resolv.conf


Agora você pode editar /etc/resolv.conf e adicionar seus próprios servidores de nomes nele. Se o arquivo não for gravável ou não existir, você mesmo poderá adicioná-lo.

Edite o arquivo:

vi /etc/resolv.conf

e adicione uma linha semelhante a abaixo, porém trocando o endereço IP para o seu servidor de DNS.

nameserver 8.8.8.8  # DNS do google
options edns0 trust-ad

Você pode ter vários nameserver relacionados. Mais informações podem ser encontradas na página de ajuda deste arquivo.


Por fim, pode ser necessário reiniciar o NetworkManager com os comandos (um dos dois):

sudo service network-manager restart
sudo systemctl restart NetworkManager.service



quarta-feira, 10 de maio de 2023

Resetar permissões no Windows

Para redefinir as permissões NTFS no Windows 10 ou 11, faça o seguinte:


1- Abra um prompt de comando com permissão de administrador



2- Execute o seguinte comando para redefinir as permissões: 

a) para um arquivo

icacls "caminho completo para seu arquivo" /reset

b) para uma pasta:
icacls "caminho completo para a pasta" /reset

c) para uma pasta, seus arquivos e subpastas:
icacls "caminho completo para a pasta" /reset /t /c /l


Substitua os caminhos de exemplo pelos valores reais correspondentes ao seu sistema.



Configurando um Assistente de IA Local no Raspberry Pi

Este guia explica como configurar um Raspberry Pi 5 com Raspberry para funcionar como um assistente de programação baseado em Inteligência ...