Рубрики
Uncategorized

Утвержденное ремесло CMS разрешения

Опубликовано: 2016.12.05 / Обновлено: 2019.06.03 Утверждение CRAF CRAFT CMS разрешения и i … с меткой CraftCMS, DevOps, Security.

Опубликовано: /Обновлено:

Важной частью укрепления ремесленных CMS с точки зрения безопасности является правильное получение разрешений на файл

Эндрю Уэлч/ Nystudio107

Обновление: Эта статья была обновлена, чтобы охватить Craft CMS 2.x и Craft CMS 3.x

Часть затвердевания Craft CMS обеспечивает обеспечение того, чтобы разрешения файла были настолько строгими, насколько это возможно, в то же время позволяя правильно функционировать самих CRAF CMS. Разрешения на файле являются лишь одной частью более широкого обсуждения Закрепление ремесла Анкет

Мы хотим, чтобы веб -сервер мог писать в конкретные каталоги, чтобы такие вещи, как загрузка активов, работали, но мы не хотим, чтобы веб -сервер мог модифицировать вещи, которые не должны. Если происходит безопасная эксплойта, мы хотим смягчить и содержать как можно больше урона. Кроме того, для работы Craft CMS необходимы надлежащие разрешения.

Прежде чем мы перейдем к Nitty Gritty, давайте рассмотрим разрешения Unix файла.

Учебник Unix File Primer

Вот инфографика, показывающая разрешения файла Unix:

С стандартными разрешениями UNIX POSIX, каждый файл/каталог имеет разные разрешения для файла Владелец, Группа и A ll (все остальные). Так, например, o Wner из файла может быть в состоянии р ead & W Rite It, пользователи в файле G Файл roup может просто иметь возможность р это это и A Другие пользователи не смогут получить к нему доступ.

Вам не нужно знать кровообразные детали, но вот как выражаются разрешения численно:

Например, этот файл:

-rw-r--r-- 1 admin nginx 9275 Nov 18 17:50 gulpfile.js

… можно записать или читается по o wner администратор , но может быть только р EAD пользователем в группе nginx и A Другие аналогично могут только р это это. Никто не может e x Ext It (запустите его в виде сценария или другого исполняемого двоичного файла). Численно выражено, разрешения будут 644 Анкет

Вот каталог с аналогичными разрешениями:

drwxr-xr-x 12 admin nginx 4096 Nov 18 18:21 public

Вы заметите, что E x Разрешение на экран установлено для каталога Владелец, Группа и A другие. x Флаг для каталогов просто означает, что те, кто разрешил, могут перечислить файлы в этом каталоге. Численно выражено, разрешения будут 755 Анкет

Стратегия разрешений для ремесленных CMS

Все еще со мной? Хорошо, отлично. Теперь давайте посмотрим, как мы могли бы применить эти знания для создания разрешений CMS, чтобы наша установка Craft была безопасной, но все еще функционирует должным образом.

o Wner of нашей установки Craft CMS должен быть пользователем кроме пользователь WebServer. Это может быть администратор Учетная запись, это может быть учетная запись пользователя, с которой вы получаете доступ к серверу, или это может быть Корена Если вы используете программное обеспечение для обеспечения сервера, например Ларавел Корена Анкет

G Рупба всей нашей установки CRAFT CMS должна быть группой WebServer. Мы позволяем ему р эд Любой из файлов в нашей установке Craft, чтобы он мог обслуживать наш веб -сайт, но он может только W Обряд к нескольким конкретным каталогам.

Наконец, A другие пользователи могут только р Прочитайте файлы в нашей установке Craft. Если вы действительно параноидально, вы можете запретить даже чтение, но это кажется немного чрезмерным, если вы не используете общую среду хостинга (кем вы действительно не должны быть в эти дни).

