Unix ファイルシステムのアクセス許可は、安全でセキュアなコンピューティング エクスペリエンスを提供するために存在します。アクセス許可を使用してワークフローをモデル化し、権限の昇格をたまに行うのが最善です。権限の昇格は問題が発生しやすいためです。最小特権の原則に従うことで、多くのセキュリティ上の欠陥が重大な結果をもたらすのを防ぐことができます。
静的 Web コンテンツ、実行可能 Web コンテンツ (およびおそらく Web ログ?) を に格納するディレクトリがあります/var/www/
。Apache ユーザーが所有したり、ユーザー アカウントが所有したりしないでください。root
(または などのより具体的なものwww-content
) 意味があります。
実行中の Web サーバーに自身のコンテンツを変更する機能を持たせたくありません。多くの PHP ワームがこの方法で拡散します。Web サーバーがログ ファイルへの書き込みしかできない場合、権限を悪用することはほぼ不可能です。データベース パイプへの書き込みもできる場合、データベース権限で許可されていることは何でも実行できます。たとえば、データを自由に読み書きしたり、特定の方法で特定のデータを読み取ったりすることができます。後で提供するために画像を保存するディレクトリに書き込むことができる場合、不要なコンテンツをホストするために悪用される可能性がありますが、少なくとも大規模なサイトに影響を与えることはできません. コンテンツのいずれかに書き込みできる場合、攻撃者はそれを使用して独自のコンテンツを永続的に変更し、ユーザーを攻撃する可能性があります。
おそらく、/var/www
ディレクトリやその子が自分のユーザー アカウントによって所有されることも望ましくないでしょう。Firefox、Evolution、Pidgin、または Spotify の欠陥によって、Web サーバーのコンテンツへの書き込みアクセスが許可されることも望ましくありません。
したがって、より良いアプローチは、すべての開発作業をホームディレクトリのどこかで、自分が所有し、接続のみを受け入れるようにバインドされた特権のないポートで自分のユーザーアカウントで実行される別の Web サーバーによって提供されるファイルで行うことですlocalhost
。ソフトウェアを好みの状態に開発したら、ソフトウェアを運用Web サーバーに配布できます。
配布は多くの場合、次のようなツールを介して行われgit
ますgit push
。開発作業をリポジトリに行い、新しいバージョンをデプロイする場合は、/var/www
ディレクトリを所有するアカウントにログインしgit pull
、新しいバージョンをダウンロードします。これは少し複雑ですが、実際のソース管理システムを持つことは、余分な努力をするだけの価値があります。
もっと単純なものが必要な場合は、単純に使用して特権sudo(1)
に昇格させ、コンテンツをコピーすることができます。www-content
次のようになります。
cd ~/projects/website
sudo -u www-content tar cf - . | (cd /var/www/ && tar xvf -)
このように、ライブプロダクションファイルは Web サーバーによって所有さwww-content
れ、Web サーバーに書き込むことはできません。sudo
コマンドを明示的に実行する場合を除き、ユーザー アカウントにもそれらを変更する権限はありません。(正しくセットアップするsudo(8)
のは手間がかかる場合があります。1 人で開発を行う場合は、これらの手順をroot
代わりに実行すると問題なく動作する可能性があります。)
Web コンテンツをライブで操作したいユーザーが数人いて、そのユーザーとそのユーザーが実行するソフトウェアを完全に信頼できる場合は、グループの所有権を使用して一部の手順をスキップできます。(これは愛好家の使用には問題ないかもしれませんが、私はこれをビジネスの運営には使用したくありません。) 各人のユーザー アカウントを特定のグループに追加し、たとえばwww-editors
を作成/var/www
し、 と子供を が所有するグループにしwww-editors
、BSD グループの動作を使用します。 ( man 8 mount
、詳細については、 を探してbsdgroups
ください。マウント オプションを変更し、ディレクトリにビット/etc/fstab
を設定する必要があります)。setgid
これにより、あなたとグループ内のすべてのユーザーが中間の手順なしでファイルを編集できるようになります。これは便利でもあり、危険でもあります。賢く使ってください。