45

ここでの取引が何であるかわかりません…</p>

だから私はapplescriptを実行したい:sudo osascript myscript.scpt

これはターミナルでは正常に機能しますが、PHP を介して実行すると機能しませんexec()。何も起こりません。コンソールは言う

no tty present and no askpass program specified ; TTY=unknown ; …

調査を行ったところ、sudoコマンドのパスワードが不足しているようです。これを回避するために、次のようないくつかの方法を試しました。

  • 書き込み%admin ALL=(ALL) ALL_/etc/sudoers
  • そしてproc_open()代わりにexec()

どれも機能していないようで、その結果、CrAzY!

基本的に、単純な端末コマンドを PHP に実行させる明確な方法はありますか?

編集:明確にするためにmyscript.scpt、画面上のUIを変更する単純なappleScriptです(より大きなプロジェクトの場合)。理論的にはosascript myscript.scpt、これで十分sudoですが、何らかの理由でシステムから何らかの応答を呼び出す必要があります。何らかの形で排除できれば、sudoこのアクセス許可の問題は発生しないと思います。

4

8 に答える 8

18

パスワードなしのsudoを設定する必要があるようです。試す:

%admin ALL=(ALL) NOPASSWD: osascript myscript.scpt

次の行も (visudo 経由で /etc/sudoers に) コメントアウトします (存在する場合)。

Defaults    requiretty
于 2010-07-03T23:46:16.770 に答える
4

php: bash コンソールが作成され、1 つ目のスクリプトが実行され、2 つ目のスクリプトに対して sudo が呼び出されます。以下を参照してください。

$dev = $_GET['device'];
$cmd = '/bin/bash /home/www/start.bash '.$dev;
echo $cmd;
shell_exec($cmd);
  1. /home/www/start.bash

    #!/bin/bash
    /usr/bin/sudo /home/www/myMount.bash $1
    
  2. myMount.bash:

    #!/bin/bash
    function error_exit
    {
      echo "Wrong parameter" 1>&2
      exit 1
    }
    ..........
    

oc、root 権限なしで root レベルからスクリプトを実行したい場合は、/etc/sudoers.d/mount ファイルを作成して変更します。

www-data ALL=(ALL:ALL) NOPASSWD:/home/www/myMount.bash

chmod を忘れないでください:

sudo chmod 0440 /etc/sudoers.d/mount
于 2012-06-01T07:16:52.540 に答える