FUTURA NORDESTE · Enterprise v4.0

Configurador
Samba4 FUTURA

Script profissional com detecção automática de firewall, liberação de portas, gerenciamento de usuários e integração com Windows RSAT

samba-tool v4.19.5

Ferramenta de linha de comando para Samba4

Gerencie domínios Active Directory, usuários, grupos, DNS e replicação diretamente do terminal.

Download samba-tool

RSAT para Windows

Remote Server Administration Tools

Gerencie seu domínio Samba4 diretamente do Windows com as ferramentas administrativas da Microsoft.

Após instalar, ative em: Painel de Controle > Programas > Ativar/desativar recursos do Windows

Quick Start

Domain Controller

Controlador de domínio completo com DNS integrado usando samba-tool

samba-tool DNS Kerberos

Domain Member

Ingressa em domínio existente com winbind e idmap

Winbind IDMAP

File Server

Servidor de arquivos com múltiplos shares e performance tuning

SMB3 VFS

Configurador Avançado

Global
Segurança
Compartilhamentos
Usuários
Firewall
Active Directory

Script Automático

SAMBA4-FUTURA · Gerado em tempo real

samba4-futura-config.sh FUTURA
#!/bin/bash
# ============================================================================
# SAMBA4-FUTURA - Enterprise Configurator v4.0
# Desenvolvido por Futura Nordeste - Soluções em TI
# ============================================================================
# Script profissional para configuração automatizada do Samba4
# Suporta: Debian, Ubuntu, RHEL, CentOS, Fedora, Arch Linux
# Inclui: Liberação automática de firewall, criação de usuários, 
#         detecção de distribuição e configuração enterprise
# ============================================================================

# Configurações
WORKGROUP="FUTURA"
NETBIOS_NAME="SAMBA-SRV"
SERVER_STRING="Samba Server FUTURA"
REALM="FUTURA.LOCAL"
DOMAIN="FUTURA"
DNS_FORWARDER="8.8.8.8"
ADMIN_PASS="P@ssw0rd!@#$"
CONFIGURE_FIREWALL="sim"  # "sim" ou "nao"

# Lista de usuários do Samba (formato: usuario:senha:sudo:homedir)
# Exemplo: "joao:senha123:nao:sim"
USERS=(
    "administrador:P@ssw0rd!@#$:sim:sim"
    "joao:Senha123:nao:sim"
    "maria:Senha456:nao:sim"
)

# Compartilhamentos (formato: nome:caminho:guest:create_mask)
SHARES=(
    "public:/srv/samba/public:sim:0775"
    "backup:/srv/samba/backup:nao:0770"
    "documentos:/srv/samba/documentos:nao:0770"
)

# Portas necessárias para Samba4
SAMBA_PORTS_TCP=(
    "53" "135" "139" "389" "445" "464" "636" "3268" "3269"
)

SAMBA_PORTS_UDP=(
    "53" "88" "137" "138" "389" "464"
)

# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'

# ============================================================================
# FUNÇÕES DO SISTEMA
# ============================================================================

# Mostra banner
show_banner() {
    clear
    echo -e "${CYAN}"
    echo '   ███████╗██╗   ██╗████████╗██╗   ██╗██████╗  █████╗ '
    echo '   ██╔════╝██║   ██║╚══██╔══╝██║   ██║██╔══██╗██╔══██╗'
    echo '   ███████╗██║   ██║   ██║   ██║   ██║██████╔╝███████║'
    echo '   ╚════██║██║   ██║   ██║   ██║   ██║██╔══██╗██╔══██║'
    echo '   ███████║╚██████╔╝   ██║   ╚██████╔╝██║  ██║██║  ██║'
    echo '   ╚══════╝ ╚═════╝    ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝'
    echo -e "${NC}"
    echo -e "${YELLOW}   SAMBA4-FUTURA - Enterprise Configurator v4.0${NC}"
    echo -e "${BLUE}   Desenvolvido por Futura Nordeste - Soluções em TI${NC}"
    echo "   ============================================================================"
    echo ""
}

# Detecta distribuição
detect_distro() {
    echo -e "${YELLOW}[INFO]${NC} Detectando distribuição..."
    
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        VER=$VERSION_ID
    elif [ -f /etc/debian_version ]; then
        OS="debian"
    elif [ -f /etc/redhat-release ]; then
        OS="rhel"
    elif [ -f /etc/arch-release ]; then
        OS="arch"
    else
        OS="unknown"
    fi
    
    echo -e "${GREEN}[OK]${NC} Distribuição detectada: $OS $VER"
    return 0
}