Ничего В нашей ремесленной установке CMS (кроме каталогов, и любые сценарии оболочки, которые вы можете использовать) должны быть E x Ecutable. Это потому, что Файлы на самом деле не выполняются, они читаются и анализируются любым php или PHP-FPM Анкет

Craft CMS 2.x и Craft CMS 3.x имеют очень похожие требования к разрешениям, но структура папок немного отличается. Проверьте Настройка нового проекта Craft CMS 3 Статья для получения подробной информации о различиях.

Craft CMS 2.x разрешения

Группа WebServer должна быть в состоянии писать:

  • ремесло/хранение Для нормальной работы ремесла
  • Любой назначенный актив каталоги, чтобы клиент мог загружать изображения и другие активы

Вот и все! Установка ремесла CMS 2.x. Инструкции Укажите, что WebServer также должен быть в состоянии писать в Craft/Config и Craft/App , однако написать доступ к Craft/config необходимо только для установки Лицензия. КЛЮЧ Файл и написать доступ к ремесло/приложение необходимо только для обновления одного щелчка.

Вместо этого я рекомендую установить Лицензия. КЛЮЧ Файл в местный dev и используйте любой инструмент развертывания, который вы используете, чтобы подтолкнуть его к своему Постановка и Живи Производственные серверы. Точно так же я рекомендую вам обновить и протестировать любые обновления CRAFT CMS в местный Дев, а затем подтолкните их к Постановка и жить производство Затем отключите обновления на один клик о поставка и Живи Производство, добавив это в ваш Craft/config/general.php файл:

'allowAutoUpdates' => false,

Да, автоматические обновления удобны; И вы все еще можете сделать их в местный девчонка Но мы действительно хотим, чтобы протестировать обновления, прежде чем развернуть их в Живи производство И предоставление веб -серверу написать доступ к Craft/App и Craft/config каталоги Потенциально позволяет некоторым еще пока обнаруженным эксплойтам делать плохие вещи с нашим веб-сайтом.

Если вы предпочитаете или требуете этого Craft/App и Craft/config можно писать, это нормально. Просто зайдите в это с широко открытыми глазами.

Craft CMS 3.x разрешения

Группа WebServer должна быть в состоянии писать в следующие каталоги:

  • хранение/ — Для нормальной работы ремесла
  • Продавец/ — Вот где композитор помещает свои пакеты PHP для вашего проекта
  • Web/Cpresources/ — Это каталог кеша для ресурсов Admincpp
  • Любой назначенный актив каталоги, чтобы клиент мог загружать изображения и другие активы

Затем из -за Craft CMS 3 с использованием композитора также необходимо также писать в несколько конкретных файлов:

  • .env -Для вашей специфической для среды переменные, такие как пароли и т. Д.
  • Composer.json — Список пакетов композиторов, которые требуется вашему проекту
  • Composer.lock — Список композиторов, которые установлены
  • config/license.key — Ваш файл лицензии Craft CMS 3

Вот и все! Вы можете проверить Craft CMS 3 Инструкции по установке Более подробно, если хотите. Я продолжаю рекомендовать, чтобы вы не разрешали делать обновления на жить Производственные или проведенные серверы, через следующие в вашем config/general.php файл:

'allowUpdates' => false,

Это покрыто углубленным в Настройка нового проекта Craft CMS 3 Статья, но основная предпосылка заключается в том, что мы обновляем и тестируем в местный Разработка, и как только мы узнаем, что все работает, мы развертываем обновления в Живи производство и/или постановка.

Скрипты оболочки, чтобы сделать это простым!

Не волнуйтесь, вам не придется делать все это вручную. Я создал немного удобного Craft-Scripts Скрипты оболочки, чтобы упростить установку CRAFT CMS разрешения простым. Чтобы использовать их, вам нужно сделать следующее:

  1. Скачать или клонировать Craft-Scripts git Repo
  2. Скопируйте Сценарии Папка в корневой каталог вашего проекта Craft CMS
  3. Дублировать Пример.env.sh Файл и переименовать в .env.sh
  4. Добавить .env.sh к вашему .gitignore файл
  5. Затем откройте .env.sh файл в ваш любимый редактор и замените Заменить_me с соответствующими настройками.

