✅ 1. Script Base de Inserção (/xandaoart/mod/cisco.sh
)
#!/bin/bash
# Configurações
MYSQL_USER="root"
MYSQL_PASS="vertrigo"
MYSQL_DB="mkradius"
# Consulta os groupnames únicos e processa
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e "SELECT DISTINCT groupname FROM radgroupreply;" | while read -r groupname; do
for direction in In Out; do
EXISTS=$(mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e "
SELECT COUNT(*) FROM radgroupreply
WHERE groupname = '$groupname'
AND attribute = 'Cisco-AvPair'
AND value LIKE 'ip:sub-policy-${direction}=%';
")
if [ "$EXISTS" -eq 0 ]; then
echo "✔️ Criando regra $direction para $groupname"
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -e "
INSERT INTO radgroupreply (groupname, attribute, op, value)
VALUES ('$groupname', 'Cisco-AvPair', '+=', 'ip:sub-policy-${direction}=${groupname}-${direction}');
"
fi
done
done
✅ 2. Script PHP para execução via navegador (/opt/mk-auth/admin/executar_cisco.php
)
<?php
$shellScript = escapeshellarg('/xandaoart/mod/cisco.sh');
exec("bash $shellScript 2>&1", $output, $return_var);
echo "<pre>";
echo $return_var === 0
? "✅ Script executado com sucesso:\n\n" . implode("\n", $output)
: "❌ Erro ao executar o script (Código $return_var):\n\n" . implode("\n", $output);
echo "</pre>";
?>
✅ 3. Script Executor de 5 em 5 segundos (/xandaoart/mod/executor.sh
)
#!/bin/bash
while true; do
/xandaoart/mod/cisco.sh
sleep 5
done
✅ 4. Serviço Init.d (/etc/init.d/cisco-executor
)
#!/bin/sh
### BEGIN INIT INFO
# Provides: cisco-executor
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Executa script cisco.sh a cada 5s
### END INIT INFO
EXEC="/xandaoart/mod/executor.sh"
PIDFILE="/var/run/cisco-executor.pid"
LOGFILE="/var/log/cisco-executor.log"
case "$1" in
start)
echo "▶️ Iniciando executor"
nohup "$EXEC" > "$LOGFILE" 2>&1 &
echo $! > "$PIDFILE"
;;
stop)
echo "⏹ Parando executor"
[ -f "$PIDFILE" ] && kill $(cat "$PIDFILE") && rm -f "$PIDFILE"
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
if [ -f "$PIDFILE" ]; then
echo "✅ Rodando. PID: $(cat $PIDFILE)"
else
echo "❌ Não está em execução."
fi
;;
*)
echo "Uso: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
✅ 5. Instalação e Ativação
chmod +x /xandaoart/mod/cisco.sh /xandaoart/mod/executor.sh /etc/init.d/cisco-executor
update-rc.d cisco-executor defaults
/etc/init.d/cisco-executor start
Script Unico
#!/bin/bash
# Variáveis
DIR="/xandaoart/mod"
SCRIPT="$DIR/cisco.sh"
EXECUTOR="$DIR/executor.sh"
SERVICE="/etc/init.d/cisco-executor"
MYSQL_USER="root"
MYSQL_PASS="vertrigo"
MYSQL_DB="mkradius"
PIDFILE="/var/run/cisco-executor.pid"
LOGFILE="/var/log/cisco-executor.log"
echo "🚀 Iniciando instalação do executor Cisco..."
# Cria diretório se não existir
mkdir -p "$DIR"
# Cria script cisco.sh
cat > "$SCRIPT" <<EOF
#!/bin/bash
MYSQL_USER="$MYSQL_USER"
MYSQL_PASS="$MYSQL_PASS"
MYSQL_DB="$MYSQL_DB"
mysql -u "\$MYSQL_USER" -p"\$MYSQL_PASS" -D "\$MYSQL_DB" -N -e "SELECT DISTINCT groupname FROM radgroupreply;" | while read -r groupname; do
for direction in In Out; do
EXISTS=\$(mysql -u "\$MYSQL_USER" -p"\$MYSQL_PASS" -D "\$MYSQL_DB" -N -e "
SELECT COUNT(*) FROM radgroupreply
WHERE groupname = '\$groupname'
AND attribute = 'Cisco-AvPair'
AND value LIKE 'ip:sub-policy-\${direction}=%';
")
if [ "\$EXISTS" -eq 0 ]; then
echo "✔️ Criando regra \$direction para \$groupname"
mysql -u "\$MYSQL_USER" -p"\$MYSQL_PASS" -D "\$MYSQL_DB" -e "
INSERT INTO radgroupreply (groupname, attribute, op, value)
VALUES ('\$groupname', 'Cisco-AvPair', '+=', 'ip:sub-policy-\${direction}=\${groupname}-\${direction}');
"
fi
done
done
EOF
chmod +x "$SCRIPT"
echo "✔ Script cisco.sh criado."
# Cria executor.sh
cat > "$EXECUTOR" <<EOF
#!/bin/bash
while true; do
$SCRIPT
sleep 5
done
EOF
chmod +x "$EXECUTOR"
echo "✔ Script executor.sh criado."
# Cria serviço init.d
cat > "$SERVICE" <<EOF
#!/bin/sh
### BEGIN INIT INFO
# Provides: cisco-executor
# Required-Start: \$network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Executa script cisco.sh a cada 5 segundos
### END INIT INFO
EXEC="$EXECUTOR"
PIDFILE="$PIDFILE"
LOGFILE="$LOGFILE"
case "\$1" in
start)
echo "▶️ Iniciando executor"
nohup "\$EXEC" > "\$LOGFILE" 2>&1 &
echo \$! > "\$PIDFILE"
;;
stop)
echo "⏹ Parando executor"
[ -f "\$PIDFILE" ] && kill \$(cat "\$PIDFILE") && rm -f "\$PIDFILE"
;;
restart)
\$0 stop
sleep 1
\$0 start
;;
status)
if [ -f "\$PIDFILE" ]; then
echo "✅ Executor rodando. PID: \$(cat \$PIDFILE)"
else
echo "❌ Executor não está em execução."
fi
;;
*)
echo "Uso: \$0 {start|stop|restart|status}"
exit 1
esac
exit 0
EOF
chmod +x "$SERVICE"
echo "✔ Serviço init.d criado."
# Registrar serviço para iniciar no boot
if command -v update-rc.d &>/dev/null; then
update-rc.d cisco-executor defaults
echo "✔ Serviço registrado para iniciar no boot."
else
echo "⚠️ update-rc.d não encontrado. Registre o serviço manualmente."
fi
# Inicia o serviço
"$SERVICE" start
echo "✅ Instalação concluída. Serviço iniciado."
echo "Use '$SERVICE {start|stop|restart|status}' para controlar o executor."