Каковы рекомендуемые разрешения для каталога?

Я собираюсь развернуть сайт Drupal 7, и я не могу найти какую-либо документацию о том, какие рекомендуемые безопасные файлы и права на каталоги должны быть установлены.

В частности default/files/ (также подкаталоги?), settings.php, .htaccess и все остальное, о чем я должен знать .

142 голоса | спросил ack 5 MaramSat, 05 Mar 2011 04:37:32 +03002011-03-05T04:37:32+03:0004 2011, 04:37:32

11 ответов


70

Ваш веб-сервер должен иметь возможность читать все файлы, но not писать им. Если ваш сайт включает в себя загрузку файлов, дайте серверу возможность писать только в эту папку.

Дополнительная информация о том, как установить это, а также некоторые вещи, которые могут произойти, если вы этого не сделаете, доступна в Документах Drupal .

ответил Paul Jones 5 MaramSat, 05 Mar 2011 05:33:58 +03002011-03-05T05:33:58+03:0005 2011, 05:33:58
80

Моя практика создания нового сайта 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 - данные всегда будут группой в любых файлах, тем самым гарантируя, что веб-сервер и пользователь будут всегда иметь права на запись для любых новых файлов, которые помещаются в этот каталог. Первые 7 означают, что владелец (пример) может использовать R (Read) W (Write) и X (Execute) любые файлы здесь. Второй 7 означает, что группа (www-data) также может использовать R W и X любые файлы в этом каталоге. Наконец, 5 означает, что другие пользователи могут создавать R и X файлы, но не писать.

 chmod 2775 sites/default/files

Если в этом каталоге есть какие-либо существующие файлы, убедитесь, что на веб-сервере написано perms.

 chmod g+w -R sites/default/files

Теперь Drupal готов к установке. По завершении важно ОЧЕНЬ вернуться к settings.php и убедиться, что у всех пользователей есть разрешения на чтение.

 chmod 444 sites/default/settings.php

Вот и все! Эта настройка гарантирует, что вы избежите ситуаций, когда либо пользователь, которому принадлежит каталог или веб-сервер, не может записывать /изменять /удалять файлы в каталоге файлов.

ответил q0rban 5 MarpmSat, 05 Mar 2011 19:42:19 +03002011-03-05T19:42:19+03:0007 2011, 19:42:19
78

Эта страница 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
  •   
ответил ErichBSchulz 8 ThuEurope/Moscow2011-12-08T06:02:46+04:00Europe/Moscow12bEurope/MoscowThu, 08 Dec 2011 06:02:46 +0400 2011, 06:02:46
29

Папка файлов Drupal должна быть доступна для записи веб-сервером. Самый безопасный способ сделать это - изменить группу и сделать ее доступной для группы, например:

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

Отправляемая папка для файлов в стороне, самый безопасный - chmod 644 для всех файлов, 755 для каталогов.

Это можно сделать следующим образом (при запуске в папке сайта Drupal . для текущего пути):

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

Помните, что вам нужно будет снова установить chmod g+w после выполнения указанной выше команды, так как они сбросят chmod во все файлы и папки.

ответил mikl 5 MarpmSat, 05 Mar 2011 16:47:09 +03002011-03-05T16:47:09+03:0004 2011, 16:47:09
19

Любые советы для «chmod blah» или «chown X» бессмысленны, не зная: что пользователь по умолчанию: группа находится в файлах, а какой пользователь и группы ваш веб-сервер работает как.

Другие, с которыми связаны Drupal Docs, неплохо относятся к этой теме, но еще один ресурс - это Модуль проверки безопасности , который помогает обеспечить вы все правильно настроили.

ответил greggles 22 MarpmTue, 22 Mar 2011 13:18:59 +03002011-03-22T13:18:59+03:0001 2011, 13:18:59
9