# Detecta e configura firewall
configure_firewall() {
    if [ "$CONFIGURE_FIREWALL" != "sim" ]; then
        echo -e "${YELLOW}[AVISO]${NC} Configuração de firewall desabilitada pelo usuário"
        return 0
    fi
    
    echo -e "${YELLOW}[INFO]${NC} Detectando firewall..."
    
    # Verifica UFW (Ubuntu/Debian)
    if command -v ufw &> /dev/null; then
        echo -e "${GREEN}[OK]${NC} UFW detectado - configurando regras..."
        
        for port in "${SAMBA_PORTS_TCP[@]}"; do
            ufw allow "$port/tcp" >/dev/null 2>&1
        done
        for port in "${SAMBA_PORTS_UDP[@]}"; do
            ufw allow "$port/udp" >/dev/null 2>&1
        done
        
        ufw reload >/dev/null 2>&1
        echo -e "${GREEN}[OK]${NC} Regras UFW configuradas"
        
    # Verifica firewalld (RHEL/CentOS/Fedora)
    elif command -v firewall-cmd &> /dev/null; then
        echo -e "${GREEN}[OK]${NC} Firewalld detectado - configurando regras..."
        
        for port in "${SAMBA_PORTS_TCP[@]}"; do
            firewall-cmd --permanent --add-port="$port/tcp" >/dev/null 2>&1
        done
        for port in "${SAMBA_PORTS_UDP[@]}"; do
            firewall-cmd --permanent --add-port="$port/udp" >/dev/null 2>&1
        done
        
        firewall-cmd --reload >/dev/null 2>&1
        echo -e "${GREEN}[OK]${NC} Regras Firewalld configuradas"
        
    # Verifica iptables
    elif command -v iptables &> /dev/null; then
        echo -e "${GREEN}[OK]${NC} Iptables detectado - configurando regras..."
        
        for port in "${SAMBA_PORTS_TCP[@]}"; do
            iptables -A INPUT -p tcp --dport "$port" -j ACCEPT 2>/dev/null
        done
        for port in "${SAMBA_PORTS_UDP[@]}"; do
            iptables -A INPUT -p udp --dport "$port" -j ACCEPT 2>/dev/null
        done
        
        # Salva regras (distribuições diferentes)
        if command -v iptables-save &> /dev/null; then
            if [ -f /etc/iptables/rules.v4 ]; then
                iptables-save > /etc/iptables/rules.v4
            elif [ -f /etc/sysconfig/iptables ]; then
                iptables-save > /etc/sysconfig/iptables
            fi
        fi
        
        echo -e "${GREEN}[OK]${NC} Regras Iptables configuradas"
        
    # Verifica nftables
    elif command -v nft &> /dev/null; then
        echo -e "${GREEN}[OK]${NC} Nftables detectado - configurando regras..."
        
        for port in "${SAMBA_PORTS_TCP[@]}"; do
            nft add rule inet filter input tcp dport "$port" accept 2>/dev/null
        done
        for port in "${SAMBA_PORTS_UDP[@]}"; do
            nft add rule inet filter input udp dport "$port" accept 2>/dev/null
        done
        
        echo -e "${GREEN}[OK]${NC} Regras Nftables configuradas"
        
    else
        echo -e "${YELLOW}[AVISO]${NC} Nenhum firewall conhecido detectado"
        echo -e "${YELLOW}[AVISO]${NC} Configure manualmente as portas necessárias:"
        echo "  TCP: ${SAMBA_PORTS_TCP[*]}"
        echo "  UDP: ${SAMBA_PORTS_UDP[*]}"
    fi
}

# Instala Samba
install_samba() {
    echo -e "${YELLOW}[INFO]${NC} Instalando Samba e dependências..."
    
    case $OS in
        debian|ubuntu)
            apt update -qq
            apt install -y -qq samba smbclient winbind krb5-user krb5-config
            ;;
        rhel|centos|fedora)
            dnf install -y samba samba-client samba-common samba-winbind
            ;;
        arch)
            pacman -Syu --noconfirm samba winbind
            ;;
        *)
            echo -e "${RED}[ERRO]${NC} Distribuição não suportada: $OS"
            exit 1
            ;;
    esac
    
    echo -e "${GREEN}[OK]${NC} Samba instalado com sucesso"
}

