Dar permisos a Asterisk para ejecutar comandos

De todas las applications para el dialplan de Asterisk, hay una que es capaz de convertir una PBX en lo que se nos ocurra: System().

Con System() Asterisk tiene el poder de ejecutar comandos del shell, del mismo modo que lo hace la función system en PHP.

Una buena práctica es la de no ejecutar directamente un servicio o comando, si no, un script (que puede ser un bash, perl, php..) para no tener que modificar y reiniciar el dialplan cada vez que necesitemos realizar una modificación.

Ejecutar OpenVPN desde Asterisk

Preparar un script en PHP para iniciar el servicio OpenVPN. Crearlo en /var/lib/asterisk/bin/openvpn.php

#!/usr/bin/php
<?php
error_reporting(0);
system('sudo /etc/init.d/openvpn restart');

En este caso, usando FreePBX, basta crear una "app" e incluirla en el context from-internal-custom

[app-openvpn]
include => app-openvpn-custom
exten => *876,1,Answer
exten => *876,n,Wait(1)
exten => *876,n,Playback(freepbx-remote-assistance-enable)
exten => *876,n,System(${ASTVARLIBDIR}/bin/openvpn.php)
exten => *876,n,Hangup

Permitir a Asterisk ejecutar OpenVPN

Para permitir a Asterisk ejecutar directamente un comando (sin que sudo le pida contraseña) basta crear el archivo /etc/sudoers.d/asterisk con el siguiente contenido:

asterisk ALL = NOPASSWD: /etc/init.d/openvpn