通过 Amazon Web Service CodeDeploy 使用 appspec.yml 设置目录所有者和权限

Setting directory owner and permission with appspec.yml through Amazon Web Service CodeDeploy

我正在通过 Codeship using the CodeDeploy AWS 部署系统.

部署 Node.js 应用程序

我正在使用 appspec.yml 文件来设置已部署目录之一的所有者和权限。

我想 允许 read/write 用于将在部署的指定文件夹中创建的任何文件。 Web 应用程序启动后将创建文件 运行。

目前我的 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

如果您在文件系统上启用了访问控制列表 (ACL),则可以在您的目录上使用默认 ACL,以允许对该目录中新创建的文件的 owner/group/others read/write 权限。

AWS CodeDeploy 允许您为 appspec.yml 中的文件指定 ACL。它可以采用任何可以传递给 setfacl [1]

的有效 ACL 条目

例如,如果要为每个人设置所有新创建文件的读取、写入和执行权限,您可以执行类似

的操作
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 文件设置权限很头疼。由于这个原因,我利用 "hooks" 调用小 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