В этом .env.sh Файл, но нам нужно только заботиться о следующем для установки разрешений на файл:

# Local path constants; paths should always have a trailing /
LOCAL_ROOT_PATH="REPLACE_ME"
LOCAL_ASSETS_PATH=$LOCAL_ROOT_PATH"REPLACE_ME"

# Local user & group that should own the Craft CMS install
LOCAL_CHOWN_USER="admin"
LOCAL_CHOWN_GROUP="apache"

# Local directories that should be writeable by the $CHOWN_GROUP
LOCAL_WRITEABLE_DIRS=(
                "craft/storage"
                "public/assets"
                )

Local_root_path это Абсолют Путь к корню вашей местной установки ремесла, с следами / после этого.

Local_assets_path Путь к вашим каталогам активов относительно Local_root_path , с следами / после этого.

Local_chown_user локальный пользователь, который является o Владелец всей вашей ремесленной установки, как обсуждалось ранее.

Local_chown_group местный веб -сервер G Руп, обычно либо nginx или Apache Анкет

Local_writable_dirs это цитируемый список каталогов относительный к Local_root_path Это должно быть подлежит написанию вашим веб -сервером.

Так, например, вот какая часть моего .env.sh выглядит как для этого веб -сервера:

# The path of the `craft` folder, relative to the root path; paths should always have a trailing /
GLOBAL_CRAFT_PATH="craft/"

# Local path constants; paths should always have a trailing /
LOCAL_ROOT_PATH="/home/forge/nystudio107.com/"
LOCAL_ASSETS_PATH=$LOCAL_ROOT_PATH"public/img/"

# Local user & group that should own the Craft CMS install
LOCAL_CHOWN_USER="forge"
LOCAL_CHOWN_GROUP="forge"

# Local directories relative to LOCAL_ROOT_PATH that should be writeable by the $CHOWN_GROUP
LOCAL_WRITEABLE_DIRS=(
                "${GLOBAL_CRAFT_PATH}storage"
                "public/assets"
                )

Причина, по которой оба o Wner и грамм Рупа оба Корена потому что есть оба Корена Пользователь и Корена Группа при использовании Laravel Forge.

Вы можете задаться вопросом, почему все это в .env.sh Файл, а не в самом скрипте. Причина в том, что одни и те же сценарии можно использовать в нескольких средах, таких как местный двойник Постановка и жить производство без модификации. Мы просто создаем .env.sh Файл в каждой среде и не допустите нашего репозиции GIT через .gitignore .

Tangent: Для более глубокого обсуждения нескольких сред, ознакомьтесь с Конфигурация с несколькими вариантами окружающей среды для Craft CMS статья.

Хорошо, теперь, когда у нас есть наши .env.sh Все заполнены, чтобы установить наши разрешения на файлы, мы просто ssh в нашем сервере, CD к сценарии каталог и тип:

./set_perms.sh

Вот и все! Если он жалуется на ошибки разрешения, вам может потребоваться ввести судо ./set_perms.sh Вместо этого (и вам нужно будет ввести свой пароль sudo для аутентификации).

Для любопытного, вот как выглядит сценарий:

#!/bin/bash

# Set Permissions
#
# Set the proper, hardened permissions for an install
#
# @author nystudio107
# @copyright Copyright (c) 2017 nystudio107
# @link https://nystudio107.com/
# @package craft-scripts
# @since 1.1.0
# @license MIT

# Get the directory of the currently executing script
DIR="$(dirname "${BASH_SOURCE[0]}")"

# Include files
INCLUDE_FILES=(
            "common/defaults.sh"
            ".env.sh"
            "common/common_env.sh"
            )
