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

drupal.stackexchange https://drupal.stackexchange.com/questions/373

  •  16-10-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

Что Drupal Страница, как и многие, очень длинная и запутанная. Но он содержит этот пост Джейсона, который ударил по гвоздь на голове:

Автор: Джейсон продаж 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 AT/VAR/www/Пример/DocRoot или аналогичный, а затем создам каталог файлов вручную и скопируйте файл настройки.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 (Read) w (write) и x (выполнить) любые файлы здесь. Второй 7 означает, что группа (www-data) также может также RW и x любые файлы в этом каталоге. Наконец, 5 означает, что другие пользователи могут файлы R и X, но не писать.

 chmod 2775 sites/default/files

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

 chmod g+w -R sites/default/files

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

 chmod 444 sites/default/settings.php

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

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

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 запускается как nobody / никто).Это означает, что пользователь, которому принадлежат файлы, созданные вручную перед запуском программы установки Drupal (которая включает также файлы, загруженные на сервер из архива Drupal), не является пользователем, используемым для запуска веб-сервера (ни имя пользователя, ни группа не совпадают).Этот сценарий применим также к случаю, когда эти файлы создаются с помощью SSH.

  • Тот Самый settings.php файл должен быть доступен для записи из установщика Drupal, но после завершения установки предлагается сделать его доступным только для чтения (установщик предлагает это, и Drupal будет периодически проверять, действительно ли файл доступен только для чтения).В сценарии, который я описываю, разрешение этого файла должно быть не менее 644.
  • Файлы .htaccess (которые присутствуют как минимум в двух местах) должны иметь разрешение 644.Пользователь, создавший файл, все равно должен иметь возможность перезаписать файл, в случае, если следующая версия Drupal поставляется с файлом .htaccess, который был обновлен (это уже произошло однажды, когда в этот файл была добавлена строка, чтобы избежать проблем с безопасностью).Также возможно установить разрешения на 444, но в этом случае разрешения должны быть изменены обратно на 644, когда файл необходимо обновить.
  • Каталог, содержащий файлы, созданные модулями (the default/files directory) должен быть (для пользователя, назначенного процессам веб-сервера, который затем является пользователем, назначенным 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
  • для всех других веб-каталогов:0755
  • для всех других веб-файлов:0644

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

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

Вот переменные, которые управляют правами доступа к каталогу / файлу по умолчанию для новых элементов:

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 Пользователь Protoplasm. Я был похож на у него проблемы после миграции.

[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