# Cria usuários do sistema e Samba
create_users() {
    echo -e "${YELLOW}[INFO]${NC} Criando usuários do Samba..."
    
    for user_data in "${USERS[@]}"; do
        IFS=':' read -r username password sudo homedir <<< "$user_data"
        
        # Cria usuário no sistema
        if id "$username" &>/dev/null; then
            echo -e "${YELLOW}[AVISO]${NC} Usuário $username já existe"
        else
            if [ "$homedir" = "sim" ]; then
                useradd -m -s /bin/bash "$username"
            else
                useradd -s /bin/false "$username"
            fi
            echo "$username:$password" | chpasswd
            echo -e "${GREEN}[OK]${NC} Usuário $username criado no sistema"
        fi
        
        # Adiciona ao sudo se necessário
        if [ "$sudo" = "sim" ]; then
            usermod -aG sudo "$username" 2>/dev/null || usermod -aG wheel "$username" 2>/dev/null
            echo -e "${GREEN}[OK]${NC} Usuário $username adicionado ao grupo sudo"
        fi
        
        # Adiciona ao Samba
        (echo "$password"; echo "$password") | smbpasswd -a "$username" -s
        echo -e "${GREEN}[OK]${NC} Usuário $username adicionado ao Samba"
    done
    
    echo -e "${GREEN}[OK]${NC} Todos os usuários configurados com sucesso"
}

# Configura smb.conf
configure_samba() {
    local conf_file="/etc/samba/smb.conf"
    
    echo -e "${YELLOW}[INFO]${NC} Gerando configuração do Samba..."
    
    # Backup
    if [ -f "$conf_file" ]; then
        cp "$conf_file" "${conf_file}.backup.$(date +%Y%m%d_%H%M%S)"
    fi
    
    # Inicia configuração
    cat > "$conf_file" << EOF
# Configuração gerada pelo SAMBA4-FUTURA
# Data: $(date)
# Workgroup: $WORKGROUP
# NetBIOS: $NETBIOS_NAME

[global]
   workgroup = $WORKGROUP
   netbios name = $NETBIOS_NAME
   server string = $SERVER_STRING
   security = user
   map to guest = Bad User
   obey pam restrictions = Yes
   pam password change = Yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   unix password sync = Yes
   syslog = 0
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   
   # Performance
   socket options = TCP_NODELAY IPTOS_LOWDELAY
   read raw = Yes
   write raw = Yes
   server signing = if_required
   smb encrypt = desired
   
   # Protocolos
   server min protocol = SMB2_10
   client min protocol = SMB2
   
EOF

    # Configuração específica para ADS
    if [ "$SECURITY_MODE" = "ads" ]; then
        cat >> "$conf_file" << EOF
   realm = $REALM
   workgroup = $DOMAIN
   
   # Winbind
   idmap config * : backend = tdb
   idmap config * : range = 10000-20000
   idmap config $DOMAIN : backend = rid
   idmap config $DOMAIN : range = 20001-30000
   winbind use default domain = Yes
   winbind offline logon = Yes
   winbind enum users = Yes
   winbind enum groups = Yes
   template shell = /bin/bash
   template homedir = /home/%D/%U
   
EOF
    fi

    # Compartilhamentos
    for share in "${SHARES[@]}"; do
        IFS=':' read -r name path guest mask <<< "$share"
        
        cat >> "$conf_file" << EOF

[$name]
   path = $path
   browseable = yes
   read only = no
   guest ok = $guest
   create mask = $mask
   directory mask = $mask
   force user = nobody
   force group = nogroup
EOF
        
        # Cria diretório se não existir
        if [ ! -d "$path" ]; then
            mkdir -p "$path"
            chmod "$mask" "$path"
            echo -e "${GREEN}[OK]${NC} Diretório $path criado"
        fi
    done
    
    echo -e "${GREEN}[OK]${NC} Configuração gerada em $conf_file"
}

# Configura como Domain Controller
setup_domain_controller() {
    echo -e "${YELLOW}[INFO]${NC} Configurando como Domain Controller..."
    
    # Para serviços
    systemctl stop samba-ad-dc smbd nmbd winbind 2>/dev/null
    systemctl disable samba-ad-dc smbd nmbd winbind 2>/dev/null
    
    # Provisiona domínio
    provision_cmd="samba-tool domain provision \
        --server-role=dc \
        --realm=$REALM \
        --domain=$DOMAIN \
        --adminpass='$ADMIN_PASS' \
        --dns-backend=SAMBA_INTERNAL"
    
    if [ "$RFC2307" = "yes" ]; then
        provision_cmd="$provision_cmd --use-rfc2307"
    fi
    
    if [ -n "$DNS_FORWARDER" ]; then
        provision_cmd="$provision_cmd --option='dns forwarder = $DNS_FORWARDER'"
    fi
    
    eval $provision_cmd
    
    # Configura Kerberos
    cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
    
    # Habilita serviço
    systemctl unmask samba-ad-dc
    systemctl enable samba-ad-dc
    systemctl start samba-ad-dc
    
    echo -e "${GREEN}[OK]${NC} Domain Controller configurado com sucesso!"
    echo -e "${YELLOW}[INFO]${NC} Realm: $REALM"
    echo -e "${YELLOW}[INFO]${NC} Admin: Administrator@$REALM"
    echo -e "${YELLOW}[INFO]${NC} Senha: $ADMIN_PASS (altere após primeiro login)"
}