for INCLUDE_FILE in "${INCLUDE_FILES[@]}"
do
    if [-f "${DIR}/${INCLUDE_FILE}"]
    then
        source "${DIR}/${INCLUDE_FILE}"
    else
        echo 'File "${DIR}/${INCLUDE_FILE}" is missing, aborting.'
        exit 1
    fi
done

# The permissions for all files & directories in the Craft CMS install
GLOBAL_DIR_PERMS=755 # `-rwxr-xr-x`
GLOBAL_FILE_PERMS=644 # `-rw-r--r--`

# The permissions for files & directories that need to be writeable
WRITEABLE_DIR_PERMS=775 # `-rwxrwxr-x`
WRITEABLE_FILE_PERMS=664 # `-rw-rw-r--`

# Set project permissions
echo "Setting base permissions for the project ${LOCAL_ROOT_PATH}"
chown -R ${LOCAL_CHOWN_USER}:${LOCAL_CHOWN_GROUP} "${LOCAL_ROOT_PATH}"
chmod -R ${GLOBAL_DIR_PERMS} "${LOCAL_ROOT_PATH}"
find "${LOCAL_ROOT_PATH}" -type f ! -name "*.sh" -exec chmod $GLOBAL_FILE_PERMS {} \;

for DIR in ${LOCAL_WRITEABLE_DIRS[@]}
    do
        FULLPATH=${LOCAL_ROOT_PATH}${DIR}
        if [-d "${FULLPATH}"]
        then
            echo "Fixing permissions for ${FULLPATH}"
            chmod -R $WRITEABLE_DIR_PERMS "${FULLPATH}"
            find "${FULLPATH}" -type f ! -name "*.sh" -exec chmod $WRITEABLE_FILE_PERMS {} \;
        else
            echo "Creating directory ${FULLPATH}"
            mkdir "${FULLPATH}"
            chmod -R $WRITEABLE_DIR_PERMS "${FULLPATH}"
        fi
    done

# Normal exit
exit 0

Обратите внимание, что он создаст любые каталоги, которые вы указали в Local_writable_dirs Если они не существуют, что удобно, потому что ремесло/хранение , например, всегда следует исключать из вашего репозиции GIT через .gitignore , Но ремесло не будет функционировать, если оно не существует (и не подлежит записи).

Как только у вас есть .env.sh Настройка для каждой среды, вы можете установить разрешения по -каждому одинаково.

Так что возьмите Craft-Scripts и дай им вихрь. Теперь расслабьтесь и наслаждайтесь.

Разрешения и git

Если вы используете git и изменить разрешения на файлы на вашем удаленном сервере, вы можете встретить GIT, жалуясь на перезапись существующих локальных изменений Когда вы пытаетесь развернуть. Это связано с тем, что GIT рассматривает изменение исполняемого флага как изменение в файле, поэтому он думает, что вы изменили файлы на своем сервере (и изменения не проверяются в вашем git Repo).

Чтобы исправить это, нам просто нужно сказать GIT игнорировать изменения разрешения на сервере. Вы можете изменить FileMode Настройка для GIT на вашем сервере, сообщив ему об изменении разрешений файлов на сервере:

git config --global core.fileMode false

Смотрите Git-Config Man Page Для деталей.

Другой способ исправить это — установить разрешение с помощью set_perms.sh в местный dev, а затем проверьте файлы в вашем репо. Это приведет к тому, что они будут сохранены с правильными разрешениями в вашем git Repo с самого начала.

Недостатком последнего подхода является то, что вы должны иметь соответствующий пользователь/группы в обоих местный dev и on Живи производство.

Дальнейшее чтение

Если вы хотите получить уведомление о новых статьях, следуйте Nystudio107 в Твиттере.

Copyright © 2020 NYSTUDIO107. Разработано NYSTUDIO107

Оригинал: «https://dev.to/gaijinity/hardening-craft-cms-permissions-4mgj»