Я отвечу, рассматривая случай, когда файлы создаются на сервере с использованием FTP, используя учетные данные, отличные от тех, на которых выполняется веб-сервер (обычно Apache работает как никто /никто). Это означает, что пользователь, которому принадлежат файлы, созданные вручную перед запуском установщика Drupal (который также включает файлы, загруженные на сервер из архива Drupal), не является пользователем, используемым для запуска веб-сервера (ни имя пользователя, ни группа не совпадают) , Этот сценарий применяется также к случаю, когда эти файлы создаются с использованием SSH.

  • Файл settings.php должен быть доступен для записи из установщика Drupal, но после завершения установки предлагается сделать его доступным только для чтения (установщик предположил, что Drupal периодически проверяет, действительно ли файл доступен для чтения ). В описываемом сценарии разрешение этого файла должно быть как минимум 644.
  • Файлы .htaccess (которые присутствуют хотя бы в двух местах) должны иметь разрешение 644. Пользователь, создавший файл, все равно сможет перезаписать файл, в случае, если в следующей версии Drupal есть. htaccess, который был обновлен (это произошло уже один раз, когда к нему добавлена ​​строка, чтобы избежать проблемы с безопасностью). Также возможно установить разрешения на 444, но в этом случае разрешения должны быть заменены на 644, когда файл необходимо обновить.
  • Каталог, содержащий файлы, созданные модулями (каталог default/files) должен быть (для пользователя, которому назначены процессы веб-сервера, который затем назначен пользователю на PHP-скрипты, запущенные на этом веб-сервере):
    • читаемый
    • запись
    • traversable (модули должны иметь возможность достигать default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module> ) литий>
ответил kiamlaluno 5 MarpmSat, 05 Mar 2011 14:22:21 +03002011-03-05T14:22:21+03:0002 2011, 14:22:21
7

Рекомендуемые разрешения файлов /каталогов:

  • Веб-сайт Drupal должен быть доступен для чтения в мире (см. updater.inc ): 0755
  • для общедоступных каталогов выгрузки: 0755 или 0775
  • для частных каталогов выгрузки: 0750 или 0770
  • для публичных загружаемых файлов: 0644 или 0664
  • для закрытых загруженных файлов: 0640 или 0660
  • для .htaccess в каталогах загрузки (см. file_create_htaccess () ): 0444 (по умолчанию) или 0644
  • для settings.php для чтения только для всех (и других конфиденциальных файлов): 0440
  • для всех других веб-каталогов: 0755
  • для всех других веб-файлов: 0644

Рекомендуемые права на файл /каталог:

  • Владелец всех каталогов /файлов для загрузки должен быть установлен на пользователя Apache,
  • владелец всех каталогов /файлов в Интернете /источниках должен быть настроен на пользователя не-Apache,
  • (необязательно) группа всех источников должна быть установлена ​​в группу Apache,

Вот переменные, которые управляют разрешениями 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.

ответил kenorb 15 FebruaryEurope/MoscowbSun, 15 Feb 2015 20:39:21 +0300000000pmSun, 15 Feb 2015 20:39:21 +030015 2015, 20:39:21
4

Этот сценарий оболочки находится в нижней части этой страницы: https://www.drupal.org/узел /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.
ответил Richard Robinson 30 Maypm15 2015, 23:04:02
2

Кроме того, если вы используете fastcgi, php запускается как пользователь и будет иметь доступ ко всем файлам, к которым у пользователя есть доступ, если вы не намеренно пытаетесь избежать этого.

ответил G.Martin 22 MarpmTue, 22 Mar 2011 13:32:46 +03002011-03-22T13:32:46+03:0001 2011, 13:32:46
0

Это помогло мне решить мои проблемы с разрешением OSX. Я нашел его в https://www.drupal.org/node/244924#comment- 3741738 от пользователя протоплазмы. У меня были проблемы после миграции.

[[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
ответил cayerdis 7 22017vEurope/Moscow11bEurope/MoscowTue, 07 Nov 2017 22:19:46 +0300 2017, 22:19:46
-2

Существует модуль под названием Обзор безопасности , который проверяет, защищен ли ваш сайт или нет. Я также нашел очень хорошую ссылку для установки прав сайта.

ответил Manikandan 29 TueEurope/Moscow2015-12-29T13:06:16+03:00Europe/Moscow12bEurope/MoscowTue, 29 Dec 2015 13:06:16 +0300 2015, 13:06:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132