Drupal 7サイトの展開に向けて準備を進めていますが、推奨されるセキュリティ重視のファイルおよびディレクトリのアクセス許可の設定に関するドキュメントが見つかりません。
具体的にdefault/files/
(また、サブディレクトリ?)、 settings.php
、.htaccess
と私は知っておくべき何か。
Drupal 7サイトの展開に向けて準備を進めていますが、推奨されるセキュリティ重視のファイルおよびディレクトリのアクセス許可の設定に関するドキュメントが見つかりません。
具体的にdefault/files/
(また、サブディレクトリ?)、 settings.php
、.htaccess
と私は知っておくべき何か。
回答:
Webサーバーは、すべてのファイルを読み取ることはできますが、書き込むことはできません。サイトにファイルのアップロードが含まれる場合は、サーバーにその1つのフォルダーのみへの書き込み許可を与えます。
設定方法の詳細と、設定しない場合に発生する可能性のある情報については、Drupalのドキュメントを参照してください。
そのような多くのような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を/ var / www / example / docrootなどにインストールし、手動でファイルディレクトリを作成し、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
それでは、filesディレクトリを設定しましょう。
# 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は、所有者(例)がここのファイルをR(読み取り)W(書き込み)およびX(実行)できることを意味します。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ファイルフォルダーは、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をリセットするため、再度設定する必要があることに注意してください。
chgrp -R www-data sites/*/files
しchmod -R g+w sites/*/files
、ステータスページのエラーを取り除きます。
「chmod blah」または「chown X」へのアドバイスは、ファイルのデフォルトのuser:groupが何であり、Webサーバーがどのユーザーおよびグループとして実行されるかを知らなくても意味がありません。
他の人がリンクしているDrupal Docsはこのトピックに関して非常に優れていますが、他のリソースの1つは、すべてが適切に設定されていることを確認するのに役立つセキュリティレビューモジュールです。
FTPを使用してサーバー上でファイルが作成され、Webサーバーが実行される資格情報(通常、Apacheはnobody / nobodyとして実行される)とは異なる資格情報を使用して作成される場合を考慮して返信します。これは、Drupalインストーラー(Drupalアーカイブからサーバーにアップロードされたファイルも含む)を実行する前に手動で作成されたファイルを所有するユーザーが、Webサーバーの実行に使用したユーザーではないことを意味します(ユーザー名またはグループが一致しません) 。このシナリオは、これらのファイルがSSHを使用して作成される場合にも適用されます。
default/files
ディレクトリ)は(Webサーバープロセスに割り当てられているユーザーの場合、そのWebサーバーで実行されているPHPスクリプトに割り当てられているユーザーの場合):
default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>
)推奨されるファイル/ディレクトリ許可:
推奨されるファイル/ディレクトリの所有権:
新しいアイテムのデフォルトのディレクトリ/ファイル許可を制御する変数は次のとおりです。
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.
これは、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
サイトが安全かどうかをチェックするセキュリティレビューと呼ばれるモジュールがあります。また、サイトのアクセス許可を設定するための非常に良いリンクを見つけました。