2010年02月02日 過去Blog
ブラウザからPHPスクリプトにアクセスして、PHPプログラムからsudoコマンドを実行する方法です。 私の場合は、手元のfedoraが動いているサーバで試してみましたが、「anysense-devel」さんの記事通りに実行出来ましたので、ご紹介、というか今後の自分のためにもメモしておきます。
以下、参照元「anysense-devel」さんの記事です。
ご存知の通りPHPからコマンドを実行するにはexec()やsystem()等を使えばいいんですが、Apacheに実行権限が無いファイルを扱う場合はsudoしてから実行する必要があります。
<?PHP
$cmd = "echo 'password' | sudo -S ls /root";
exec($cmd, $output);
print_r($output);
?>
みたいに-Sを付けてやればパイプでパスワードを渡すことが出来ます。 ここで入力するのはもちろんapacheが動いているユーザーのパスワードです。 apacheがどのユーザー権限で動いているかはhttpd.confのUserディレクティブとGroupディレクティブで確認できます。 因みにCentOS5.1でyumでapacheをインストールした場合はapacheというグループのapacheというユーザーとして動いています。 PHPスクリプト内のexec()関数で呼び出されたコマンドもこのユーザーとして実行されます。 以下、Apacheを実行しているユーザーをapacheと仮定して書きます。apacheは環境に応じて適当に読み替えてください。 sudoする際に渡すパスワードはapacheのものですが、デフォルトではapacheユーザーにはパスワードがありません。パスワードが無い場合sudoできませんので何でもいいのでパスワードを指定してあげましょう。
sudo passwd apache
次にapacheユーザーがsudoできるようにsudoersファイルを編集します。ルート権限で
visudo
と入力するとsudoersファイルを編集できますので、末尾に
apache ALL=(ALL) ALL
と追記します。さらに
Defaults requiretty
という行をコメントアウト(行頭に#を追加)して端末を持たないユーザーからのsudoを許可します。 これでapacheユーザーからsudo出来るようになりました。冒頭のPHPスクリプトへブラウザからアクセスして/rootの中身が見れたら成功です。 http://hogehack.blog80.fc2.com/blog-entry-36.html

この投稿へのコメント

コメントはまだありません。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA


ピックアップ記事

PHP サーバの空き容量、ディレクトリ内のファイル一覧を調べる

2010年08月11日 過去Blog
//ファイル一覧を表示するパスを指定する $path = "../member"; //ディレクトリを表示する print("ディレクトリ「".$path."」の一覧"); //文法 disk_free_space( パス ) //disk_free_spaceは指定したパスに対応するドライブの空き容量をバイト数で //返す print("ドライブの空き容量 ".disk_free_spac…
「PHP サーバの空き容量、ディレクトリ内のファイル一覧を調べる」をはてなブックマークに追加

phpでランダムなパスワードを生成

2010年01月29日 過去Blog
使用例 //パスワード生成クラス読み込み require_once 'My/Password.php'; //デフォルトは8桁のパスワードが生成されます $password = My_Password::getPassword(); var_dump($password); //『32桁、小文字英字のみ』のパスワード生成 $password = My_Password::getPassword(32, 'small'); var_dump($password); …
「phpでランダムなパスワードを生成」をはてなブックマークに追加

PHP cURLでPOST送信

2010年03月24日 過去Blog
<?php $params = array( "login-name" => 'nakamuraya', "login-password" => 'gerogero', "submit" => "ログイン" ); $fp = fopen("tmp", "w"); $ch = curl_init("http://www.phppro.jp/membe…
「PHP cURLでPOST送信」をはてなブックマークに追加

WHOIS pending delete から 取得可能になるまで

2010年03月24日 過去Blog
中古ドメインを探す際、whois の pending delete 表示から取得可能になるまでの期間は5日間? …
「WHOIS pending delete から 取得可能になるまで」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy