AWS CodeDeploy
User Guide (API Version 2014-10-06)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

AppSpec 的“permissions”部分

permissions 部分指定应如何向已复制到实例的 files 部分中的文件和目录/文件夹应用特殊权限(如果有)。可以指定多个 object 指令。此部分是可选的。它仅适用于 Amazon Linux、Ubuntu Server 和 RHEL 实例。

此部分具有以下结构:

Copy
permissions: - object: object-specification pattern: pattern-specification except: exception-specification owner: owner-account-name group: group-name mode: mode-specification acls: - acls-specification context: user: user-specification type: type-specification range: range-specification type: - object-type

这些指令如下所示:

  • object - 必需。这是一组文件系统对象(文件或目录/文件夹),这些文件系统对象复制到实例之后,将向其应用指定的权限。

  • pattern - 可选。指定权限应用模式。如果使用特殊字符 "**" 指定或者未整体指定,则指定的权限将应用于所有匹配的文件或目录,具体取决于 type

  • except - 可选。指定任何 pattern 例外。

  • owner - 可选。object 的所有者名称。如果未指定,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有所有者将保持不变。

  • group - 可选。object 的组名称。如果未指定,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有组将保持不变。

  • mode - 可选。一个整数,指定要应用于 object 的权限的八进制模式。例如,644 代表所有者的读写权限、组的只读权限,以及所有其他用户的只读权限;而 4755 代表设置的 setuid 属性、所有者的完全控制权限、组的读取和执行权限,以及所有其他用户的读取和执行权限。(有关其他示例,请参阅 Linux chmod 命令文档。)如果未指定 mode,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有模式将保持不变。

  • acls - 可选。一个字符串列表,表示应用于 object 的一个或多个访问控制列表 (ACL) 条目。例如,u:bob:rw 代表用户 bob 的读写权限。(有关其他示例,请参阅 Linux setfacl 命令文档中的 ACL 条目格式示例。)可以指定多个 ACL 条目。如果未指定 acls,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有 ACL 将保持不变。这些条目将替换任何现有的 ACL。

    注意

    设置未命名的用户、未命名的组或其他类似的 ACL 条目将导致 AppSpec 文件失败。可改用 mode 来指定这些类型的权限。

  • context - 可选。对于启用 Security-Enhanced Linux (SELinux) 的实例,为一个应用于已复制对象的安全相关上下文标签的列表。标签指定为包含 usertyperange 的关键字。(有关更多信息,请参阅 SELinux 文档。)如果未指定,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有标签将保持不变。

    • user - 可选。SELinux 用户。

    • type - 可选。SELinux 类型名称。

    • range - 可选。SELinux 范围说明符。这在计算机上启用 Multi-Level Security (MLS) 和 Multi-Category Security (MCS) 之后才生效。如果未启用 MLS/MCS,则 range 默认为 s0

  • type - 可选。将指定权限应用于的对象类型。这可设置为 filedirectory。如果指定了 file,则在执行复制操作之后,权限将仅应用于 object 中直接包含的文件(不应用于 object 自身)。如果指定了 directory,则在执行复制操作之后,以递归方式将权限应用于 object 中任何位置的所有目录/文件夹(但不应用于 object 自身)。

“permissions”部分示例

以下示例显示如何使用 objectpatternexceptownermodetype 指令指定 permissions 部分。此示例仅适用于 Amazon Linux、Ubuntu Server 和 RHEL 实例。在此示例中,假设以下文件和文件夹按此层次结构复制到实例:

Copy
/tmp `-- my-app |-- my-file-1.txt |-- my-file-2.txt |-- my-file-3.txt |-- my-folder-1 | |-- my-file-4.txt | |-- my-file-5.txt | `-- my-file-6.txt `-- my-folder-2 |-- my-file-7.txt |-- my-file-8.txt |-- my-file-9.txt `-- my-folder-3

以下 AppSpec 文件显示如何对这些已复制的文件和文件夹设置权限:

Copy
version: 0.0 os: linux # Copy over all of the folders and files with the permissions they # were originally assigned. files: - source: ./my-file-1.txt destination: /tmp/my-app - source: ./my-file-2.txt destination: /tmp/my-app - source: ./my-file-3.txt destination: /tmp/my-app - source: ./my-folder-1 destination: /tmp/my-app/my-folder-1 - source: ./my-folder-2 destination: /tmp/my-app/my-folder-2 # 1) For all of the files in the /tmp/my-app folder ending in -3.txt # (for example, just my-file-3.txt), owner = adm, group = wheel, and # mode = 464 (-r--rw-r--). permissions: - object: /tmp/my-app pattern: "*-3.txt" owner: adm group: wheel mode: 464 type: - file # 2) For all of the files ending in .txt in the /tmp/my-app # folder, but not for the file my-file-3.txt (for example, # just my-file-1.txt and my-file-2.txt), # owner = ec2-user and mode = 444 (-r--r--r--). - object: /tmp/my-app pattern: "*.txt" except: [my-file-3.txt] owner: ec2-user mode: 444 type: - file # 3) For all the files in the /tmp/my-app/my-folder-1 folder except # for my-file-4.txt and my-file-5.txt, (for example, # just my-file-6.txt), owner = operator and mode = 646 (-rw-r--rw-). - object: /tmp/my-app/my-folder-1 pattern: "**" except: [my-file-4.txt, my-file-5.txt] owner: operator mode: 646 type: - file # 4) For all of the files that are immediately under # the /tmp/my-app/my-folder-2 folder except for my-file-8.txt, # (for example, just my-file-7.txt and # my-file-9.txt), owner = ec2-user and mode = 777 (-rwxrwxrwx). - object: /tmp/my-app/my-folder-2 pattern: "**" except: [my-file-8.txt] owner: ec2-user mode: 777 type: - file # 5) For all folders at any level under /tmp/my-app that contain # the name my-folder but not # /tmp/my-app/my-folder-2/my-folder-3 (for example, just # /tmp/my-app/my-folder-1 and /tmp/my-app/my-folder-2), # owner = ec2-user and mode = 555 (dr-xr-xr-x). - object: /tmp/my-app pattern: "*my-folder*" except: [tmp/my-app/my-folder-2/my-folder-3] owner: ec2-user mode: 555 type: - directory # 6) For the folder /tmp/my-app/my-folder-2/my-folder-3, # group = wheel and mode = 564 (dr-xrw-r--). - object: /tmp/my-app/my-folder-2 group: wheel mode: 564 type: - directory

生成的权限如下所示:

Copy
-r--r--r-- ec2-user root my-file-1.txt -r--r--r-- ec2-user root my-file-2.txt -r--rw-r-- adm wheel my-file-3.txt dr-xr-xr-x ec2-user root my-folder-1 -rw-r--r-- root root my-file-4.txt -rw-r--r-- root root my-file-5.txt -rw-r--rw- operator root my-file-6.txt dr-xr-xr-x ec2-user root my-folder-2 -rwxrwxrwx ec2-user root my-file-7.txt -rw-r--r-- root root my-file-8.txt -rwxrwxrwx ec2-user root my-file-9.txt dr-xrw-r-- root wheel my-folder-3

以下示例显示如何指定增加了 aclscontext 指令的 permissions 部分。此示例仅适用于 Amazon Linux、Ubuntu Server 和 RHEL 实例。

Copy
permissions: - object: /var/www/html/WordPress pattern: "**" except: [/var/www/html/WordPress/ReadMe.txt] owner: bob group: writers mode: 644 acls: - u:mary:rw - u:sam:rw - m::rw context: user: unconfined_u type: httpd_sys_content_t range: s0 type: - file