パーミッションの設定方法と考え方

このQ&Aのポイント
  • サーバー(リモート)とテストサーバー(ローカル)のディレクトリとファイルのパーミッションの設定方法を教えてください。
  • パーミッションの設定で便利なコマンドやツールについても教えてください。
  • パーミッションの設定とは、ファイルやディレクトリが誰に対してどのような操作を許可するかを制御する機能です。適切なパーミッションの設定により、セキュリティを向上させることができます。
回答を見る
  • ベストアンサー

パーミッションの考え方。

サーバー(リモート): XREAのレンタルサーバー(Linux系) テストサーバー(ローカル): Windows版XAMPP (Version: 1.8.1) FTPソフト: FFFTP DB: SQLite3 ----- 使用するディレクトリ、ファイルのパーミッションの設定のしかたがよく分からず、 困っています。 使用するファイル、ディレクトリは以下の通りです。 phpスクリプトファイル(3種類) (1)全ての人からウェブブラウザ経由でアクセスされて動く --- a1 (2)phpスクリプトから呼ばれた時にのみ使われる --- a2 (3)管理者のみがアクセス --- a3 DBファイル(.sqlite3) --- b1 画像ファイル --- c1 <位置関係(Document Root を基準に書かせてもらいます。)> Document Root --- a1.php Document Root --- sub --- a2.php Document Root --- admin --- a3.php Document Root --- db --- b1.sqlite3 Document Root --- img --- c1.jpg 上記のような場合、 (ディレクトリ) sub admin db img (ファイル) a1.php a2.php a3.php b1.sqlite3 c1.jpg これら、4つのディレクトリと、5つのファイルは、 それぞれ、具体的には、どのようにパーミッションの設定をしたらよろしいでしょうか。 (考え方も含め、ご教示頂けますと助かります。) それと、 パーミッションの話で出てきます、 「自分」、「グループ」、「他人」 とは、一般的に、 レンタルサーバー(特に知りたいのはXREAの場合。)においては、 それぞれ具体的には誰を指しますでしょうか? (「グループ」に属すユーザというのは誰のことなのでしょうか?  もし存在しないという場合には、「グループ」のユーザの権限は、  すべて「0」でも大丈夫でしょうか。) また、細かい話にはなりますが、 あるユーザに、DBファイルへの書き込み権限を与え、その一方で、 そのDBファイルへの書き込みを実際に実行するPHPスクリプトファイルの 実行権限を与えない、なんていう場合には事実上、 そのユーザは、「そのDBファイルへの書き込みはできない」 ということになりますでしょうか。 また、phpファイルを「読む」 と、「実行する」では、 動作上、どのような違いがあるのでしょうか。 phpファイルを「読むだけ」というのが、 どのような動作なのか、よく分からなかったもので。。。 どうぞ、よろしくお願い致します。 (レスポンスは確実に致します。)

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

