7

私はWebアプリケーションを書いています。それは持っています:

  • index.php
  • /app - もちろん、.htaccess を使用しますが、それについては話していません
  • /app/session - セッションの場合、サーバーで session_save_path(/app/session) を使用する必要があります
  • /app/include - index.php には、このディレクトリのファイルが含まれます
  • /app/config - .xml ファイルのみ。そのファイルはインクルード内のスクリプトからクラスを読み取ります
  • /images、/styles など。

私の質問は:
上記のディレクトリの正しい chmod 設定は何ですか? chmod (Linux で作業中) とは何かを知っており、それを変更する方法も知っていますが、それに関する有用な情報が見つかりません。「chmod を 777 に変更するにはどうすれば...

そして、所有者、グループ、その他が誰なのかわかりません。私のページは共有 Web サーバー上にあるので、所有者は apache、グループは www-data だと思いますよね?

安全なウェブサイトのために、どのchmodにディレクトリ(およびファイル?chmod to filesに-Rを使用しています)が必要か教えてください。主に、任意のスクリプトによる侵入の可能性になります。

4

2 に答える 2

20

Wordpress には、UNIX ファイルのパーミッションを説明する素晴らしい記事があります。これを読めば、その基本が理解できます。要するに (理論的には正しくありません):

Unix システムでは、ユーザー、グループ、および世界という 3 つの異なる「役割」が指定されます。特に「世界」は人々を混乱させるようです。

すべてのファイルとディレクトリ (どちらもノードであり、Linux システムではそれほど違いはありません) は、ユーザーとグループに割り当てられます。ユーザーとグループは、特定のファイル/ディレクトリの「所有者」として見ることができます (実際には重要ではないため、「ノード」については後で説明します)。ファイル許可は、誰がノードで何をできるかを定義します。例:

ファイル index.php は、ユーザー 'aso' とグループ 'www-data' に割り当てられ、ファイル許可 modus 644 を持っています。これは、ユーザー (6) には読み取りと書き込みの許可があり、グループには読み取り許可のみ (4) があることを意味します。 「世界」(3 桁のうち最後の 4 桁)も同様です。

まず、*nix システム上のすべてのユーザーがグループの一部であることを理解する必要があります。グループ名はユーザー名と同じ場合もありますが、グループは別のエンティティです。したがって、「aso」という名前のグループだけでなく、ユーザーも存在する可能性があります。

ファイル許可は、次のように「ビットマスク」から作成されます。読み取り許可は数字 4 で指定され、書き込み許可は 2 で指定され、実行許可は 1 で指定されます。これから任意の組み合わせを作成できます。例では、書き込みおよび実行許可は 3 (書き込み = 2、実行 = 1) で指定され、読み取りおよび実行許可は 5 (読み取り = 4、実行 = 1) で指定されます。

これが何を意味するのか見てみましょう。私は、この問題について完全には言えないと言うほど公平でなければなりません。完全なストーリーが必要な場合は、Google を使用してください。

*nix システムでファイルを作成すると、そのファイルは自動的に自分 (自分のユーザー) と自分のユーザーが属するグループに割り当てられます。パーミッション 644 を持つことは、(自分のユーザーでログインした) 私がファイルを読み取って変更 (書き込み) できることを意味します。しかし、実行 (x) 権限がありません。ただし、これは実行可能スクリプト (ほとんどの場合、拡張子が .sh のシェル スクリプト) にのみ適用されるため、問題ではありません。ファイルが属するグループ ('www-data') には読み取り権限しかないため、ファイルを変更することはできません。「世界」にも読み取り権限しかありません。

ユーザーは複数のグループの一部になることができるため、*nix ファイルのアクセス許可の範囲は限られていることに注意してください。グループ 1 には書き込みアクセス許可を割り当て、グループ 2 には読み取りアクセス許可のみを割り当てることができます。従来のファイル システムでは、これはそうではありません。可能。ただし、reiserFS や Ext3 などのファイル システムでは、拡張 ACL を使用してそのようなことを行う場合があります。ただし、それは別の話です。

これはどういう意味ですか?割り当てられた権利の意味と、ファイル ノードとディレクトリ ノードの違いを理解していれば、実際には予想よりも簡単です。

ファイル

  • 読む:内容を読む能力
  • 書き込み: 内容を変更 (書き込みおよび削除) する機能
  • 実行: ファイルを実行する機能 (可能なすべての結果でスクリプトを実行します)

ディレクトリ

  • 読む:内容を読む能力。つまり、ノード名をリストしますが、ノードのコンテンツ、タイプなどはリストしません。
  • 書き込み: ファイルを追加/削除する機能
  • 実行: タイプ、最終更新日などを含む内容を一覧表示する機能。

あなたのケースに戻ります。通常のセットアップ (モジュールとして Apache と PHP を実行する Linux サーバー) を使用している場合、ファイルは ftp ユーザーとグループ 'www-data' (Apache が実行されているグループ) に割り当てられます。あなた自身には読み取りと書き込みのパーミッションが必要ですが (ファイルを変更したい場合があるため)、実行パーミッションは必要ありません (PHP または HTML は実行可能ファイルではないため)。したがって、ユーザーには 6 が必要です (読み取り = 4、書き込み = 2、合計すると 6)。グループ ユーザーの場合、Apache (または PHP モジュール) は php スクリプトの内容のみを読み取る必要があるため、読み取りアクセス許可のみが必要です。システム上の他のユーザーはあなたのファイルとは何の関係もないので、すべて (0) のようなパーミッションは必要ありません。

したがって、すべてのスクリプトに対して、640 のアクセス許可 (ユーザーの読み取りと書き込み、グループの読み取り、「世界」の読み取りなし) で十分です。

ディレクトリの場合、ユーザーはすべての権限を必要とします (読み取り = 4、書き込み = 2、実行 = 1、合計 7)。なんで?その内容 (ノード名) を読み取る必要があるため、それがファイルまたはディレクトリ ノード (およびその他のプロパティ) であるかどうかを判断できなければならず、かつファイルを追加および削除できなければなりません (ファイルを追加したい場合もあります。あなたは?)。したがって、ユーザーに 7 を与えます。

ただし、グループ (「www-data」、Apache が実行されているグループ) には、読み取りと実行のアクセス許可のみが必要です。コンテンツ (ノード名) を一覧表示する読み取り権限と、他のプロパティ (ノードの種類、変更時間など) を一覧表示する実行権限。ただし、通常は PHP (Apache) がアプリケーション ツリーからファイルを追加/削除することを望まないため、書き込み権限は必要ありません。

最後に、システム上の他のすべてのユーザーである「世界」(最も広い意味での世界とは異なります) には、アクセス許可は必要ありません。サーバー上の他の誰かがあなたのファイルにアクセスする必要があるのはなぜですか?

合計すると 750 になります (ユーザーのすべての権限、グループの読み取りと実行、その他の権限はありません)。


あなたの質問に対する要約された答え、最低限は次のとおりです。

  • ファイルのパーミッション: 640
  • ディレクトリのアクセス許可: 750

しかし、常に適切で、非常に標準的で、十分に安全です。

  • ファイルのパーミッション: 644
  • ディレクトリのアクセス許可: 755
于 2013-08-27T20:30:32.243 に答える