2012-01-12 9 views
0

У меня есть веб-сервис, запущенный на сервере ubuntu. Это вебсервис имеет метод:Как предоставить пользователю разрешение на webservice

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

return SOAP_OK; 
} 

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

+0

Вы уверены, что эта команда не была выполнена? Возможно, веб-сервер просто не имеет права на перезагрузку asterisk. – Celada

+0

и как я могу дать веб-сервису разрешение на перезагрузку asterisk? нужна помощь. спасибо!!! Я новичок в этом материале –

+0

Какой пользователь выполняет webservice? Вы должны предоставить ему привилегии с помощью команды консоли «chmod + x». –

ответ

1

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

Два решения. Рекомендуется первая.

Судо

Настройка 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.

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

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

+0

Я попробую эти решения. спасибо. –

+0

где я должен добавить www-данные (звездочка) NOPASSWD:/usr/sbin/asterisk -rx reload –

+0

1. 'www-data' - это то, что Debian использует по умолчанию в качестве пользователя веб-сервера. Убедитесь, что это правильно для вас. 2. Вы должны поместить это в файл sudoers. Используйте команду 'visudo' для ее редактирования. – Celada

Смежные вопросы