XREAサーバの場合、phpはモジュールとして動作するのではなかったですかね(CGIとして動かす方法もあったハズですが、そういう細工はされていませんよね)。 であれば、phpスクリプトを実行するユーザーは「Apache」です。つまりファイルのowner(ftpユーザー)とは別の権限であり、「other」です。phpスクリプトで読み書きするファイルは606である必要がありますし、ファイルを作成・削除するような場合にはディレクトリが707でないといけません。 suExecなどで「ownerの権限で動作する」のか「Apache(other)の権限で動作する」のかによって、データファイル(ディレクトリ)のパーミッションが変わるだけです。 phpスクリプトなどは「読めればいい」だけなので、どんな設定のサーバでも604 or 644にしますから違いはありません。 なおgroupなんて「設定しない」ので気にする必要はありません(汗

march4
質問者

お礼

回答をありがとうございます。 (CGI版ではなく、モジュール版で動かしています。) >つまりファイルのowner(ftpユーザー)とは別の権限であり、「other」です。 すみません、ここの意味がよく分かりませんでした。(>。<)。。 自分、グループ、他人、 で言うと、Apacheは、他人なのでしょうか? 他人がphpスクリプトを実行しているわけですね? じゃぁ、その場合、自分とは誰なのでしょう? その自分というのが、phpスクリプトを実行する状況についても、 併せて教えて欲しいなと思います。 どう考えても、いつだってApache経由でしか、 phpスクリプトは実行できないと思うのです。 つまり、phpスクリプトを実行するのは毎回、 Apacheになるということでしょうか。 (↑かなり混乱していますでしょ。笑) >groupなんて「設定しない」ので 設定しない とは、誰がでしょうか? レンタルサーバー利用者個人が、ということでしょうか? それとも、サーバーの運営者側が、かな。。? いずれにしても、groupの所は、「0」で良さそうですね。。? またよろしければ、どうか教えて下さい。(笑)

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>じゃぁ、その場合、自分とは誰なのでしょう? phpスクリプトのownerは「ftpユーザー」です。ご自分のftpアカウントですね(でないとftpでファイル操作が出来ませんから)。 >その自分というのが、phpスクリプトを実行する状況についても、 >併せて教えて欲しいなと思います。 CGIで動作するサーバ(+suExec)ではApacheではなくftpユーザーの権限で実行します。なので604とかのパーミッションのままでもファイルの読み書きが可能です。ownerの権限ですからね。そういうレンタルサーバもいくつかあります。さくらがそうだったと思いますし、ロリポップもphp5に切り替えるときにCGIになったハズです。 XREAサーバでも、.htaccessでCGI動作にする設定があります(下記URL参照)。 http://sb.xrea.com/showthread.php?t=10744

march4
質問者

お礼

回答をありがとうございます。 >ご自分のftpアカウントですね(でないとftpでファイル操作が出来ませんから)。 なるほど、とてもよく分かりました。 >CGIで動作するサーバ(+suExec)ではApacheではなくftpユーザーの権限で実行します。 こちらも大変勉強になりました。 >XREAサーバでも、.htaccessでCGI動作にする設定 こちらも、ありがとうございます。 (先日、そちらのページを参考に、CGI版にしようとしたのですが、 上手く行かず断念しましたw)

関連するQ&A

  • chmodでのパーミッション

    実行すると、同じディレクトリにあるディレクトリとその中のファイルを同じ階層にディレクトリを新規に作って、その中のファイルを全部コピーするスクリプトを組んでいます。 コピーはうまくいったのですが、パーミッションの設定がうまくいきません。 例えば @chmod("$dir/xxx.cgi",0755)or die("エラー"); と書くと、パーミッションは363になってしまいます。 5ファイルくらいあるのですが、他のパーミッション(例えば666など)も137になってしまいます。 Webを検索してもこういった事例にはおめにかからないのですが、私の使っている2つのサーバーで、どちらも同様の結果でした。 何がいけないのでしょうか? よろしくお願いいたします。 #ついでにmkdirも作成はできるのですが、パーミッションが必ず755になってしまいます。 #作成されたディレクトリやファイルのownerは、1つめのサーバーではnobody、もう一つのサーバーではログインユーザーになります。 #サーバーはどちらもLinuxです。 #PHPのヴァージョンは、1つめが4.3.1、2つめが4.3.4です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • akiraインターネットのパーミッション設定

    akiraインターネットとレンタルサーバー契約をしています。PHPを使ってWebアプリを作ろうとしているのですが、パーミッション設定に泣かされています。。。 ./test (707) ./test/test.php (705) ./test/test2.txt (700) というファイル構成、パーミッション設定になっています。 test.php では test2.txt が存在するかどうか、書き込み可能かどうか、パーミッションはどうなっているかを出力するようにしてみました。 ----test.php------------------------ if ( (file_exists('test2.txt') )) { print "ファイルは存在します。"; }else{ print "ファイルは存在しません。"; } if ( (is_writable('test2.txt') )) { print "書き込みできます"; }else{ print "書き込みはできません"; }   $perms=fileperms('test2.txt');   var_dump($perms);   printf("%o\n",$perms); --------------------------------- 実行すると「ファイルは存在します。書き込みはできません。int(33216) 100700」 と表示されてしまいます。たぶんパーミッションの設定が悪いのだと思いますが、どうやったら書き込みできるようになるのかよくわかりません。 akiraのFAQでは 「モジュール版の PHP をご利用される場合は拡張子を PHP4 は .php 、PHP3 は .php3 として、パーミッションを 604 に設定してください。 モジュール版の PHP スクリプトを格納するディレクトリのパーミッションは 701(または705) に設定してください。PHPスクリプトからディレクトリ内のファイルに書き込みされる場合は 707 としてください。」 という記述があるのですが、?!?!です。 http://www.akira.ne.jp/support/start.htm#4 対処法などを教えていただけないでしょうか? お手数ですがよろしくお願いします。

  • Linux初心者です。パーミッションについて。

    Linux初心者です。パーミッションについて。 パーミッションが606だと、一般ユーザが 読み込み、書き込みできるらしいのですが、 ということは、ホームディレクトリ以下においてある、 606のDATファイルはだれでも書き換えできるのでしょうか? 某有名CGIスクリプト配布サイトでは、そういうスクリプトが多いようなので気になりました。 また、できるとしたらどうやって変更を反映しますか? よろしくお願い申し上げます。

  • linuxのオーナーとパーミッションについて

    linuxのオーナーとパーミッションについて 下記の3ユーザーがあるとします。 user1:groupA user2:groupA user3:groupB root:root 下記のファイルがあるとします。 dir_1/ | +-dir_11/ |_| |_+-file_111 | +-fil1_12 以下の要件を満たすオーナーとパーミッションは可能でしょうか <要件> ■dir_1  root以外は名前の変更、削除はできない。  この下にuser1、user2はファイルやディレクトリを作成、変更、削除できる。 ■dir_11  user1、user2はこのディレクトリを削除、変更可能  この下にuser1、user2はファイルやディレクトリを作成、変更、削除できる。  user3はこのディレクトリの下は読み込みしかできない。  user3はこのディレクトリの下にファイルやディレクトリを作れない。 ■file_111  user1、user2はこのファイルを変更、削除できる。  user3はこのファイルを読み込みしかできない。 ■fil1_12  user1、user2はこのファイルを変更、削除できる。  user3はこのファイルを読み込みしかできない。 <設定内容> ■dir_11,file_111,fil1_12 オーナー、user1:groupA 権限、rw-rw-r-- ■dir_1 オーナー、????:???? 権限、????????? dir_1の設定がわかりません。

  • パーミッションの設定

    最近 PHP と MySQL の勉強をはじめました。 パーミッションについて教えてください。 サーバをレンタルしてPHP で MySQL に接続してデータを読み込んでいます。MySQL に接続する際の サーバ名,ユーザ名,パスワード,データベース名 は info.php という別のPHPファイルに書き込み、それを require_once(info.php) で読み込んでデータベースに接続しています。 info.php は data というディレクトリに格納していますが、セキュリティのためにパーミッションを設定したほうがいいと聞いたのですが data と info.phpのパーミッションはいくつにしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • root権限でも『Permission denied』エラー

    usr/binの中のファイルを操作しようと『Permission denied』が発生し、操作できません。root権限でログインしているのですが、このようになってしまいます。 このことによって、PHPのrpmをインストールできなくなってしまっています。現在、古いPHPをアンインストールした後、新しくVerのPHPをインストール中につまずいている為、PHPが稼動しなくて困っています。 環境はRedHatLinux9、SSHで一般ユーザーでログイン後、suコマンドでroot権限を取得した状態で行っています。いろいろ試したところusr/bin内全てに対して操作ができないようです。 この、『root権限でもPermission deniedが発生し操作できない』件に対して、ご存知の方は、どうかご教授下さい。よろしくお願い致します。

  • 他サーバーにあるファイルに書き込みを行いたい。allow url fopen関連?

    いつもお世話になっております。 環境:PHP5,SQLite3 サーバA…サーバBへの書き込み処理をするPHPファイルを置く サーバB…書き込みが行われるファイルを置く(ファイルが無ければ作成される) サーバAに置いたPHPスクリプトファイルで、 サーバBに置いてあるファイル(例えばPHPファイル)に書き込み処理をする場合、 PHPやサーバソフト(Apache)の設定を、 どのようにすれば良いでしょうか。 allow url fopenなどをちょこっと調べてみたのですが、 よく分かりませんでした。 サーバA、B両方のphp.iniに対し、 何らかの設定をする必要があるのでしょうか。 それとも、片方だけで良い?! また、ファイルの書き込み権限の設定も関係してくる話だと思います。 書き込み側と、書き込まれる側の権限設定(chmod)についても、 併せて教えて頂けると助かります。 どなたか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 助けてください!パーミッションの設定が出来ません。

    先日こちらの掲示板にて、Macintosh OSXでPHPファイルが動かないといった質問をしたものです。 http://oshiete1.goo.ne.jp/qa2719598.html それで解決後に自分が今公開しているサイトを見に行ったら、今まで見えていたCGIのページが突然you don't have permission to access 403 forbiddenになってしまいました。 それで、何度もターミナルでchmod 705 /Users/*/Sites/****.cgi とパーミッションの設定をしてもテストファイルすら見れなくなって しまいました。 <Directory /Users/*/Sites/cgi-bin> AllowOverride FileInfo AuthConfig Limit Options +ExecCGI AddHandler cgi-script .cgi </Directory> としていたのを、 <Directory /Users/*/Sites> AddType text/html shtml AddHandler server-parsed shtml AddHandler cgi-script cgi Options Indexes MultiViews ExecCGI Includes AllowOverride None Order allow,deny Allow from all </Directory> としただけなのですが、何が問題だったのでしょうか、、、、、。 誰か助けてください。よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • グループのパーミッション設定

    Linuxで[Share]という共有ディレクトリをrootで/に作りました。 (Path:/share) 現在Linuxのユーザは root A B C がいます。 Shareディレクトリにパーミッションの設定が行いたくて、 writableというグループを作成しました。 writableのグループには root,A,Bが所属しています。 Shareディレクトリのアクセス権限は現在、 #chmod 774 Share #ls -l #drwxrwxr-- 3 root writable 4096 2010-01-30 18:08 Share この設定を適用した状態では Shareディレクトリ root:読み込み可能、書き込み可能 A:読み込み可能、書き込み不可 B:読み込み可能、書き込み不可 C:読み込み可能、書き込み不可 とグループの書き込みができなくて困っています。 Shareディレクトリをwritableのグループからは書き込み出きるようにするにはどう設定すればよろしいのでしょうか? (設定後以下を適用したい) Shareディレクトリ root:読み込み可能、書き込み可能 A:読み込み可能、書き込み可能 B:読み込み可能、書き込み可能 C:読み込み可能、書き込み不可

  • パーミッションについて

    パーミッションについて疑問に思ったことがありましたので教えてください。 /var/www/html/img というディレクトリ構成が存在した時、imgディレクリに ファイルを書き込みたい場合、imgディレクトリに書き込み権限を与えることに なると思うのですがこの場合imgディレクトリのみに書き込み権限を与えればよい のでしょうか。上位の var www html それぞれには書き込み権限を与える必要は あるのでしょうか。

専門家に質問してみよう