質問

Drupal 7サイトを展開するために準備を進めていますが、推奨されるセキュリティ意識のファイルとディレクトリの権限を設定するものについてのドキュメントが見つかりません。

具体的には default/files/ (サブディレクトリも?)、 settings.php, .htaccess そして、私が知っておくべき他のことは何でも。

役に立ちましたか?

解決

あなたのWebサーバーはすべてのファイルを読み取ることができるはずですが いいえ それらに書いてください。サイトにファイルのアップロードが含まれている場合は、サーバーにその1つのフォルダーのみに書き込む許可を与えます。

それをセットアップする方法の詳細と、そうでない場合に発生する可能性のあることは、 Drupal Docs.

他のヒント

それか Drupal 多くの人のようなページは非常に長くて混乱しています。しかし、それはジェイソンによるこの投稿が含まれています。ジェイソンは頭に釘を打ちました:

Jason Saleが2010年11月1日午後12時40分に投稿

これとすべてを書いてくれてありがとう。しかし、私とこのページを読んでいる人の99%が本当に望んでいるのは、フォルダーのリストの横にある数字のリストだけです。

  • /default 755
  • /default/files 744(または755)のすべてのサブフォルダーとファイルを含む
  • /default/themes 755のすべてのサブフォルダーとファイルを含む
  • /default/modules 755のすべてのサブフォルダーとファイルを含む
  • /default/settings.php/default/default.settings.php 444

サーバーで新しいDrupalサイトを作成することに関する私の練習は、Webサーバー(通常はApache)グループの一部であるユーザーを持つことであり、そのユーザーにすべてのDrupalファイルを所有してもらうことです。 Ubuntuでは、これらはそのセットアップを取得するためのコマンドです。

# Create a new example user, setting up /var/www/example as their home dir.
useradd -s /bin/bash -d /var/www/example -m example

# Now add that user to the Apache group. On Ubuntu/Debian this group is usually
# called www-data, on CentOS it's usually apache.
usermod -a -G www-data example

# Set up a password for this user.
passwd example

そのセットアップを受けたら、そのユーザーとしてログインして、Drupal at/var/www/example/docrootまたは類似のDrupalをインストールしてから、手でファイルディレクトリを作成し、settings.phpファイルをコピーします。 Drupalでコピーする前にユーザーのサンプルユーザーとしてログインするため、ファイルの所有権と権限は、すべてのコアDrupalファイルとスクリプト(.htaccessファイルを含む)で自動的に適切に構成する必要があります。

su - example
cd docroot
cp sites/default/default.settings.php sites/default/settings.php

# Temporarily give the web server write permissions to settings.php
chgrp www-data sites/default/settings.php
chmod g+w sites/default/settings.php

次に、ファイルディレクトリを設定しましょう。

# Create the directory.
mkdir sites/default/files

# Now set the group to the Apache group. -R means recursive, and -v means 
# verbose mode.
chgrp -Rv www-data sites/default/files

次に、Webサーバーがこのディレクトリにある任意のファイルにいつでも書き込むことができるように、権限を設定します。これは、CHMODコマンドで2775を使用して行います。 2は、このディレクトリで作成された新しいファイルに対してグループIDが保持されることを意味します。つまり、www-dataは常に任意のファイルのグループになり、Webサーバーとユーザーの両方が常にこのディレクトリに配置されている新しいファイルに許可を書き込むことを保証します。最初の7つは、所有者(例)がここにあるw(read)w(write)and x(execute)ができることを意味します。 2番目の7は、グループ(www-data)がこのディレクトリ内の任意のファイルをrwおよびxできることを意味します。最後に、5つは、他のユーザーがrおよびxファイルを作成できるが、書き込みではないことを意味します。

 chmod 2775 sites/default/files

このディレクトリに既存のファイルがある場合は、Webサーバーがそれらにパームを書き込むことを確認してください。

 chmod g+w -R sites/default/files

Drupalはインストールする準備ができました。終了すると、そうです 非常に settings.phpに戻り、すべてのユーザーが許可のみを読み取っていることを確認することが重要です。

 chmod 444 sites/default/settings.php

それでおしまい!このセットアップにより、ディレクトリを所有するユーザーまたはWebサーバーがファイルディレクトリ内のファイルを書き込み/変更/削除できない状況を回避できます。

Drupal Filesフォルダーは、Webサーバーによって書かれている必要があります。それを行う最も安全な方法は、グループを変更し、このようにグループを書くことができるようにすることです。

chgrp www-data sites/default/files
chmod g+w sites/default/files

ファイルアップロードフォルダーは別として、最も安全なのはすべてのファイルのCHMOD 644、ディレクトリの755です。

これはこのように達成できます(Drupal-Siteフォルダーで実行すると、 . 現在のパス用です):

find . -type f | xargs chmod 644
find . -type d | xargs chmod 755

設定する必要があることを忘れないでください chmod g+w 上記のコマンドを実行した後、これらはすべてのファイルとフォルダーでCHMODをリセットするためです。

「Chmod Blah」または「Chown X」へのアドバイスは、知らないうちに意味がありません。デフォルトユーザー:グループはファイルにあり、Webサーバーが実行するユーザーとグループが実行されます。

他の人がリンクしているDrupalドキュメントはトピックに非常に優れていますが、他のリソースの1つは セキュリティレビューモジュール これにより、すべてが適切に設定されていることを確認できます。

