本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AppSpec “权限” 部分(仅EC2限本地部署)
'permissions'
部分指定应如何向已复制到实例的 'files'
部分中的文件和目录/文件夹应用特殊权限(如果有)。您可以指定多个 object
指令。此部分是可选的。它仅适用于亚马逊 Linux、Ubuntu 服务器和RHEL实例。
注意
该'permissions'
部分仅用于 EC2 /本地部署。它不用于 AWS Lambda 或 Ama ECS zon 部署。
此部分具有以下结构:
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
– 可选。表示应用于的一个或多个访问控制列表 (ACL) 条目的字符串列表object
。例如,u:bob:rw
代表用户bob
的读写权限。(有关更多示例,请参阅 Linuxsetfacl
命令文档中的ACL条目格式示例。) 您可以指定多个ACL条目。如果未指定,acls
则在执行复制操作后,ACLs应用于原始文件或目录/文件夹结构的任何现有内容将保持不变。它们取代了任何现有ACLs的。使用短划线(-)后跟空格和字符串的形式指定
acls
(例如,- u:jane:rw
)。如果您有多个ACL,则在单独的行中分别指定每个。注意
设置未命名的用户、未命名的群组或其他类似的ACL条目会导致 AppSpec 文件失败。可改用
mode
指定这些类型的权限。 -
context
– 可选。对于启用了安全增强型 Linux (SELinux) 的实例,将列出要应用于复制对象的安全相关上下文标签。标签被指定为包含user
、type
和range
的关键字。(有关更多信息,请参阅SELinux文档。) 每个关键字使用一个字符串输入。如果未指定,则在执行复制操作之后,应用于原始文件或目录/文件夹结构的所有现有标签将保持不变。-
user
– 可选。SELinux用户。 -
type
– 可选。SELinux类型名称。 -
range
– 可选。SELinux范围说明符。除非在计算机上启用了多级安全 (MLS) 和多类别安全 (MCS),否则这无效。如果未启用,则range
默认为s0
。
使用字符串指定
context
(例如,user: unconfined_u
)。每个context
在单独的行中指定。 -
-
type
– 可选。将指定权限应用到的对象类型。type
是可设置为file
或directory
的字符串。如果指定了file
,则在执行复制操作之后,权限将仅应用于object
中直接包含的文件(不应用于object
自身)。如果指定了directory
,则在执行复制操作之后,权限将以递归方式应用于object
中任何位置的所有目录/文件夹(但不应用于object
自身)。使用短划线(-)后跟空格和字符串的形式指定
type
(例如,- file
)。
“Permissions”部分示例
以下示例显示了如何使用 object
、pattern
、except
、owner
、mode
和 type
指令来指定 'permissions'
部分。此示例仅适用于亚马逊 Linux、Ubuntu 服务器和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
以下示例显示了如何通过添加 acls
和 context
指令来指定 'permissions'
部分。此示例仅适用于亚马逊 Linux、Ubuntu 服务器和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