プロが教える店舗&オフィスのセキュリティ対策術

サーバー初心者です。ご存じの方おられましたら教えて頂けたら嬉しいです。

PHPでchmod()をすると、
Operation not permitted
というエラーが表示されます。
apacheにその権限が無いと思うのですが、
こういった場合はどのように対応したらいいのでしょう。。

環境は
CentOS5.3
PHP5.3
になります。
よろしくお願いします。

A 回答 (3件)

apache から PHP を実行する場合は、実行ユーザが apache となります。


よって、chmod() 対象のファイルまたはディレクトリに apache ユーザーが操作できる権限がついていない場合に、エラーが表示されます。

エラーを回避するには、以下のような方法が考えられます。

1. 操作対象のファイルまたはディレクトリに、最初からapache ユーザが操作できる権限を付与しておく
2. 下の方が回答しているとおり、system() 関数経由で sudo chmod コマンドを使って、root 権限等で chmod コマンドが実行されるようにする
3. suEXEC を利用する。

PHP の chmod 関数については、以下を参考にしてください。
http://jp.php.net/manual/ja/function.chmod.php

PHP の system 関数については、以下を参考にしてください。
http://jp2.php.net/manual/ja/function.system.php

Linux の sudo コマンドの使い方については、以下を参考にしてください。
http://linux.kororo.jp/cont/intro/sudo.php

Linux の chmod コマンドについては、以下を参考にしてください。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …

suEXEC については、以下を参考にしてください。
https://httpd.apache.org/docs/2.0/ja/suexec.html
    • good
    • 0
この回答へのお礼

大変詳細にご回答いただきましてありがとうございます!
リンク先を拝見しましたが、とてもわかりやすかったで。
解決の糸口がつかめました。助かります!

お礼日時:2011/10/01 13:51

system()系の関数で、sudoとからめてosのchmodを実行してやるのが妥当です。



ただWEB技術でパーミッションをいじる仕様が本当に必要なのかは
疑問が残りますが
    • good
    • 1
この回答へのお礼

ありがとうございます!すいません、sudoがよくわかっていないので、調べてみたいと思います。

お礼日時:2011/10/01 13:49

ファイルまたはディレクトリの所有者がchmodをかけたユーザーではないのでは?



その場合は所有者をchmodのユーザーにするか、chmodのユーザーでファイルまたはディレクトリを作成するかになると思います。

root権限であれば基本的にどのファイル及びディレクトリの権限も変えられますがあまりお勧めは出来ませんので、PHPを実行する適当なユーザー(仮にAとします)を作って、Aでファイルやディレクトリを作成するようにすればよいかと。
    • good
    • 0
この回答へのお礼

早速ご回答いただきましてありがとうございます!
おっしゃる通り、ファイル所有者(A)と実行者(apache)は違います。さくらインターネットの共用サーバーではきちんと動くのですが、これはアクセスされるURLによってapacheの実行ユーザーが変わっているということでしょうか?それに近いことができたらいいなと思っていますが、もしご存じでしたら教えて頂けたらありがたいです。厚かましいですが、よろしくお願いします。

お礼日時:2011/09/21 11:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!