From dac7acd98d9cf2a5f879c45ea9174b22e2e5cab8 Mon Sep 17 00:00:00 2001 From: "tiago.ferreira" Date: Tue, 15 Sep 2026 19:40:58 +0000 Subject: [PATCH] Atualizar conf-inicial --- conf-inicial | 160 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 125 insertions(+), 35 deletions(-) diff --git a/conf-inicial b/conf-inicial index 8b19676..2bd6d35 100644 --- a/conf-inicial +++ b/conf-inicial @@ -5,16 +5,12 @@ set -e # ============================================================ # Configuração inicial de VM Debian 13 # -# Funções: -# - Altera hostname -# - Altera domínio +# - Configura hostname +# - Configura domínio # - Recria /etc/hosts -# - Detecta todas as interfaces de rede +# - Detecta interfaces de rede # - Recria /etc/network/interfaces do zero -# - Pergunta por interface: -# DHCP -# Estático -# Não configurar +# - DHCP / Estático / Não configurar por interface # - Limpa históricos # - Desliga a máquina ao final # @@ -45,9 +41,12 @@ valid_ipv4() { [ "${#octets[@]}" -eq 4 ] || return 1 for octet in "${octets[@]}"; do + [[ "$octet" =~ ^[0-9]+$ ]] || return 1 + [ "$octet" -ge 0 ] 2>/dev/null || return 1 [ "$octet" -le 255 ] 2>/dev/null || return 1 + done return 0 @@ -55,22 +54,24 @@ valid_ipv4() { valid_hostname() { - local hostname="$1" + local value="$1" - [[ "$hostname" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$ ]] || - [[ "$hostname" =~ ^[a-zA-Z0-9]$ ]] + [[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]] } # ============================================================ -# ROOT +# VERIFICA ROOT # ============================================================ if [ "$EUID" -ne 0 ]; then + echo echo "ERRO: execute este script como root." echo + exit 1 + fi @@ -96,13 +97,20 @@ while true; do read_tty "Novo nome da máquina: " NEW_HOSTNAME if [ -z "$NEW_HOSTNAME" ]; then + echo "O nome da máquina não pode ficar vazio." + continue + fi + if ! valid_hostname "$NEW_HOSTNAME"; then + echo "Hostname inválido." + continue + fi break @@ -119,13 +127,20 @@ while true; do read_tty "Domínio (ex.: fatec.local): " NEW_DOMAIN if [ -z "$NEW_DOMAIN" ]; then + echo "O domínio não pode ficar vazio." + continue + fi + if ! valid_hostname "$NEW_DOMAIN"; then + echo "Domínio inválido." + continue + fi break @@ -150,17 +165,23 @@ echo read_tty "Continuar? [S/n]: " CONFIRM + case "$CONFIRM" in + n|N|nao|não|NAO|NÃO) + echo echo "Operação cancelada." + echo + exit 0 ;; + esac # ============================================================ -# HOSTNAME +# CONFIGURA HOSTNAME # ============================================================ echo @@ -172,7 +193,7 @@ hostnamectl set-hostname "$NEW_HOSTNAME" # ============================================================ -# /etc/hosts +# RECRIA /etc/hosts # ============================================================ echo "Configurando /etc/hosts..." @@ -197,6 +218,7 @@ echo " INTERFACES DE REDE ENCONTRADAS" echo "============================================================" echo + mapfile -t INTERFACES < <( find /sys/class/net \ -mindepth 1 \ @@ -208,8 +230,11 @@ mapfile -t INTERFACES < <( if [ "${#INTERFACES[@]}" -eq 0 ]; then + echo "ERRO: nenhuma interface de rede encontrada." + exit 1 + fi @@ -218,14 +243,21 @@ for IFACE in "${INTERFACES[@]}"; do MAC="desconhecido" STATE="desconhecido" + if [ -f "/sys/class/net/$IFACE/address" ]; then + MAC=$(cat "/sys/class/net/$IFACE/address") + fi + if [ -f "/sys/class/net/$IFACE/operstate" ]; then + STATE=$(cat "/sys/class/net/$IFACE/operstate") + fi + echo "Interface : $IFACE" echo "MAC : $MAC" echo "Estado : $STATE" @@ -235,7 +267,7 @@ done # ============================================================ -# RECRIA /etc/network/interfaces +# RECRIA /etc/network/interfaces DO ZERO # ============================================================ echo "Recriando /etc/network/interfaces..." @@ -253,15 +285,18 @@ EOF # ============================================================ -# CONFIGURAÇÃO DAS INTERFACES +# CONFIGURA CADA INTERFACE # ============================================================ for IFACE in "${INTERFACES[@]}"; do MAC="desconhecido" + if [ -f "/sys/class/net/$IFACE/address" ]; then + MAC=$(cat "/sys/class/net/$IFACE/address") + fi @@ -281,8 +316,10 @@ for IFACE in "${INTERFACES[@]}"; do read_tty "Escolha [1/2/3]: " OPTION + case "$OPTION" in + # ==================================================== # DHCP # ==================================================== @@ -309,7 +346,7 @@ EOF # ==================================================== - # ESTÁTICO + # IP ESTÁTICO # ==================================================== 2) @@ -327,10 +364,14 @@ EOF read_tty "Endereço IPv4: " IPADDR + if valid_ipv4 "$IPADDR"; then + break + fi + echo "Endereço IPv4 inválido." done @@ -344,6 +385,7 @@ EOF read_tty "Prefixo da rede [ex.: 24]: " PREFIX + if [[ "$PREFIX" =~ ^[0-9]+$ ]] && [ "$PREFIX" -ge 0 ] && [ "$PREFIX" -le 32 ]; then @@ -352,6 +394,7 @@ EOF fi + echo "Prefixo inválido. Informe um valor entre 0 e 32." done @@ -365,14 +408,21 @@ EOF read_tty "Gateway [ENTER para nenhum]: " GATEWAY + if [ -z "$GATEWAY" ]; then + break + fi + if valid_ipv4 "$GATEWAY"; then + break + fi + echo "Gateway inválido." done @@ -386,25 +436,37 @@ EOF read_tty "DNS [ex.: 172.16.0.2 8.8.8.8] [ENTER para nenhum]: " DNS + if [ -z "$DNS" ]; then + break + fi + DNS_VALID=1 + for DNS_IP in $DNS; do if ! valid_ipv4 "$DNS_IP"; then + DNS_VALID=0 + break + fi done + if [ "$DNS_VALID" -eq 1 ]; then + break + fi + echo "Um ou mais servidores DNS são inválidos." done @@ -416,13 +478,16 @@ EOF read_tty "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH + if [ -z "$DNS_SEARCH" ]; then + DNS_SEARCH="$NEW_DOMAIN" + fi # ------------------------------------------------ - # GRAVA INTERFACE + # GRAVA CONFIGURAÇÃO # ------------------------------------------------ cat >> /etc/network/interfaces <> /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 @@ -467,14 +538,19 @@ EOF 3) echo - echo "$IFACE não será adicionada ao /etc/network/interfaces." + echo "$IFACE não será configurada." break ;; + # ==================================================== + # INVÁLIDO + # ==================================================== + *) + echo echo "Opção inválida. Escolha 1, 2 ou 3." ;; @@ -486,7 +562,7 @@ done # ============================================================ -# PERMISSÕES +# PERMISSÃO DO ARQUIVO # ============================================================ chmod 644 /etc/network/interfaces @@ -520,7 +596,7 @@ echo # ============================================================ -# CONFIRMA DESLIGAMENTO +# CONFIRMA FINALIZAÇÃO # ============================================================ echo @@ -540,9 +616,9 @@ echo echo "Limpando históricos..." -# ------------------------------------------------------------ -# Histórico do root -# ------------------------------------------------------------ +# ============================================================ +# ROOT +# ============================================================ history -c 2>/dev/null || true @@ -553,14 +629,23 @@ rm -f /root/.lesshst rm -f /root/.wget-hsts -# ------------------------------------------------------------ -# Usuários normais -# ------------------------------------------------------------ +# ============================================================ +# USUÁRIOS NORMAIS +# ============================================================ -while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do +while IFS=: read -r \ + USERNAME \ + PASSWORD_FIELD \ + USER_ID \ + GROUP_ID \ + GECOS \ + HOME_DIR \ + USER_SHELL - if [ "$UID" -ge 1000 ] && - [ "$UID" -lt 65534 ] && +do + + if [ "$USER_ID" -ge 1000 ] 2>/dev/null && + [ "$USER_ID" -lt 65534 ] 2>/dev/null && [ -d "$HOME_DIR" ]; then rm -f "$HOME_DIR/.bash_history" @@ -574,16 +659,19 @@ while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do done < /etc/passwd -# ------------------------------------------------------------ -# Evita regravar o histórico desta sessão -# ------------------------------------------------------------ +# ============================================================ +# LIMPA HISTÓRICO DA SESSÃO ATUAL +# ============================================================ + +history -c 2>/dev/null || true unset HISTFILE + export HISTFILE=/dev/null # ============================================================ -# SINCRONIZA ALTERAÇÕES +# SINCRONIZA DISCO # ============================================================ sync @@ -599,6 +687,7 @@ echo " CONFIGURAÇÃO CONCLUÍDA" echo "============================================================" echo echo "Hostname : $NEW_HOSTNAME" +echo "Domínio : $NEW_DOMAIN" echo "FQDN : $FQDN" echo echo "Rede configurada em:" @@ -609,11 +698,12 @@ echo echo "Desligando a máquina..." echo + sleep 3 # ============================================================ -# DESLIGA +# DESLIGA A VM # ============================================================ systemctl poweroff \ No newline at end of file