• 締切済み
  • すぐに回答を!

phpでsudoコマンドの実行

ブラウザからAndroidアプリのプロジェクト作成を可能にしようとしています。 Linux端末もしくわターミナルのroot権限で 「android create project --target ○ --name △ --path /var/../../.. --activity △ --package ■〇△」←「..や〇、△等は適当です(笑)」 というコマンドを実行するとプロジェクトが作成されます。端末、ターミナルでのこのコマンド実行には成功しています。 上記のコマンドをブラウザで実行させようと、まず一般ユーザモードでsudoコマンドでの実行を試みました。 「sudo /home/../../android create project --target ○ --name △ --path /var/../../.. --activity △ --package ■〇△」 というコマンドを実行するとsudoコマンドでもプロジェクトが作成されます。端末、ターミナル内でのこのコマンド実行も成功しています。 次にブラウザからの実行ですが、 ブラウザからphpのsystem関数を用いてsudoコマンドを使ったコマンド実行を試みているのですが、できません。 自分なりに調べて、sudoコマンドに必要なパスを入力不要にし、サイトに書いてあったので、viコマンドで、sudoure内の「Defaults requiretty」に#も追加しました。 ブラウザでphpのsystem関数を用いて上記コマンドの実行は不可能なのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数349
  • ありがとう数1

みんなの回答

  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

まずはsudoをフルパスで指定するところから。 それとhttpdはapacheでしょうか? もし実行ユーザーがapacheならvisudoしてユーザーapacheにNOPASSWDで実行できる 権限をつける必要があるかもしれません。 ただしapacheの乗っ取りのがあった場合を想定して、利用可能コマンドは ある程度しぼる必要はあると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 httpdはapacheです。 visudoしてapacheにNOPASSWDで実行できるようには以前からしていました。 ターミナルでは実行できているのですが、ブラウザからsystem関数を用いるとできません... phpの権限やapacheでの他の権限などなんですかね。未だにできません。