FTPを使用してファイルがサーバー上に作成されているケースを考慮して、Webサーバーが実行されているものとは異なる資格情報(通常、Apacheは誰も/誰も実行しない)を使用して、サーバーに作成されているケースを考慮します。つまり、Drupalインストーラーを実行する前に手動で作成されたファイルを所有しているユーザー(Drupal Archiveからサーバーにアップロードされたファイルも含まれます)は、Webサーバーの実行に使用されるユーザーではありません(ユーザー名もグループも一致しません) 。このシナリオは、これらのファイルがSSHを使用して作成される場合にも適用されます。

  • settings.phpファイルはDrupalインストーラーから書き込み可能である必要がありますが、インストールが完了すると、読み取り専用にすることが提案されています(インストーラーは、ファイルが本当に読み取り専用かどうか定期的に確認します)。私が説明しているシナリオでは、このファイルの許可は少なくとも644でなければなりません。
  • .htaccessファイル(少なくとも2つの場所に存在する)に許可644が必要です。ファイルを作成したユーザーは、ファイルを上書きできるはずです。更新されました(セキュリティの問題を回避するためにそのファイルに行が追加されたときに、すでに一度発生しました)。また、許可を444に設定することもできますが、その場合、ファイルを更新する必要がある場合は、許可を644に戻す必要があります。
  • モジュールによって作成されたファイルを含むディレクトリ( default/files ディレクトリ)は(Webサーバープロセスに割り当てられているユーザーの場合、そのWebサーバーで実行されているPHPスクリプトに割り当てられたユーザーの場合):
    • 読みやすい
    • 書き込み可能
    • トラバー可能(モジュールは到達できる必要があります default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)

推奨ファイル/ディレクトリアクセス許可:

  • Drupal Webrootは世界で読みやすくする必要があります(参照: updater.inc): 0755
  • パブリックアップロードディレクトリの場合:0755または0775
  • プライベートアップロードディレクトリの場合:0750または0770
  • パブリックアップロードされたファイルの場合:0644または0664
  • プライベートアップロードされたファイルの場合:0640または0660
  • アップロードディレクトリ内の.htaccessの場合(参照: file_create_htaccess()):0444(デフォルト)または0644
  • settings.phpの場合、すべての場合(およびその他の機密ファイル):0440
  • 他のすべてのWebディレクトリの場合:0755
  • 他のすべてのWebファイルについて:0644

推奨ファイル/ディレクトリの所有権:

  • すべてのアップロードディレクトリ/ファイルの所有者は、Apacheユーザーに設定する必要があります。
  • すべてのWeb/ソースディレクトリ/ファイルの所有者は、非Apacheユーザーに設定する必要があります。
  • (オプション)すべてのソースのグループは、Apacheグループに設定する必要があります。

新しいアイテムのデフォルトのdir/ファイル権限を制御する変数は次のとおりです。

file_chmod_directory: 0775
file_chmod_file: 0664

許可を修正するためのスクリプトを次に示します。 fix-permissions.sh


続きを読む:


パブリック/プライベートディレクトリのリモートホストの権限を修正するために使用しているスクリプトは次のとおりです。

#!/bin/sh -e
# Script to correct public/private directory and files permissions.
[ -z "$1" ] && { echo Usage: $0 @remote.dst; exit 1; }

DST="$1" && shift
GET_HTTP_GROUP='ps axo user,group,comm | egrep "(apache|httpd)" | grep -v ^root | uniq | cut -d\  -f 1'

drush $* $DST ssh 'PUB=$(drush dd %files) && PRIV=$(drush dd %private) && AGROUP=$('"$GET_HTTP_GROUP"') && chgrp -vR $AGROUP $PUB $PRIV && chmod -vR u+rwX,g+rwX,o+rX $PUB $PRIV'

注:上記のコードはしようとします Apacheグループを取得します そしてそれを設定します GET_HTTP_GROUP 変数。

このシェルスクリプトは、このページの下部にあります。 https://www.drupal.org/node/244924

私は時々それを実行して、私の許可が正しくセットアップされるようにします。

#!/bin/bash
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
if [ $(id -u) != 0 ]; then
  printf "**************************************\n"
  printf "* Error: You must run this with sudo. *\n"
  printf "**************************************\n"
  print_help
  exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Parse Command Line Arguments
while [ $# -gt 0 ]; do
  case "$1" in
    --drupal_path=*)
      drupal_path="${1#*=}"
      ;;
    --drupal_user=*)
      drupal_user="${1#*=}"
      ;;
    --httpd_group=*)
      httpd_group="${1#*=}"
      ;;
    --help) print_help;;
    *)
      printf "***********************************************************\n"
      printf "* Error: Invalid argument, run --help for valid arguments. *\n"
      printf "***********************************************************\n"
      exit 1
  esac
  shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
  printf "*********************************************\n"
  printf "* Error: Please provide a valid Drupal path. *\n"
  printf "*********************************************\n"
  print_help
  exit 1
fi
if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
  printf "*************************************\n"
  printf "* Error: Please provide a valid user. *\n"
  printf "*************************************\n"
  print_help
  exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
    find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
    find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"
Copy the code above to a file, name it "fix-permissions.sh" and run it as follows:
sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name

Note: The server group name is assumed "www-data", if it differs use the --httpd_group=GROUP argument.

また、FastCGIを実行している場合、PHPはユーザーとして実行され、意図的にこれを回避しようとしない限り、ユーザーがアクセスできるすべてのファイルにアクセスできます。

これは、OSXの許可の問題で私を助けました。で見つけました https://www.drupal.org/node/244924#comment-3741738 プロトプラズムユーザーによる。私は彼が移住後に問題を抱えているようでした。

[root@localhost]cd /path_to_drupal_installation/sites
[root@localhost]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[root@localhost]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[root@localhost]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done

呼ばれるモジュールがあります セキュリティレビュー サイトが安全かどうかを確認します。私もとても良いことを見つけました リンク サイト許可を設定します。

ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top