Servidor LEMP: Parte 2 - Configurar o sistema de base
No primeiro artigo desta série vimos como registar um domínio, criar a máquina virtual e configurar a resolução de nomes.
Neste segundo artigo iremos ver como configurar o sistema de uma forma sólida e segura para receber os restantes componentes.
Nesta série:
- Parte 6 - Otimizar o desempenho do sistema
- Parte 7 - Instalar outras aplicações
Todos os comentários, dúvidas e sugestões poderão ser colocados no Fórum Servidor Debian.
Vamos então iniciar a configuração de base do servidor, mas primeiro partilhe este artigo:
Ganhe $10 para alojar a sua máquina virtual!
Use este link para se registar em DigitalOcean e ganhe $10 ou equivalente a dois meses de alojamento grátis para a sua máquina virtual!
O que vamos fazer
Nesta segunda parte iremos:
- Configurar o locale
- Atualizar o sistema
- Criar um utilizador
- Configurar e segurar o acesso remoto
- Criar memória virtual
- Configurar o relógio do sistema
- Configurar o envio de e-mails
- Definir alguns aliases
Aceder ao servidor remoto
No artigo anterior vimos que podemos aceder à nossa máquina virtual utilizando o nome de domínio:
fribeiro@laptop:~$ ssh root@servidordebian.org The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Sep 12 03:49:32 2015 from a98-76-54-321.some.place.pt root@servidordebian:~#
A partir deste momento estamos a trabalhar no servidor remoto com privilégios de root.
Configuração do locale
Sim, com um “e” no final. Segundo a Wikipedia, locale é o conjunto de informações que descrevem os formatos e mensagens de uma determinada língua e/ou país.
Para o nosso servidor iremos manter as definições en_US.UTF-8
.
root@servidordebian:~# echo 'LC_ALL="en_US.UTF-8"' >> /etc/environment root@servidordebian:~# echo 'LANGUAGE="en_US.UTF-8"' >> /etc/environment
Estas são as definições para o sistema comunicar connosco. As aplicações que ficarão alojadas no servidor terão as suas próprias definições para comunicar com o utilizador final.
NOTA: Poderá ter que fazer logout e novamente login para activar esta configuração.
Atualização do sistema
Uma vez que a imagem utilizada para criar a máquina virtual pode ter já algum tempo, a primeira coisa que iremos fazer é atualizar o sistema:
root@servidordebian:~# apt-get update && apt-get dist-upgrade && apt-get autoremove && apt-get clean
Este comando irá verificar a lista de pacotes disponíveis, actualizar todo o sistema, remover pacotes que não sejam necessários e limpar a cache do apt
. Confirmadas todas as opções, no final deveremos ter o sistema actualizado e pronto para a restante configuração.
Criação de um utilizador
Por questões de segurança, deve evitar-se o mais possível utilizar o login de root, pelo que é necessário criar um utilizador “normal”. A este utilizador iremos permitir que adquira os privilégios de root quando necessário através do comando sudo
. É também este utilizador que nos permitirá também gerir os conteúdos do site ou enviar e receber as notificações por email.
Em primeiro lugar criamos um utilizador:
root@servidordebian:~# adduser fribeiro Adding user `fribeiro` ... Adding new group `fribeiro` (1000) ... Adding new user `fribeiro` (1000) with group `fribeiro` ... Creating home directory `/home/fribeiro` ... Copying files from `/etc/skel` ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for fribeiro Enter the new value, or press ENTER for the default Full Name []: Fernando Ribeiro Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Definir utilizador 'sudoer'
Um sudoer
é um utilizador comum que tem permissão para executar o comando sudo
e obter temporariamente privilégios de root para realizar tarefas de administração do sistema.
Para utilizar o comando sudo
e necessário instalar o respetivo pacote:
root@servidordebian:~# apt-get install sudo
Para que um utilizador comum possa usar o comando sudo
e adquirir privilégios de root, deverá ser primeiro adicionado ao grupo sudo
:
root@servidordebian:~# usermod -a -G sudo fribeiro Done.
A partir deste momento, o utilizador pode executar comandos que requerem privilégios de root com o comando sudo
, sedo apenas necessário indicar a sua password.
fribeiro@servidordebian:~$ sudo apt-get update We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for fribeiro: # [...]
O utilizador poderá também verificar que comandos pode executar com sudo
:
fribeiro@servidordebian:~$ sudo -l Matching Defaults entries for fribeiro on servidordebian: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User fribeiro may run the following commands on servidordebian: (ALL : ALL) ALL
NOTA: É aconselhável terminar a sessão actual e aceder novamente so servidor mas, desta vez, com o login do utilizador que acabamos de criar. Sempre que necessário, iremos utilizar o comando sudo
para obter temporariamente privilégios de root.
Acesso remoto sem password
Uma vez que o nosso servidor será uma máquina virtual, só poderemos aceder remotamente, via ssh
. O modo mais fácil e mais seguro para aceder remotamente a um sistema é através de um par de chaves (uma pública e outra privada) que permitem o acesso sem necessidade de inserir a password.
Gerar par de chaves Pública/Privada
O par de chaves pode ser gerado com o comando ssh-keygen -t rsa
num terminal linux ou Mac OSX. No caso de utilizar um sistema Windows (a sério?!?!?) poderá utilizar o PuTTYgen ou, melhor ainda, o Cygwin.
fribeiro@laptop:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/fribeiro/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/fribeiro/.ssh/id_rsa. Your public key has been saved in /home/fribeiro/.ssh/id_rsa.pub. The key fingerprint is: c2:4e:ad:b5:47:a2:63:4c:27:de:d7:e7:30:6d:ce:37 fribeiro@laptop The key`s randomart image is: +--[ RSA 2048]----+ | | | | | | | .| | S o .oo| | + + . =..+| | . + . o Boo| | o . *oEo| | . ...o | +-----------------+
No final deste processo serão gerados 2 ficheiros na diretoria ~/.ssh
: a chave publica e a chave privada.
Ficheiro | Conteúdo |
id_rsa | A chave privada: esta chave deve permanecer no sistema local e NUNCA deverá ser partilhada ou divulgada. |
id_rsa.pub | A chave pública: esta chave deverá ser instalada nos sistemas remotos onde se pretende aceder sem password |
A parte privada da chave deverá ser protegida de olhares indiscretos:
fribeiro@laptop:~$ chmod 0600 ~/.ssh/id_rsa
Instalar chave pública
A chave pública deverá ser instalada no sistema remoto:
fribeiro@laptop:~$ ssh-copy-id fribeiro@servidordebian.org The authenticity of host `servidordebian.org (178.62.148.157)` can`t be established. RSA key fingerprint is c2:4e:ad:b5:47:a2:63:4c:27:de:d7:e7:30:6d:ce:37. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys fribeiro@servidordebian.org`s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh `[email protected]`" and check to make sure that only the key(s) you wanted were added.
Agora será possível aceder ao sistema remoto sem que seja necessário inserir password:
fribeiro@laptop:~$ ssh fribeiro@servidordebian.org The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Sep 12 07:39:33 2015 from a98-76-54-321.some.place.pt fribeiro@servidordebian:~$
Interditar o login de root
Dado que podemos aceder ao servidor sem necessidade de password graças ao par de chaves publica/privada, devemos desativar completamente os logins remotos de root. Para isso iremos editar o ficheiro /etc/ssh/sshd_config e substituir a opção PermitRootLogin yes
por PermitRootLogin no
:
- /etc/ssh/sshd_config
#[...] # Authentication: LoginGraceTime 120 # PermitRootLogin yes PermitRootLogin no StrictModes yes #[...]
Alteração da porta de acesso SSH
A porta 22
, utilizada normalmente para as comunicações ssh é um dos alvos favoritos para tentativas de entrada ilegítimas no servidor. Uma prática comum é alterar a porta por onde o nosso servidor aceita comunicações ssh. a Esta estratégia chama-se normalmente Segurança por obscurantismo.
Normalmente, qualquer número de porta entre 2015
e 65535
é válido, no entanto deveremos ter cuidado para não escolher uma porta já utilizada por outra aplicação. Em caso de dúvidas, consulte a Wikipedia: Lista de portas de protocolos.
O número de porta ssh pode ser alterado no ficheiro /etc/ssh/sshd_config:
- /etc/ssh/sshd_config
#[...] # What ports, IPs and protocols we listen for # Port 22 Port 4444 #[...]
Desativamos o acesso ssh pela tradicional porta 22
e abrimos apenas a porta 4444
. Reiniciamos o serviço ssh para activar a nova configuração:
fribeiro@servidordebian:~$ sudo systemctl restart ssh
A partir de agora só é possível aceder ao servidor por ssh pela porta 4444
:
fribeiro@laptop:~$ ssh -p 4444 fribeiro@servidordebian.org The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Sep 12 05:39:33 2015 from a98-76-54-321.some.place.pt fribeiro@servidordebian:~$
Criação de memória virtual
A máquina virtual que criamos é relativamente modesta e tem pouca memória disponível:
fribeiro@servidordebian:~$ free -h --si total used free shared buffers cached Mem: 506M 407M 99M 4.4M 9.7M 323M -/+ buffers/cache: 73M 432M Swap: 0B 0B 0B
Por isso iremos acrescentar um pouco mais de memória na forma de um ficheiro swap
. Assim, se a memória física
se esgotar o sistema começa a utilizar a memória swap
e nunca bloqueará pro falta de memória.
Primeiro criamos um ficheiro com cerca de 1Gb no disco que irá ser usado como memória swap.
fribeiro@servidordebian:~$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 2.37504 s, 452 MB/s
Este ficheiro deve ser protegido de modo a que só o roo o possa gerir.
fribeiro@servidordebian:~$ sudo chmod 0600 /swapfile
Em seguida o ficheiro é definido com espaço de memória virtual e activado.
fribeiro@servidordebian:~$ sudo mkswap /swapfile Setting up swapspace version 1, size = 1048572 KiB no label, UUID=5142cdf7-7be8-434d-8e74-3f8d83f56096 fribeiro@servidordebian:~$ sudo swapon /swapfile
A partir deste momento o sistema dispõe de 1Gb de memória virtual:
fribeiro@servidordebian:~$ free -h --si total used free shared buffers cached Mem: 506M 499M 6.5M 4.4M 9.8M 426M -/+ buffers/cache: 63M 442M Swap: 1.0G 0B 1.0G
Para tornar esta configuração permanente e para que a nossa memória virtual seja montada automaticamente a cada arranque do sistema devemos acrescentar a linha /swapfile swap swap defaults 0 0
ao ficheiro /etc/fstab.
fribeiro@servidordebian:~$ sudo sh -c 'echo "/swapfile swap swap defaults 0 0" >> /etc/fstab'
Configuração do fuso horário
A máquina virtual está configurada com o fuso horário da região geográfica onde está alojada, o que pode não ser o que nosso. Para alterar o fuso horário, podemos utilizar o comando dpkg-reconfigure tzdata
.
fribeiro@servidordebian::~$ sudo dpkg-reconfigure tzdata
Em primeiro ligar deveremos selecionar a região geográfica:
E depois a cidade:
Current default time zone: 'Europe/Lisbon' Local time is now: Sat Sep 12 09:51:07 WEST 2015. Universal Time is now: Sat Sep 12 08:51:07 UTC 2015.
Sincronização do relógio do sistema
Num sistema servidor é imperativo que o relógio tenha sempre a máxima precisão. Para garantir essa precisão iremos sincronizar o relógio do nosso sistema com os servidores NTP (Network Time Protocol) disponíveis na Internet.
fribeiro@servidordebian:~$ sudo apt-get install ntpdate
E agora é fácil acertar o relógio com o comando ntpdate
:
fribeiro@servidordebian:~$ sudo ntpdate -u pool.ntp.org 12 Sep 11:48:37 ntpdate[25154]: adjust time server 95.211.224.12 offset 0.495934 sec
Envio de emails
Para que o sistema nos envie informações ou alertas via e-mail é necessário configurar um MTA (Mail Transfer Agent ou agente de transporte de e-mail), como o Postfix.
fribeiro@servidordebian:~$ sudo apt-get install postfix heirloom-mailx
O instalador irá apresentar algumas das possibilidades de configuração do postfix:
Iremos optar pela configuração para um Internet Site
.
E por último indicamos o nome do domínio:
Por segurança, iremos configurar o postfix de modo a aceitar apenas ligações locais. Isto é conseguido alterando a opção inet_interfaces = all
para inet_interfaces = localhost
no ficheiro /etc/postfix/main.cf:
- /etc/postfix/main.cf
#[...] # inet_interfaces = all inet_interfaces = localhost
Reiniciamos o serviço postfix para activar a nova configuração:
fribeiro@servidordebian:~$ sudo systemctl restart postfix
Para termos a certeza que a configuração funciona vamos enviar uma mensagem de teste para o nosso e-mail:
fribeiro@servidordebian:~$ echo "Corpo da mensagem de teste" | mail -s "Assunto da mensagem de teste" pinguim.ribeiro@gmail.com
Se tudo correr bem, deverá ter recebido a mensagem no seu e-mail. Se não estiver na caixa de entrada, verifique se está na pasta “spam”.
Redirecionar e-mails
Os emails enviados para o administrador root deverão ser reencaminhados para um utilizador normal ou para o nosso endereço de e-mail. Faremos esse reencaminhamento criando novos aliases no ficheiro /etc/aliases:
- /etc/aliases
# /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: fribeiro fribeiro: [email protected]
Atualizamos a nova configuração:
fribeiro@servidordebian:~$ sudo newaliases
Graças às duas linhas que acrescentamos, os email para root são reencaminhados para o utilizador fribeiro e deste para o nosso endereço email favorito.
NOTA: Esta configuração é apenas para utilização do próprio servidor no futuro, não servindo para enviarmos ou recebermos emails!
Linha de comando: cores e aliases
Por fim vamos tornar a vida do administrador de sistemas um pouco mais colorida e segura. Crie ou edite o ficheiro ~/.bash_aliases e acrescente o seguinte conteúdo:
- ~/.bash_aliases
# File: ~/.bash_aliases # enable color support of ls alias ls='ls --color=auto' alias dir='dir --color=auto' alias vdir='vdir --color=auto' # more ls aliases alias ll='ls -lh' alias la='ls -A' alias l='ls -CF' # also add handy aliases alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' # some aliases to avoid mistakes: alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'
Isto irá criar vários aliases para qua as listagens sejam mais completas e a cores e para que alguns comandos potencialmente perigosos peçam confirmação antes de serem executados.
Para que a nova configuração tenha efeito, o bash
deverá reler o ficheiro:
fribeiro@servidordebian:~$ source ~/.bash_aliases
A seguir
Neste artigo vimos como configurar a base da nossa máquina virtual de forma sólida e segura. No próximo artigo iremos instalar os restantes componentes do conjunto LEMP: Nginx, MariaDB e PHP.