• ベストアンサー

mod_phpで、rootしか実行できないコマンドを実行させたい。

セキュリティに対して危険だというのは承知の上なのですが、 どうしても実行させたいです。 この場合、どのようにするのが(セキュリティ対策を含めて)得策なのでしょうか? なお、レンタルサーバのVPSを利用していまして、 CentOS4、Apache2.0.52、MySQL4.1.20、PHP4.3.9です。 また、当方、PHPとPerlしか言語の知識はないため、 C言語をつかってハンドラ(でしたっけ?)をつくって、Apacheをカスタマイズ(?)というのはできません。 どうぞ、お助けください。 よろしくお願い申し上げます。

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

質問者が選んだベストアンサー

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

コマンド実行ならsudoを導入すればよいのでは?

daisuke_dm
質問者

お礼

ありがとうございます。 #1さんのお礼にも書いたように、 #セーフモードを使っているので、system/exec/passthru関数が使えないという問題があるのですが。。。 #セーフモードを一時的にOffにする方法はないのでしょうか? その問題をおいておいて・・・ おっしゃった方法は、具体的には以下の通りで問題ないでしょうか? //========================================================= visudo を使って、 /etc/sudoers の内容を、以下のように編集し、 root ALL=(ALL) ALL apache ALL=/bin/hoge,/var/www/php_cli/foo.php NOPASSWD (apacheはahacheの実行ユーザ) //======================================================== #chown root.root /bin/hoge #chmod 701 /bin/hoge とし、 //======================================================== <?php system("/usr/bin/sudo /bin/hoge") ?> のようにするということでしょうか? また、このようにsudoを使うことは、 セキュリティ的には問題ないでしょうか・・・? 以上、よろしくお願い申し上げます。

daisuke_dm
質問者

補足

補足させてください。 #1さんへの補足に似た内容なのですが・・・。 セーフモードがOnでも実現可能かもしれない方法を思いついたので・・・。 セーフモードがOnでも、 fopenは、 「fopen() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します」 だそうなので、それを同じにしておけば、 system("/foo/bar/hoge")としたい場合、 system関数でなく、fopenのwオプションで、 「$_SERVER["DOCUMENT_ROOT"] . '/../data/cron/」 に、ランダムなファイル名で、「/foo/bar/hoge」と書き込む。 (1ファイルだと衝突がおきるため) で、cronで毎分とかで、rootユーザによって、 これらのファイルの内容を読み込み、実行し、終わったらこれらのファイルを削除するような、シェルスクリプト(苦手ですが)かphp_cliを実行する。(ここではロックファイルをつくったほうがいいかな) というのはどうでしょう? シンプルで、問題発生時にも問題の切り分けができていいかなあと・・・。 よろしくお願い申し上げます。

その他の回答 (1)

回答No.1

実行したいコマンドをrootの所有に変更しsetuidビットをセットすれば良いです。

daisuke_dm
質問者

お礼

ありがとうございます。 1つ言い忘れましたが、セーフモードは有効です。すみません。 ini_set("safe_mode_exec_dir","/"); は危険ですよね・・・。 という問題・・・どうすれば回避できるでしょう。 //============================================= え、その問題をいったんおいといたとして・・・ ご回答の、 実現方法がよくわからなかったものの、 2種類、やり方を考えてみました。 必要十分でしょうか? あと、セキュリティ的にも・・・。 (1) 前もって #chown root.root /bin/hoge #chmod 700 /bin/hoge (<=不要?) #chmod u+s /bin/hoge としておいて、 <?php system("/bin/hoge"); ?> はどうでしょうか? //======================================== (2) <?php $ApacheUserUid = posix_getuid(); posix_setuid(0); //あくまで例 system("updatedb"); posix_setuid($ApacheUserUid); ?> はどうでしょうか? 以上、よろしくお願い申し上げます。

daisuke_dm
質問者

補足

補足させてください。 Setuidはセキュリティ的にあぶないという話を他のサイトでみたのですが、 system("/bin/hoge"); の代わりに、 system("/www/php_cli/hoge.php"); という、cliなphpを実行させて、 (前もって、hoge.phpに対しても、 #chown root.root /bin/hoge #chmod 700 /bin/hoge (<=不要?) #chmod u+s /bin/hoge と同様なことを前もっておこなっておく) で、その中でさらにsystem("/bin/hoge"); するというのはどうでしょう? また、php_cliにすれば、cli.iniというファイルで、 php_cli用の設定ファイルをつくれるらしいので、 そうすれば、php_cliなphpファイルの場合のみセーフモードを有効にできるかと。 どうでしょうか? よろしくお願い申し上げます。

関連するQ&A

  • レンタルサーバー並みのWEBサーバー構築したい

    DTI VPSサーバをかりました。 【ホームページセット】CentOS(32bit) Yum Apache Python FTP Perl PHP のみがデフォルトでインストールされています。 【利用目的】WEBサーバーとして運用を考えています。 MySQLのみインストールしました。 一般的なレンタルサーバー「ロリポップやさくらサーバー」並みにしたいのですが・・・。 その他何をインストールすればよいのかがわかりません。 誰か教えていただけませんでしょうか? または、どこか参考になるサイトなど教えていただけませんでしょうか? pearも使いたいので、インストール予定です。 誰かご教授お願いします。

  • 別のサーバーへ、CentOSサーバーの引越し

    こんにちは 今お世話になっているレンタルのVPSサーバーについて、 全く同じ条件で、より安価なものを見つけたので、 他社のVPSサーバーへ引越しようと思っています。 現在のOSはCentOS5.9です。 今後はCentOS6系を利用する予定です。 サーバーの中では、主に以下の用途で動かしていますが、 その他にも、細々色々とインストールして利用しているものがあると思います。 - ・MySQL5.5 ・PHP5.4 ・JAVA1.7 ・Apache2.2.3 ・Perl5.8 MySQLdumpをとることで、 改めてインストールしたMySQLに、 MySQLのデータは移行できるかと思っていたり、 Apacheの設定やファイルについても、 コピペすることで、大部分を移行できるとは思っているのですが、 yumやrpmでインストールしたパッケージを中心に、 どうやって引っ越しをしたらいいか分からないでいます。 できれば、 旧環境の各種インストール済みのパッケージ類やバージョンを 完全に再現出来たら嬉しいです。 yum listで一覧を調べて、 新しい環境でyumしなおすしかないんでしょうか。 私の調べ方が悪いんだと思いますが、 参考になるページを見つけられませんでした。 初めての引越しで、わからないことだらけですが、 引越し手順や方法やスクリプトなど、 何か参考になるページやアドバイスをいただけますと 大変ありがたい次第です。 どうぞ宜しくお願い致します。

  • phpの高速化について

    apache + php4.3 + mysql にて開発を行う予定(OS:linux)ですが、処理速度を速めるために、apacheモジュールを組み込む必要があるのでしょうか? (perlでいうと、mod_perlのようなapacheモジュール) アドバイス、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP5.1.4を入れたんですが…

    基本的な質問であると承知していますが、質問させてください。 PHPを5.1.2から5.1.4へ移行させたのですが、phpinfo()で設置後の状態を見ると、バージョンが5.1.2のままでした。 これは古い5.1.2の設定がどこかに残っているということなんでしょうか?でもapache2handlerのApache Versionを見るとPHP/5.1.4となっていました。 phpフォルのほか、WINDOWS,SYSTEM32内の関係するファイルは一度削除して入れなおしたので、他に思い当たるところがありません。 知ってる方いらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでrsyncを実行したい

    初めて質問します。 rsyncについての質問です。 通常は、cronで実行し緊急の際にWEBから実行できればと思い 次のようなソースを書いて実行してみました [synctest.php] ----------------------------------- <?php echo "SYNC START\r\n"; system('/usr/bin/rsync -avz --delete /usr/local/apache2/htdocs [送信先IP]:/usr/local/apache2'); echo "SYNC END\r\n"; ?> ----------------------------------- これをコンソール上から実行した場合問題なく動作します #>php synctest.php ソースをapacheの公開ディレクトリに配置し、ブラウザから実行した場合は全く動きません いろいろなサイトを調査し、rsyncをフルパスで指定したり phpの所有者やオーナーをapacheに変更したりしてみましたが変化がありません suPHPを導入すればうまくいくという情報を元に導入してみましたが設定がおかしいのかうまくいきません しかも従来のPHPが動作しなくなってしまいこちらは断念しました なにか参考例でも結構です 事例のようなものがありましたらご教示いただけませんでしょうか? よろしくお願いします --------------------------------- [主な環境:rootでログインし作業しています] CentOS5.3 httpd-devel-2.2.13-jason.3 httpd-2.2.13-jason.3 php-mysql-5.2.11-jason.1 php-devel-5.2.11-jason.1 php-common-5.2.11-jason.1 php-pdo-5.2.11-jason.1 php-ncurses-5.2.11-jason.1 php-cli-5.2.11-jason.1 php-xml-5.2.11-jason.1 php-mbstring-5.2.11-jason.1 php-5.2.11-jason.1 php-gd-5.2.11-jason.1 php-mysql-5.2.11-jason.1 mysql-5.0.77-3.el5 mysql-server-5.0.77-3.el5

    • ベストアンサー
    • PHP
  • MySQLとPHP、Perlの連携はどうするの?

    Apache、PHP、Perl、MySQLをインストールしました。 次に、PHP、PerlでMySQLを使えるようにしてほしいと言われました。 なんのことかさっぱりなので、 なにをすることなのか、なにをもとめられているのか、 初心者で意味不明です。この内容について、詳しいサイトとかないでしょうか? また、実際にどのように実施すればよいか教えてください。

    • ベストアンサー
    • MySQL
  • ubuntuで、PHPからMYSQLが見えません。

    MySQLとPHPがつながりません。 (コマンドラインからはmysqlにログインできます)。 どなたか、原因等わかるかたがいらっしゃったらご教授ください。 バージョンは以下の通りです。 MySQL-5.0.38 Apache-2.0 PHP-5.2.1 ubuntu-7.04 全てapt-get installで、APACHE、MYSQL、PHPの順でインストールしています。 phpinfoでもmysqlの項目表示がされず、またmysql_connectなどの 関連するコマンドも「call to undefined~」のエラーが出力されてしまいます。 /etc/php5/apache2/php.iniに、 extension=mysql.so extension_dir="/usr/lib/perl5/auto/DBD/mysql/ の記述もしてみましたが状況は変わりませんでした。 (/usr/lib/perl5/auto/DBD/mysql/mysql.soをlocateで見つけました) 以上、お手数でございますがどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • LAMP(Linux・Apache等)の最適組合せ

    LAMP(ランプ)における、OSであるLinux(CENTOS)、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPHPの最適バージョンの組み合わせを教えていただきたく。 いづれも最新バージョンの組み合わせで問題はないものでしょうか。 CENTOSのバージョンに規定される使用可能なPHPのバージョンなど、互いのバージョンが影響しあうことがあるかのように聞いています。 ならば、各4種(CENTOS Apache  MySQL PHP)最適バージョンの組み合わせのリストがあるのでしょうか。

  • さくらvpsでのphpのmysqlの接続について

    さくらvpsでcentos6を選び、yumでphpとmysqlをインストールしました。 phpmyadminにてhttpd、php、mysqlの連携は確認しました。 var/www/htmlに作成したphpスクリプトを入れて、データベースと連携して動作させようと思います。 ローカルでphpを作成したときは、mysql_connectの$dbserverはlocalhostでしたが、現在はどのように入力すればいいのでしょうか。 $dbserverには登録したサーバのIPアドレスを入力するのですか?それともlocalhostのままでいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Webサーバー(PHP+Apache)の設定指針

    CentOS5.5+PHP5.2+MySql5.1+Apache2.2でウェブシステムのサーバーを構築しています 設定は必要最低限しか変更していません ちゃんと意味を理解して設定しないとなと思いつつ、膨大な項目を目の前に挫けそうです セキュリティ的にここはこう設定しておかないとマズい!というような設定指針をまとめたサイトがありましたら、教えてください よろしくお願いします