【问题标题】:Setting directory owner and permission with appspec.yml through Amazon Web Service CodeDeploy通过 Amazon Web Service CodeDeploy 使用 appspec.yml 设置目录所有者和权限
【发布时间】:2015-04-03 21:43:43
【问题描述】:

我正在使用 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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您在文件系统上启用了访问控制列表 (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”会屏蔽执行权限。您可以在这里http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html

      了解更多关于 ACL 和屏蔽的信息

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-27
        • 2015-03-19
        • 1970-01-01
        • 2017-12-25
        • 2020-11-18
        • 1970-01-01
        • 2016-08-25
        • 2015-01-20
        相关资源
        最近更新 更多