2012-01-12 22 views
0

私はWebサービスをubu​​ntuサーバ上で実行しています。このWebサービスにはメソッドがあります: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

コマンドが実行されていませんか?たぶんWebサーバーにアスタリスクのリロードを行う権限がないだけかもしれません。 – Celada

+0

と私はどのようにWebサービスにアスタリスクのリロードを行う権限を与えることができますか?助けが要る。どうも!!!私はこのものの初心者です –

+0

webserviceを実行するユーザーはどれですか? "chmod + x" consoleコマンドで特権を与える必要があります。 –

答えて

1

私はコマンドが実際に実行されていると仮定していますが、Asteriskに接続できず、Webサーバーを実行しているユーザーにAsteriskに接続する権限がないため、reloadコマンドを発行できません。

2つのソリューション。最初のものが推奨されます。

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

そしてあなたはsystem()に渡すコマンドとしてこれを使用します:

asteriskユーザーとして特定のコマンド「 asterisk -rx reload」を実行するために、Webサーバーのユーザーを許可する

sudoの

設定sudo

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

ソケット許可

asterisk -rは、UNIXドメインソケットを使用してアスタリスクサーバーに接続します。ソケットの位置はシステムによって異なる場合がありますが、/var/run/asterisk.ctlのようなものがあります。既定では、このソケットのアクセス許可はおそらくasteriskユーザー(またはルート)のみが接続できるように設定されています。

Webサーバーユーザーがこのソケットを読み書きする権限を持つようにする必要があります。たとえば、ソケットのへのchmodソケットを使用して、システム上の任意のユーザーが使用できるようにすることができます。 (システム上で信頼されていないユーザーがいる場合は、これを行わないでください!)または、このソケットに許可グループの書き込み権限を与え、Webサーバーが実行するグ​​ループにchgrp権限を与えることができます。

アスタリスクサーバーの代わりに潜在的に危険なアクションを実行する権限を許可していることに注意してください。

+0

私はこれらの解決策を試してみます。どうも。 –

+0

ここで、www-data(アスタリスク)NOPASSWDを追加する必要があります:/ usr/sbin /アスタリスク-rx reload –

+0

1. 'www-data'はDebianがデフォルトでWebサーバーユーザーとして使用するものです。それがあなたのために正しいことを確認してください。 2.それをsudoersファイルに入れる必要があります。それを編集するには 'visudo'コマンドを使います。 – Celada

関連する問題