FTP によって作成されたファイルとディレクトリに、Apache が読み取りおよび書き込みを行える適切な権限を付与するにはどうすればよいですか?

FTP によって作成されたファイルとディレクトリに、Apache が読み取りおよび書き込みを行える適切な権限を付与するにはどうすればよいですか?

私はどちらかというと Windows ユーザーなので、この基本的な Linux に関する質問については無知であることをお許しください。

私は、Apache2 と vsftp のみがインストールされている Linux (Debian) サーバーを管理しています。

何が起こっているかというと、ファイルとフォルダの所有者が誰なのかという問題が絶えず発生しており、うまく解決できないようです。

これまでのところ、私の理解は次のとおりです。

  • wwwデータ/var/www/html の下にあるすべてのファイルは、フォルダーへの書き込みを必要とするスクリプトを実行するため、ユーザーにはフォルダーとファイルの所有権が必要です。そしてもちろん、http 経由でページを提供できる必要があります。
  • 私のFTPユーザー(こう呼びましょう)ftpユーザー) では、新しいファイルをアップロードする必要があるため、/var/www/html フォルダーへの書き込み権限も必要です (再帰的)。

これを念頭に置いて、私は「ftpandwwwそして、すべてのフォルダーとファイルをこのグループに chown しました。これはある程度は機能しました...

ほぼ正しい場所にいますが、FTPクライアントを使用して作成された新しいフォルダの権限が間違っているという事実(FTPクライアントで変更することで修正できます)を除いて、www-dataはそれらのフォルダに書き込むことができません。ftpユーザーそして、両方が満足できるように、SSH で接続し、ftpandwww グループに対して chown を実行する必要があります。

FTPで作成したすべての新しいフォルダに適切な権限(774)を設定し、自動的に所有者を設定するにはどうすればいいですか?ftpandwww毎回すべての新しいフォルダーとファイルにアクセスして chown を実行することなく、Web 経由でアップロードして提供できるグループ (書き込み権限付き) はありますか?

答え1

使用GID の設定Web ルート ディレクトリに対する権限を設定し、それを子に伝播します。

ディレクトリに SetGID を適用すると、ユーザーのデフォルトのグループ メンバーシップに関係なく、そのディレクトリ内のすべての新しい項目が親と同じグループで作成されます。

ファイルシステム オブジェクトに SetGID を適用するには、chmod権限コードの前に 2 を付けて使用します。
(例: 740 => 2740)。

私は多くの Samba 共有で SetGID を使用しており、ファイルは常に所有者グループを持ちUsers、グループのどのメンバーもファイルを読み取ることができます (通常は、2750所有者ユーザーのみがファイルに書き込めるように使用します)。

あなたの場合は、次のように実行します (XXX を必要な権限に置き換えます)。

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

すると、 のような所有権を持つ新しいファイルとフォルダーが作成されますftpuser:ftpandwww

編集:

ユースケースによっては、SetGIDで問題を解決できる可能性がありますが、グループ権限が間違っているために(所有権は正しいが)どちらかのユーザーが書き込みを拒否されるという問題が続く場合は、ファイルを作成するユーザー用のカスタム UMASK

ユーザのUMASKの設定が難しい場合(デーモンであるため)、オプションに関するこのスレッドを確認してください。デーモンユーザーのUMASKの設定

007グループのメンバーにファイルの書き込みと削除を許可し、所有者以外には権限を与えないようにしたい場合は、マスクをお勧めします。

関連情報