Files
Seguran-a-em-Sistemas-Opera…/conf-inicial
T
2026-09-15 19:01:34 +00:00

388 lines
9.2 KiB
Bash

#!/bin/bash
set -e
# ============================================================
# Preparação de VM Debian 13
#
# - Configura hostname
# - Configura domínio
# - Detecta interfaces diretamente do sistema
# - Recria /etc/network/interfaces do ZERO
# - Permite DHCP ou IP estático por interface
# - Limpa histórico
# - Desliga a máquina ao final
# ============================================================
# ------------------------------------------------------------
# Verifica root
# ------------------------------------------------------------
if [ "$EUID" -ne 0 ]; then
echo "ERRO: execute este script como root."
exit 1
fi
# ============================================================
# HOSTNAME / DOMÍNIO
# ============================================================
echo
echo "============================================================"
echo " CONFIGURAÇÃO DO HOST"
echo "============================================================"
echo
while true; do
read -rp "Novo nome da máquina: " NEW_HOSTNAME
if [ -n "$NEW_HOSTNAME" ]; then
break
fi
echo "O nome da máquina não pode ficar vazio."
done
while true; do
read -rp "Domínio (ex.: fatec.local): " NEW_DOMAIN
if [ -n "$NEW_DOMAIN" ]; then
break
fi
echo "O domínio não pode ficar vazio."
done
FQDN="${NEW_HOSTNAME}.${NEW_DOMAIN}"
# ------------------------------------------------------------
# Configura hostname
# ------------------------------------------------------------
echo "$NEW_HOSTNAME" > /etc/hostname
hostnamectl set-hostname "$NEW_HOSTNAME"
# ------------------------------------------------------------
# Recria /etc/hosts
# ------------------------------------------------------------
cat > /etc/hosts <<EOF
127.0.0.1 localhost
127.0.1.1 $FQDN $NEW_HOSTNAME
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
# ============================================================
# DETECÇÃO DAS INTERFACES
# ============================================================
echo
echo "============================================================"
echo " DETECÇÃO DAS INTERFACES DE REDE"
echo "============================================================"
echo
mapfile -t INTERFACES < <(
ls /sys/class/net |
grep -v '^lo$'
)
if [ "${#INTERFACES[@]}" -eq 0 ]; then
echo "ERRO: nenhuma interface de rede encontrada."
exit 1
fi
echo "Interfaces encontradas:"
echo
for IFACE in "${INTERFACES[@]}"; do
MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido")
echo " Interface: $IFACE"
echo " MAC: $MAC"
echo
done
# ============================================================
# RECRIA /etc/network/interfaces DO ZERO
# ============================================================
cat > /etc/network/interfaces <<EOF
# ============================================================
# Configuração de rede
# Gerada automaticamente
# ============================================================
auto lo
iface lo inet loopback
EOF
# ============================================================
# CONFIGURAÇÃO DAS INTERFACES
# ============================================================
for IFACE in "${INTERFACES[@]}"; do
MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido")
echo
echo "============================================================"
echo " Interface: $IFACE"
echo " MAC: $MAC"
echo "============================================================"
echo
echo "Como deseja configurar esta interface?"
echo
echo " 1) DHCP"
echo " 2) IP estático"
echo " 3) Não configurar"
echo
while true; do
read -rp "Opção [1/2/3]: " OPTION
case "$OPTION" in
1)
# ====================================================
# DHCP
# ====================================================
cat >> /etc/network/interfaces <<EOF
# ------------------------------------------------------------
# Interface $IFACE - DHCP
# ------------------------------------------------------------
auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet dhcp
EOF
echo
echo "$IFACE configurada para DHCP."
break
;;
2)
# ====================================================
# ESTÁTICO
# ====================================================
echo
echo "Configuração estática de $IFACE"
echo
while true; do
read -rp "Endereço IPv4 (ex.: 192.168.10.20): " IPADDR
if [[ "$IPADDR" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
break
fi
echo "Endereço IPv4 inválido."
done
while true; do
read -rp "Prefixo da rede (ex.: 24): " PREFIX
if [[ "$PREFIX" =~ ^[0-9]+$ ]] &&
[ "$PREFIX" -ge 0 ] &&
[ "$PREFIX" -le 32 ]; then
break
fi
echo "Prefixo inválido. Informe um valor entre 0 e 32."
done
echo
read -rp "Gateway [ENTER para nenhum]: " GATEWAY
echo
read -rp "Servidor(es) DNS separados por espaço [ENTER para nenhum]: " DNS
echo
read -rp "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH
if [ -z "$DNS_SEARCH" ]; then
DNS_SEARCH="$NEW_DOMAIN"
fi
cat >> /etc/network/interfaces <<EOF
# ------------------------------------------------------------
# Interface $IFACE - ESTÁTICA
# ------------------------------------------------------------
auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet static
address $IPADDR/$PREFIX
EOF
if [ -n "$GATEWAY" ]; then
echo " gateway $GATEWAY" >> /etc/network/interfaces
fi
if [ -n "$DNS" ]; then
echo " dns-nameservers $DNS" >> /etc/network/interfaces
fi
if [ -n "$DNS_SEARCH" ]; then
echo " dns-search $DNS_SEARCH" >> /etc/network/interfaces
fi
echo
echo "$IFACE configurada com IP estático."
break
;;
3)
echo
echo "$IFACE não será configurada."
break
;;
*)
echo
echo "Opção inválida."
;;
esac
done
done
# ============================================================
# MOSTRA CONFIGURAÇÃO FINAL
# ============================================================
echo
echo "============================================================"
echo " CONFIGURAÇÃO FINAL"
echo "============================================================"
echo
echo "Hostname : $NEW_HOSTNAME"
echo "Domínio : $NEW_DOMAIN"
echo "FQDN : $FQDN"
echo
echo "------------------------------------------------------------"
echo "/etc/network/interfaces"
echo "------------------------------------------------------------"
echo
cat /etc/network/interfaces
echo
echo "------------------------------------------------------------"
# ============================================================
# LIMPA HISTÓRICO
# ============================================================
echo
echo "Limpando históricos..."
# ------------------------------------------------------------
# Root
# ------------------------------------------------------------
history -c 2>/dev/null || true
rm -f /root/.bash_history
rm -f /root/.zsh_history
# ------------------------------------------------------------
# Outros usuários
# ------------------------------------------------------------
while IFS=: read -r USERNAME _ UID _ _ HOME_DIR SHELL; do
if [ "$UID" -ge 1000 ] && [ -d "$HOME_DIR" ]; then
rm -f "$HOME_DIR/.bash_history"
rm -f "$HOME_DIR/.zsh_history"
fi
done < /etc/passwd
# ------------------------------------------------------------
# Remove histórico da sessão atual
# ------------------------------------------------------------
unset HISTFILE
export HISTFILE=/dev/null
# ============================================================
# SINCRONIZA DISCO
# ============================================================
sync
# ============================================================
# RESULTADO
# ============================================================
echo
echo "============================================================"
echo " CONFIGURAÇÃO CONCLUÍDA"
echo "============================================================"
echo
echo "Hostname : $NEW_HOSTNAME"
echo "FQDN : $FQDN"
echo
echo "A configuração de rede foi recriada do zero."
echo
echo "A máquina será desligada."
echo
# ============================================================
# DESLIGA
# ============================================================
systemctl poweroff