web-dev-qa-db-ja.com

/ var / www内のApache 2のユーザーwww-dataのアクセス許可を処理する最良の方法は何ですか?

誰かが/var/wwwでファイルを処理するための素晴らしいソリューションを持っていますか?名前ベースの仮想ホストを実行しており、Apache 2ユーザーはwww-dataです。

通常のユーザーとrootが2人います。したがって、/var/wwwのファイルをいじるときは、...する必要はありません。

chown -R www-data:www-data

...いつも、これを処理する良い方法は何ですか?

補足質問:それでは、どのくらいハードコアで許可を取得しますか?

これは、共同開発環境で常に問題となってきました。

218
Gareth

@Zoredacheの answer を拡張してみます。

  • 新しいグループ(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 for recursive

  • すべてのフォルダの権限を2775に変更します

    chmod 2775 /var/www## 2 =グループIDを設定、7 =所有者(ルート)のrwx、7 =グループ(www-pub)のrwx、5 =世界(Apacheを含む)のrx www-data user)

    グループIDの設定( [〜#〜] setgid [〜#〜] )ビット(2)により、グループ(www-pub)は、そのフォルダー内に作成されたすべての新しいファイル/フォルダーにコピーされます。その他のオプションは、ユーザーIDをコピーするSETUID(4)と、所有者だけがファイルを削除できると思うSTICKY(1)です。

    -R再帰オプションがありますが、それはファイルとフォルダーを区別しないため、次のように se find を実行する必要があります。

    find /var/www -type d -exec chmod 2775 {} +

  • すべてのファイルを0664に変更します

    find /var/www -type f -exec chmod 0664 {} +

  • ユーザーのumaskを0002に変更します

    Umaskはデフォルトのファイル作成権限を制御します。0002はファイルに664とディレクトリ775があることを意味します。これを設定すると(私の場合は/etc/profileの下部にあるumask行を編集して)、1人で作成したファイルを意味しますユーザーは、chmodを必要とせずに、wwwグループ内の他のユーザーから書き込み可能になります。

ファイルとディレクトリを作成し、所有者、グループ、および権限をls -lで確認して、これらすべてをテストします。

注:グループへの変更を有効にするには、ログアウト/ログインする必要があります!

209
Tom

アクセス許可をどのように構成するかは完全にはわかりませんが、これが出発点になる場合があります。おそらくもっと良い方法があります。両方のユーザーが/ var/www /の下のすべてを変更できるようにしたいと思います

  • 新しいグループ(www-pub)を作成し、そのグループにユーザーを追加します。
  • / var/wwwの下にあるすべての所有権をroot:www-pubに変更します。
  • すべてのフォルダの権限を2775に変更します
  • すべてのファイルを0664に変更します。
  • ユーザーのumaskを0002に変更します

つまり、どちらかのユーザーが作成した新しいファイルはusername:www-pub 0664で、作成されるディレクトリはusername:www-pub 2775になります。Apacheは「その他のユーザー」コンポーネントを介してすべてへの読み取りアクセス権を取得します。ディレクトリのSETGIDビットにより、作成されるすべてのファイルは、フォルダを所有するグループが所有するように強制されます。グループ内の誰もがファイルを編集できるように書き込みビットが設定されていることを確認するには、umaskを調整する必要があります。

どれほどハードコアなのかについては、パーミッションを付けます。それはサイト/サーバーに完全に依存しています。 1〜2人の編集者しかおらず、編集者が物事をあまりにもひどく壊さないようにする必要がある場合は、私は簡単に行きます。ビジネスでもっと複雑なものが必要な場合は、もっと複雑なものをセットアップします。

62
Zoredache

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

マニュアルページ:

チュートリアル

39
Joe Holloway

この質問は 再度尋ねられた であり、メタについて 議論された として、現在のベストプラクティスは、これが尋ねられた2009年に利用可能だった方法よりも優れたアプローチを提供します。この回答では、協調的なWeb開発環境を安全に処理するための現在の解決策をいくつか示します


安全なWebサーバーと共同開発には、ファイルの権限だけではありません。

  • サイトごとにユーザーを分けます。つまり、www-dataを使用してすべてのサイトにサービスを提供するわけではありません。現在、Apacheがstaticコンテンツファイルのみを提供することはめったになく、dynamicWebサイトを実行しているため、これは重要です。この回答は、PHP 最も一般的な サーバーサイト言語であるため)に集中していますが、同じ原則が他の言語にも適用されます。

    1つのサイトでセキュリティの問題がある場合、同じユーザーとして実行されているすべてのサイトに広がる可能性があります。攻撃者は、データベースログイン情報を含め、ユーザーが目にするすべてのものを確認し、ユーザーが書き込み権限を持っているすべてのサイトを変更できます。

  • UseSSH File Transfer Protocol(SFTP)。FTPの使用中は、セキュリティのために(パスワードとコンテンツの両方をプレーンテキストで送信します)。これは安全な代替手段ですSFTPには、共同Web開発に最適なソリューションである機能もあります。

    サイトとサイトごとに1人のユーザーを分離したら、Webデベロッパーにアクセス権を付与する必要があります。これらのサイトユーザーのパスワードを提供するのではなく、最初に提案された個人ユーザーアカウントを使用してサイトファイルにアクセスするのではなく、ログインに SSH keys を使用できます。

    すべての開発者はキーペアを生成し、秘密キーを秘密に保つことができます。次に、開発者が作業しているすべてのWebサイトユーザーアカウントの~/.ssh/authorized_keysファイルに公開鍵が追加されます。これには、パスワードとログインを管理するための多くの利点があります。

    • すべての開発者は、ユーザーごとの配置に関連するすべてのパスワードを覚えたり保存したりする負担なしに、任意の数のWebサイトにアクセスできます。

    • 誰かが退職するたびにパスワードを変更して共有する必要はありません。

    • 非常に強力なパスワードを使用するか、パスワードベースのログインを完全に無効にすることができます。

  • PHP-FPMを使用します。これは、PHPをユーザーとして実行するための現在のアプローチです。すべてのユーザーに対して新しいpoolを作成します。つまり、サイトごとに1つのプールです。これが最良です。 1つのサイトが消費できるリソースの量を指定することもできるため、セキュリティとパフォーマンスの両方に役立ちます。

    たとえば、 NeverEndingSecurityの Linuxで個別のユーザー/ UIDとグループでphp-fpmを実行 。 HowtoForgeのようなチュートリアルがあります buntu 16.04上のApacheでPHP-FPMを使用 ユーザー分離によるセキュリティの向上のためにPHP-FPMを使用せず、サーバー全体で単一のFPMソケットを使用するようにガイドします。

11
Esa Jokinen