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 Fatal error: Cannot redeclare phpでのエラー

2009年12月07日 過去Blog
今回RSSを取り出すのに使っていた「MagpieRSS」を以下のように使っていたのですが、 include ('rss_fetch.inc'); require_once 'code_table.ucs2jis'; require_once 'jcode.php'; 繰り返し処理を行おうとしたところ、Fatal error: Cannot redeclare phpでのエラーとういうエラーが出…
「php Fatal error: Cannot redeclare phpでのエラー」をはてなブックマークに追加

objective-C 日時関連

2011年04月28日 過去Blog
http://d.hatena.ne.jp/KishikawaKatsumi/20081121/1227275688 http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
「objective-C 日時関連」をはてなブックマークに追加

PHP 日付の減算・差分を求める

2010年06月01日 過去Blog
define( "ONE_DAY_SEC", 24 * 3600 ); // 日付けの差分をとる関数 function dateDiff( $date1, $date2 ) { return ( strtotime( $date1 ) - strtotime( $date2 ) ) / ONE_DAY_SEC; } // 実行サンプル $date1 = date('Y/m/d…
「PHP 日付の減算・差分を求める」をはてなブックマークに追加

Word Pressの自動アップグレードに失敗する

2011年01月12日 過去Blog
ルートディレクトリが見つかりません ディレクトリが見つからない関連のエラーは以下のように、「wp-config.php」に追加すれば、直るようです。 参考:「wp-config.php_の編集」 define('FTP_BASE', '/path/to/wordpress/'); define('FTP_CONTENT_DIR', '/path/to/wordpress/wp-content/'…
「Word Pressの自動アップグレードに失敗する」をはてなブックマークに追加

zencart ダウンロード商品の登録方法

2010年06月30日 過去Blog
以下のサイトを参考にすれば、ダウンロード商品の登録が出来ました。 http://zencart-pro.com/help/node/180
「zencart ダウンロード商品の登録方法」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy