Saudações. Nesse tutorial vamos tratar dos principais ajustes em um servidor ou VPS rodando Debian.
O Debian é um sistema muito estável e rápido, mas carece de ajustes para integrá-lo melhor com o monitoramento e a administração. Coloquei aqui todos os ajustes mais comuns para você operá-lo com agilidade.
Requisitos
- Instalar o Debian Linux;
Softwares utilizados nesse artigo
- Linux Debian 12 ou versão mais nova;
Download do Debian
Para baixar o Debian, acesse o site https://www.debian.org – Link direto da pasta com imagem ISO:
O arquivo indicado se chama debian-V.S.R-amd64-netinst.iso onde V=versão, S=sub-versão, R=release (normalmente zero).
Caso deseje se adiantar nos estudos das novas versões, o diretorio para download das compilações de teste é https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/
1 – Nome do servidor, DNS, reverso e arquivos hosts
É muito importante que todos servidor ou VPS tenha seu nome sincronizado com o endereço IP e o reverso desses IPs. A resolução de nomes é uma etapa vital em todos os programas que usam redes e se estiverem mal configurados pode causar lentidão extrema até mesmo na execução de programas simples.
Supondo que seu servidor/VPS terá o nome srv101.exemplo.com.br e receberá o endereço IPv4 45.255.128.2 e IPv6 2804:cafe:beba:c0ca::2 (substituia pelo seu IPv4 e IPv6 real, vou usar esses 3 valores de exemplo no conteúdo abaixo).
As configurações corretas de nome e endereços serão:
- Se o nome do servidor será srv101.exemplo.com.br, garanta que esse nome está configurado no DNS do domínio exemplo.com.br assim:
- srv101 IN A 45.255.128.2
- srv101 IN AAAA 2804:cafe:beba:c0ca::2
- Solicite a hospedagem (provedor de internet ou datacenter) que faça o mapeamento do DNS REVERSO dos IPs para o nome:
- 45.255.128.2 mapeado (PTR) para srv101.exemplo.com.br:
- 2.128.255.45.in-addr.arpa. IN PTR srv01.exemplo.com.br.
- 2804:cafe:beba:c0ca::2 mapeado (PTR) para srv101.exemplo.com.br:
- 2. (..) a.c.0.c.a.b.e.b.e.f.a.c.4.0.8.2.ip6.arpa. IN PTR srv01.exemplo.com.br.
- 45.255.128.2 mapeado (PTR) para srv101.exemplo.com.br:
Com essa configuração sincronizada (nome para IPs, IPs para o mesmo nome), seu servidor estará apto a fazer uso de protocolos que fazem verificação de endereço IP reverso (sistema de e-mails por exemplo).
Configurando nome principal (hostname) no Debian:
# Definindo nome do servidor:
hostnamectl set-hostname srv101.exemplo.com.br;
# Conferindo:
hostname -f;
cat /proc/sys/kernel/hostname;
Visualizando todas as informações:
# Informações completas do nome e ambiente:
hostnamectl;
Static hostname: srv101.exemplo.com.br
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 5393c014a0db497995e8c5097b8c1b9c
Boot ID: 914a211d86084bedb3570266e6f34cb9
Virtualization: vmware
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0-30-amd64
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform
Firmware Version: 6.00
Tabela de hosts estáticos e consulta a DNS
Todo sistema ou sub-sistema Linux (host, containers) gerencia a relação entre nomes e endereços IP usando a sequência definida no /etc/host.conf, que por padrão define a busca por nomes na sequência:
- 1 – hosts: o nome usado será procurado em /etc/hosts
- Esse arquivo /etc/hosts mapeia os IPs e seus respectivos nomes, com uma entrada por linha, a primeira palavra deve ser o endereço IPv4 ou IPv6 seguido dos nomes dados a esse IP, todas as palavras da linha separadas por espaços ou TAB, exemplo:
127.0.0.1 localhost
::1 localhost
45.255.128.2 srv101 srv101.exemplo.com.br
- Esse arquivo /etc/hosts mapeia os IPs e seus respectivos nomes, com uma entrada por linha, a primeira palavra deve ser o endereço IPv4 ou IPv6 seguido dos nomes dados a esse IP, todas as palavras da linha separadas por espaços ou TAB, exemplo:
- 2 – bind: o nome usado será procurado em /etc/resolv.conf
- Esse arquivo declara o nome padrão do domínio (search) e os servidores DNS usados para, exemplo:
search exemplo.com.br
nameserver 8.8.8.8
- Esse arquivo declara o nome padrão do domínio (search) e os servidores DNS usados para, exemplo:
Assim, procure configurar seu /etc/hosts e seu /etc/resolv.conf corretamente.
# Preenchendo /etc/hosts com configuração correta:
(
echo '127.0.0.1 localhost';
echo '::1 localhost';
echo;
echo 'ff02::1 ip6-allnodes';
echo 'ff02::2 ip6-allrouters';
echo;
echo '45.255.128.2 srv101.exemplo.com.br';
echo '2804:cafe:beba:c0ca::2 srv101.exemplo.com.br';
echo
) > /etc/hosts;
# Preenchendo o /etc/resolv.conf com os servidores DNS e domínio padrão:
(
echo 'nameserver 8.8.8.8';
echo 'nameserver 1.1.1.1';
) > /etc/resolv.conf;
Ao executar qualquer programa de acesso a rede, a consulta do nome utilizado é feito no arquivo hosts, e se não for encontrado ele é consultado via DNS nos IPs declarados no resolv.conf, observe com esse teste:
# Ping para um nome declarado no hosts:
ping -4 -c 2 localhost;
#PING (127.0.0.1) 56(84) bytes of data.
#64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms
#64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.020 ms
#--- ping statistics ---
#2 packets transmitted, 2 received, 0% packet loss, time 1000ms
#rtt min/avg/max/mdev = 0.015/0.017/0.020/0.002 ms
ping -6 -c 2 localhost;
#PING localhost(localhost (::1)) 56 data bytes
#64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.018 ms
#64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.029 ms
#--- localhost ping statistics ---
#2 packets transmitted, 2 received, 0% packet loss, time 1046ms
#rtt min/avg/max/mdev = 0.018/0.023/0.029/0.005 ms
# Ping para um nome de Internet:
ping -4 -c 2 google.com;
#PING (142.250.79.14) 56(84) bytes of data.
#64 bytes from sp07.1e100.net (142.250.79.14): icmp_seq=1 ttl=117 time=1.39 ms
#64 bytes from sp07.1e100.net (142.250.79.14): icmp_seq=2 ttl=117 time=1.41 ms
#--- ping statistics ---
#2 packets transmitted, 2 received, 0% packet loss, time 1697ms
#rtt min/avg/max/mdev = 1.393/1.402/1.412/0.009 ms
ping -6 -c 2 google.com;
#PING google.com(2800:3f0::200e (2800:3f0::200e)) 56 data bytes
#64 bytes from 2800:3f0::200e (2800:3f0::200e): icmp_seq=1 ttl=118 time=1.46 ms
#64 bytes from 2800:3f0::200e (2800:3f0::200e): icmp_seq=2 ttl=118 time=1.39 ms
#--- google.com ping statistics ---
#2 packets transmitted, 2 received, 0% packet loss, time 1002ms
#rtt min/avg/max/mdev = 1.388/1.423/1.458/0.035 ms
Nota: ping não é comando de teste DNS respeitável. Teste a resolução de nomes DNS pontualmente com o comando host, informando o nome que deseja resolver e opcionalmente o IP de servidor DNS que deseja testar:
# Teste de DNS, usando DNS do sistema (/etc/resolv.conf)
host google.com;
host -t a google.com;
host -t aaaa google.com;
host -t mx google.com;
host -t txt google.com;
# Teste de DNS informando o IP do servidor DNS a ser testado:
host google.com 1.0.0.1;
host -t a google.com 1.0.0.1;
host -t aaaa google.com 1.0.0.1;
host -t mx google.com 1.0.0.1;
host -t txt google.com 1.0.0.1;
2 – Data/hora, timezone e NTP
A data/hora de todos os computadores do mundo é definida pelo relógio universal (UTC = Universal Time Clock) e todos devem estar sincronizados com ele. No Brasil a diferença da data/hora para o UTC é de normalmente -3 horas.
Como nos interessa o relógio local, então nosso timezone é UTC menos 3 horas, ou UTC-3, padrão America/Sao_Paulo
O timezone é a configuração do sistema que define a diferença de tempo para o UTC e as variações locais (horário de verão e demais leis locais que definem). Definindo:
# Conferindo data/hora local:
date;
# Conferindo data/hora no UTC:
date -u;
# Definindo como America/Sao_Paulo (UTC-3):
timedatectl set-timezone America/Sao_Paulo;
# Consultando configuração:
timedatectl;
# Local time: Fri 2025-01-31 16:31:26 -03
# Universal time: Fri 2025-01-31 19:31:26 UTC
# RTC time: Fri 2025-01-31 19:31:26
# Time zone: America/Sao_Paulo (-03, -0300)
# System clock synchronized: yes
# NTP service: active
# RTC in local TZ: no
# Instalar pacote de sincronismo NTP via systemd (costuma vir instalado)
apt-get -y install systemd-timesyncd;
# Conferindo servidores NTP em uso:
timedatectl show-timesync;
timedatectl show-timesync --all;
#LinkNTPServers=
#SystemNTPServers=
#RuntimeNTPServers=
#FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org ...
#ServerName=2.debian.pool.ntp.org
#ServerAddress=119.8.229.131
#RootDistanceMaxUSec=5s
#PollIntervalMinUSec=32s
#PollIntervalMaxUSec=34min 8s
#PollIntervalUSec=34min 8s
#NTPMessage=
# {
# Leap=0, Version=4, Mode=4, Stratum=2,
# Precision=-24, RootDelay=233.627ms, RootDispersion=30.700ms,
# Reference=C0248F96,
# OriginateTimestamp=Fri 2025-01-31 16:51:35 -03,
# ReceiveTimestamp=Fri 2025-01-31 16:51:35 -03,
# TransmitTimestamp=Fri 2025-01-31 16:51:35 -03,
# DestinationTimestamp=Fri 2025-01-31 16:51:35 -03,
# Ignored=yes, PacketCount=7, Jitter=13.308ms
# }
#Frequency=974891
systemctl status systemd-timesyncd;
#● systemd-timesyncd.service - Network Time Synchronization
#Loaded: loaded (
# /lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
# Active: active (running) since Fri 2025-01-31 15:43:51 -03; 1h 16min ago
# Docs: man:systemd-timesyncd.service(8)
# Main PID: 363 (systemd-timesyn)
# Status: "Contacted time server 119.8.229.131:123 (2.debian.pool.ntp.org)."
# Tasks: 2 (limit: 9412)
# Memory: 1.8M
# CPU: 55ms
# CGroup: /system.slice/systemd-timesyncd.service
# └─363 /lib/systemd/systemd-timesyncd
#jan 31 15:43:51 debian systemd[1]:
# Starting systemd-timesyncd.service
# - Network Time Synchronization...
#jan 31 15:43:51 debian systemd[1]:
# Started systemd-timesyncd.service - Network Time Synchronization.
#jan 31 15:44:21 debian systemd-timesyncd[363]:
# Contacted time server 119.8.229.131:123 (2.debian.pool.ntp.org).
#jan 31 15:44:21 debian systemd-timesyncd[363]:
# Initial clock synchronization to Fri 2025-01-31 15:44:21.906985 -03.
journalctl -u systemd-timesyncd --no-pager | grep -i 'server';
#jan 31 15:44:21 debian systemd-timesyncd[363]:
# Contacted time server 119.8.229.131:123 (2.debian.pool.ntp.org).
cat /etc/systemd/timesyncd.conf;
Especificando manualmente servidores NTP do Brasil usando o endereço IP para que o sincronismo de NTP ocorra mesmo quando houver falha de DNS:
# Consultando IPs dos servidores NTP do Brasil:
host a.ntp.br;
# a.ntp.br has address 200.160.0.8
# a.ntp.br has IPv6 address 2001:12ff::8
host b.ntp.br;
# b.ntp.br has address 200.189.40.8
# b.ntp.br has IPv6 address 2001:12f8:9:1::8
# IPs dos servidores NTP do Observatorio Nacional
# Divisão de Serviços da Hora Legal Brasileira do Observatório Nacional (DISHO/ON)
# - 200.20.186.75 porta 123 UDP
# - 200.20.186.94 porta 123 UDP
# - 200.20.224.100 porta 123 UDP
# - 200.20.224.101 porta 123 UDP
# Instalar pacote de sincronismo NTP via systemd (costuma vir instalado)
apt -y install systemd-timesyncd;
# Configurando manualmente:
(
echo;
echo '[Time]';
echo 'NTP=200.20.224.100 2001:12ff::8';
echo 'FallbackNTP=200.20.186.94 200.20.224.101 2001:12f8:9:1::8 200.160.0.8 200.189.40.8 2001:12ff::8';
echo 'RootDistanceMaxSec=5';
echo 'PollIntervalMinSec=32';
echo 'PollIntervalMaxSec=2048';
echo 'ConnectionRetrySec=30';
echo 'SaveIntervalSec=60';
echo
) > /etc/systemd/timesyncd.conf;
# Ativar NTP
timedatectl set-ntp true;
# Reiniciando o servico de timesync:
systemctl restart systemd-timesyncd;
# Conferir
timedatectl timesync-status;
journalctl -u systemd-timesyncd --no-pager -n 20;
O sincronismo exato com servidores NTP é vital para o funcionamento de centenas de protocolos, principalmente sistemas de criptografia.
3 – Repositórios principais e updates
O Debian é baseado no gerenciador de pacotes APT, que define o formato dos pacotes de instalação dos programas e suas dependências, resolvendo tudo automáticamente.
Garantir que o Debian tenha acesso ao repositório de pacotes oficiais é vital, e isso pode falhar se faltar Internet durante a instalação minimalista (netinst). Garanta que os repositórios estão presentes.
Repositórios principais vitais para o Debian – comandos de restauração:
# Backup de seguranca:
cp /etc/apt/sources.list /root/etc-apt-sources.list;
# Populando repositórios principais:
(
. /etc/os-release;
DIST="$VERSION_CODENAME";
BASE="http://deb.debian.org";
SECB="http://security.debian.org";
echo;
echo "deb $BASE/debian/ $DIST main non-free-firmware";
echo "deb-src $BASE/debian/ $DIST main non-free-firmware";
echo;
echo "deb $SECB/debian-security $DIST-security main non-free-firmware";
echo "deb-src $SECB/debian-security $DIST-security main non-free-firmware";
echo;
echo "deb $BASE/debian/ $DIST-updates main non-free-firmware";
echo "deb-src $BASE/debian/ $DIST-updates main non-free-firmware";
echo;
) > /etc/apt/sources.list;
# Sincronizando índice:
apt -y update;
# Atualizar pacotes
apt -y upgrade;
# Atualizar pacotes centrais:
apt -y dist-upgrade;
# Limpar pacotes desnecessarios:
apt -y autoremove;
# Se houver atualizacao do '/boot/initrd****', reinicie, comando: reboot
4 – Idioma e opções de localidade
Normalmente deve-se usar servidores em ingles (en) e com localidade (formato de moeda, data, etc..) no padrão americano (us).
Personalizar esses valores servem às estações de trabalho (PC, notebook).
Garantir os valores para servidores em en-us:
# Definir locale em ingles (en) americano (US):
# Via set-locale:
localectl set-locale LANG=en_US.UTF-8;
localectl set-locale LANGUAGE=en_US:en;
# Manualmente (forcar):
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen;
locale-gen;
update-locale LANG=en_US.UTF-8;
# Consultar:
locale;
5 – Pacotes de comandos básicos
O Debian instalado de maneira minimalista (principalmente em VPSs) carecem de muitos comandos básicos. Segue alguns programas recomendados:
# Caso precise forcar o uso de IPv4 no apt, use esse alias (retire o #):
# alias apt-get='apt-get -o Acquire::ForceIPv4=true'
# alias apt-get='apt-get -y -o Acquire::ForceIPv4=true'
# Pacotes nativos do Debian, mas que devem estar presentes,
# rode esse comando para garantir que nao faltou nenhum pacote basico:
apt-get -y install \
bash bind9-dnsutils bind9-host bsdextrautils \
bsdutils busybox bzip2 ca-certificates coreutils \
cpio cron cron-daemon-common debianutils dmidecode dmsetup \
e2fsprogs eject ethtool fdisk file findutils \
firmware-linux-free fuse3 grep gzip \
hostname iproute2 iputils-ping \
kmod less locales logrotate lsof \
mawk mount nano \
nftables openssh-client openssh-server openssh-sftp-server openssl \
pci.ids pciutils procps \
sed tar traceroute \
tzdata unzip util-linux wget \
whiptail xz-utils zstd;
# Programas de compressao
apt-get -y install tar;
apt-get -y install zstd;
apt-get -y install xz-utils;
apt-get -y install zip;
# Pacote com comando curl, vital para testes de HTTP e chamadas de API REST
apt-get -y install curl;
# Lista de CAs root para certificados SSL/TLS
apt-get -y install ca-certificates;
# Ferramentas de criptografia basica:
apt-get -y install gnupg2 openssl;
# Servidor SSH para acesso remoto
apt-get -y install openssh-client openssh-server rsync;
systemctl enable ssh;
systemctl start ssh;
# Comando ip (ip addr show, ip route show, ip rule show, ip nei show)
apt-get -y install iproute2;
# Comandos de rede: mtr, traceroute, ping, fping, whois
apt-get -y install mtr traceroute iputils-ping fping whois;
# Comando para sniffer de rede e analise de pacotes
# ex.: tcpdump -pnevas0 -i eth0
apt-get -y install tcpdump;
# Editor: mcedit
apt-get -y install mc;
# Comandos para conferir uso de CPU/RAM: htop
apt-get -y install htop psmisc;
# Monitor de consumo de I/O
apt-get -y install iotop;
# Programa de firewall
# - nftables.: nft list ruleset
# - conntrack: conntrack -L
apt-get -y install nftables conntrack;
# Gerador de UUID personalizado ( uuidgen -t, uuidgen -r, ...)
apt-get -y install uuid uuid-runtime;
# Suporte a VLANs (vconfig, vlans 802.1q, 802.1ad)
apt-get -y install vlan;
6 – Agentes de máquinas virtuais
Quando o Linux é executado em uma máquina virtual, a comunicação entre o hypervisor (sistema rodando no hardware) e sua máquina virtual deve ocorrer por meio de canais especiais para sinalizar desligamento suave, economia de memória ociosa, entre outras sinalizações.
O software de agente do hypervisor é responsável por isso e deve ser instalado:
- Para ambientes VMware: open-vm-tools;
- Para ambientes Q-EMU/KVM (Proxmox, EVE-NG, RedHat, …): qemu-guest-agent;
Apenas cole os comandos abaixo, eles irão detectar a plataforma e instalar o agente correto:
# Instalar agente de virtualização adequado:
# Agent de VMWARE, instalar somente se for virtualizado no vmware
IS_VMWARE=no;
egrep -i vmware /sys/devices/virtual/dmi/id/bios_vendor && IS_VMWARE=yes;
hostnamectl | grep -qi vmware && IS_VMWARE=yes;
[ "$IS_VMWARE" = "yes" ] && {
apt-get -y install open-vm-tools;
systemctl enable open-vm-tools;
systemctl start open-vm-tools;
};
# Agent de KVM, instalar somente se for virtualizado no kvm
IS_KVM=no;
egrep -i kvm /sys/devices/virtual/dmi/id/bios_vendor && IS_KVM=yes;
egrep -i emu /sys/devices/virtual/dmi/id/bios_vendor && IS_KVM=yes;
[ "$IS_KVM" = "yes" ] && {
apt-get -y install qemu-guest-agent;
systemctl enable qemu-guest-agent;
systemctl start qemu-guest-agent;
};
7 – Monitorando o Debian via SNMP
O SNMP é um protocolo de consulta de recursos de um sistema, por ele um NMS (Network Manager System). Softwares NMS mais comuns: Zabbix, PTRG, RaviMonitor, Observium, Beeping, etc…).
Por meio do SNMP, o NMS pode monitorar o consumo de rede, CPU, RAM e demais recursos do seu Debian e criar alarmes para detectar problemas e esgotamento de recursos.
Instalando e configurando o servidor SNMP no Debian:
# Instalar
apt -y install snmp snmpd;
# Corrigir resiliencia do servico SNMP:
grep -q "^Restart=" /lib/systemd/system/snmpd.service || \
sed -i '/^\[Service\]/a Restart=always' /lib/systemd/system/snmpd.service;
systemctl daemon-reload;
# Ativar no boot:
systemctl enable snmpd;
# Backup da config inicial:
cp /etc/snmp/snmpd.conf /etc/snmp/orig-snmpd.conf;
# Configuracao inicial - personalize as variaveis abaixo antes de colar:
ADMIN="Patolino Silva";
COMMUNITY="Nao-use-public";
GPSLOCATION="-19.84784,-43.99129";
PORT=161;
(
echo;
echo 'master agentx';
echo 'agentXPerms 0777 0777';
echo 'smuxpeer .1.3.6.1.2.1.83';
echo 'smuxpeer .1.3.6.1.2.1.157';
echo 'smuxsocket localhost';
echo;
echo "rocommunity $COMMUNITY";
echo "rocommunity6 $COMMUNITY";
echo;
echo "syscontact \"$ADMIN\"";
echo "syslocation $GPSLOCATION";
echo "sysName $(hostname)";
echo "SysDescr Debian-$(hostname)";
echo;
P=$PORT;
echo "agentaddress unix:/run/snmpd.socket,udp:$P,udp6:$P,tcp6:$P,tcp:$P";
echo;
RS1='linkUpTrap linkUp ifIndex ifDescr ifType ifAdminStatus ifOperStatus';
RS2='linkDownTrap linkDown ifIndex ifDescr ifType ifAdminStatus ifOperStatus';
echo "notificationEvent $RS1";
echo "notificationEvent $RS2";
echo;
echo 'monitor -r 10 -e linkUpTrap "Generate linkUp" ifOperStatus != 2';
echo 'monitor -r 10 -e linkDownTrap "Generate linkDown" ifOperStatus == 2';
echo;
echo "com2sec notConfigUser default $COMMUNITY";
echo 'group notConfigGroup v1 notConfigUser';
echo 'group notConfigGroup v2c notConfigUser';
echo;
echo 'view systemview included .1';
echo;
echo 'access notConfigGroup "" any noauth exact systemview none none';
echo 'defaultMonitors yes';
echo 'linkUpDownNotifications yes';
echo;
) > /etc/snmp/snmpd.conf;
# Reiniciar:
systemctl restart snmpd;
# Testando (usando community da variavel acima):
snmpwalk -v2c -c $COMMUNITY 127.0.0.1:$PORT .1.3.6.1.2.1.31.1.1.1.1;
8 – CRON para execução de scripts periódicos
O Debian não implementa bem a configuração inicial do CRON por motivos de segurança, vamos criar pastas para armazenar scripts que serão executados periodicamente, de acordo com a pasta escolhida:
- de 1 em 1 minuto: /etc/cron.1min/
- de 5 em 5 minutos: /etc/cron.5min/
- de 10 em 10 minutos: /etc/cron.10min/
- de 15 em 15 minutos: /etc/cron.15min/
- de 30 em 30 minutos: /etc/cron.30min/
- A cada hora: /etc/cron.hourly/
- A cada 24 horas (uma vez por dia): /etc/cron.daily/
- A cada 7 dias (uma vez por semana): /etc/cron.weekly/
- Para cada dia da semana: /etc/cron.[sunday,monday,…]
Comandos:
# Opcional: apagar crontab do root (legado da versao anterior)
# echo | crontab -;
# Criar diretorios dos scripts periodicos:
# - intervalos curtos
mkdir -p /etc/cron.1min;
mkdir -p /etc/cron.5min;
mkdir -p /etc/cron.10min;
mkdir -p /etc/cron.15min;
mkdir -p /etc/cron.30min;
# - intervalos basicos
mkdir -p /etc/cron.hourly;
mkdir -p /etc/cron.daily;
mkdir -p /etc/cron.weekly;
mkdir -p /etc/cron.monthly;
# - agendadores de dias da semana
mkdir -p /etc/cron.monday;
mkdir -p /etc/cron.tuesday;
mkdir -p /etc/cron.wednesday;
mkdir -p /etc/cron.thursday;
mkdir -p /etc/cron.friday;
mkdir -p /etc/cron.saturday;
mkdir -p /etc/cron.sunday;
# Criar config de contrab
(
echo;
echo "SHELL=/bin/sh";
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
echo;
echo '# Example of job definition:';
echo '# .---------------- minute (0 - 59)';
echo '# | .------------- hour (0 - 23)';
echo '# | | .---------- day of month (1 - 31)';
echo '# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...';
echo '# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat';
echo '# | | | | |';
echo '# * * * * * user-name command to be executed';
echo;
echo;
echo "0 * * * * root run-parts --regex '.*' /etc/cron.hourly";
echo "0 2 * * * root run-parts --regex '.*' /etc/cron.daily";
echo "0 3 * * 6 root run-parts --regex '.*' /etc/cron.weekly";
echo "0 5 1 * * root run-parts --regex '.*' /etc/cron.monthly";
echo;
for min in 1 5 10 15 30; do
echo "*/$min * * * * root run-parts --regex '.*' /etc/cron.${min}min";
done;
echo;
echo "0 0 * * 0 root run-parts --regex '.*' /etc/cron.sunday";
echo "0 0 * * 1 root run-parts --regex '.*' /etc/cron.monday";
echo "0 0 * * 2 root run-parts --regex '.*' /etc/cron.tuesday";
echo "0 0 * * 3 root run-parts --regex '.*' /etc/cron.wednesday";
echo "0 0 * * 4 root run-parts --regex '.*' /etc/cron.thursday";
echo "0 0 * * 5 root run-parts --regex '.*' /etc/cron.friday";
echo "0 0 * * 6 root run-parts --regex '.*' /etc/cron.saturday";
echo;
) > /etc/crontab;
# Conferir se instalou agendadores:
cat /etc/crontab;
9 – Ajustes finos no Kernel Linux
Acesse o artigo sobre Ajustes Finos no Kernel para proteger seu Debian de “sabotagens” das configurações originais, link do artigo:
10 – Configuração de rede
Para configurar IP, DHCP, VLAN e interfaces de rede, tuneis, VPNs e PBR no Debian é preciso realizar as configurações iniciando pelo arquivo /etc/network/interfaces, você pode fazer isso de duas formas:
- Colocar tudo no /etc/network/interfaces, o que é melhor para sistemas pequenos;
- Modularizar a configuração por meio de arquivos incluídos, assim cada configuração terá seu arquivo particular em /etc/network/interfaces.d/, esse método é melhor para empacotamento de soluções prontas, VPS, VPNs, etc…
Arquivo: /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
Você pode escrever qualquer configuração no final desse arquivo, mas observe a linha source /etc/network/interfaces.d/*
Ela instrui o NetConfig a entrar no diretório /etc/network/interfaces.d/ e ler todos os arquivos como se eles estivessem dentro do arquivo interfaces. Por conta disso, você pode optar por colocar a configuração editando o arquivo principal ou apenas criar um arquivo para cada interface no diretório interfaces.d. Exemplo: para a interface ens192, crie o arquivo /etc/network/interfaces.d/ens192 e coloque a configuração dentro dele.
Exemplo de como colocar a interface ens192 ativa mas sem configuração IP:
# Detectar presença e configurar
auto ens192
allow-hotplug ens192
# Apenas colocar UP
iface ens192 inet manual
Exemplo de como colocar a interface ens192 em DHCP-Client (obter IP automaticamente):
# Detectar presença e configurar
auto ens192
allow-hotplug ens192
# Configurar IP:
# - DHCP IPv4
iface ens192 inet dhcp
# - Slaac IPv6
iface ens192 inet6 auto
# - DHCP IPv6
iface ens192 inet6 dhcp
Exemplo de como colocar a interface ens192 com IP fixo:
# Detectar presença e configurar
auto ens192
allow-hotplug ens192
# Configurar IPv4 fixo:
iface ens192 inet static
address 45.255.128.2/27
gateway 45.255.128.1
dns-nameservers 8.8.8.8
dns-search exemplo.com.br
# Configurar IPv6 fixo:
iface ens192 inet6 static
address 2804:cafe:beba:c0ca::2/64
gateway 2804:cafe:beba:c0ca::1
Para colocar múltiplos IPs fixos (alias) na mesma interface, crie um sufixo “:N” (um número único para cada alias), exemplo:
# Detectar presença e configurar
auto ens192
allow-hotplug ens192
# Configurar IPv4 fixo principal:
iface ens192 inet static
address 45.255.128.2/27
gateway 45.255.128.1
dns-nameservers 8.8.8.8
dns-search exemplo.com.br
# Configurar IPv6 fixo principal:
iface ens192 inet6 static
address 2804:cafe:beba:c0ca::2/64
gateway 2804:cafe:beba:c0ca::1
# Alias 1
#--------------------------------------------
auto ens192:1
# Alias 1 - IPv4
iface ens192:1 inet static
address 172.27.1.2/24
# Alias 1 - IPv6
iface ens192:1 inet6 static
address 2001:db8:ffff:abcd::2/64
# Alias 2
#--------------------------------------------
auto ens192:2
# Alias 2 - IPv4
iface ens192:2 inet static
address 10.191.14.3/27
# Alias 2 - IPv6
iface ens192:2 inet6 static
address fa14::3/64
Criando interface com VLAN (IEEE 802.1q):
# Vlan 2901 na ens192
# - IP fixo e gateway (internet pela VLAN)
auto ens192.2901
iface ens192.2901 inet static
vlan-raw-device ens192
address 172.20.0.8
netmask 255.255.255.0
gateway 172.20.0.1
Criar interface tipo dummy (descarta o que não for capturado por software):
auto lo0
iface lo0 inet static
address 100.127.255.254
netmask 255.255.255.255
pre-up ip link add lo0 type dummy && true
post-down ip link del lo0 && true
Criar uma interface que dependerá de um script externo para construção completa:
auto ovpn1401
iface ovpn1401 inet manual
pre-up /etc/network/ovpn1401.sh pre-up
up /etc/network/ovpn1401.sh up
down /etc/network/ovpn1401.sh down
post-down /etc/network/ovpn1401.sh post-down
Após definir a configuração da interface, aplique-a com esses comandos:
# Aplicar configuração da interface:
if-up ens192;
# Forcar aplicação:
if-up -force ens192;
# Desconfigurar interface (cuidado para não perder acesso):
if-down ens192;Agora escolha como deseja montar seu sistema de rede e crie os arquivos!
11 – Interfaces de rede com nome eth
Antigamente os nomes das interfaces de rede eram “eth0”, “eth1”, etc…
O Linux (todos eles) adotaram então um padrão chamado Predictable Network Interface Names (Nomes de Interfaces de Rede Previsíveis), onde o nome das interfaces é fixo baseado na localização de hardware. Principais prefixos:
- eno: Interfaces de hardware onboard;
- ens: Interfaces PCI simples;
- enp: Interfaces PCI independentes (com offload e várias portas);
- eth: Nome tradicional de interfaces de rede criadas por software, ainda usada para máquinas virtuais, containers e modo legado;
- wl: Wireless LAN, todas as interfaces wireless para uso em LAN (wifi);
- ww: Wireless WAN, todas as interfaces wireless de média ou longa distância (3G/4G, LTE, …);
Cada driver faz a proposta de nomes e o kernel se encarrega de escolher. O software UDEV do pacote SystemD é responsável por essa nomeação em user-space.
Caso você deseje voltar para os nomes antigos (modo legado), você precisará passar os argumentos “net.ifnames=0 biosdevname=0” para o kernel durante o carregamento.
Configure no arquivo /etc/default/grub a variável GRUB_CMDLINE_LINUX para adicionar esses dois parâmetros acima, se houverem mais parâmetros, separe-os por um espaço e adicione no final. Exemplo:
#...
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
#...Após inserir os argumentos na variável acima, aplique os novos ajustes no GRUB:
# Atualizar bootloader GRUB:
grub-mkconfig -o /boot/grub/grub.cfg;
É necessário reiniciar o sistema inteiro para que a configuração seja aplicada. Antes de fazer isso, lembre-se que o nome da interface atual (enoX, ensX, …) desaparecerá e passará a ser eth0, eth1, … então você deve ir no arquivo /etc/network/interfaces ou nas configurações em /etc/network/interfaces.d/ e alterar do nome atual para o novo nome “eth“.
12 – Mapeamento de nome de interfaces de rede
Uma coisa chata que acontece no Debian é em ambientes com várias interfaces de rede.
Você pode enfrentar problemas de nomes que são trocados durante o boot pela presença de múltiplas interfaces (como uma X710 de 4 portas por exemplo). A cada boot elas podem mudar de nome e isso acaba por colocar os IPs, VLAN e DHCP em portas diferentes. Isso também pode ocorrer se uma placa queimar e for trocada, ou se voce mudá-la de slot PCI.
Quando trabalhamos com máquinas virtuais esses nomes ficam muito imprevisíveis.
Uma solução para isso é:
- Manter os nomes no padrão original, retire o “net.ifnames=0 biosdevname=0” do GRUB;
- Configurar conscientemente o nome de cada interface pelo MAC;
- Não usar o mesmo prefixo das interfaces naturais, exemplo:
- Se o sistema sobe nomes ethNN, use enoNN para os nomes estáticos;
- Se o sistema sobe nomes enoNN, ensNN, enspNN, use ethNN.
Existem dois tipos de mapeamento de nomes fixos: UDEV e SYSTEMD.
12.1 – Mapeamento no UDEV
O primeiro tipo de mapeamento é feito no UDEV (subsistema de drivers) do SystemD. Crie o arquivo /etc/udev/rules.d/70-persistent-net.rules
# Mapeamento persistente de interfaces por MAC
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:00", NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:01", NAME="eth1"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:02", NAME="eth2"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:a0", NAME="eth3"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:a1", NAME="eth4"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:ca:fe:e0:84:a2", NAME="eth5"12.2 – Mapeamento no SYSTEMD
Entre no diretório /etc/systemd/network e crie os arquivos de mapeamento de cada interface de rede.
Arquivo:: /etc/systemd/network/01-custom-eth0.link
[Match]
MACAddress=00:ca:fe:e0:84:00
[Link]
Name=eth0Crie os mapas das demais interfaces na sequencia “01-custom-eth1“, “01-custom-eth2” e assim em diante.
12.3 – Aplicando mapeamento
Tome cuidado ao criar novos nomes para as interfaces, principalmente nas configurações em /etc/network/interfaces e nos arquivos em /etc/network/interfaces.d/
Recarregar ambiente UDEV e SystemD:
# Recarregar regras udev
udevadm control --reload-rules;
udevadm trigger --subsystem-match=net;
Use ifup e ifdown para reiniciar as interfaces. Recomendo reiniciar (reboot) e teste até acertar.
13 – Personalização do servidor SSH
O acesso por SSH é a base da administração do Debian. Personalizar parâmetros de maneira segura e pontual permite o backup e restauração simplificada dos atributos.
No Servidor OpenSSH, personalizar o arquivo /etc/ssh/sshd_config não é uma boa estratégia pois os updates não gostam de diferenças nesse arquivo. A melhor forma é usar o diretório /etc/ssh/sshd_config.d/ para criar os arquivos com suas personalizações.
Configurações recomendadas:
# Abrir porta padrao 22:
echo "Port 22" > /etc/ssh/sshd_config.d/inc-port-main.conf;
# Abrir porta adicional
echo "Port 22022" > /etc/ssh/sshd_config.d/inc-port-alt.conf;
# Abrir portas em IPv4 e IPv6
echo "AddressFamily any" > /etc/ssh/sshd_config.d/inc-addr-family.conf;
# Endereço IPv4 de escuta, 0.0.0.0 = todos os IPv4 do servidor
echo "ListenAddress 0.0.0.0" > /etc/ssh/sshd_config.d/inc-listen-ipv4.conf;
# Endereço IPv6 de escuta, :: = todos os IPv6 do servidor
echo "ListenAddress ::" > /etc/ssh/sshd_config.d/inc-listen-ipv6.conf;
# Desativar exibição do motd do OpenSSH, ainda mantem o /etc/motd do bash
echo "PrintMotd no" > /etc/ssh/sshd_config.d/inc-motd.conf;
# Flags de cabeçalho IP para tratamento QoS diferenciado
echo "IPQoS lowdelay throughput" > /etc/ssh/sshd_config.d/inc-ipv4-qos.conf;
# Ativar keep-alive de TCP (camada 4)
echo "TCPKeepAlive yes" > /etc/ssh/sshd_config.d/inc-tcp-alive.conf;
# Ativar keep-alive de SSH (camada 5)
echo "ClientAliveInterval 3" > /etc/ssh/sshd_config.d/inc-ssh-alive.conf;
echo "ClientAliveCountMax 15" >> /etc/ssh/sshd_config.d/inc-ssh-alive.conf;
# Ativar autenticacao com uso de senha digitavel
echo "PasswordAuthentication yes" > /etc/ssh/sshd_config.d/inc-pass-auth.conf;
# Não permitir login de usuarios sem senha
echo "PermitEmptyPasswords no" > /etc/ssh/sshd_config.d/inc-pass-empty.conf;
# Permitir encaminhamento pelo ssh-agent
echo "AllowAgentForwarding yes" > /etc/ssh/sshd_config.d/inc-agent-forward.conf;
# Permitir encaminhamento de porta remota
echo "AllowTcpForwarding yes" > /etc/ssh/sshd_config.d/inc-tcp-forward.conf;
# Permitir encaminhamento de servidor X11 por meio de conexao SHS
echo "X11Forwarding yes" > /etc/ssh/sshd_config.d/inc-x11.conf;
# Permitir que o cliente especifique ips e portas para encaminhamento
echo "GatewayPorts clientspecified" > /etc/ssh/sshd_config.d/inc-gateway-ports.conf;
# Permitir que o cliente especifique IPs a escutar em portas remotas
echo "PermitListen any" > /etc/ssh/sshd_config.d/inc-permit-listen.conf;
# Permitir abertura de terminal (necessario para usuario conseguir um shell)
echo "PermitTTY yes" > /etc/ssh/sshd_config.d/inc-tty.conf;
# Permitir usar o SSH para fazer VPN
echo "PermitTunnel yes" > /etc/ssh/sshd_config.d/inc-tunnel.conf;
# Permitir variaveis do shell do usuário transferidas para o lado servidor
echo "PermitUserEnvironment no" > /etc/ssh/sshd_config.d/inc-user-env.conf;
# Nao exibir o ultimo login do usuario ao entrar no shell via SSH
echo "PrintLastLog no" > /etc/ssh/sshd_config.d/inc-lastlog.conf;
# Desativar compressão de dados (shell mais responsivo)
echo "Compression no" > /etc/ssh/sshd_config.d/inc-compression.conf;
# Nao consultar DNS reverso do ip do usuário no inicio da conexão
echo "UseDNS no" > /etc/ssh/sshd_config.d/inc-dns.conf;
# Especificar fingerprint de versão
echo "VersionAddendum OpenSSH_10" >> /etc/ssh/sshd_config.d/inc-version.conf;
# Permitir que o root faça login usando senha
echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/inc-permit-root.conf;
# -- ou: PermitRootLogin prohibit-password
# Permitir autenticação usando chave publica
echo "PubkeyAuthentication yes" > /etc/ssh/sshd_config.d/inc-pubkey.conf;
# Renegociar chaves simetricas a cada 1G transferido ou a cada 1h de sessão
echo "RekeyLimit 1G 1h" > /etc/ssh/sshd_config.d/inc-rekey.conf;
# Tamanho manimo da chave RSA aceita:
echo "RequiredRSASize 2048" > /etc/ssh/sshd_config.d/inc-rsa-size.conf;
# Opcoes muito perigosas e sensiveis:
#echo "LoginGraceTime 1m" > /etc/ssh/sshd_config.d/inc-login-time.conf
#echo "MaxAuthTries 2" > /etc/ssh/sshd_config.d/inc-max-auth.conf
#echo "MaxSessions 128" > /etc/ssh/sshd_config.d/inc-max-sessions.conf
#echo "MaxStartups 16:32:100" > /etc/ssh/sshd_config.d/inc-max-startups.conf
#echo "PerSourceMaxStartups 16" > /etc/ssh/sshd_config.d/inc-ip-startups.conf
#echo "PerSourceNetBlockSize 22:32" > /etc/ssh/sshd_config.d/inc-net-size.conf
#echo "PermitUserRC yes" > /etc/ssh/sshd_config.d/inc-permit-rc.conf
#AM="publickey password";
#echo "AuthenticationMethods $AM" >/etc/ssh/sshd_config.d/inc-auths.conf
# Suportar todas as cifras (criptografia simetrica):
#echo -n > /etc/ssh/sshd_config.d/inc-ciphers.conf
#for opt in $(ssh -Q cipher); do
# echo "Ciphers +$opt" >> /etc/ssh/sshd_config.d/inc-ciphers.conf
#done
# Suportar todos os hashes de autenticação de mensagens:
#echo -n > /etc/ssh/sshd_config.d/inc-macs.conf
#for opt in $(ssh -Q mac); do
# echo "MACs +$opt" >> /etc/ssh/sshd_config.d/inc-macs.conf
#done
# Suportar todos os tipos de chaves efêmeras:
#echo -n > /etc/ssh/sshd_config.d/inc-kex.conf
#for opt in $(ssh -Q kex); do
# echo "KexAlgorithms +$opt" >> /etc/ssh/sshd_config.d/inc-kex.conf
#done
# Testar configuracao:
sshd -t -f /etc/ssh/sshd_config && { echo; echo CONFIG SSHD OK; echo; }
# Reiniciar servidor ssh para aplicar:
service ssh restart;
14 – Scripts rodando no boot e reboot/shutdown
Para executar um scripts durante o carregamento do Debian, você precisará registrá-lo em algum ponto do carregamento do SystemD, vamos criar:
- /etc/rc.local-up para subir após todos os programas do SystemD durante o boot;
- /etc/rc.local-down para subir quando o reboot/shutdown/poweroff for acionado de forma graciosa (não funciona quando há queda de energia ou desligamento forçado);
Criando os scripts e arquivos de registro no SystemD::
# Criar script para chamadas durante o boot:
touch /etc/rc.local-up; chmod +x /etc/rc.local-up;
touch /etc/rc.local-down; chmod +x /etc/rc.local-down;
# Diretorios para colocar os scripts que serao acionados
mkdir -p /etc/local-up.d;
mkdir -p /etc/local-down.d;
# Conteudo de exemplo:
# - script de boot
(
echo '#!/bin/sh';
echo;
echo 'echo "$(date) - Boot registrado" >> /var/log/local-up.log';
echo "run-parts --regex '.*' /etc/local-up.d";
echo;
echo 'exit 0';
) > /etc/rc.local-up;
# - script de desligamento
(
echo '#!/bin/sh';
echo;
echo 'echo "$(date) - Desligamento registrado" >> /var/log/local-down.log';
echo "run-parts --regex '.*' /etc/local-down.d";
echo;
echo 'exit 0';
) > /etc/rc.local-down;
# Servico de local-up
(
echo '[Unit]';
echo 'Description=Boot script entrypoint';
echo 'After=multi-user.target network-online.target';
echo 'Wants=network-online.target';
echo;
echo '[Service]';
echo 'Type=oneshot';
echo 'ExecStart=/etc/rc.local-up';
echo 'RemainAfterExit=yes';
echo;
echo '[Install]';
echo 'WantedBy=multi-user.target';
echo;
) > /etc/systemd/system/rc-local-up.service;
# Servico de local-down
(
echo '[Unit]';
echo 'Description=Shutdown script entrypoint';
echo 'Before=shutdown.target reboot.target halt.target';
echo 'DefaultDependencies=no';
echo;
echo '[Service]';
echo 'Type=oneshot';
echo 'ExecStart=/etc/rc.local-down';
echo 'RemainAfterExit=yes';
echo;
echo '[Install]';
echo 'WantedBy=halt.target reboot.target shutdown.target';
echo;
) > /etc/systemd/system/rc-local-down.service;
# Atualizar SystemD para ele detectar as novas units
systemctl daemon-reload;
# Ativar servicos rc-local-up e rc-local-down
systemctl enable rc-local-up;
systemctl enable rc-local-down;
Agora basta colocar seus scripts nos diretórios:
- /etc/local-up.d para scripts que devem rodar no boot;
- /etc/local-down.d para scripts que devem rodar antes do desligamento ou reboot;
15 – Apparmor
O Apparmor (armadura de aplicação) é um recurso do kernel que cria uma política de “aprisionamento” de aplicativos, impedindo que eles acessem arquivos, diretórios ou recursos fora do escopo para o qual foram programados/configurados e impede que sejam usados de maneira maliciosa.
O problema é que o Apparmor acaba avacalhando o dia-a-dia de muita gente que deseja usar o Debian livremente.
Você tem duas opções: aprender sobre esse recurso e configurá-lo corretamente ou desativá-lo, se isso não representar nenhum risco (se você roda programas em Docker, o Docker serve como melhor opção de isolamento).
# Desativando Apparmor
# Conferir status:
apparmor_status;
# Desativar:
systemctl stop apparmor;
systemctl disable apparmor;
# Remover do sistema:
apt remove --assume-yes --purge apparmor;
apt -y autoremove;
16 – Limpeza de Cache/Buffer
A limpeza de cache/buffer ajuda o sistema operacional a não usar memória desnecessária. Coloque o script em uma rotina agendada pelo Cron (capítulo anterior sobre crontab).
# Criar script de limpeza de cache
(
echo '#!/bin/bash';
echo;
echo '# Limpar cache/buffer de ram';
echo 'echo 1 > /proc/sys/vm/drop_caches;';
echo 'echo 2 > /proc/sys/vm/drop_caches;';
echo 'echo 3 > /proc/sys/vm/drop_caches;';
echo;
echo 'BLIST=$(lsblk -d -n -o NAME | sed "s/^/\/dev\//");';
echo 'for bdev in $BLIST; do';
echo ' blockdev --flushbufs $bdev;';
echo 'done';
echo;
echo '# Sincronizar escrita atrasada no disco';
echo 'sync;';
echo;
) > /usr/share/drop-cache.sh;
chmod +x /usr/share/drop-cache.sh;
# Colocar para rodar de hora em hora:
cp -rav /usr/share/drop-cache.sh /etc/cron.hourly/drop-cache;
# ou
# Colocar para rodar todo dia:
# - para ambientes com muita carga de I/O (banco de dados) o cache faz bem
cp -rav /usr/share/drop-cache.sh /etc/cron.daily/drop-cache;
17 – Ajustes de embelezamento
Banner de login
Embora seja um recurso estético, eu recomendo que você personalize o /etc/motd para sempre que entrar no servidor você saber onde está se metendo.
Link para gerar texto ASCII:
https://patorjk.com/software/taag/#p=display&f=Colossal&t=%20SRV101
Exemplo de definição do banner:
# Apagar motd:
echo -n > /etc/motd;
# Preencher motd com arte ASCII (copie do cat até o EOF e cole no terminal):
(
echo;
echo ' .d8888b. 8888888b. 888 888 d888 .d8888b. d888';
echo ' d88P Y88b 888 Y88b 888 888 d8888 d88P Y88b d8888';
echo ' Y88b. 888 888 888 888 888 888 888 888';
echo ' "Y888b. 888 d88P Y88b d88P 888 888 888 888';
echo ' "Y88b. 8888888P" Y88b d88P 888 888 888 888';
echo ' "888 888 T88b Y88o88P 888 888 888 888';
echo ' Y88b d88P 888 T88b Y888P 888 Y88b d88P 888';
echo ' "Y8888P" 888 T88b Y8P 8888888 "Y8888P" 8888888';
echo;
) > /etc/motd;
Shell com prompt colorido
A variável $PS1 é usada pelo bash/sh para colorir o terminal e personalizar o prompt, você pode alterar essa variável para testar novos formatos. Execute os comandos que definem o PS1 e teste até achar um que gosta mais. Exemplos (escolha o que te agradar mais, execute um a um e compare):
# Padrão Debian:
export PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ';
# Padrão Debian com diretorio completo (apenas troca o '~' pelo caminho):
export PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(pwd)\$ ';
# Padrão Debian com data/hora:
export PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w [$(date +%k:%M:%S)] \$ ';
# Azul e verde (tudo em uma unica linha):
export PS1='\[\033[0;99m\][\[\033[0;96m\]\u\[\033[0;99m\]@\[\033[0;92m\]\h\[\033[0;99m\]] \[\033[1;38m\]\w\[\033[0;99m\] \$\[\033[0m\] ';
# Verde e amarelo:
export PS1='\[\033[0;99m\][\[\033[0;92m\]\u\[\033[0;99m\]@\[\033[0;93m\]\h\[\033[0;99m\]] \[\033[1;38m\]\w\[\033[0;99m\] \$\[\033[0m\] ';
# Vermelho e amarelo:
export PS1='\[\033[0;99m\][\[\033[0;91m\]\u\[\033[0;99m\]@\[\033[0;93m\]\h\[\033[0;99m\]] \[\033[1;38m\]\w\[\033[0;99m\] \$\[\033[0m\] ';
# Azul claro e amarelo:
export PS1='\[\033[0;99m\][\[\033[0;96m\]\u\[\033[0;99m\]@\[\033[0;93m\]\h\[\033[0;99m\]] \[\033[1;38m\]\w\[\033[0;99m\] \$\[\033[0m\] ';
# Busybox mode 1
export PS1='\u@\h \w> ';
# Busybox mode 2 (+data/hora)
export PS1='\u@\h [$(date +%k:%M:%S)]> ';
# Busybox mode 3 (apenas hora no inicio)
export PS1='[\@] \u@\h> ';
Para tornar a personalização definitiva, preencha a linha do “export PS1=…” no final do script /etc/profile.d/ps1.sh (será executado pelo /etc/profile). Exemplo:
# Azul claro e amarelo:
export PS1='\[\033[0;99m\][\[\033[0;96m\]\u\[\033[0;99m\]@\[\033[0;93m\]\h\[\033[0;99m\]] \[\033[1;38m\]\w\[\033[0;99m\] \$\[\033[0m\] ';
# Colocar personalizacao sempre que iniciar um novo shell:
echo "export PS1='$PS1';" > /etc/profile.d/ps1.sh;
# Tornar script executável:
chmod +x /etc/profile.d/ps1.sh;
Conclusão
Sempre crie um relatório próprio dos servidores que você instala para que no futuro você possa reconstruir o sistema de maneira rápida e sem erros!
“Nunca vi um bicho selvagem se lamentando por si mesmo.
Um passarinho cai morto congelado de um galho sem
nunca ter se sentido pena de si mesmo.“
D.H. Lawrence
Terminamos por hoje, isso deve ter te economizado muito tempo!
Patrick Brandão, patrickbrandao@gmail.com
