أنا أستعد لنشر موقع Drupal 7 موقع ولا يمكنني العثور على أي وثائق حول ما يجب تعيين أذونات الملف والدليل الواعي الموصى به.
على وجه التحديد default/files/
(أيضا الدلائل الفرعية؟) ، settings.php
، .htaccess
وأي شيء آخر يجب أن أكون على علم به.
يجب أن يكون خادم الويب الخاص بك قادرًا على قراءة جميع الملفات ولكن لا يكتب لها. إذا كان موقعك يتضمن تحميل الملفات ، فامنح الخادم إذنًا للكتابة في هذا المجلد فقط.
يتوفر مزيد من المعلومات حول كيفية إعداد ذلك ، بالإضافة إلى بعض الأشياء التي يمكن أن تحدث إذا لم تقم بذلك ، في مستندات Drupal .
تلك دروبال صفحة مثل الكثير هي طويلة ومربكة للغاية. ولكنه يحتوي على هذا المنشور لجيسون ، الذي ضرب المسمار على رأسه:
تم النشر بواسطة Jason Sale في 1 تشرين الثاني (نوفمبر) 2010 الساعة 12:40 مساءً
شكرًا لك على كتابة هذا وكل شيء ، ولكن كل ما أريده أنا و 99٪ من الأشخاص الذين يقرؤون هذه الصفحة حقًا هو قائمة من الأرقام بجوار قائمة المجلدات.
/default
يوم 755/default/files
بما في ذلك كافة المجلدات الفرعية والملفات الموجودة على 744 (أو 755)/default/themes
بما في ذلك كافة المجلدات الفرعية والملفات الموجودة على 755/default/modules
بما في ذلك كافة المجلدات الفرعية والملفات الموجودة على 755/default/settings.php
و/default/default.settings.php
على 444
من عملي حول إنشاء موقع Drupal جديد على خادم أن يكون لديك مستخدم جزء من مجموعة خادم الويب (عادةً 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
لنقم الآن بإعداد دليل الملفات.
# 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
بعد ذلك سنقوم بإعداد الأذونات بحيث يمكن لخادم الويب دائمًا الكتابة إلى أي ملف موجود في هذا الدليل. نقوم بذلك باستخدام 2775 في أمر chmod الخاص بنا. يعني الرقم 2 أنه سيتم الاحتفاظ بمعرف المجموعة لأي ملفات جديدة تم إنشاؤها في هذا الدليل. ما يعنيه ذلك هو أن www - data ستكون دائمًا المجموعة على أي ملفات ، وبالتالي ضمان أن يكون خادم الويب والمستخدم دائمًا أذونات كتابة لأي ملفات جديدة يتم وضعها في هذا الدليل. يعني الرقم 7 الأول أن المالك (المثال) يمكنه R (قراءة) W (كتابة) و X (تنفيذ) أي ملفات هنا. يعني الرقم 7 الثاني أن المجموعة (www-data) يمكنها أيضًا R W و X أي ملفات في هذا الدليل. أخيرًا ، يعني 5 أنه يمكن للمستخدمين الآخرين R و X الملفات ، ولكن ليس الكتابة.
chmod 2775 sites/default/files
إذا كان هناك أي ملفات موجودة في هذا الدليل ، فتأكد من أن خادم الويب يحتوي على تصاريح كتابة عليها.
chmod g+w -R sites/default/files
الآن Drupal جاهز للتثبيت. عند الانتهاء ، من المهم [~ # ~] جدًا [~ # ~] الرجوع إلى settings.php والتأكد من أن جميع المستخدمين قد قرأوا فقط أذونات.
chmod 444 sites/default/settings.php
هذا هو! يضمن لك هذا الإعداد تجنب أي مواقف حيث لا يمكن للمستخدم الذي يمتلك الدليل أو خادم الويب كتابة/تغيير/إزالة الملفات في دليل الملفات.
يجب أن يكون مجلد الملفات Drupal قابل للكتابة بواسطة خادم الويب. الطريقة الأكثر أمانًا للقيام بذلك هي تغيير المجموعة وجعلها قابلة للكتابة ، كما يلي:
chgrp www-data sites/default/files
chmod g+w sites/default/files
مجلد تحميل الملف جانبًا ، الأكثر أمانًا هو chmod 644 لجميع الملفات ، 755 للأدلة.
يمكن تحقيق ذلك على هذا النحو (عند تشغيله في مجلد موقع دروبال ، .
للمسار الحالي):
find . -type f | xargs chmod 644
find . -type d | xargs chmod 755
تذكر أنك ستحتاج إلى تعيين chmod g+w
مرة أخرى بعد تشغيل الأمر أعلاه ، لأن هؤلاء سيعيدون تعيين chmod على جميع الملفات والمجلدات.
أي نصيحة لـ "chmod blah" أو "chown X" لا معنى لها بدون معرفة: ما هو المستخدم الافتراضي: المجموعة في الملفات والمستخدم والمجموعات التي يعمل عليها خادم الويب.
إن Drupal المستندات التي ربطها الآخرون جيدة جدًا في هذا الموضوع ولكن أحد الموارد الأخرى هو وحدة مراجعة الأمان التي تساعد على ضمان تعيين كل شيء بشكل صحيح.
سأجيب مع الأخذ في الاعتبار حالة إنشاء الملفات على الخادم باستخدام FTP ، باستخدام بيانات اعتماد مختلفة عن تلك التي يتم تشغيل خادم الويب (عادة ، يعمل Apache باعتباره لا أحد/لا أحد). وهذا يعني أن المستخدم الذي يمتلك الملفات التي تم إنشاؤها يدويًا قبل تشغيل المثبت [Drupal (الذي يتضمن أيضًا الملفات التي تم تحميلها على الخادم من الأرشيف Drupal ليس المستخدم المستخدم للتشغيل خادم الويب (لا يتطابق اسم المستخدم أو المجموعة). ينطبق هذا السيناريو أيضًا على الحالة التي يتم فيها إنشاء هذه الملفات باستخدام SSH.
default/files
) (للمستخدم الذي تم تعيينه لعمليات خادم الويب ، والذي يتم بعد ذلك تعيينه إلى PHP النصوص البرمجية التي تعمل على خادم الويب هذا: default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>
)أذونات الملف/الدليل الموصى بها:
ملكية الملف/الدليل الموصى بها:
فيما يلي المتغيرات التي تتحكم في أذونات dir/file الافتراضية للعناصر الجديدة:
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
متغير.
تم العثور على نص Shell هذا في أسفل هذه الصفحة: 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 بواسطة مستخدم protoplasm. كنت مثله يعاني من مشاكل بعد الهجرة.
[[email protected]]cd /path_to_drupal_installation/sites
[[email protected]]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[[email protected]]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[[email protected]]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done
هناك وحدة تسمى مراجعة الأمان تتحقق مما إذا كان موقعك آمنًا أم لا. لقد وجدت أيضًا رابطًا جيدًا جدًا لتعيين أذونات الموقع.