Cronなどbatch実行はroot、URL叩いて実行するのはapache

投稿日 : 2020年06月24日
カテゴリー : 技術情報
Cronなどbatch実行はroot、URL叩いて実行するのはapacheの画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして7年~の経験があります。WordPressは2年半~の経験があります。その他、jQuery、HTML、CSSも使用します。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

今回は「自動処理でファイルを作成、更新、削除などをしたいけれど、その権限周りで色々大変だった」話です。

先に結論

Cronのbatch処理をrootが行うように指定していても、URLを叩いて実行させてるとURLの実行者はapacheになる

というお話です。

やりたかったこと

  1. Cronで設定した、とあるプログラムを実行
  2. そこからURLを叩く。URL先ではPHPが実行され、ファイル操作が行われる。
  3. ファイル操作が行われて終了

書いてみると本当に単純なことがしたかっただけ…ですが、2の「PHPが実行され、ファイル操作が行われる」ができませんでした。

ファイル操作ができなかった原因

調べてみたところ、URLを叩いて実行した先の実行者はapacheでした。

echo exec('whoami');

apache?root指定しているのに?

そう、URLを経由すると実行者がapahceになるんです。
ちょっと考えてみればわからなくもないですね。
サーバーでCron起動するのはrootです。rootがURLを踏みに行きますが、その踏んだ先で動作するのはrootではないんです。URLでPHPプログラム、みんな大好きapacheが実行することになるんです。

そのため、操作したいディレクトリやファイルの所有者がrootになっていると、apacheは操作できない。権限0777であればできますが、現実的ではありませんよね。

対処法

  • ファイル操作するすべてのものの所有者をapacheにする
  • ファイル操作をすべてrootで行うようにする

のどちらかになると思います。

まとめ

  • Cronでroot実行していても、その仕組みによってはapacheが実行していることもある。
  • 特にディレクトリやファイルを操作するようなプログラムを実行する場合、ユーザーがroot以外に変わっていることで操作が完了できない可能性が生じる。

わかってみれば「なるほどそういうことね!」となりますが、行きつくまでに少々時間がかかりました…ついrootで実行してるんだから全部できるはず、私はroot様よ!なのになんでできないの!?と考えてしまいました。

ソースレビュー企画-私にソースレビューをさせてください!-

皆様のプログラムのソースを、私に読ませてください!

ソースレビュー企画-私にソースレビューをさせてください!-

プログラムを勉強し始めたばかりの方から、業界云十年のベテランの方でも大歓迎です!どんなソースでもありがたく拝見します!

※無料です

ソースレビュー企画-私にソースレビューをさせてください!-の詳細、お申し込みはこちらからお願いします。

運営サイト紹介

みんなのきょうのごはん-みんごは-

みんなのきょうのごはん-みんごは-

「みんなのきょうのごはん-みんごは-」きょうのみんなのごはんは?Twitterに投稿された美味しそうな「食べ物」画像を、リアルタイムで表示します。

みんごははここからアクセスしてね !

その他広告