私の論文に含まれているのは、管理インターフェースを作成することです。このインターフェースでは、管理者がアクセスの使用を要求したユーザーを承認できます OpenNebula 。
承認後、ユーザーをOpenNebulaに追加する必要があります(つまり、コマンドoneadmin createuser username password
に対応します)。 ( インターフェースの詳細(セクション4.2) 。)
PHPファイルでシェルコマンドを実行してこれを実行しようとしています。なぜこれが機能しないのですか(以下は特定の例です-私が使用している一般的なコードではありません) ?
$execQuery = "/bin/su oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";
Shell_exec ($execQuery); //execute query in Shell.
これも機能しません(PHPでスクリプトを実行するときにoneadminとしてログインしている場合でも)。
Shell_exec ("/usr/bin/oneuser create test10 test10");
シェルでそのコマンドを入力すると機能します。私はphpを介して他のシェルコマンドを実行しようとしましたが、それらは問題なく動作するので、問題はどこにあるのでしょうか。
すべてのユーザーにファイル/usr/bin/oneuser
rwx
権限を付与しました。
phpのマニュアルShell_exec
、それは関数が出力を文字列として返すことを示しています。起動したプログラムからの出力が予想される場合は、次のようにキャプチャする必要があります。
$execQuery = "echo -n test_command";
$output = Shell_exec($execQuery);
echo $output;
あなたの質問は、データをキャプチャしようとすることを示していません。コマンドを実行するときにstdoutとstderrも必ず接続するようにすると、何が起こっているかをよりよく理解できるはずです。あなたの例を使用するには:
$output = Shell_exec("/usr/bin/oneuser create test10 test10 2>&1");
var_dump($output);
これは、何が起こっているのかを理解するのに役立ちます。 Shadurが示唆 のように、これらのプログラムは、実行するためにパスワードを入力できるインタラクティブな端末を期待しているようです。入力を必要としない場合でも、インタラクティブなシェルを想定している場合があります。そして、su
がこの文脈でニースを演じないのは彼の言うとおりです。ただし、ジョブに適したツールがあります。
Httpユーザーがプログラムをユーザー名としてパスワードなしで実行できるようにSudo
を設定できますが、visudo
またはsudoersファイルを編集するために使用するものを実行して他のことを行うことはできません。この行を追加します:
http ALL=(username) /usr/bin/oneadmin
Phpでは、コマンドは次のようになります。
$execQuery = "Sudo -u username /usr/bin/oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";
$out = Shell_exec ("$execQuery 2>&1");
echo $out
passthru($cmd)
を試してください。
ターミナル画面でユーザーのI/Oを許可します。
前者の場合、su
は通常、実行時にパスワードを要求します。 Shell_exec
は対話性をうまく処理しません。
oneuser
はわかりません。パスワードを要求しようとしているのでしょうか?
まず、Webサーバーにシステムコマンドの実行を許可する必要があります。ただし、私のインスタントでは、CentOS6.3 64ビット LAMPサーバー を使用します。
まず最初に、Apacheが使用している現在のユーザー(ほとんどの場合はApache
)を知る必要があります。PHPでユーザー名を確認し、ユーザー名を確認します。
<?php
echo Shell_exec("whoami");
?>
私の場合、出力はApache
でした。今度はsudoer
を編集して、Apache
に許可を与えます。
以下のコマンドを入力して、sudoerファイルを入力します。
visudo
ファイルの下に次の行を追加します。これにより、ApacheはPHPスクリプトから完全なルートアクセスを取得します。
Apache ALL=NOPASSWD: ALL
[〜#〜] php [〜#〜]から以下のスクリプトを実行します。これにより、ユーザーはrootとして表示されます。 、
<?php
echo Shell_exec("Sudo whoami");
?>