Skip to content

Project 4: born2beroot - Fourth project for the formation of software engineers at school 42 São Paulo.

Notifications You must be signed in to change notification settings

Vinicius-Santoro/42-formation-lvl1-4.born2beroot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 

Repository files navigation

42-formation-lvl1-4.born2beroot

Project 4: born2beroot - Fourth project for the formation of software engineers at school 42 São Paulo

  • This project consists of create my first machine in VirtualBox under specific instructions.

Como este projeto é voltado para administração de sistemas operacionais, decidi colocar tudo o que usei para desenvolvê-lo. Boa leitura :)

O que é uma Maquina virtual, como ela funciona e qual a utilidade

  • O que é: é um recurso de computação que usa software em vez de um computador físico para executar programas e implantar aplicativos.
  • Como funciona: funciona trabalhando por meio da tecnologia de virtualização. A virtualização usa software para simular hardware virtual que permite VMs para execução em uma única máquina host.
  • Qual a utilidade: as VMs podem ser implantadas para acomodar diferentes níveis de necessidades de poder de processamento, para executar software que requer um diferente sistema operacional ou para testar aplicativos em um ambiente seguro em área restrita.

Quais as diferenças entre o Debian e o CentOS

Os dois sistemas são de distribuição Linux, logo de código aberto, porém possuem algumas diferenças.

  • Debian: é considerado mais de classe pessoal/doméstica, já que é utilizado pela maioria da comunidade nesse ambiente.
  • CentOs: é considerado mais de classe empresarial, isso pelo fato de receber atualizações com pouca frequência, o que torna ele um sistema mais estável que o Debian.

Quais as diferenças entre apt e aptitude

Aptitude e apt-get são duas das ferramentas populares que tratam do gerenciamento de pacotes. Ambos são capazes de lidar com todos os tipos de atividades em pacotes, incluindo instalação, remoção, pesquisa, etc.

  • apt: é um gerenciador de pacotes padrão do debian, e é mais antigo.
  • aptitude: é um gerenciador de pacotes front-end para uma ferramenta de empacotamento avançada que adiciona uma interface de usuário à funcionalidade, permitindo ao usuário pesquisar interativamente por um pacote e instalá-lo ou removê-lo.

Ou seja, apt é raíz e o aptitude é mais amigável.

Quais as diferenças entre SELinux e AppArmor

  • SELinux: o Security-Enhanced Linux®, também conhecido como SELinux, é uma arquitetura de segurança para sistemas Linux® que permite que administradores tenham mais controle sobre quem pode acessar o sistema (Para o CentOS).
  • AppArmor: tem o mesmo funcionamento do SELinux, só que para o Debian.

O que é UFW?

É uma ferramenta de configuração de firewall, que é um dispositivo de segurança de rede que cuida do trafego de informações bloqueando ou permitindo passagens de dados dependendo das regras configuradas.

O que é SSH?

É um protocolo utilizado pra troca de dados entre cliente e servidor remoto de forma segura e dinâmica. Ele possibilita a comunicação criptografada através da rede permitindo acessar e fazer alterações em outro computador através do terminal.


0.Instalando o sudo:

Ordem Descrição Comando
Entrar como root su -
Instalar o sudo no sistema operacional apt install sudo
Dar permissão para o usuário usermod -aG sudo <seu usuário>
Criar um novo grupo groupadd user42
Adcionando o usuário ao novo grupo usermod -aG user42 <seu usuário>

1.Criando um particionamento encriptado:

Criando diretórios através do gerenciamento de volume lógico (LVM):

LVM.mp4

2.Configurando o sistema operacional com o firewall UFW (Uncomplicated Firewall ou Firewall descomplicado) e deixando apenas a porta 4242 aberta:

Primeiro, devemos saber o que é o firewall UFW. O firewall UFW é um gerenciador simplificado de firewall que esconde a complexidade das tecnologias de filtragem de pacotes de baixo nível. Se desejamos começar a proteger a rede, mas não temos certeza sobre qual ferramenta usar, o UFW é a escolha certa para nós. Para fazermos isso, devemos usar os seguintes comandos:

Ordem Descrição Comando
Instalar o ufw no sistema operacional sudo apt install ufw
Ativar o ufw no sistema operacional ufw enable
Permitir a execução do ufw no sistema operacional systemctl enable ufw
Deixar apenas a porta 4242 aberta ufw allow 4242
Checar as portas abertas (Aparecerá os protocolos IPV4 e IPV6) ufw status

3.Permitindo acesso ssh:

Ordem Descrição Comando
Instalar o SSH no sistema operacional sudo apt install ssh openssh-server openssh-client
Ativar o SSH no sistema operacional systemctl enable sshd
Editar as confiurações do ssh nano /etc/ssh/sshd_config
Alterar a porta de acesso padrão #Port 22 >> Port 4242
Reiniciando o serviço systemctl restart sshd
Checando os soquetes ss -tunlp
Testando a conexão ssh <seu usuário>@<seu ip> -p 4242

4.Implementando política de senha forte:

4.1.Alterando a data de expiração

Ordem Descrição Flag
Encontrar no arquivo de login e alterar as flags sudo nano /etc/login.defs/
Expiração da senha a cada 30 dias PASS_MAX_DAYS 30
Modificação de senha deve ser no mínimo 2 dias PASS_MIN_DAYS 2
Receber um alerta 7 dias antes da expiração PASS_WARN_AGE 7
Entra como root su -
Aplicar alteração nos usuarios existentes (fora de login.defs) chage -M30 -m2 -W7 <usúario>
Verificando as mudanças chage -l <usúario>

4.2.Definindo uma senha forte

Ordem Descrição Flag
Instalar o pacote libpam-security para facilitar sudo apt install libpam-pwquality
Fazer alterações no seguinte arquivo sudo nano /etc/security/pwquality.conf
Pelo menos 10 caracteres minlen = 10
Pelo menos um letras maiúscula ucredit = -1
Pelo menos 1 número dcredit = -1
Não deve conter 3 caracteres idênticos consecutivos maxrepeat = 3
Não deve incluir o nome do usuário usercheck = 1
A autenticação usando sudo deve ser limitada a 3 tentativas retry = 3
Para aplicar toda a política acima para o root retry = 3

4.3.Configurando a segurança de login

Ordem Descrição Flag
Adicionar as configurações no arquivo sudo nano /etc/sudoers
Mensagem personalizada de erro ao usar o sudo Defaults badpass_message="<sua mensagem>"
Cada ação usando o sudo deve ser salva na pasta: Defaults logfile="/var/log/sudo/sudo.log"
Defaults log_input,log_output
O modo TTY deve ser ativado por motivos de segurança Defaults requiretty
Limitando o maximo de tentativa a 3 Defaults passwd_tries=3

5.Criação do monitoring.sh:

O PDF pede para criarmos um script de monitoramento chamado: monitoring.sh. Esse script deverá exibir as seguintes informações:

  • A arquitetura do seu sistema operacional e sua versão do kernel;
  • O número de processadores físicos;
  • O número de processadores virtuais;
  • A RAM disponível atualmente em seu servidor e sua taxa de utilização como uma porcentagem;
  • A memória de disco (HD) atual disponível em seu servidor e sua taxa de utilização como uma porcentagem;
  • A taxa de utilização atual de seus processadores como uma porcentagem;
  • A data e hora da última reinicialização;
  • Se o LVM está ativo ou não;
  • O número de conexões ativas;
  • O número de usuários usando o servidor;
  • O endereço IPv4 do seu servidor e seu endereço MAC (Media Access Control);
  • O número de comandos executados com o programa sudo.

Veja como o código ficou:

#!bin/bash
ARCHITECTURE=$(uname -a)
CPU=$(cat /proc/cpuinfo | grep 'physical id' | wc -l)
VIRTUALCPU=$(cat /proc/cpuinfo | grep 'processor' | wc -l)
USAGERAM=$(free -m | grep "Mem.:" | awk '{print $3}')
TOTALRAM=$(free -m | grep "Mem.:" | awk '{print $2}')
PERCENTRAM=$(free -m | grep "Mem.:" | awk '{printf("%.2f"), $3/$2*100}')
DSK1=$(df -m --total | grep "total" | awk '{print $3}')
DSK2=$(df -h --total | grep "total" | awk '{printf ("%.0f"), $2}')
DSK3=$(df -h --total | grep "total" | awk '{print $5}')
LCPU=$(top -bn1 | grep '^%Cpu' | awk '{printf("%.1f%%"), $2 + $4}')
LASTBOOT=$(who -b | awk '{print $4 " " $5 }')
USAGELVM=$(lsblk | if grep -q "lvm";then echo "yes"; else echo "no"; fi)
TCP=$(netstat | grep "tcp" | wc -l)
TCPM=$(netstat | if grep -q "tcp";then echo "ESTABLISHED";else echo "NOT ESTABLISHED"; fi)
LOGGEDUSERS=$(users |wc -w)
NET=$(hostname -I | awk '{print $1}')
MAC=$(ip link show | awk '$1 == "link/ether" {print $2}')
SUDO=$(cat /var/log/sudo/sudo.log | grep 'COMMAND' | wc -l)

wall "
        #Architecture: $ARCHITECTURE
        #CPU physical: $CPU
        #vCPU: $VIRTUALCPU
        #Memory Usage: $USAGERAM/${TOTALRAM}MB ($PERCENTRAM%)
        #Disk Usage: $DSK1/${DSK2}GB ($DSK3)
        #CPU load: $LCPU
        #Last boot: $LASTBOOT
        #LVM use: $USAGELVM
        #Connections TCP: $TCP $TCPM
        #User log: $LOGGEDUSERS
        #Network: IP $NET $MAC
        #Sudo: $SUDO cmd

"

Veja detalhadamente como fizemos isso:

#!bin/bash

Esta informação é necessária para sabermos o caminho completo do interpretador desejamos utilizar para execução do comando. No nosso caso, sem ela também é possível executar o script, pois por default, o shell do Unix executa shell scripts.

$(uname -a)

Usamos este comando para exibir as informações da arquitetura do sistema operacional.

  • Vermelho: Nome do kernel
  • Verde: Nome do host
  • Azul Claro: Versão do kernel
  • Rosa: Versão do SMP. O SMP significa Symmetric multiprocessing or shared-memory multiprocessing. É a versão do multiprocessamento simétrico do sistema operacional
  • Amarelo: Data de criação do sistema operacional
  • Azul Escuro: Versão da arquitetura do sistema operacional

(cat /proc/cpuinfo \| grep 'physical id' \| wc -l)

Usamos este comando para exibir a quantidade de CPU's físicas.

  • cat /proc/cpuinfo: Acessa o arquivo proc e depois o cpuinfo;
  • grep 'physical id': Busca a palavra chave 'physical id' no arquivo cpinfo;
  • wc -l: Conta a quantidade de vezes que aparece as palavras 'physical id' e retorna essa quantidade.

(cat /proc/cpuinfo \| grep 'processor' \| wc -l)

Usamos este comando para exibir a quantidade de CPU's virtuais.

  • cat /proc/cpuinfo: Acessa o arquivo proc e depois o cpuinfo;
  • grep 'processor': Busca a palavra chave 'processor' no arquivo cpinfo;
  • wc -l: Conta a quantidade de vezes que aparece a palavra 'processor' e retorna essa quantidade.

(free -m \| grep "Mem.:" \| awk '{print $3}')

Usamos este comando para armazenara quantidade de memória RAM usada.

  • free -m Os valores são exibidos em megabytes. Se quisessemos em gb, era só usar a flag -g;
  • grep "Mem.:' Busca a palavra chave 'Mem.:' na saída de free -m;
  • awk '{print $3}' O AWK é um processador de texto. Junto com o print, nós imprimimos o elemento na posição 3, que no caso é a a quantidade de memória usada.

(free -m \| grep "Mem.:" \| awk '{printf("%.2f"), $3/$2*100}')

Usamos este comando para armazenara quantidade de memória RAM total.

  • free -m Os valores são exibidos em megabytes. Se quisessemos em gb, era só usar a flag -g;
  • grep "Mem.:' Busca a palavra chave 'Mem.:' na saída de free -m;
  • awk '{print $2}' O AWK é um processador de texto. Junto com o print, nós imprimimos o elemento na posição 2, que no caso é a memória total.

(df -m --total \| grep "total" \| awk '{print $3}')