# Menu principal
show_menu() {
    echo ""
    echo "╔══════════════════════════════════════════════════════════╗"
    echo "║                    MENU PRINCIPAL                        ║"
    echo "╠══════════════════════════════════════════════════════════╣"
    echo "║ 1) Domain Controller (novo domínio)                      ║"
    echo "║ 2) Domain Member (ingressar em AD existente)             ║"
    echo "║ 3) File Server (servidor de arquivos)                    ║"
    echo "║ 4) Sair                                                   ║"
    echo "╚══════════════════════════════════════════════════════════╝"
    echo ""
    read -p "Selecione uma opção [1-4]: " option
    
    case $option in
        1)
            install_samba
            setup_domain_controller
            create_users
            configure_firewall
            ;;
        2)
            install_samba
            configure_samba
            create_users
            configure_firewall
            ;;
        3)
            install_samba
            configure_samba
            create_users
            configure_firewall
            ;;
        4)
            echo -e "${GREEN}[INFO]${NC} Saindo..."
            exit 0
            ;;
        *)
            echo -e "${RED}[ERRO]${NC} Opção inválida"
            show_menu
            ;;
    esac
}

# Verifica pré-requisitos
check_prerequisites() {
    echo -e "${YELLOW}[INFO]${NC} Verificando pré-requisitos..."
    
    if [ "$EUID" -ne 0 ]; then 
        echo -e "${RED}[ERRO]${NC} Execute como root (use sudo)"
        exit 1
    fi
    
    echo -e "${GREEN}[OK]${NC} Usuário root verificado"
}

# Instruções pós-instalação
show_post_install() {
    echo ""
    echo -e "${GREEN}╔══════════════════════════════════════════════════════════╗${NC}"
    echo -e "${GREEN}║     CONFIGURAÇÃO CONCLUÍDA COM SUCESSO!                  ║${NC}"
    echo -e "${GREEN}╚══════════════════════════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${YELLOW}[INFO]${NC} Para tornar este script executável:"
    echo "  chmod +x samba4-futura-config.sh"
    echo "  ./samba4-futura-config.sh"
    echo ""
    echo -e "${YELLOW}[INFO]${NC} Usuários configurados:"
    for user_data in "${USERS[@]}"; do
        IFS=':' read -r username password sudo homedir <<< "$user_data"
        echo "  - $username"
    done
    echo ""
    echo -e "${YELLOW}[INFO]${NC} Portas liberadas no firewall:"
    echo "  TCP: ${SAMBA_PORTS_TCP[*]}"
    echo "  UDP: ${SAMBA_PORTS_UDP[*]}"
    echo ""
    echo -e "${YELLOW}[INFO]${NC} Comandos úteis:"
    echo "  systemctl status samba          # Status do serviço"
    echo "  smbclient -L localhost           # Listar compartilhamentos"
    echo "  pdbedit -L                        # Listar usuários Samba"
    echo "  smbpasswd -a usuario              # Adicionar novo usuário"
    echo "  ufw status                        # Verificar regras UFW"
    echo "  firewall-cmd --list-all           # Verificar regras firewalld"
    echo ""
    echo -e "${YELLOW}[INFO]${NC} Para gerenciar do Windows:"
    echo "  1. Instale RSAT (Remote Server Administration Tools)"
    echo "  2. Abra 'Usuários e Computadores do Active Directory'"
    echo "  3. Conecte ao domínio $REALM"
    echo ""
    echo -e "${BLUE}[INFO]${NC} Documentação: https://wiki.samba.org"
}

# ============================================================================
# EXECUÇÃO PRINCIPAL
# ============================================================================

main() {
    show_banner
    check_prerequisites
    detect_distro
    show_menu
    show_post_install
}

# Executa função principal
main "$@"
6+
Distribuições
3
Perfis
4
Firewalls
15+
Portas

Como usar o script

1. Copie o script acima

2. Salve como samba4-futura-config.sh

3. Torne executável: chmod +x samba4-futura-config.sh

4. Execute como root: sudo ./samba4-futura-config.sh

Firewalls suportados

  • UFW (Ubuntu/Debian) - Detecção automática
  • firewalld (RHEL/CentOS/Fedora) - Detecção automática
  • iptables (Legado) - Detecção automática
  • nftables (Moderno) - Detecção automática