Настройка владельца каталога и разрешения с помощью 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
Я обнаружил, что файл 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