AppSpec “权限” 部分(仅限 EC2/本地部署) - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AppSpec “权限” 部分(仅限 EC2/本地部署)

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

注意

'permissions' 部分仅用于 EC2/本地部署。它不用于 Amazon Lambda 或 Amazon ECS 部署。

此部分具有以下结构:

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

    使用字符串指定 object

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

    使用带引号("")的字符串指定 pattern

  • except:可选。指定对于 pattern 而言例外的所有文件或目录。

    使用包含在方括号内的一组逗号分隔的字符串指定 except

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

    使用字符串指定 owner

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

    使用字符串指定 group

  • mode:可选。一个数值,用于指定要应用于 object 的权限。模式设置遵循 Linux chmod 命令语法。

    重要

    如果该值包含前导零,则必须用双引号将其括起来,或者删除前导零,以便只保留三位数字。

    注意

    mode 设置不支持诸如 u+x 之类的符号。

    示例:

    • mode: "0644" 向对象的所有者授予读写权限(6),为群组授予只读权限(4),向所有其他用户授予只读权限(4)。

    • mode: 644 授予与 mode: "0644" 相同的权限。

    • mode: 4755 设置 setuid 属性(4),向所有者授予完全控制权限(7),向群组授予读取和执行权限(5),并向所有其他用户授予读取和执行权限(5)。

      (有关更多示例,请参阅 Linux chmod 命令文档。)

      如果未指定 mode,则在执行复制操作之后,应用于原始文件或文件夹结构的所有现有模式将保持不变。

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

    使用短划线(-)后跟空格和字符串的形式指定 acls(例如,- u:jane:rw)。如果您有多个 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)之后才生效。如果未启用,则 range 默认为 s0

    使用字符串指定 context(例如, user: unconfined_u)。每个 context 在单独的行中指定。

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

    使用短划线(-)后跟空格和字符串的形式指定 type(例如,- file)。

“Permissions”部分示例

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

/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 文件显示了如何在复制这些文件和文件夹后对其设置权限:

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/my-folder-3 group: wheel mode: 564 type: - directory

生成的权限如下所示:

-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 实例。

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