Каковы рекомендуемые разрешения для каталога?
Я собираюсь развернуть сайт Drupal 7, и я не могу найти какую-либо документацию о том, какие рекомендуемые безопасные файлы и права на каталоги должны быть установлены.
В частности default/files/
(также подкаталоги?), settings.php
, .htaccess
и все остальное, о чем я должен знать .
11 ответов
Ваш веб-сервер должен иметь возможность читать все файлы, но not писать им. Если ваш сайт включает в себя загрузку файлов, дайте серверу возможность писать только в эту папку.
Дополнительная информация о том, как установить это, а также некоторые вещи, которые могут произойти, если вы этого не сделаете, доступна в Документах Drupal .
Моя практика создания нового сайта 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
Вот и все! Эта настройка гарантирует, что вы избежите ситуаций, когда либо пользователь, которому принадлежит каталог или веб-сервер, не может записывать /изменять /удалять файлы в каталоге файлов.
Эта страница 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 должна быть доступна для записи веб-сервером. Самый безопасный способ сделать это - изменить группу и сделать ее доступной для группы, например:
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 во все файлы и папки.
Любые советы для «chmod blah» или «chown X» бессмысленны, не зная: что пользователь по умолчанию: группа находится в файлах, а какой пользователь и группы ваш веб-сервер работает как.
Другие, с которыми связаны Drupal Docs, неплохо относятся к этой теме, но еще один ресурс - это Модуль проверки безопасности , который помогает обеспечить вы все правильно настроили.
Я отвечу, рассматривая случай, когда файлы создаются на сервере с использованием 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>
) литий>
Рекомендуемые разрешения файлов /каталогов:
- Веб-сайт 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
Подробнее:
- Защита прав и прав на файл на drupal.org
Вот скрипт, который я использую для исправления разрешений на удаленном хосте для общедоступных /частных каталогов:
#!/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/узел /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 от пользователя протоплазмы. У меня были проблемы после миграции.
[[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
Существует модуль под названием Обзор безопасности , который проверяет, защищен ли ваш сайт или нет. Я также нашел очень хорошую ссылку для установки прав сайта.