解決策 1:
@Zoredache の回答を拡張しようとしています。私はこれを自分でやってみます:
-
新しいグループ (www-pub) を作成し、ユーザーをそのグループに追加します
groupadd www-pub
usermod -a -G www-pub usera
## 既存のグループに追加するには、-a を使用する必要がありますusermod -a -G www-pub userb
groups usera
## ユーザーの表示グループ -
/var/www の下にあるすべての所有権を root:www-pub に変更します
chown -R root:www-pub /var/www
## -R は再帰的 -
すべてのフォルダの権限を 2775 に変更
chmod 2775 /var/www
## 2=グループ ID を設定、7=rwx は所有者 (root)、7=rwx はグループ (www-pub)、5=rx は世界 (Apache www-data ユーザーを含む)グループ ID の設定 (SETGID) ビット (2) により、グループ (www-pub) が、そのフォルダーに作成されたすべての新しいファイル/フォルダーにコピーされます。その他のオプションは、ユーザー ID をコピーするための SETUID (4) と、所有者だけがファイルを削除できると思われる STICKY (1) です。
-R
があります 再帰的なオプションですが、それはファイルとフォルダーを区別しないため、次のように find を使用する必要があります:find /var/www -type d -exec chmod 2775 {} +
-
すべてのファイルを 0664 に変更
find /var/www -type f -exec chmod 0664 {} +
-
ユーザーの umask を 0002 に変更
umask は、デフォルトのファイル作成パーミッションを制御します。0002 は、ファイルに 664 とディレクトリが 775 あることを意味します。これを設定します (
umask
を編集して)/etc/profile
の一番下の行 私の場合) あるユーザーによって作成されたファイルは、chmod
を必要とせずに、www-group 内の他のユーザーによって書き込み可能になることを意味します
ファイルとディレクトリを作成し、ls -l
で所有者、グループ、権限を確認して、これらすべてをテストします。 .
注:グループへの変更を有効にするには、ログアウト/ログインする必要があります!
解決策 2:
アクセス許可をどのように構成したいかは完全にはわかりませんが、これが出発点になるかもしれません。おそらくもっと良い方法があります。両方のユーザーが /var/www/ の下にあるものを変更できるようにしたいと考えています
- 新しいグループ (www-pub) を作成し、ユーザーをそのグループに追加します。
- /var/www の下にあるすべての所有権を root:www-pub に変更します。
- すべてのフォルダの権限を 2775 に変更
- すべてのファイルを 0664 に変更します。
- ユーザーの umask を 0002 に変更します
これは、いずれかのユーザーによって作成された新しいファイルはユーザー名:www-pub 0664 であり、作成されるディレクトリはユーザー名:www-pub 2775 であることを意味します。Apache は、「他のユーザー」コンポーネントを介してすべてへの読み取りアクセスを取得します。ディレクトリの SETGID ビットは、作成されるすべてのファイルを、そのフォルダを所有するグループが所有するように強制します。グループ内の誰でもファイルを編集できるように、書き込みビットが設定されていることを確認するには、umask を調整する必要があります。
私がどれだけハードコアにアクセス許可を取得するかについて。サイト/サーバーに完全に依存します。編集者が 1 人か 2 人しかいない場合、編集者が物事をひどく壊さないようにする必要がある場合は、気楽に行きます。ビジネスでもっと複雑なものが必要な場合は、もっと複雑なものをセットアップします。
解決策 3:
POSIX ACL (アクセス制御リスト) が役に立つと思うかもしれません。 user:group:other モデルと比較して、よりきめ細かいパーミッション モデルを使用できます。より明確に記述でき、ファイル システムのブランチの「デフォルト」の動作を設定できるため、頭の中でまっすぐに保つのが簡単であることがわかりました。
たとえば、各ユーザーの権限を明示的に指定できます:
setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www
または、いくつかの共有グループに基づいて行うこともできます:
setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www
また、Apache ユーザーを読み取り専用のままにしておくこともできます
setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www
マニュアルページ:
- setfacl
- getfacl
チュートリアル
解決策 4:
この質問は再度尋ねられました。メタで議論されているように、現在のベスト プラクティスは、これが尋ねられた 2009 年に利用可能だったよりも優れたアプローチを提供します。この回答は、共同 Web 開発環境を安全に処理するための現在のソリューションを提供しようとしています。 .
安全な Web サーバーと共同開発のためには、ファイルのアクセス許可だけではありません:
-
サイトごとにユーザーを分ける つまり、
www-data
を使用してすべてのサイトを提供しないでください。 .これは重要です。現在、Apache は static のみを提供することはめったにありません。 コンテンツ ファイル、ただし実行中 動的 ウェブサイト。この回答は、最も一般的なサーバー サイト言語である PHP に集中していますが、同じ原則が他の言語にも当てはまります。1 つのサイトにセキュリティ上の問題がある場合、同じユーザーとして実行されているすべてのサイトに広がる可能性があります。攻撃者は、データベースのログイン情報を含め、ユーザーが見るすべてのものを見ることができ、ユーザーが書き込み権限を持つすべてのサイトを変更できます。
-
SSH ファイル転送プロトコルを使用する (SFTP). FTP の使用はセキュリティのために放棄する必要がありますが (パスワードとコンテンツの両方がプレーン テキストで送信されるため)、安全な代替 SFTP には、共同 Web 開発に最適なソリューションとなる機能もあります。
サイトを分離し、サイトごとに 1 人のユーザーを分離したら、Web 開発者にアクセスを許可する必要があります。これらのサイト ユーザーのパスワードを提供したり、最初に提案されたように個人のユーザー アカウントを使用してサイト ファイルにアクセスしたりする代わりに、ログインに SSH キーを使用できます。
すべての開発者は鍵ペアを生成し、秘密鍵を秘密に保つことができます。次に、公開鍵が
~/.ssh/authorized_keys
に追加されます 開発者が作業しているすべての Web サイト ユーザー アカウントのファイル。これには、パスワードとログインの管理に多くの利点があります:-
すべての開発者は、サイトごとのユーザー配置に関連するすべてのパスワードを覚えたり保存したりする負担なしに、任意の数の Web サイトにアクセスできます。
-
誰かが退職するたびにパスワードを変更して共有する必要はありません。
-
非常に強力なパスワードを使用するか、パスワード ベースのログインを完全に無効にすることができます。
-
-
PHP-FPM を使用 .これは、ユーザーとして PHP を実行するための現在のアプローチです。新しいプールを作成します すべてのユーザー、つまりすべてのサイトに 1 つのプール。これは、1 つのサイトが消費できるリソースの量も指定できるため、セキュリティとパフォーマンスの両方に最適です。
例を参照してください。 NeverEndingSecurity の Linux で個別のユーザー/UID とグループを使用して php-fpm を実行します。 HowtoForge の Using PHP-FPM with Apache on Ubuntu 16.04 のようなチュートリアルがあり、ユーザーの分離によってセキュリティを強化するために PHP-FPM を使用せず、サーバー全体で単一の FPM ソケットを使用するようにガイドしています。