#!/bin/bash # Configuração de conexão MYSQL_USER="root" MYSQL_PASS="vertrigo" MYSQL_DB="mkradius" # Buscar todos os groupnames únicos mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e " SELECT DISTINCT groupname FROM radgroupreply; " | while read groupname; do # Verifica se a regra IN já existe EXISTS_IN=$(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-In=%'; ") if [ "$EXISTS_IN" -eq 0 ]; then echo "Criando regra IN 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-In=${groupname}-IN'); " fi # Verifica se a regra OUT já existe EXISTS_OUT=$(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-Out=%'; ") if [ "$EXISTS_OUT" -eq 0 ]; then echo "Criando regra OUT 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-Out=${groupname}-OUT'); " fi done # Variáveis DIR="/xandaoart/mod" SCRIPT="$DIR/cisco.sh" PHP_SCRIPT="/opt/mk-auth/admin/executar_cisco.php" WEB_USER="www-data" # Ajuste se seu servidor web usar outro usuário # 1. Cria diretório e script cisco.sh mkdir -p "$DIR" cat << 'EOF' > "$SCRIPT" #!/bin/bash # Configuração de conexão MYSQL_USER="root" MYSQL_PASS="vertrigo" MYSQL_DB="mkradius" # Buscar todos os groupnames únicos mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e " SELECT DISTINCT groupname FROM radgroupreply; " | while read groupname; do # Verifica se a regra IN já existe EXISTS_IN=$(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-In=%'; ") if [ "$EXISTS_IN" -eq 0 ]; then echo "Criando regra IN 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-In=${groupname}-IN'); " fi # Verifica se a regra OUT já existe EXISTS_OUT=$(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-Out=%'; ") if [ "$EXISTS_OUT" -eq 0 ]; then echo "Criando regra OUT 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-Out=${groupname}-OUT'); " fi done EOF chmod +x "$SCRIPT" echo "✅ Script shell criado em $SCRIPT e tornado executável." # 2. Cria script PHP para executar o shell script cat << EOF > "$PHP_SCRIPT" &1", \$output, \$return_var); // Exibe a saída formatada echo "
";
if (\$return_var === 0) {
echo "Script executado com sucesso:\\n\\n";
echo implode("\\n", \$output);
} else {
echo "Erro ao executar o script (Código \$return_var):\\n\\n";
echo implode("\\n", \$output);
}
echo "";
?>
EOF
# Ajusta dono e permissões para o usuário web
chown "$WEB_USER":"$WEB_USER" "$PHP_SCRIPT"
chmod 644 "$PHP_SCRIPT"
echo "✅ Script PHP criado em $PHP_SCRIPT com permissões corretas."
# 3. Configura crontab para rodar o script a cada minuto, evitando duplicação
(crontab -l 2>/dev/null | grep -v "$SCRIPT"; echo "* * * * * $SCRIPT") | crontab -
DIR="/xandaoart/mod"
SCRIPT="$DIR/cisco.sh"
PHP_SCRIPT="/opt/mk-auth/admin/executar_cisco.php"
WEB_USER="www-data"
mkdir -p "$DIR"
cat << 'EOF' > "$SCRIPT"
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="vertrigo"
MYSQL_DB="mkradius"
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e "
SELECT DISTINCT groupname FROM radgroupreply;
" | while read groupname; do
EXISTS_IN=$(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-In=%';
")
if [ "$EXISTS_IN" -eq 0 ]; then
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-In=${groupname}-IN');
"
fi
EXISTS_OUT=$(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-Out=%';
")
if [ "$EXISTS_OUT" -eq 0 ]; then
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-Out=${groupname}-OUT');
"
fi
done
EOF
chmod +x "$SCRIPT"
cat << EOF > "$PHP_SCRIPT"
&1", \$output, \$return_var);
echo "";
if (\$return_var === 0) {
echo "Script executado com sucesso:\\n\\n";
echo implode("\\n", \$output);
} else {
echo "Erro ao executar o script (Código \$return_var):\\n\\n";
echo implode("\\n", \$output);
}
echo "";
?>
EOF
chown "$WEB_USER":"$WEB_USER" "$PHP_SCRIPT"
chmod 644 "$PHP_SCRIPT"
(crontab -l 2>/dev/null | grep -v "$SCRIPT"; echo "* * * * * $SCRIPT") | crontab -
#!/bin/bash
# Configurações
SCRIPT_DIR="/xandaoart/mod"
SCRIPT_EXEC="$SCRIPT_DIR/cisco.sh"
EXECUTOR_SCRIPT="$SCRIPT_DIR/executor.sh"
SERVICE_FILE="/etc/init.d/cisco-executor"
LOG_FILE="/var/log/cisco-executor.log"
PID_FILE="/var/run/cisco-executor.pid"
# Cria o diretório, se necessário
mkdir -p "$SCRIPT_DIR"
# Cria o script cisco.sh, caso não exista
if [ ! -f "$SCRIPT_EXEC" ]; then
cat <<'EOF' > "$SCRIPT_EXEC"
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="vertrigo"
MYSQL_DB="mkradius"
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -N -e "
SELECT DISTINCT groupname FROM radgroupreply;
" | while read groupname; do
EXISTS_IN=$(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-In=%';
")
if [ "$EXISTS_IN" -eq 0 ]; then
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-In=${groupname}-IN');
"
fi
EXISTS_OUT=$(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-Out=%';
")
if [ "$EXISTS_OUT" -eq 0 ]; then
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-Out=${groupname}-OUT');
"
fi
done
EOF
chmod +x "$SCRIPT_EXEC"
fi
# Cria o executor que roda a cada 5 segundos
cat <