Настройка владельца каталога и разрешения с помощью appspec.yml через Amazon Web Service CodeDeploy

Я развертываю приложение Node.js через Codeship, используя систему развертывания CodeDeploy AWS.

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

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

В настоящее время мой appspec.yml содержит следующее:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/APPLICATION_NAME
permissions:
  - object: /var/www/APPLICATION_NAME/tmpfiles
    mode: 644
    owner: ec2-user
    type:
      - directory

2 ответа

Решение

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

AWS CodeDeploy позволяет вам указать ACL для ваших файлов в appspec.yml. Он может принимать любые допустимые записи ACL, которые могут быть переданы в setfacl [1]

Например, в вашем случае, чтобы установить права на чтение, запись и выполнение для всех для всех вновь создаваемых файлов, вы можете сделать что-то вроде

version: 0.0 os: linux files:
  - source: /
    destination: /var/www/APPLICATION_NAME permissions:
  - object: /var/www/APPLICATION_NAME/tmpfiles
    mode: 644
    acls:
      - "d:u::rwx"
      - "d:g::rwx"
      - "d:o::rwx"
    owner: ec2-user
    type:
      - directory

Разрешения могут быть ограничены приложением, которое создает новые файлы. Вы также можете установить маску ACL по умолчанию, чтобы установить биты маски для принудительного использования определенных разрешений. Например, "d:m::rw" будет маскировать разрешение на выполнение. Вы можете узнать больше о ACL и маскировании здесь http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html

[1] http://linux.die.net/man/1/setfacl

Я обнаружил, что файл appspec.yml очень сложен.

У меня очень большая и сложная структура папок, и это головная боль, пытаться установить разрешения с помощью файла appspec.yml. По этой причине я использую "ловушки" для вызова небольшого bash-скрипта, чтобы установить мои разрешения.

Вот пример файла appspec.yml, который у меня есть:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www
hooks:
  AfterInstall:
    - location: scripts/set-permissions.sh

Вот пример файла set-permissions.sh:

#!/bin/bash
# Set ownership for all folders
chown -R www-data:www-data /var/www/
chown -R root:root /var/www/protected

# set files to 644 [except *.pl *.cgi *.sh]
find /var/www/ -type f -not -name ".pl" -not -name ".cgi" -not -name "*.sh" -print0 | xargs -0 chmod 0644

# set folders to 755
find /var/www/ -type d -print0 | xargs -0 chmod 0755
Другие вопросы по тегам