как дать пользователю разрешение на веб-сервис - PullRequest
0 голосов
/ 12 января 2012

У меня есть веб-сервис, работающий на сервере Ubuntu. Этот веб-сервис имеет метод:

...
main()
{
soap_serve(soap_new());
}
ns_call(std::string who, std::string &result)
{
int j;
j=system ("asterisk -rx \"reload\"");

return SOAP_OK;
}

НА СТОРОНЕ КЛИЕНТА ВЕРНУТЬСЯ ОК, НО командная строка не выполняется ЗАЧЕМ? пожалуйста помоги. Я сложен

1 Ответ

1 голос
/ 12 января 2012

Я предполагаю, что команда на самом деле выполняется, но она не может подключиться к Asterisk и выполнить команду перезагрузки, поскольку пользователь, работающий с веб-сервером, не имеет разрешения на подключение к Asterisk.

Дварешения.Первый рекомендуется.

sudo

Настройте sudo, чтобы пользователь веб-сервера мог выполнять определенную команду "asterisk -rx reload" как пользователь asterisk:

www-data    (asterisk) NOPASSWD: /usr/sbin/asterisk -rx reload

И затем используйте это как команду, которую вы передаете system():

system("sudo -u asterisk /usr/sbin/asterisk -rx reload");

разрешения сокета

asterisk -r использует сокет UNIX-домена для подключения к Asteriskсервер.Расположение сокета может отличаться в зависимости от вашей системы, но ищите что-то вроде /var/run/asterisk.ctl.По умолчанию разрешения этого сокета, вероятно, установлены так, что только пользователь asterisk (или root) может подключаться.

Вам необходимо настроить, чтобы пользователь веб-сервера имел разрешение на чтение и запись в этот файл.разъем.Например, вы можете chmod сокет до a+rwx, чтобы сделать его доступным для любого пользователя в системе.(Не делайте этого, если у вас есть недоверенные пользователи в системе!) Или вы можете предоставить разрешение на запись группы грантов в этот сокет и chgrp в группу, в которой работает веб-сервер.

Неважнокак вы это делаете, помните, что вы даете разрешение на выполнение потенциально опасных действий от имени вашего сервера Asterisk.

...