Esse projeto é sobre configurar um servidor e utilização de máquinas virtuais.
Nota: 100/100 ✔️
Esse é o quarto projeto do curriculo da 42SP. Consiste em configurar um servidor utilizando conceitos básicos de segurança.
O sistema escolhido para configuração foi o Debian v11.3.0. Ele pode ser baixo por aqui.
É exigido no subject do projeto que ao final da instalação inicial o formato do sistema seja como o da imagem abaixo:
O ponto principal aqui é que o sistema utilize LVM como formato de disco. Para fazer essa verificação basta utilizar o comando: lsblk
.
O LVM é um gerenciador de volumes lógicos. É um programa que já vem instalado no Debian, e que por sinal durante a instalação do Debian ele já entra em ação para criar as partições mínimas do seu HD.
O LVM permite que seja feito gerenciamento de disco sem que seja necessario reinstalar o sistema. Você pode com ele definir a sua vontade a quantidade de memoria que sera utilizada por cada LV.
Como visto na figura acima, para se configurar discos com o LVM é preciso entender algumas camadas.
-
Physical Drivers: Esses são os discos fisicos que você tem instalado na sua maquina.
-
Partitions: Essas são as partições dos seus discos no sistema.
-
Physical Volumes: Os physical volumes marcam todas as partições aptas a utilizar o LVM.
-
Volume Group: Aqui podemos juntar todos os volumes fisicos em uma grande storage pull. Dessa forma conseguimos unir o tamanho dos discos para utilizar da melhor forma.
-
Logical Volumes: Aqui nós podemos criar nossos lv até estourar o tamanho da storage pull.
-
File System: Com o logical volume definido podemos formatar com o sistema de arquivo que precisarmos.
Sudo é um programa de controle. Ele dá poderes de root ao usuario logado, permitindo que quando necessario esse usuario possa executar comandos restritos ao root.
É um programa importante pois, por regra geral não queremos estar quase nunca logados como root na máquina. Por ter poderes ilimitados é possivel gerar problemas como excluir algum arquivo do sistema estando logando como root.
No entanto as vezes mesmo usuario comum precisamos executar programas e acessar pastas restritas ao root. O comando Sudo permite que isso seja feito de maneira facil e segura.
Para instalar o sudo basta executar o comando:
sudo apt-get install sudo
Basicamente ao ser instalado é criado um grupo sudo no seu sistema. Todos os usuarios que estivem nesse grupo podem executar os comandos como sudo.
Para poder especificar regras para o comando sudo é preciso modificar o arquivo /etc/sudoers
. Para modifica-lo de forma segura é necessario usar o comando:
visudo
Nesse projeto as regras aplicadas ao Sudo foram:
- Defaults passwd_tries=3
- Defaults badpass_message="Mensagem escolhida"
- Defaults logfile="/var/log/sudo.log"
- Defaults requiretty
De forma geral um firewall controla o trafego de dados na rede do seu computador. Ele impede que dados provenientes de outras redes seja da internet ou outros computadores danifiquem o seu sistema.
Um firewal pode existir na forma de software ou hardware. Firewals em forma de software geralmente já vem instalado em sistemas para apalhos de uso pessoa.
Nesse projeto foi utilizado o UFW para gerenciar o firewall. No Debian ele precisa ser instalado com o comando:
sudo apt-get install ufw
Alguns comandos basicos e uteis do UFW para configurar algumas politicas de segurança basicas são:
sudo ufw status #Verifica se o UFW esta ativo
sudo ufw enable #Ativa o UFW
sudo ufw disable #Desativa o UFW
sudo ufw allow <porta ou serviço para permitir>
sudo ufw deny <porta ou serviço para negar>
SSH (Secure Shell) é um protocolo de comunicação que permite conexão remote entre computadores.
Para poder utilizar o SSH você pode instalar os pacotes openssh-server e openssh-client.
sudo apt-get install openssh-server openssh-client
Para configurar as regras de conexão via SSH é preciso editar o arquivo /etc/ssh/sshd_config
.
Nesse projeto adicionamos duas regras para o SSH:
- Permitir conexões apenas pela porta 4242
- Bloquear acesso pelo usuario Root.
Para se conectar a um computador pode ser utilizado o comando:
ssh [usuario]@[ip] -p [porta]
- How to install and enable ssh server on debian
- Transferencia de arquivos com SSH
- Beginners Guide To SSH
- SSH Crash Course
Nesse projeto tambem foi necessario implementar uma politica de senhas para garantir a segurança do sistema. Essa politica foi aplicada em duas partes.
Primeiro foi configurando as exigencians de expiração de senhas. Isso foi feito configurando o arquivo /etc/login.defs
. Foram aplicadas as seguintes regras:
- PASS_MAX_DAYS: Máximo de dias para senha expirar = 30
- PASS_MIN_DAYS: Mínimo de dias necessarios para poder realizar outra alteração de senha = 2
- PASS_WARN_AGE: Dias para aviso de expiração de senha = 7
O segundo passo é definir as regraças de senha para os usuarios do sistema. Isso foi feito com a ajuda do pacote pwquality
.
sudo apt install libpam-pwquality
Com o pacote instalado as configurações devem ser feitas no arquivo /etc/pam.d/common-password
.
- retry=3: Número de tentativas para a senha ser alterada
- minlen: Mínimo de caracteres para senha = 10
- dcredit Mínimo de um digito númerico = -1
- ucredit Mínimo de uma letra maiuscula = -1
- lcredit Mínimo de uma letra minuscula = -1
- maxrepeat Máximo de caracteres repetidos = 3
- reject_username Não permitir senhas com o nome do usuario
- difok Senha deve ter pelo menos 7 caracteres que não fazem parte da antiga.
- enforce_for_root Aplica as restrições mesmo quando o root estiver configurando a senha.
Para aplicar as regras de expiração a usuarios já existens podem ser usados os comandos abaixo:
- sudo chage -M 30 [usuario]: Altera a data de expiração da senha para 30 dias
- sudo chage -m 2 [usuario]: Altera o numero minimo de dias para alterar a senha
- sudo chage -W 7 [usuario]: Altera o numero de dias para aviso de expiração da senha
- sudo chage -l [usuario]: Mostra as configurações de senha do usuario
Hostname é o nome dado ao servidor durante a configuração inicial de instalação, aqui no caso foi dado guda-sil42 por exigencia do projeto. Para alterar essas informações existem diversos métodos.
Um deles é usando o comando abaixo:
sudo hostnamectl set-hostname <novo hostname>
Ou alterando os arquivos /etc/hostname
, /etc/hosts
e /proc/sys/kernel/hostname
.
A criação de usuarios e grupos são bem simples e de facil manipulação com comandos intuitivos.
sudo adduser <nome do usuario>
sudo addgroup <nome do grupo>
sudo adduser <nome do usuario> <nome do grupo> # Adiciona o usuario um grupo
sudo passwd <nome do usuario> # Altera a senha do usuario
groups <nome do usuario> # Mostra os grupos do usuario
gpasswd -d <nome do usuario> <nome do grupo> # Remove o usuario do grupo