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


ピックアップ記事

IE・FireFoxで使えるお気に入りボタン(ブックマークボタン)

2009年12月09日 過去Blog
<script type="text/javascript"> <!-- if(navigator.userAgent.indexOf("MSIE") > -1){ //Internet Explorer document.write('<!-'+'-[if IE]>'); document.write('<input type="button" valu…
「IE・FireFoxで使えるお気に入りボタン(ブックマークボタン)」をはてなブックマークに追加

SQLite で Limit や ORDER BY RANDOM()など

2010年12月16日 過去Blog
SQLite で抽出データを並び替え SELECT * FROM テーブル名 ORDER BY フィールド1 DESC, フィールド2 DESC, フィールド3 ASC ; 上記のようにすることで、「テーブル名」という名前のテーブルの全てのデータを「フィールド1」の降順で並べ、「フィールド1」が同値の場合、次の「フィールド2」を降順に並べ、さらに「フィールド2」も同値の場合、「フィールド3」を基準に昇順に並び替えます。 ASC は結果が昇順に並びかえ、 DESC はそれが降順に並ぶかえることを表します。そのどちらも指定されていない場合、 ASC で並び替えられます。 SQLite でランダムにデータを抽出する まず、SQLite でランダムにデータを取り出す方法 SELECT * FROM entry ORDER BY RANDOM(); SQLite で行数指定(LIMIT)でデータを抽出する SELECT文では、WHERE句などを指定した場合でも条件に一致する全てのデータを取得します。この取得する件数を制限したい場合にはLIMIT句を使います。書式は以下の通りです。 SELECT カラム名, ... FROM テーブル名 LIMIT 行数; …
「SQLite で Limit や ORDER BY RANDOM()など」をはてなブックマークに追加

UIViewControllerのインスタンスメソッドとタイミング

2011年01月13日 過去Blog
どのタイミングに実行されるメソッドなのかを調べるには、以下のようにすれば、デバッガにNSLogが出力されるタイミング(メソッドが実行されるタイミング)を調べることが出来ます。 - (void)loadView { [super loadView]; NSLog(@"loadView"); } - (void) viewWillAppear:(BOOL)animated { NSLog(@…
「UIViewControllerのインスタンスメソッドとタイミング」をはてなブックマークに追加

表示領域外部(上部)にラベルを配置し、フリックにて表示させる

2010年12月17日 過去Blog
画面にテーブルビューが表示されている(XCodeテーブルテンプレート)を想定しています。以下の画像はtabBar,Navigationなど入っていますが、気にしないでください。 …
「表示領域外部(上部)にラベルを配置し、フリックにて表示させる」をはてなブックマークに追加

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 日時関連」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy