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


ピックアップ記事

Zencart : セッションについて

2009年11月20日 過去Blog
Zencartのセッションについてですが、以下の環境に該当する場合は、少々対応が必要なようです。 サーバが専用SSLではなく、共用のSSLを利用している。 カスタマイズの際にURLをそのまま張り付けて使用している。 静的htmlへのリンクがZencartのサイト内に含まれている。 私の管理するZencartのサイトは上記の全てに当てはまっていました・・・orz 解決策の前にZencartのセッションの基本的な仕組みについて説明したいと思います。 …
「Zencart : セッションについて」をはてなブックマークに追加

UITableView のcellの複数選択を実装する

2011年01月25日 過去Blog
//セルが選択された際に呼び出される - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //選択されたセルを取得 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; /…
「UITableView のcellの複数選択を実装する」をはてなブックマークに追加

UIActionSheet を複数使った場合のメソッドの振り分け

2011年05月03日 過去Blog
1つのクラスファイル内で、複数のUIActionSheetを使う時はtagプロパティを使って、どのアクションシートのボタンがクリックされたのかを判別します。 actionsheet.tag = 1; 詳しくは以下のサイトを参照。 http://technical-iphone.blogspot.com/2010/05/uiactionsheet.html
「UIActionSheet を複数使った場合のメソッドの振り分け」をはてなブックマークに追加

USBメモリがフォーマットできない

2010年10月07日 過去Blog
先日、USBメモリをさしたまま、OSの再インストールをしていると誤って、USBメモリの中のパーティションも削除してしまいました。 そのままだとUSBメモリが使えなくなってしまったので、以下の方法でフォーマットしました。 コントロールパネル > 管理ツール > コンピュータの管理 > ディスクの管理 右下に表示されるディスクの一覧から該当するUSBメモリを探し、右クリック、(パーティションがあ…
「USBメモリがフォーマットできない」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy