0

サーバーにディスクをマウントする必要があるアプリがあります。ディスクとサーバーはすべて接続されており、Linux の「mount」コマンドを使用するだけです。

私は単純なphpを書きました:

<?
exec("/var/www/MountTheDisk.sh");
?>

そして、bash スクリプトを追加しました: MountTheDisk.sh

#!/bin/bash

diskutil mount /dev/xvdb1 /mnt/theDisk/
echo trying to mount

今、そのphpを実行すると、結果が得られません。何もエコーされず、ディスクはマウントされません。このコマンドをリモートで実行するにはどうすればよいですか? 多分phpは最良の方法ではありませんか?

4

2 に答える 2

1

この解決策はうまくいかないようです。シェルスクリプトで SetUID を使用したことがないので、理由はわかりません。ただし、誰かが参照したい場合に備えて、この回答をここに残しておきます。

セキュリティ上の理由から、コードを bash ファイルに入れることをお勧めします。SetUID-bitを使用して、他のユーザー内から root として bash ファイルを実行します。この方法では、root 以外のユーザーがファイルに書き込めなくなり、sudo で処理する必要がなくなります。そうしないと、php プロセスがルートとしてコードを実行できるようになりますが、これはほとんどの場合、非常に悪い考えです。

出力が得られない理由は、おそらく、パスワードを要求され、exec がパスワードを入力する方法がないためです。

編集: PHP 呼び出しを次のように変更します。

<?
exec("/var/www/MountTheDisk.sh");
?>

このようなコンテンツを含む bash ファイル (/var/www/MountTheDisk.sh) を作成するよりも

#!/bin/sh

// this script will be executed as root
diskutil mount /dev/xvdb1 /mnt/theDisk/
echo trying to mount

ここで SetUID ビットを設定し、所有者を root に変更します。(ルートシェル経由で行う必要があります)

// make script executable
chmod +x /var/www/MountTheDisk.sh

// setuid bit
chmod u+s /var/www/MountTheDisk.sh

// change owner to root
chown root:root /var/www/MountTheDisk.sh

注:すべてのユーザーがこのファイルを実行できます。どの呼び出しでも、root として実行されます。

于 2013-05-24T19:26:04.030 に答える
0

を使用して特定のアプリケーションを実行するには、Apache のユーザーwww-dataに権限を付与する必要がありますsudo

  1. コマンドを実行しますsudo visudo。実際にファイルを編集したいのですが、それetc/sudoersを行うには、ターミナルで使用sudo visudoして、編集する(一時)sudoersファイルを複製します。
  2. ファイルの最後に、次の例を追加します。

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount

(これは、スーパー ユーザー (root) 権限を使用しrestartてコマンドを実行することを前提としています。)mount

ALLただし、スーパーユーザー権限を使用してすべてのアプリケーションを実行する場合は、上記の代わりに次を追加します。コマンドではなく、非常に危険なため、これを実行したくない場合があります。

www-data ALL=NOPASSWD: ALL

3. sudoers ファイルを編集した後 (visudo一時ファイルを編集しsudoersて保存し、一時ファイル (visudo) を終了してsudoersファイルに書き込みます。wq!)

4.以上です。スクリプトexec()内で次のように使用します。phpスクリプトでコマンドを使用する前に使用することを忘れないでください。xxx.phpsudo

元:-

exec ("sudo /etc/init.d/smokeping restart 2>&1");

したがって、あなたの問題では、使用したいコマンドを追加して、必要に応じてstep no (2.)phpスクリプトを追加および変更します。

于 2014-04-09T05:14:28.727 に答える