Usamos este comando para exibir a quantidade de disco usado.

  • df -m --total: Exibir a quantidade de disco livre (-m: em megabytes |-Bm: em megabytes com o M no final);
  • grep "total": Busca a palavra chave 'total';
  • 3: Retorna o terceiro valor;
  • -m: Output em megabytes;
  • -Bm: Output em megabytes com símbolo 'M' no final;
  • -h: Output para leitura humana (Divide por 1024);
  • DSK1: Mosta a quantidade de disco usado;
  • DSK2: Mostra a quantidade de disco total;
  • DSK3: Mostra a quantidade de disco usado em porcentagem.

LASTBOOT=$(who -b | awk '{print $4 " " $5 }')

Usamos este comando para mostrar a última vez que a máquina foi bootada.

USAGELVM=$(lsblk | if grep -q "lvm";then echo "yes"; else echo "no"; fi)

Usamos este comando para verificar se o LVM está sendo usado ou não.

  • Lista os blocos de partição: lsblk;
  • Se nesse filtro, for encontrado a palavra chave lvm, então a saída é "yes", se não é "não";
  • Para finalizar o script de condicional: fi;
  • -q silenciar saída. Ou seja, não printar ela.

TCP=$(netstat | grep "tcp" | wc -l)

Usamos este comando para verificar se temos conexão TCP (Transmission Control Protocol).

TCPM=$(netstat | if grep -q "tcp";then echo "ESTABLISHED";else echo "NOT ESTABLISHED"; fi)
  • Retorna a quantidade de ips;
  • Se esse ip for maior ou igual a 1, então retorna "ESTABLISHED", se não retorna "NOT ESTABLISHED".

 LOGGEDUSERS=$(users | wc -w)

Usamos este comando para saber a quantidade de usuários logados

  • wc -W: word count;
  • (1 linha, 2 palavras e 18 caracteres).

NET=$(hostname -I | awk '{print $1}')

Usamos este comando para saber o IP da máquina virtual.

MAC=$(ip link show | awk '$1 == "link/ether" {print $2}')

Usamos este comando para saber os endereços MAC da máquina virtual.

SUDO=$(cat /var/log/sudo/sudo.log | grep 'COMMAND' | wc -l)

Usamos este comando para verificar a quantidade de comandos SUDO usados. Todos esses comando ficam na pasta sudo.log.

  • wc -W: word count;

Um resumo geral:

Comando Descrição
uname -a Imprime toda as informações do sistema -s, do kernel -v, e maquina -m
cat /proc/cpuinfo Concatena e imprime informações da CPU do pseudo-diretorio /proc, PROC(5)
grep "<padrão>" Imprime a linha de acordo com o padrão usado
wc -l Imprime no terminal a quantidade de linhas -l, palavras -w ou letras -c
free -m Mostra a quantidade de memoria livre da RAM e SWAP em mega -m, ou gigas -g
awk '{print $x}' AWK(1) é um processador de texto e de padrões.
É possivel imprimir um elemento na possição x usando a estrutura '{print $x}'
df -m Mostra um relatório do espaço usado no "disco". Em blocos de mega -Bm ou gigabits -Bg
awk '{printf ("%.0f"), $2}' AWK(1) também permite a utilização de funções para imprimir formatado_
top -bn1 Mostra os processos do Linux com a opção de mostrar por lotes -b de tempo por -n1 vezes
who -b Expoe o nome do usuário que está logado e a data da ultima inicialização -b
lsblk Lista as partições (blocos) de armazenamento
Conditions É possivel usar condicionais no terminal, seguindo essa estrutura:
if 'comando' ; then 'comando' ; fi
netstat pip install netstat Programa que imprime as conexões de rede, como a "tcp"
users Imprime os nomes dos usuários logados no hospedeiro ("Vm")
hostname -I Imprime o nome do hospedeiro, com a opção -i imprime o ip e todos os ips com -I
ip link show Mostra os endereços de Ethernet e MAC (Controle de Acesso de Mídia)
cat /var/log/sudo/sudo.log Imprime todos os comandos sudo registrados no arquivo sudo.log

Trabalho feito com: Lucas Datilio Carderelli.

About

Project 4: born2beroot - Fourth project for the formation of software engineers at school 42 São Paulo.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published