Ferramentas de Usuário

Ferramentas de Site


pt:blog:2015:09_18_servidor_na_cloud_parte_2_configurar_o_sistema_de_base

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:

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.

Referências

pt/blog/2015/09_18_servidor_na_cloud_parte_2_configurar_o_sistema_de_base.txt · Última modificação em: 2024-02-15 01:05 por 127.0.0.1