Apache権限が設定されている場合でもブラウザでBashスクリプトを実行する

Apache権限が設定されている場合でもブラウザでBashスクリプトを実行する

Dockerコンテナ内にプログラムがあります。ブラウザのページに移動し、Dockerコンテナを実行してプログラムを起動したいと思います。

だからDockerコマンドを実行するbashスクリプトを作成しました(runco​​ntainer.sh):

#!/bin/sh
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myproject

その後、シェルスクリプト(Web script.php):

<?php
    exec('/usr/lib/cgi-bin/runcontainer.sh');
?>

私はapache2がインストールされているUbuntu 16.04を実行しています。

質問:
php webscript.phpこのプログラムは、bash端末で実行すると実行されます。コンテナが起動し、プログラムが起動します。しかし、Webブラウザ(firefox)で試してみるとそうではありません。

私に行くhttp://localhost/cgi-bin/webscript.php、ページが表示されますが、Dockerコンテナは起動しません。そのため、/var/log/apache2/error.logを見て、次のエラーを確認しましたsudo: no tty present and no askpass program specified

同様の問題に基づいて、 sudo apachectl -SApacheユーザーとグループ名を解決するために実行しました。どちらもwww-dataです。そのため、/usr/lib/cgi-bin/ディレクトリの下のユーザーとグループをwww-dataに設定しました。

www-dataにすべての権限がある場合でも、このエラーsudo: no tty present and no askpass program specifiedは引き続き表示されます。私が見つけた他の答えは、www-data ALLアクセスを許可するためにsudoersファイルを変更すると言いました。しかし、安全ではないようで、これをやりたくありません。

ベストアンサー1

あなたが経験しているエラーメッセージを再現するために、いくつかの実験(Apacheの代わりにCronを使用し、代わりに/bin/lsCronを使用)を行いました。これに基づいて、必要なコマンドをパスワードなしで実行できるかどうかを最初にruncontainer.sh確認することをお勧めします。www-data

パスワードなしでコマンドを実行できることを確認するには、rootとしてログインしてから

# su - -s /bin/bash www-data
$ sudo /usr/lib/cgi-bin/runcontainer.sh

また、ユーザーに対して有効になって/etc/sudoersいることを確認する必要があります。/usr/lib/cgi-bin/runcontainer.shwww-data

%www-data ALL=(ALL) NOPASSWD: /usr/lib/cgi-bin/runcontainer.sh

上記がうまくいけば、次のステップに集中できます。

おすすめ記事