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 MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する

2010年03月30日 過去Blog
select c1,c2,c3 from A union all select c1,c2,c3 from B 参照元:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1115439551 divorce lawyer san diego…
「php MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する」をはてなブックマークに追加

iPhone CoreLocation で位置情報、方位情報の取得

2011年04月28日 過去Blog
http://www.bright-sys.co.jp/blog/iphone-corelocation-1/ http://www.bright-sys.co.jp/blog/iphone-corelocation-2/ divorce lawyers san diego…
「iPhone CoreLocation で位置情報、方位情報の取得」をはてなブックマークに追加

モーダルビューとは?

2011年01月13日 過去Blog
モーダルビューとは、一時的なビューのことで、animated : Yes にすると、下の方からニョロっと出てきます。 [self presentModalViewController:picker animated:YES];
「モーダルビューとは?」をはてなブックマークに追加

php 文字列を指定した文字ごとに分割する wordwrap

2010年01月29日 過去Blog
以下のようにすることで、10文字ごとに "n"で区切ることが出来ます。 参照元:http://www.php.net/manual/ja/function.wordwrap.php…
「php 文字列を指定した文字ごとに分割する wordwrap」をはてなブックマークに追加

ABPeoplePickerNavigationControllerのキャンセルボタンを無効にし、新規追加ボタンを実装する

2011年01月17日 過去Blog
viewController内に以下のようにインターフェースを宣言します。 @interface ABPeoplePickerNavigationController (Expose) @property (nonatomic, assign) BOOL allowsCancel; @property (nonatomic, assign) BOOL allowsCardEditing; @end 同じファイル内に、以下のように設定します。 ABPeoplePickerNavigationController *contactsNavController = [[ABPeoplePickerNavigationController alloc] init]; contactsNavController.tabBarItem.title = @"連絡先"; contactsNavController.allowsCancel = NO; contactsNavController.allowsCardEditing = YES; contactsNavController.peoplePickerDelegate=self; …
「ABPeoplePickerNavigationControllerのキャンセルボタンを無効にし、新規追加ボタンを実装する」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy