Меню адміністратора або запуск системних команд лінуксу з-під астериску

Багато хто стикався з необхідністю запуску системних команд лінуксу з-під астериску, але так як астериск запущений з правами asterisk: asterisk зробити це не так і легко. Тобто. наприклад, є необхідність використання інтерактивного меню адміністратора, в якому ми зможемо перезавантажити астериск, рестартувати мережевий інтерфейс, зупинити і запустити openvpn і т.д.
[from-internal-custom] exten ≥ 665,1,Goto (admin -menu,s,1) [admin-menu] exten ≥ s,n,Authenticate (333 ) exten ≥ s,n,WaitExten ( ) exten ≥ 1,1,System ( /usr/local/sbin/amportal restart) exten ≥ 1,n,Hangup ( ) exten ≥ 2,1 ,System ( /etc/init.d/network restart) exten ≥ 2,n,Hangup ( ) exten ≥ 3,1,System (sudo /etc/init.d/openvpn start) exten ≥ 3,n,Hangup ( ) exten ≥ 4,1,System (sudo /etc/init.d/openvpn stop) exten ≥ 4,n,Hangup ( )
Після натискання кнопки 1 відбудеться перезапуск астериску і всіх його служб За натисканням кнопки 2 відбудеться рестарт мережного інтерфейсу За натисканням кнопки 3 ми включаємо службу openvpn По натисканні кнопки 4 ми вимикаємо службу openvpn
Здавалося б, нам залишається лише виконати в консолі астериску dialplan reload (довідник основних команд можна подивитися тут) і все повинне заробити, але… Все працювало б, якщо астериск був запущений з правами root. Для того щоб змусити астериск виконувати деякі рутові команди, нам потрібно підправити фай /etc/sudoers в якому ми або повністю дозволяємо астериску виконувати всі рутові команди (не рекомендується) або ж дозволяємо виконання лише деяких. Знаходимо наступні рядки і додаємо користувача asterіsk якому призначаємо виконання певних команд без введення пароля.
Будьте дуже обережні під час редагування файлу sudoers. Помилка чи неправильнаналаштування можуть призвести до пролому в безпеці.
## Allow root to run any commands anywhere root ALL= (ALL ) ALLasterisk ALL= NOPASSWD:/etc/init.d/openvpn, NOPASSWD:/usr/sbin/amportal, NOPASSWD: /etc/init.d/network
Власне, тепер ви можете запускати будь-які системні команди через астериск.