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-toolRSAT para Windows
Remote Server Administration Tools
Gerencie seu domínio Samba4 diretamente do Windows com as ferramentas administrativas da Microsoft.
Quick Start
Domain Controller
Controlador de domínio completo com DNS integrado usando samba-tool
Domain Member
Ingressa em domínio existente com winbind e idmap
File Server
Servidor de arquivos com múltiplos shares e performance tuning
Configurador Avançado
Script Automático
SAMBA4-FUTURA · Gerado em tempo real
#!/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 "$@"
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