• 締切済み

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関数を用いて上記コマンドの実行は不可能なのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

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

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

ciaotake
質問者

お礼

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

関連するQ&A

  • 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をインストールしているので、パッケージは導入されています。) 多分「’」がうまく機能してないのだと思うのですが、 どのように記述すればコマンドの実行結果が表示されるのでしょうか ご教授お願いします。

  • 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のファイルの場所はあってます) 不足の点などあればご指摘ください。

  • visudo execコマンド sudo

    失礼します phpからexecを実行する際に、visudoを編集して指定のユーザーの場合execコマンドだけsudoを許可するように編集をしていきたいのですが、execコマンドがどこにあるのかがわかりません サンプルを見てみると例えばshutdownコマンドをhogeユーザーに許可する場合は hoge ALL=NOPASSWD: /sbin/shutdown のように記載するとあったので whereis shutdownで調べてみると確かにshutdownのパスが出てくれるのですが execは上記のようにパスが出てきてくれません。 そもそもphpから呼び出しているのでlinuxコマンドとして考えるのは見当違いなのでしょうか?ご教授頂けると幸いです。 宜しくお願い致します。

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

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

  • ant debugの実行

    ブラウザでAndroidアプリケーション開発が行えるようなシステムをCent OSで開発しています。 PHPを使っています。 ■問題 ・サーバー上のコマンドライン端末でのant debugコマンドは実行可能(Build Successfull) ・ターミナル(Tera Term)上でのant debugコマンドは実行可能(こちらもBuild Successfull) ・ブラウザからのant debugコマンド(PHPのsystem関数使用)が実行不可。  以下ターミナルでみたerror_logです。↓ BUILD FAILED /home/nameko/android-sdk-linux/tools/ant/build.xml:705: The following error occurred while executing this line: /home/nameko/android-sdk-linux/tools/ant/build.xml:718: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre" ------------------------------------ 環境パスの設定ミスでしょうか。 調査しつつ調整しているのですが、いまいち環境パスの設定の仕方(どこのどのファイルをviコマンドを用いるか)、反映の仕方(sourceコマンドであっているのか)を詳しく知りたいです。 また、1つ気になる所がありまして、 printenvコマンドでパスの一覧を見ると、 ・PATH=~~~~ ・ANDROID_SDK=~~~~~ ・ANDROID_SDK2=~~~~~~ ↑の「~~~」の一部分に、”ダウンロード” という日本語が設定されています。OS間の互換性でのerrorである可能性もありうるので、こちらのパスも直したいのですが、変え方がわかりません。 どなたか教えていただけると幸いです、よろしくお願いします。

    • 締切済み
    • PHP
  • ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません

    ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません windowXP, perl5 で開発しています。 簡単なプログラム(test.pl)なのですが ----- #!/usr/bin/perl use IO:Socket メール送信処理 1; ----- ブラウザ上から実行すると正しくメール送信されますが、 これをコマンドプロンプトから ----- perl test.pl ----- とすると、 Can't locate IO/Socket.pm と出てしまいます。 pathが通ってないとか絶対パスとかそのあたりかと思い、 socket.pmのあるパスを通したりしましたが、変化しません。 use IO::Socket を絶対パスとかで指定するのでしょうか? 解決方法をお教え頂ければと思います。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 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」で運用しているよ。 といった意見がありましたら、ご教授いただけると助かります。 よろしくお願いします。

  • dtexecコマンドを使ってDTSパッケージを実行する方法

    SQLサーバー2005でdtexecコマンドを使って DTSパッケージを実行する方法について質問です。 SQLサーバー2000から移行したDTSパッケージを、 dtexec /DTS 「パッケージ名」 /SERVER 「サーバー名」 とコマンドラインから実行しましたが パスが無効です、というエラーになってしまいます。 SSISへ格納したパッケージを実行するには、引数/DTSの部分を どのように指定すればよいのでしょうか。

  • 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 を実行すれば,正常に追記されます. 乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです. よろしくお願い致します.

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

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

専門家に質問してみよう