Apacheのアクセス許可が設定されている場合でもブラウザでBashスクリプトを実行する


0

Dockerコンテナーに配置するプログラムがあります。ブラウザページに移動してDockerコンテナを実行し、プログラムが起動できるようにします。

そこで、Dockerコマンド(runco​​ntainer.sh)を実行するbashスクリプトを作成しました。

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

次に、そのシェルスクリプト(webscript.php)を実行するPHPファイルを作成しました。

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

apache2をインストールした状態でubuntu 16.04を実行しています。

問題: bashターミナルで
実行するphp webscript.phpとプログラムが実行されます。コンテナが起動し、プログラムが起動します。ただし、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 -S、Apacheユーザーとグループの名前を見に走り ました。両方のwww-dataです。そこで、ユーザーとグループを/ usr / lib / cgi-bin /ディレクトリにwww-dataに設定します。

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


2
@Jesse_b www-dataルートになることを許可すると、一般に大きなセキュリティリスクになることに注意してください。
クサラナンダ

1
@Jesse_bうまくいくかどうかを確かめるためだけに試しました。%www-data ALL=(ALL) NOPASSWD: /usr/bin/lib/cgi-bin/ etc / sudoersスクリプトの最後に追加し、でApacheサーバーを再起動しservice apache2 restartました。同じttyエラーが発生しました。
JustBlossom

回答:


0

発生したエラーメッセージを再現するために、Apacheとの/bin/ls代わりにCronを使用していくつかの実験を行い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.shているかどうかも確認する必要がありwww-dataます。

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

上記が機能する場合、次のレベルに集中できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.