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

问题描述 投票:0回答:2

我正在使用 CodeDeploy AWS 部署系统通过 Codeship 部署 Node.js 应用程序。

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

我想要允许读/写将在部署的指定文件夹中创建的任何文件。 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
amazon-web-services yaml continuous-deployment codeship aws-code-deploy
2个回答
16
投票

我发现 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

7
投票

如果您在文件系统上启用了访问控制列表 (ACL),则可以在目录上使用默认 ACL,以允许所有者/组/其他人对该目录中新创建的文件具有读/写权限。

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

© www.soinside.com 2019 - 2024. All rights reserved.