「Webアプリケーション」がサーバー(apache、nginxなど)で実行され、いくつかの動的スクリプト言語(PHP、Rubyなど)で記述されていると仮定すると、「ユーザー」が誰であるかを誤解します。
ユーザーは、アプリケーションにログインしている人ではありません。つまり、アプリケーションにおけるユーザーの役割(管理者など)は、シナリオとはまったく無関係です。ユーザーは、プロセスが実行されるLinuxシステムユーザーです。Webサイトのコードは1人のユーザーとしてのみ実行されます。Webサーバーのユーザー(実際には良いことではありません)、またはサイト固有のユーザー(より良い)の場合があります。
Linuxでは、ユーザーはグループに属します。ユーザーを別のグループに追加して、そのグループに特権を割り当てることができます。
適切なセットアップでは、サーバーを1人のユーザーとして実行し(このユーザーを「webserver」と呼びます)、動的スクリプト言語を(例えばFastCGIを介して)独自のユーザーとして実行します(サイトごとに1人のユーザー-最初のユーザーを「site1」と呼びます) 。
ファイルを提供するには、ウェブサーバーがファイルにアクセスし、スクリプト言語がファイルにアクセスする必要があります。つまり、「site1」および「webserver」はファイルを読み取ることができる必要があります。ただし、そのうちの1つだけがファイルを「所有」できます。所有者は「ユーザー」です(ユーザー、グループ、その他)。また、スクリプト言語がディレクトリに書き込むことができるようにする必要があります(そして、書き込まれたファイルを読み取る)。したがって、ユーザー「site1」には読み取りおよび書き込み権限が必要です。グループおよびその他のアクセス許可をできるだけ制限する必要があるため、「所有者」は「site1」になり、対応するユーザーのアクセス許可は読み取りと書き込みになります。
Webサーバーのアクセス許可を別の「ユーザー」として指定できないため、「webserver」を「site1」グループに追加します(もちろん、「site1」と「webserver」の両方を含む別のグループを作成できます。すべてこのグループのメンバーには同じアクセス権が与えられます(ユーザー、グループ、その他のセットの)最も緩いアクセス権が、特定のユーザーに適用されて、アクセス権が決定されます。
適切なセットアップでは、ファイルに動的言語の実行許可が必要であってはならないことに注意してください。ファイルは直接実行されるのではなく、インタプリタに読み込まれます-典型的なスクリプト(何も書き込まないスクリプト)を実行するには読み取り権限のみが必要です。
ディレクトリの「実行」権限には別の意味があります-内容を読み取れずにトラバーサルを許可します。ディレクトリ内のファイルを読み取ることができるようにするには、ユーザーはその上のすべてのディレクトリで「実行」権限を持っている必要があります。
Webアプリケーションの場合、すべてのファイルには所有者による読み取り権限が必要です。それ以外の場合、それはかなり無意味なファイルです。ユーザーまたは管理者が(Webアプリケーションを介して)ファイルをアップロードするかどうかに関係なく、「所有者」(つまり動的言語)には書き込み権限が必要です。動的な言語は大きなファイルを読み込んで内容をエコーアウトするのに時間がかかる傾向があるため、効率的なセットアップはWebサーバーを介して静的ファイルを直接提供しようとします。そのため、Webサーバーには静的ファイルへの読み取りアクセスが必要です。
したがって、最小限のファイル許可は次のとおりです。
- ユーザーが静的ファイル(images / swf / jsファイル)をアップロードするディレクトリ内のファイル:640
- 管理者が静的ファイル(images / swf / jsファイル)をアップロードしたディレクトリ内のファイル:640
- アプリケーションで使用されるライブラリが存在するディレクトリ内のファイル:400(または440)
- 実行可能/閲覧可能なサーバー側スクリプトが存在するディレクトリ内のファイル:400(または440)
- 既存のファイル(txtまたはxml)がサーバー側のコードによって編集されるディレクトリ内のファイル:640または600
- (Webサーバーがこれらを表示するかどうかに依存し、時々変更されません)
一方、最小限のディレクトリ権限は次のとおりです。
- ユーザーが静的ファイル(images / swf / jsファイル)をアップロードしたディレクトリ:750
- 管理者が静的ファイル(images / swf / jsファイル)をアップロードしたディレクトリ:750
- アプリケーションで使用されるライブラリが存在するディレクトリ:500(または550)[少なくとも510でなければなりません]
- 実行可能/閲覧可能なサーバー側スクリプトが存在するディレクトリ:500(または550)[少なくとも510でなければなりません]
- 既存のファイル(txtまたはxml)がサーバー側のコードによって編集されるディレクトリ:750または700
- (Webサーバーがここからのファイルを提供するかどうかに依存し、時々変更されません)
繰り返しますが、Webサーバーは、アクセスが必要なディレクトリより上のすべてのディレクトリで「実行」権限を持っている必要があります。したがって、Webサーバーが特定のディレクトリのファイルを提供しない場合でも、実行権限を付与する必要があります。
Webサーバーにほとんどのファイルへの読み取りアクセスを許可することはかなり一般的です(したがって、これらのファイルを500から550に変更します)。デフォルトの「やや安全な」アクセス許可は、通常ディレクトリでは755、ファイルでは644です(実行許可なし、全員が読み取り、ユーザーのみが書き込み可能)。Linuxシステム上の大部分のファイルにはこれらのアクセス許可があります。
「その他」のアクセス許可は、所有者でもグループ内でもないシステムユーザー(つまり、残りのすべてのシステムユーザー)を指すことに注意してください。これらのユーザーは不明であり、明示的に許可を与えていないため、「他の」許可を制限しておくことは良いことです。多くの場合、他のアクセス許可は、侵害されたシステムで利用するのが最も簡単です(たとえば、/ tmpが一般的なターゲットである理由の1つ)。
上記の文脈では、あなたの最後の2つの質問はそれほど適切ではないと思います。ディレクトリのアクセス許可を550(およびファイルのアクセス許可を440)に設定し、アプリケーションが書き込むディレクトリ(ディレクトリ:750、ファイル:640)の書き込み許可をユーザーに付与します。
(ファイルをアップロードするには書き込み権限が必要になります-ただし、必要に応じて後で削除できます-おそらく、誰かが所有者のみが書き込み可能なディレクトリに書き込みを行っている場合-アカウントが侵害されている-これは1つです制限されたアクセス許可を保持する理由)。