Autor: raulramos

  • Sistema de Ficheiros Linux

    Estrutura

    A seguinte ferramentas mostra o mapa da árvore de diretórios do Linux (Debian 10).

    raulramos@demo:~$ tree -d -L 1 /
     /
     |-- bin -> usr/bin
     |-- boot
     |-- dev
     |-- etc
     |-- home
     |-- lib -> usr/lib
     |-- lib32 -> usr/lib32
     |-- lib64 -> usr/lib64
     |-- libx32 -> usr/libx32
     |-- lost+found
     |-- media
     |-- mnt
     |-- opt
     |-- proc
     |-- root
     |-- run
     |-- sbin -> usr/sbin
     |-- srv
     |-- sys
     |-- tmp
     |-- usr
     `-- var
    
    22 directories
     raulramos@demo:~$ 

    Directórios

    /bin

    /bin é o diretório que contém binários, ou seja, alguns das aplicações e programas que podemos executar. Encontra o programa ls, bem como outras ferramentas básicas para criar e remover ficheiros e diretórios, movê-los, etc . Existem mais diretórios de bin noutras partes da árvore do sistema de ficheiros mencionados mais à frente.

    /boot

    O diretório /boot contém ficheiros necessários para iniciar o sistema. NÃO MEXER!. Uma má configuração num dos ficheiros, pode não ser capaz de iniciar o Linux e é difícil reparar. Por outro lado, não é necessário haver preocupação em destruir o sistema por acidente, pois é necessário ter privilégios de super utilizador para o fazer.
    É aqui onde está o kernel, na maior parte das distros; ficheiros usados pela uefi para arranque do kernel; configurações do bootloader;….

    /dev

    /dev contém ficheiros de dispositivos. Todos os dispositivos são referenciados por ficheiros. Muitos deles são criados no momento da inicialização dos systema ou mesmo em tempo real. Por exemplo, se ligar uma nova webcam ou um pendrive USB à máquina, vai aparecer um novo dispositivo automaticamente.

    /etc

    /etc é o diretório em que os nomes começam a ficar confusos. /etc recebe esse nome dos Unixes mais antigos e era literalmente “et cetera” porque era o local de despejo para os administradores de ficheiros do sistema que não tinham certeza onde colocar.

    Nos dias de hoje, seria mais apropriado dizer que etc significa “Tudo para configurar”, pois contém a maioria, se não todos os ficheiros de configuração do sistema. Por exemplo, os ficheiros que contêm o nome do seu sistema, os utilizadores e suas senhas, os nomes das máquinas na sua rede e quando e onde as partições nos discos rígidos devem ser montadas, estão todos aqui. Se for novo no Linux, pode ser melhor não se interessar muito nesta diretório até entender melhor como as coisas funcionam.

    /home

    /home é onde encontra os diretórios pessoais dos utilizadores. São guardados documentos, configuraçãoes, aplicações, etc.. que pertencem exclusivamente ao utilizador. Em /home também pode existir a pasta /guest, um utilizador com permissões mais limitadas que um normal, se tudo bem configurado.

    /lib

    /lib é onde podemos encontrar as bibliotecas. Bibliotecas são ficheiros que contêm código que as aplicações podem usar e partilhar para, por exemplo, desenhar janelas na área de trabalho com a de abrir ou guardar ficheiros, controlar periféricos ou enviar ficheiros para o disco rígido.
    No Debian 10 o diretório /lib é um symbolic link para o diretório /usr/lib.

    /media

    O diretório /media é onde o armazenamento externo é montado automaticamente quando é ligado. Ao contrário da maioria dos outros itens desta lista, o diretório /media não vem da década de 1970, porque a inserção e detecção de armazenamento (pen drives, discos rígidos USB, cartões SD, SSDs externos, etc.) enquanto o computador está a funcionar, é relativamente recente.

    /mnt

    O diretório /mnt, é um pouco remanescente dos dias passados. É aqui que podemos montar manualmente dispositivos ou partições de armazenamento. Atualmente, não é usado com frequência e quando usado é de forma temporária.

    /opt 

    O diretório /opt geralmente é onde o software que é compilado (software construído a partir do código-fonte e que não é instalado a partir dos repositórios de distribuição) é criado. As aplicações ficam no diretório /opt/bin e as bibliotecas no diretório /opt/lib. Também é aqui que ficam algumas aplicações, de terceiros, instaladas.

    /proc

    /proc, como /dev, é um diretório virtual. Contém informações sobre o computador, como CPU e o kernel que o sistema Linux está a executar. Assim como no /dev, os ficheiros e diretórios são gerados quando o computador é iniciado ou em tempo real, enquanto o sistema está a ser executado e determinados parâmetros mudam.

    /root 

    /root é o diretório inicial do super utilizador (também conhecido como “Administrador”) do sistema. Não confundir com o diretório root ( / ).
    Geralmente o /root é chamado diretório inicial do utilizador root. É aqui que são guardadas as configurações das aplicações quando iniciamos a sessão com root ( sudo su - ).

    /run

    /run é outro diretório novo. Os processos do sistema utilizam-no para armazenar dados temporários por razões nefastas. Essa é uma pastas para não mexer.

    /sbin

    /sbin é semelhante a /bin, mas contém aplicações que somente o super utilizador as usa (daí os iniciais). Pode iniciar essas aplicações com o comando sudo que concede temporariamente poderes de super utilizador em muitas distribuições. /sbin normalmente contém ferramentas que podem instalar, excluir e formatar itens. Como podemos verificar, algumas dessas instruções são letais se usadas de maneira inadequada, usar com precaução.

    /usr

    O diretório /usr (Unix System Resources) era onde os diretórios pessoais, e não só, dos utilizadores eram originalmente mantidos nos primeiros dias do UNIX. No entanto, agora o /home é onde os utilizadores guardam as “tralhas”, como vimos acima. Hoje em dia, /usr contém uma grande quantidade de diretórios que, por sua vez, contêm aplicativos, bibliotecas, documentação, papéis de parede, ícones e uma longa lista de outras coisas que precisam ser compartilhadas por aplicações e serviços.
    Também encontrará os diretórios bin, sbin e lib em /usr. Qual é a diferença? Não muita hoje em dia. Originalmente, o diretório /bin (na raiz) conteria comandos muito básicos, como ls, mv e rm; o tipo de comando que viria pré-instalado em todas as instalações UNIX/Linux, o mínimo necessário para executar e manter um sistema. /usr/bin, por outro lado, conteria coisas que os utilizadores instalariam e executariam para usar o sistema como estação de trabalho, coisas como processadores de texto, navegadores da web e outras aplicações.
    Mas muitas distribuições modernas do Linux apenas colocam tudo em /usr/bin e têm /bin apontam para /usr/bin.

    /srv

    Contém dados para serviços fornecidos pelo sistema.
    Contém dados específicos do sítio para serem atendidos pelo sistema em protocolos como ftp, rsync, www, cvs etc. Não vejo que seja usada como padrão dos serviços, geralmente ficam numa subpasta da pasta /var (/var/www, p. ex.).

    /sys

    /sys é outro diretório virtual como /proc e /dev e também contém informações de dispositivos ligados ao computador.
    Em alguns casos, também se pode manipular os dispositivos. P. ex., alterar o brilho do ecrã de um laptop modificando o valor armazenado em /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness (cada máquina, poderá terá um ficheiro diferente). Para alterar é necessário um super utilizador. O motivo é que, como em muitos outros diretórios virtuais, mexer com o conteúdo destes ficheiros pode causar problemas no sistema. NÃO MEXER até conhecer.

    /tmp

    /tmp contém ficheiros temporários, geralmente colocados pelas aplicações que estão a ser executadas. Os ficheiros e diretórios geralmente (nem sempre) contêm dados que uma aplicação não precisa de momento, mas pode precisar mais tarde.
    Também pode usar /tmp para armazenar ficheiros temporários – /tmp é um dos poucos diretórios pendurados na / com os quais pode interagir sem se tornar super utilizador.

    /var

    /var recebeu seu nome originalmente porque o conteúdo era considerado variável, na medida em que era alterado com freqüência. Hoje, é um pouco inadequado, porque existem muitos outros diretórios que também contêm dados que são alterados com frequência, especialmente os diretórios virtuais que vimos acima.

    Seja como for, /var contém itens como logs nos subdiretórios /var/log. Logs são ficheiros que registam eventos que acontecem no sistema. Se algo falhar no kernel, será registado num ficheiro em /var/log; se alguém tentar invadir o computador de fora, a firewall também registará a tentativa aqui. Também contém a “spools” para tarefas. Estas “tarefas” podem ser trabalhos que envia para uma impressora partilhada e ficam em lista de espera, porque outro trabalho está a ser impresso ou emails que estão a aguardar para ser entregue aos utilizadores no sistema.

    /lost+found

    Se for pedido ao fsck para reparar o sistema de ficheiros, vai transformar os ficheiros quase excluídos novamente em ficheiros. O problema é que o ficheiro teve um nome e um local no passado, mas essas informações não estão disponível. O fsck deposita o ficheiro num diretório específico, chamado de lost+found (depois da propriedade lost and found).

    Outros Diretórios

    O sistema pode ter mais diretórios que não foram mencionados acima. Um ex. /snap em sistemas que incorporam recentemente pacotes de snap como uma maneira de distribuir software. O diretório /snap contém todos os ficheiros e o software instalado a partir dos snaps.

  • SSH – Criar chave para acesso remoto

    Gerar uma chave Ed25519 para acesso remoto a um PC com servidor ssh.

    ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/[pasta/]id_da_chave -C "[email protected]"
    Copiar a chave
      ssh-copy-id -i ~/.ssh/[pasta/]id_da_chave utilizador@endereço 

    A chave pública é copiada para o ficheiro /home/$USER/.ssh/authorized_keys

    Testar a ligação: ssh -i ~/.ssh/[pasta/]id_da_chave utilizador@endereço

    Para usar só ligação remota com a chave (recomendado), no PC remoto com Debian: Alterar o ficheiro "/etc/ssh/sshd_config"

    Adicionar:

    PasswordAuthentication no

    Reiniciar o serviço ssh para que as alterações tenham efeito.

    sudo systemctl restart ssh

    Fonte: https://medium.com/risan/upgrade-your-ssh-key-to-ed25519-c6e8d60d3c54

  • UFW – Uncomplicated FireWall

    Introdução

    Para uma introdução consultar o artigo Firewall.

    UFW – Uncomplicated FireWall

    A ferramenta de configuração padrão da firewall para o Ubuntu é ufw. Desenvolvido para facilitar a configuração da firewall do iptables, o ufw fornece uma maneira fácil de criar uma firewall baseada em host IPv4 ou IPv6. Por padrão, o UFW está desativado.

    Gufw é uma GUI disponível como front-end.

    Sintaxe e exemplos básicos

    As regras padrão são aceitáveis para o utilizador.

    Quando o UFW for ativo, vai usar um conjunto de regras (perfis) padrão que devem ser aceitáveis para o utilizador doméstico mediano. Esse é o objetivo principal dos desenvolvedores do Ubuntu. Em resumo, todas as ‘entradas’ são rejeitadas, com algumas exceções para facilitar as coisas para os utilizadores domésticos.
    ( Procurar as exceções à data de edição )

    Ativar e desativar

    Ativar UFW

    sudo ufw enable

    Para verificar o status do UFW:

    sudo ufw status verbose

    A saída deve ser assim:

    utilizador@nomecomputador:~$ sudo ufw status verbose
    [sudo] password for youruser:
    Status: active
    Logging: on (low)
    Default: deny (incoming), allow (outgoing)
    New profiles: skip
    utilizador@nomecomputador:~$

    Observar que, por padrão, negar está a ser aplicado à entrada. Há exceções, que podem ser encontradas na informação que gera o proximo comando:

    sudo ufw show raw

    Também podemos ler os ficheiros de regras em /etc/ufw (os arquivos cujos nomes terminam em .rules).

    Desativar UFW

    Para desativar o ufw, usar: sudo ufw disable .

    Permitir e Negar (regras específicas)

    Allow (permitir)

    Sintaxe: sudo ufw allow <port>/[protocol]

    exemplo: para permitir pacotes TCP e UDP recebidos na porta 53

    sudo ufw allow 53

    exemplo: para permitir pacotes TCP recebidos na porta 53

    sudo ufw allow 53/tcp

    exemplo: para permitir pacotes udp recebidos na porta 53

    sudo ufw allow 53/udp

    Permitir IP específico

    Sintaxe: sudo ufw allow from <ip address>

    exemplo: Para permitir pacotes de 207.46.232.182:

    sudo ufw allow from 207.46.232.182

    Permitir por sub-rede

    sudo ufw allow from 192.168.1.0/24

    Permitir por porta e endereço IP específicos

    Sintaxe: sudo ufw allow from <target> to <destination> port <port number>

    exemplo: permitir que o endereço IP 192.168.0.4 aceda a porta 22 para todos os protocolos

    sudo ufw allow from 192.168.0.4 to any port 22

    Permitir por porta, endereço IP e protocolo específicos

    Sintaxe: sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>

    exemplo: permite que o endereço IP 192.168.0.4 aceda à porta 22 e usar TCP

    sudo ufw allow from 192.168.0.4 to any port 22 proto tcp

    Deny

    Em desenvolvimento

    Drop PING

    Nota: A segurança por obscurecimento pode trazer muito pouco benefício real nos scripts modernos dos crackes. Por padrão, o UFW permite solicitações de ping. Pode deixar as solicitações de ping (icmp) ativadas para ajudar a diagnosticar problemas de rede.

    Para desativar as solicitações de ping (icmp), precisa editar o /etc/ufw/before.rules e remover ou comentar as seguintes linhas:

    # ok icmp codes
    -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
    -A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
    -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
    -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
    -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

    ou mudar o “ACCEPT” para “DROP”. E fica:

    # Não ok icmp codes
    -A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
    -A ufw-before-input -p icmp --icmp-type source-quench -j DROP
    -A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
    -A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
    -A ufw-before-input -p icmp --icmp-type echo-request -j DROP

    Fonte: https://help.ubuntu.com/community/UFW

  • Firewall (sistemas Linux)

    Introdução

    A Firewall é um dispositivo que permite que várias redes comuniquem de acordo com uma política de segurança definida. São usadas quando há necessidade de redes de vários níveis de confiança possam comunicar. Por exemplo, uma firewall normalmente existe entre uma rede corporativa e uma rede pública como a Internet. Também pode ser usada dentro de uma rede privada para limitar o acesso a diferentes partes da rede. Sempre que haja diferentes níveis de confiança entre as diferentes partes de uma rede, um firewall pode e deve ser usada.

    Por convenção, algumas portas são usadas rotineiramente para tipos específicos de aplicações. Por exemplo, a porta 80 é geralmente usada para navegação insegura de páginas web e a porta 443 é usada para a navegação segura em páginas web.

    O tráfego para aplicações específicas pode ser permitido ou bloqueado “abrindo” ou “fechando” (isto é, filtrando) as portas designadas para um tipo específico de tráfego. Se a porta 80 estiver “fechada”, por exemplo, nenhuma navegação na Web (insegura) será possível.

    Os utilizadores podem configurar o firewall para permitir que certos tipos de tráfego de rede entrem e saiam de um sistema (por exemplo, tráfego SSH ou servidor da web). Isso é feito abrindo e fechando “portas” TCP e UDP no firewall. Além disso, os firewalls podem ser configurados para permitir ou restringir o acesso a endereços IP específicos (ou intervalos de endereços IP).

    O kernel do Linux inclui o subsistema netfilter, usado para manipular ou decidir o destino de tráfego de rede no ou através do seu computador. Todas as soluções modernas de firewall Linux usam esse sistema para filtragem de pacotes.

    O sistema de filtragem de pacotes do kernel seria pouco útil para utilizadores ou administradores sem uma interface de utilizador com a qual permite fazer a gestão. Este é o objetivo do iptables. Quando um pacote chega ao computador, ele é entregue ao subsistema netfilter para aceitação, manipulação ou rejeição, com base nas regras fornecidas a ele via iptables. Sendos assim, o iptables é o necessário e suficiente para gerir uma firewall (se estiver familiarizado com ele). Muitos front-ends estão disponíveis para simplificar a tarefa.

    Gerir a firewall

    iptables

    Iptables é a base de dados de regras da firewall e é a firewall real usada nos sistemas Linux. A interface tradicional para configurar o iptables nos sistemas Linux é o terminal da interface da linha de comandos. Os outros utilitários nesta seção simplificam a manipulação da base de dados iptables.

    UFW

    UFW (Uncomplicated FireWall) é um front-end para iptables e é particularmente adequado para firewalls baseados em host. O UFW foi desenvolvido especificamente para o Ubuntu (mas está disponível em outras distribuições) e também é configurado no terminal. O Gufw é um front-end gráfico da UFW e é recomendado para iniciantes. Foi introduzido no Ubuntu 8.04 LTS (Hardy Heron) e está disponível por padrão em todas as instalações do Ubuntu após o 8.04 LTS.

  • Debian 10 como servidor Time Machine

    Configurar o Debian 10 (buster) para atuar como um servidor Apple Time Machine:

    Instale pacotes necessários:

    sudo apt install netatalk avahi-daemon

    Editar o ficheiro de configuração netatalk:

    sudo nano /etc/netatalk/afp.conf

    Adicionar uma secção para o Time Machine:

    [Time Machine]
      path = /pastaDeBackup/TimeMachine
      time machine = yes
      spotlight = no

    Criar uma diretoria para atuar como unidade do Time Machine:

    sudo mkdir -p /pastaDeBackup/TimeMachine
    sudo chown nobody:nogroup /pastaDeBackup/TimeMachine
    sudo chmod 777 /pastaDeBackup/TimeMachine

    É necessário uma conta de utilizador no servidor. Para melhorar a segurança, criar um grupo “timemachine” adicionar os utilizadores a este grupo “usermod -a -G timemachine <utilizador>”.

    Fazer alteração nas permissões da pasta TimeMachine:

    sudo chown root:timemachine /pastaDeBackup/TimeMachine

    Iniciar netatalk:

    sudo systemctl restart netatalk

    No MacOs, abrir as configurações do Time Machine nas Preferências do Sistema. Ir a “Selecionar Disco … ” para escolher a unidade de backup do Time Machine.

  • PS3 em modo seguro (Safe Mode):

    1 – Com a TV desligada e a PS3 desligada, ligar apenas o cabo HDMI entre estes.

    2 – Ligar a TV e selecionar a entrada correta que está ligada à PS3.

    3 -Manter pressionado o botão de ligar/desligar da PS3 até ouvir 3 sons (bips).

    a. 1º bip – liga o sistema

    b. 2º bip – redefine a saída de vídeo

    c. 3º bip – desliga o sistema.

    Neste momento, a PS3 deve estar desligada. Caso contrário, repetir as etapas acima.

    4 -Pressionar e manter pressionado o botão ligar/desligar, novamente, até ouvir os seguintes bips:

    a . 1º bipe – liga o sistema

    b. Sinal sonoro duplo – coloca a PS3 em modo de segurança. Soltar o botão ligar/desligar, caso contrário o sistema será desligado no próximo bip.

    A esta altura, será mostrado um menu com 6 opções destacadas no ecrã. Caso contrário e se há a certeza que foram concluidas as etapas acima corretamente, entre em contato com a Sony e solicite assistência. Continue se aparecer o menu.

    5 – Selecionar “Redefinir sistema” ou algo do género. Deverá ser o #1 item do menu.

    6 – Após a reinicialização do sistema, no ecrã informa que detectou um dispositivo HDMI. Selecionar “Sim” para configurar a PS3 para a saída HDMI.

    7 – Após a saída HDMI ter sido configurada, no ecrã, é perguntado se queremos configurar a saída HDMI para obter as configurações ideais, selecionar “Sim” e a resolução do ecrã deve usar as configurações ideais.

    8 – O menu normal da PS3 deve aparecer neste momento e o problema deve ficar resolvido.

    Fonte: https://www.ifixit.com/Answers/View/15658/Why+doesnt+my+PS3+power+up

  • Comandos Linux mais usados

    cd change directory (mudar diretório).

    cd /

    cd ~

    lslist directory (lista diretório).

    ls -a – todos

    mkdirmake directory (cria diretoria).

    rmdir – remove directory (apaga diretoria). Apaga somente diretorias vazias. Usar rm -r <caminho para a diretoria> para apagar recursivamente diretorias e ficheiros dentro da pasta.

    cp copy (copia pastas e ficheiros). Fazer cp [opções] fonte destino

    mv mover. Move pastas e ficheiro. Não só move, também renomeia mv <nome_ficheiro> <novo_nome_ficheiro>

    df -h – disk free (disco livre). -h human readable (legível por humanos).

    lsblk list block devices (lista dispositivos/partições(blocos) ).

    dddisk duplicator (duplicador de discos). Já fez tantos estragos que também é conhecido por disk destroyer. (USAR COM PRECAUÇÃO).

    dd if=<disco/partição/imagem/ fonte> of=<disco/partição/imagem/ destino> bz=<block size> . if – input file (ficheiro de entrada), of – ficheiro de saída, isto é, o destino da cópia.

    uname unix name (Nome Unix). Informação do Sistema Operativo. uname -a para mostrar all (todas).

    sudo – permite que os utilizadores executem programas com privilégios de segurança de outro utilizador; por padrão, o super utilizador.

    chown change ownership (mudar propriedade). chown -R <utilizador>:<grupo> <pasta>. -R é recursivo, pastas e sub-pastas.

    chmod change mode (mudar o modo). Muda o modo das permissões de pastas e ficheiros : OwnerGroupOthers.

    umask – sets up default file system flags (configura sinalizadores padrão do sistema de ficheiros)

    unzip <nome ficheiro>.zip. Descomprime ficheiros .zip

    tar – <nome_ficheiro>.tar.gz . Com as opções -xvf : descomprime (x), ver o que passa (v) e ficheiro(f). Fazer tar --help para mais informação.

    man – Manual. Fazer man <nome_comando> . O resultado é um manual mais elaborado que a ajuda <nome_comando> --help .

    lspci – list pci devices (Lista dispositivos pci). Podemos filtrar com grep , lspci | grep intel .

    lsusb – list usb lista dispositivos usb.

    (Artigo em desenvolvimento. Falta: reorganizar, adicionar, completar com exemplos)

  • Samba como controlador de domínio do Active Directory

    Pré-requisitos:

    • Debian 10 (buster) instalado.
    • É obrigatório que o IP seja estático: Adicionar no router um IP estático no servidor DHCP ou configurar o interface da máquina onde iremos instalar o controlador de domínio.
    • Escolher o nome de acordo com:  https://wiki.samba.org/index.php/Active_Directory_Naming_FAQ

    1 – Pré-instalação

    Verificar se o pacote resolvconf está instalado

    apt search resolvconf

    Verificar que nenhum processo do Samba está a correr:

    ps ax | egrep "samba|smbd|nmbd|winbindd"

    Adicionar a linha que se segue ao ficheiro “/etc/hosts” (Alterar o ip 10.0.0.1 de acordo com com o ip do próprio controlador de domínio):

    10.0.0.1     dc1.empresa.o.teu.dominio dc1

    Fica semelhante a :

    127.0.0.1       localhost
    10.0.0.1        dc1.empresa.o.teu.dominio dc1
    
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters

    2 – Instalação do samba no Debian 10:

    apt install acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils

    Remover o ficheiro /etc/samba/smb.conf que foi criado durante a instalação:

    rm /etc/samba/smb.conf
    (mais…)
  • Protejer o Nginx com o Let’s Encrypt no Debian 10

    Let’s Encrypt é uma autoridade de certificação (CA) que fornece uma maneira direta de obter e instalar certificados TLS / SSL gratuitos, possibilitando HTTPS criptografado em servidores da de páginas web.

    Pré-requisitos

    • Debian 10 server. (tutorial pendente)
    • Um nome de domínio registado. Podem fazê-lo em registrars como o dns.pt. (tutorial pendente)
    • Registos dos DNS configurados para o teu servidor. (tutorial pendente)
    • Nginx instalado. Segui a primeira parte da instalação no link a seguir (Instalar Linux, Nginx, MariaDB, PHP (LEMP stack) no Debian 10).

    1 – Instalar o Certbot

    Atualizar a lista de pacotes entes de qualquer instalação:

    sudo apt update

    Instalar o pacote python3-certbot-nginx, se tudo correr normal, os pacotes dependentes também serão instalados:

    sudo apt install python3-certbot-nginx

    Pergunta se queremos instalar o pacote e dependencias, clicamos em <enter>.

    O Certbot está pronto para ser usado, mas para configurar o SSL no Nginx, precisamos verificar algumas das configurações do Nginx.

    2 – Verificar configuraçães do Nginx

    Se o nginx estiver configurado como diz no tutorial colocado em pré-requisitos, devemos ter a configuração com caminho “/etc/nginx/sites-available/o.teu.dominio“. Para verificar e se necessário alterar, fazer:

    sudo nano /etc/nginx/sites-available/o.teu.dominio

    É apresentado o editor de ficheiros “nano” com o conteúdo do caminho colocado à frente do nome do editor.

    Encontrar a linha com a diretiva “server_name” e verificar se tem os domínios corrects que queremos usar como nomes comuns nos certificados.

    #...outras diretivas e programas antes
    server_name o.teu.dominio www.o.teu.dominio;
    #...outras diretivas e programas depois

    Se está correto só é necessário fechar com “ctrl+x” no teclado. Caso os domínios não forem os corretos, proceder com as alterações e guardar e fechar com “ctrl+x” carregar em “Y” ou “S” (depende da configuração da linguagem) e então carregar em <enter> para guardar no caminho apresentado.

    Testar a configuração:

    sudo nginx -t

    Se as mensagens apresentarem erros, fazer verificação do ficheiro de configuração. Caso apresente configuração com sucesso proceder ao reinício do serviço nginx:

    sudo systemctl reload nginx

    Com esta configuração o Certbot pode encontrar o bloco de servidor correto e atualizá-lo. Que será o próximo passo.

    Nota: a esta altura já deveríamos ter a firewall do servidor configurada para permitir tráfego seguro, porta 443. Caso não esteja, fazer as alterações necessárias que podem ver na ligação que está em pré.requisitos na instalação do nginx.

    3 – Obter o certificado SSL

    O Certbot tem a possibilidade de obter certificados através de plugins (software adicional). O plugin do nginx “--nginx” toma conta da configuração dos certificados no(s) servidor(s) que correspondem aos domínios colocados em argumento (“-d“) e faz o reinício do servidor, se necessário, como vamos poder ver a seguir:

    sudo certbot --nginx -d o.teu.dominio -d www.o.teu.dominio -d outros.dominios.se.necessario

    Se tivermos sucesso, o Certbot perguntará como desejamos definir as configurações de HTTPS.

    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
    new sites, or if you're confident your site works on HTTPS. You can undo this
    change by editing your web server's configuration.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

    Se estamos aqui é porque não estamos muito acostumados com a criação de certificados ou porque o queremos fazer de forma mais rápida. Sendo assim a resposta será a “2” e pressionamos <enter> . Se tudo funcionar bem iremos obter algo como:

    Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
    Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
    Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/o.teu.dominio
    nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations! You have successfully enabled https://o.teu.dominio,
    https://www.o.teu.dominio, and https://outros.dominios.se.necessario
    
    You should test your configuration at:
    https://www.ssllabs.com/ssltest/analyze.html?d=o.teu.dominio
    https://www.ssllabs.com/ssltest/analyze.html?d=www.o.teu.dominio
    https://www.ssllabs.com/ssltest/analyze.html?d=outros.dominios.se.necessario
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/o.teu.dominio/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/o.teu.dominio/privkey.pem
       Your cert will expire on 2020-03-05. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot again
       with the "certonly" option. To non-interactively renew *all* of
       your certificates, run "certbot renew"
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le

    Nota: Se o nosso servidor estiver com um certificado auto-assinado, pode aparecer uma aviso que será ignorado mas devemos comentá-las:

    sudo nano /etc/nginx/sites-available/o.teu.dominio

    Colocar um “#” antes das linhas “include snippets/auto-assinado.conf;”  e  “include snippets/ssl-params.conf;” e passam a ser ignoradas:

    #...    
    #include snippets/auto-assinado.conf;
    #include snippets/ssl-params.conf;
    #...

    Guardar e fechar com “ctrl+x” carregar em “Y” ou “S” (depende da configuração da linguagem) e carregar em <enter> para guardar no caminho apresentado. Testar com:

    sudo nginx -t

    Reiniciar o servidor:

    sudo systemctl reload nginx

    Neste momento já devemos ter uma página com certificado Let’s Encrypt válido por 90 días e com o programados de tarefas “cron” configurado para que seja feita a renovação. Para verificar , fazer:

    cat /etc/cron.d/certbot

    Até à próxima…

  • Criar um certificado SSL auto-assinado para Nginx no Debian 10

    TLS, ou transport layer security (segurança da camada de transporte), e seu antecessor SSL, que significa secure sockets layer (camada de soquetes seguros), são protocolos da internet usados ​​para encriptar o tráfego normal num invólucro protegido.

    Pré-requisitos:

    • Servidor Debian 10 “buster”, utilizador que não seja root mas que tenha privilégios de sudo. E para melhor segurança com uma Firewall ativa. No Debian 10 o pacote ufw vem instalado mas desativado.
    • O nginx instalado. Seguir a parte do tutorial em “Instalar Linux, Nginx, MariaDB, PHP (LEMP stack) no Debian 10“.
    (mais…)