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


ピックアップ記事

[11] NSUserDefaults を使ってデータを保存・取り出し

2010年12月20日 過去Blog
このチュートリアルでは、各種データをNSUserDefaultsを使って、保存、抽出する方法について説明します。 NSUserDefaults は、データベースの知識を必要としないので、SQLite3のようなデータベースを必要としない(ゲームのハイスコア、ログイン情報、アプリの設定など)、小規模のデータを扱う場合には便利で簡単です。 今回は、例として、初回時にアプリを起動し、名前を入力すると、保存され、次回以降の起動時には、保存された名前が自動的に名前が表示されるアプリケーションを作成します。 …
「[11] NSUserDefaults を使ってデータを保存・取り出し」をはてなブックマークに追加

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のキャンセルボタンを無効にし、新規追加ボタンを実装する」をはてなブックマークに追加

iTunes Store の購入履歴とオーダー(注文)番号を表示する方法

2011年01月12日 過去Blog
iTunes Store の購入履歴とオーダー(注文)番号を表示する方法
iTunes Store の購入履歴とオーダー(注文)番号を表示する方法 iTunes がインストールされているコンピュータをお使いの場合は、こちら をクリックすると、 iTunes を起動して購入履歴を表示できます。Apple ID とパスワードの入力を求められます。 次の手順で iTunes Store および Mac App Store で購入したコンテンツのリストを表示することもできます。…
「iTunes Store の購入履歴とオーダー(注文)番号を表示する方法」をはてなブックマークに追加

facebook 開発者登録出来ない

2011年05月25日 過去Blog
以下のエラーが出る時 この操作を実行するには、アカウントの認証を完了する必要があります。携帯電話またはcredit cardを追加してアカウント認証を行ってください。 「いいね」が5名以上もしくはfacebookアカウントを取得して10ヶ月以上経っている方でなければ 許可が出ないという制約があるようです。 いくら登録や認証をしても意味がないみたいです。 というか、制約にひっかかっているなら、…
「facebook 開発者登録出来ない」をはてなブックマークに追加

[9]:SQLiteを使ってToDoリストアプリを作成(4)

2010年12月13日 過去Blog
今回がTodoリストの最後になります。SQLiteデータベースを使って、todoアイテムを追加・編集および、削除する詳細について扱って行きます。 以下の3つの記事を既に読まれている方を想定していますので、まだのかたは、先に以下の記事をご覧ください。 [6]:SQLiteを使ってToDoリストアプリを作成(1) [7]:SQLiteを使ってToDoリストアプリを作成(2) [8]:SQLiteを使ってToDoリストアプリを作成(3) …
「[9]:SQLiteを使ってToDoリストアプリを作成(4)」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy