web-dev-qa-db-ja.com

Webサイトを作成するとき、どのような権限とディレクトリ構造がありますか?

私が特に好きな統一的な方法をまだ見つけていないので、私はこの質問を提起しています。理想的には、このディレクトリ構造とアクセス許可の組み合わせは、どのWebサーバーにも適合するはずです(Apacheを想定しないでください)。また、* nixサーバーのみに関心があることにも言及する必要があります。

私は主に探しています:

  • Uid/gid/otherの最適な組み合わせ(名前とオクテット)
  • 比較的安全(過度の偏執狂である必要はありません)
  • 簡単に使用/保守できます(CMSは自己更新可能で、権限の問題はありません)

参考までに、現在取り組んでいるスタックはUbuntu 11.04 + Nginx + php-fpm + Wordpressですが、理想的なソリューションはどのWebサイトでも機能するはずです

6
Dan Simmons

権限は、所有者、グループなどに付与できます。

まず、必要なアクセス許可と関与するユーザーを決定します。

  • www-data(グループwww-data)として実行されているNginx:読み取り専用
  • www-data(グループwww-data)として実行されているphp-fpm:読み取りおよび書き込み
    chmodなどの操作を許可する場合は、SFTPユーザーとしてphp-fpmを実行する必要があります。注意:PHPからサーバーでコマンドを実行できる場合は、彼/彼女.bashrc!のように、ファイルも変更できます。
  • sftp/SSH:完全な権限
  • 他のユーザー:読み取りおよび書き込み権限なし

ファイル/ディレクトリの所有者のみがアクセス許可を変更でき、SSHユーザーにこの所有権を与えることをお勧めします。どうして? webrootで自分のファイルを変更することはできず、rootとしてすべてを行うのは悪い考えだからです。

通常のユーザーはファイル/ディレクトリのグループを変更できません。rootのみが変更できます。特別なSETGIDビットにより、ディレクトリ内のすべてのファイルとディレクトリがグループを継承します。適切なアクセス許可を設定すると、php-fpmとSSHユーザーの両方がファイルを変更できます。

  • 所有者:SSHユーザー
  • グループ:www-data
  • ファイルのパーミッション:rw-rw ----(0660)
  • ディレクトリのパーミッション:rwxrwx ---(2770)ディレクトリに降りるには実行ビット(2)が必要です。 info coreutils 'file permissions'を実行して、このビットに関する詳細情報を取得します
  • umask 007。これにより、所有者とグループはファイル/ディレクトリに書き込みができ、他のユーザーは許可を取得できません。

ウェブルートが/var/www/website1にあると仮定して、次を実行して所有者/グループと権限を変更します。

Sudo chown -R your_ssh_user_here:www-data /var/www/website1
Sudo find /var/www/website1 -type f -exec chmod 660 {} \;
Sudo find /var/www/website1 -type d -exec chmod 2770 {} \;

www-dataグループに自分を追加します。

Sudo usermod -a -G www-data your_ssh_user_here

グループのメンバーになるには、再ログインする必要があります。

php-fpmが同じユーザーとして実行されている場合、Webサイトが他のファイルにアクセスできないようにするには、追加の構成が必要です。

4
Lekensteyn