関連するQ&A

  • sudo createdbをnopasswdで実行

    sudoをnopasswdで設定しているにも関わらずpostgresユーザーで sudo createdb を行うとパスワードを聞いてきます。 sudo 設定内容 postgres ALL=NOPASSWD: ALL 実際に行ったコマンド -bash-4.1$ sudo -u hogehoge /usr/bin/createdb -U hogehoge -W hogehoge -E UTF-8 -D hogehoge -w [sudo] password for postgres: nopasswdで実行出来れば最終的にcronでの定期実行を考えています。 環境は以下の内容です。 CentOS-6.2-x86_64 PostgreSQL 9.3.16 よろしくお願い致します。

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • .shの実行がうまくきません

    こんにちは、お世話になります。 Linux初心者で、RedHat9を使用しています。 ターミナルを立ち上げて直打ちでコマンド入力をすればうまくいくのに、 同じ内容を.sh ファイルに記述したものを実行してうまくきません。 例:set.shの内容 PATH=$PATH:/test/bin export PATH これをターミナルで ./set.sh と実行すると ': not a valid identifier 'PATH と表示されます。 この他にも、smbmount コマンドを.sh ファイルに記述し、実行した際も コマンド直打ちでは出ないエラーが出てしまいました。 ちなみにログインはROOTで入っています。 みなさんご教授ください。 よろしくお願いします。

  • phpからlinuxコマンドを実行したい

    CentOS6で test.phpを作成しました。 <?php $buf = ''; exec("yum list installed | grep php | cut -d' ' -f1", $buf);   var_dump($buf[0]); ?> コマンド:php test.php を実行したのですが、実行結果が帰ってきません。 (当然phpをインストールしているので、パッケージは導入されています。) 多分「’」がうまく機能してないのだと思うのですが、 どのように記述すればコマンドの実行結果が表示されるのでしょうか ご教授お願いします。

  • 端末(ターミナル)から端末を起動しコマンドを実行

    お世話になります. ※端末=ターミナルです. 早速ですが,Ubuntu(Linux)の端末1から別の端末2を呼び,端末1から呼び出した新しい端末2の上でコマンドを実行する方法はありませんでしょうか? 調べてところ, $ gnome-terminal のオプションで,「 -e, --command」 や「 -x, --execute 」を利用することで,端末2を起動しながらコマンドを実行できる様です.(gnome-terminal --help 参照) しかし,実際に試したUbuntu8.10では,端末2が起動するものの,その上で指定したコマンドが実行されません. やり方をご存知の方がいましたら,ご教授よろしくお願いいたいます.

  • Macのターミナルでコマンドが効かなくなりました

    Mac OS Xのターミナルでコマンドが効かなくなってしまいました パソコンでプログラミングなどをかじり始めた者です。原因はほぼ間違いなく分かっていて、ルートディレクトリで sudo mv usr ~/ と実行した直後からこの問題が起こりました。コマンドを入力すると illigal instruction と表示され、コマンドが効かないため素直に戻すこともできず困っています。バックアップはとっていません。環境は Mac OS X 10.6.8 2.4GHz Intel Core 2 Duo です。 なかなか大変なことをしてしまったと現在かなり動揺しているのですが治りますでしょうか。治らないとしたら、ターミナルでコマンドが使えないことの他にどのような弊害が生まれるかだけでも教えていただけるとうれしいです。

    • ベストアンサー
    • Mac
  • sudoのDefaultsrequirett設定

    レンタルサーバを借りております。 sshでwindowsサーバから、レンタルサーバに 「 sh connect.sh "tail /var/log/messages"」 を実行して、messagesを見ようとしています。 tailの部分は、シェルスクリプトで 「ssh ユーザ@レンタルサーバ sudo $1」 で利用されるようしております。 このとき、 「sudo: sudo を実行するには tty がなければいけません。すみません」 と表示されます。 対応方法として、 「Defaults !requiretty」 をすれば良い事がわかったのですが、 レンタルサーバのような公開場所で、 することはセキュリティ的にどうなのでしょうか? 公開鍵認証でsshは接続(シェルコマンドは鍵認証コマンドを書いております)しているのですが、 設定を「Defaults !requiretty」にしても問題ないものでしょうか? (※当然セキュリティが下がることは認識しております) 「運用の簡易化」と「セキュリティ」のどちらを取るべきか検討しております。 「 !requiretty」で運用しているよ。 といった意見がありましたら、ご教授いただけると助かります。 よろしくお願いします。

  • PHPで編集したファイルをcrontabに設定する

     PHPで編集したファイルを、crontabに設定しようと、プログラムを製造しています。  しかし、rootユーザーのジョブキューにPHPで編集したファイルの内容が反映できません。  下記URL(niftyホームページ)記載の通り、sudoを使用し、実行時にrootユーザーを指定し、rootユーザーのジョブキューにtext.txtの内容を設定しようとしていますが、反映できません。ちなみに、test、apacheユーザーに対しても試してみましたが反映できませんでした。以下に作業内容を記載しますので、どこがおかしいのか教えていただければありがたいです。 【作業内容】 (1)sudoを設定する。  1)sudoをインストールする。  2)/etc/sudoersを編集する(コマンドvisudoで実施)。   a)ユーザーと、それぞれの実行権限の追加。     root ALL=(ALL) ALL     test test=(root) ALL     apache test=(root) ALL   b)wheel を全てのホストで、全てのユーザーのすべての権限を実行できるように設定     %wheel ALL=(ALL) ALL   c)wheelはパスワードを入力せず、コマンドを実行できるように設定。     %wheel ALL=(ALL) NOPASSWD: ALL (2)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からroot権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへroot権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u root crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u root crontab /var/document/test.txt  3)ログインユーザーapacheで実行する   ※ユーザーapahceでログインすることは不可能です(以降省略)。 以上のコマンドそれぞれ実行し、rootユーザーのジョブキューにtest.txtの内容が入ることを確認。 (3)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からtest権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへtest権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u test crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u test crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、testユーザーのジョブキューにtest.txtの内容が入ることを確認。 (4)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からapache権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへapache権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u apahce crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u apache crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、apacheユーザーのジョブキューにtest.txtの内容が入ることを確認。 (5)(2)で試したコマンドを、PHPプログラムに埋め込み実行する。system()、sell_exec()、exec()でそれぞれ実行しました。  1)system("sudo -u root crontab /var/document/test.txt");  2)sell_exec("sudo -u root crontab /var/document/test.txt");  3)exec("sudo -u root crontab /var/document/test.txt"); 以上の内容をプログラムに記述し、実行しましたが、test.txtの内容をrootのジョブキューに、設定できませんでした。 《確認コマンド》 sudo -u root crontab -l なお、test、apacheユーザーも同様に試してみました。 ※testユーザー権限で実行  1)system("sudo -u test crontab /var/document/test.txt");  2)sell_exec("sudo -u test crontab /var/document/test.txt");  3)exec("sudo -u test crontab /var/document/test.txt"); ※apahceユーザー権限で実行  1)system("sudo -u apache crontab /var/document/test.txt");  2)sell_exec("sudo -u apahce crontab /var/document/test.txt");  3)exec("sudo -u apache crontab /var/document/test.txt");  以上のプログラムを実行後、それぞれのジョブキューを確認しましたが、text.txtの内容をcrontabへ設定できませんでした。 《確認コマンド》 sudo -u test crontab -l sudo -u apache crontab -l  system()、shell_exec()、exec()、それぞれの関数を使用し、管理者権限以外のコマンド(mkdir、cp、mv、rm等)を実行した場合、問題ないので、本問題は実行権限と考えていますが、以上の情報で何がどうおかしいの分かりますでしょうか?お手数をかけますが、ご回答お願いします。 【niftyでの回答】  niftyのサイトに以下のような質問・回答がございますが、本投稿の内容とほぼ同じと認識しています。  但し、niftyの回答をそのまま実行してみましたが、実行できませんでした。環境の違いのせいでしょうか? http://oshiete1.nifty.com/qa7939488.html ※上記設定(/etc/sudoers)は、セキュリティレベルが低いのは十分承知しています。以上の処理が正常に動作確認後、徐々にセキュリティレベルを上げていく予定です。

    • 締切済み
    • PHP
  • lprコマンド(印刷)を実行すると、lprコマンド実行ログを取るように

    lprコマンド(印刷)を実行すると、lprコマンド実行ログを取るようにしたい。 osはCentOSです。このCentOS上からlprコマンドを実行すると 指定されたプリンタから印刷されます。ログも取りたいと思い、 CentOS上にて、/etc/syslog.confに、 lpr.* /var/log/lpr.log を追記し、syslogを再起動させました。しかし、 プリンタからlprコマンドで印刷をしてもログは記録されません。 利用できるファシリティにlprはあるはずなのですが・・・。 プリンタの実行ログを作成するには何か足りない設定があるのでしょうか?

  • PHPでUNIXコマンドを発行してファイルへ追記できない

    PHPでUNIXコマンドを発行してファイルへ追記できない 現在,/etc/aliasesファイルへ,PHPから文字列を追加したいのですが,うまくいかず,皆様のお知恵を頂ければと思います. 現在,sudoersにapacheユーザを追加しており,パスワードを渡せば全権限を持たせています. それで,PHP上で $command = "echo '".___APACHEPASS___."' | sudo -S cp /etc/aliases /etc/alias_bak/aliases.bak.".date("YmdHis"); exec($command, $output); とすれば,aliasesファイルのバックアップファイルが生成されます. ところが,文字列を追記するため,コマンド $command = "echo '".___APACHEPASS___."' | sudo -S echo '{$_POST['user_name']}: | /var/www/html/test.php' >> /etc/aliases"; を発行しても追記されません. バックアップファイルコマンドが実行されれば,/var/log/secureにログが残りますが,追記コマンドでは失敗のログすら記録されていません. なお,コマンド自体を表示させると, echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases となっており,rootのコマンドラインで echo 'user-name: | /var/www/html/test.php' >> /etc/aliases を実行すれば,正常に追記されます. 乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです. よろしくお願い致します.