labelcfg - 创建和修改标签编码
labelcfg [-e encoding_file] [-f command_file] [subcommand]...
labelcfg help
标签用于实现分层和不相交的强制访问策略。labelcfg 实用程序通过为标签的组成部分(称为等级和区间)分配属性来指定标签之间的关系。每个标签都由单个等级和一组可选的区间组成。这些关系统称为标签编码。
通过分配整数值(称为级别)对等级进行排序。缺省情况下,labelcfg 在添加新等级时分配下一个可用级别,所以建议从最低级别开始添加等级。但是,也可以显式分配级别,并随后对等级进行重新排序。
区间最初无序。可通过将其他区间指定为子区间来指定分层结构。可通过将其他区间指定为冲突来指定不相交关系。
也可以将区间分配为等级的子区间。在这种情况下,指定等级隐式包括其子区间。
这些策略约束限制等级和区间可以如何组合来构成有效的标签。但是,这些约束不得阻止构成一个支配其他所有有效标签的有效标签。labelcfg 实用程序验证用户输入,以防止创建无效的编码文件。
如果不存在编码文件,则从文件 label_encodings_template 创建一个新的空文件。必须至少添加一个等级,然后才能将其保存。
属性值可以是简单字符串,也可以是简单字符串的逗号分隔列表。包含空格的简单字符串必须括在双引号中。在属性与属性值之间需要有一个等号 (=)。
以下属性适用于全部编码:
一个任意的标题,在标签设置编码文件中存储为注释。
用户的缺省最小标签。如果启用了 Trusted Extensions,则此属性还指定登录到 Trusted Desktop 时要使用的初始标签。对于标准 Oracle Solaris,它指定授权用户可将其文件降级到的最低级别标签。在这种情况下,建议使用值 ADMIN_LOW。
用户的缺省安全许可。除非启用了 Trusted Extensions,否则值 ADMIN_HIGH 会为所有用户禁用标签设置策略的实施,但是为用户显式分配了安全许可时除外。
用于添加新等级或者选择或删除现有等级。
用于添加新区间或者选择或删除现有区间。
以下属性适用于当前选定的等级:
等级的必需全名。名称可能由多个字组成,在这种情况下,需要使用双引号。
等级的可选短名称。名称可能由多个字组成,在这种情况下,需要使用双引号。
一个表示等级级别敏感度的整数。最低值是 1。缺省模板中的最高值是 100。创建等级时,自动将级别设置为下一个可用值。
当前等级之上紧靠当前等级的等级名称。自动设置此属性,但是它可用于对当前等级进行重新排序。
当前等级之下紧靠当前等级的等级名称。自动设置此属性,但是它可用于对当前等级进行重新排序。
当前等级包括的可选区间列表。
一个包括多组区间组合的可选列表,为用户分配标签时,这些区间组合可以与当前等级一起使用。
一个包括多组区间组合的可选列表,为用户分配标签时,这些区间组合不能与当前等级一起使用。星号 (*) 指出具有当前等级的所有标签均无效。
设置 valid 或 invalid 属性会清除另一个属性。
以下属性适用于当前选定的区间:
区间的必需全名。名称可能由多个字组成,在这种情况下,需要使用双引号。
区间的可选全名。名称可能由多个字组成,在这种情况下,需要使用双引号。
可与区间关联的可选短语。显示包括某个区间的标签时,将在该区间前面列显此短语。
可与区间关联的可选短语。显示包括某个区间的标签时,将在该区间后面列显此短语。
当前区间包括的可选区间列表。
与当前区间互斥的可选区间列表。
可与当前区间组合的最低等级的名称。
可与当前区间组合的最高等级的名称。
区间由一个或多个位(在 0 到 255 范围内)组成。bit 属性指定为当前区间(不包括其任何子区间)分配的唯一位数。创建区间时,自动设置此属性。包括多个子区间的区间可能不需要唯一的位,在这种情况下,可清除此属性。
可使用 –f 选项在命令文件中或以交互方式提供子命令。可在命令行上指定以分号分隔的多个子命令,并且需要将整个子命令集括在引号中。缺少子命令意味着交互式会话,在会话期间,可使用 TAB 键调用子命令和值的自动补全。
add 和 select 子命令可用于指定一个等级或区间,上下文在此时更改为该项目。在交互式会话期间,上下文在提示符中由选定项目的名称标识。end 和 cancel 子命令可用于结束规范,上下文在此时恢复为编码上下文。
属性值可以是一个简单值,对于接受列表的属性来说,则是简单值的列表。支持以下子命令:
开始新等级的规范。上下文将进行更改,以接受等级属性。
开始新区间的规范。上下文将进行更改,以接受区间属性。
将指定值添加到当前等级或区间。此子命令只能应用于接受列表的属性:subcompartments、conflicts、valid 和 invalid。
结束规范并将上下文重置为编码上下文。放弃任何部分指定的资源。cancel 仅在等级和区间上下文中适用。
清除属性的值。
将当前配置从内存提交到通过 –e 选项指定的文件。必须提交配置才能使更改生效。在 labelcfg 会话完成时,会自动尝试提交操作。由于配置必须正确才能提交,因此该操作执行自动验证。
成功保存配置后,如果用户具有 solaris.smf.manage.labels 授权并且路径名以 /etc/security/tsol/ 开头,则会更新 svc:/system/labeld 服务中的 labeld/label_encodings 属性并重新启动服务实例。
结束等级或区间规范。
退出 labelcfg 会话。如果存在未提交的更改,则系统会在用户退出之前提示其是否提交这些更改。您也可以使用 EOF 字符来退出 labelcfg。可使用 –F 选项强制执行操作。
将配置列显到标准输出或由 –f 选项指定的输出文件。此命令以适合后续用作可在命令行上指定的输入命令文件的格式生成输出。
列显常规帮助或有关特定主题的帮助。
列出使用当前编码的所有可用的有效标签。
显示有关编码、当前选定等级或区间或者指定属性的信息。
从编码中移除指定的等级。此子命令仅在编码上下文中有效。
从编码中移除指定的区间。此子命令仅在编码上下文中有效。
选择要编辑的等级。可以指定 name 或 shortname 属性。此子命令仅在编码上下文中适用。
选择要编辑的区间。可以指定 name 或 shortname 属性。此子命令仅在编码上下文中适用。
将给定属性名称设置为给定值。该属性的任何现有值都会替换为新值。使用 add 子命令可附加附加值而不是替换当前值。
验证当前配置是否正确。
支持以下选项:
指定要编辑的编码文件。如果该文件不存在,将从模板文件 /etc/security/tsol/label_encodings.template 创建并初始化该文件。如果该文件不可写,会话将在只读模式下运行。
如果省略了此选项,将使用由 SMF 属性 labeld/encodings_file 指定的缺省文件。缺省情况下,FMRI 为 svc:/system/labeld:clearance。但是,如果启用了 Trusted Exensions,则使用此服务的 init 实例,所以相应的 FMRI 为 svc:/system/labeld:init。
指定要用作输入的可选命令文件。可使用 export 子命令的 –f 选项来生成命令文件。如果指定了命令文件,则不接受其他任何输入。通常,使用 –e 指定的文件应该为空。否则,可能会与命令文件中的子命令冲突。
# labelcfg -e simple "add classification=Confidential;end"示例 2 创建合规性的编码文件
# labelcfg -e /etc/security/tsol/lef labelcfg:lef> set title="Sample Data Protection Policy" labelcfg:lef> add classification="Public" labelcfg:Public> set shortname="Public" labelcfg:Public> end labelcfg:lef> add classification="Confidential" labelcfg:Confidential> set shortname="Confidential" labelcfg:Confidential> end labelcfg:lef> add compartment="Internal Use Only" labelcfg:Internal Use Only> set minclass="Confidential" labelcfg:Internal Use Only> end labelcfg:lef> add compartment="Payment Data" labelcfg:Payment Data> set subcompartments="Internal Use Only" labelcfg:Payment Data> set minclass="Confidential" labelcfg:Payment Data> end labelcfg:lef> add compartment="Health Records" labelcfg:Health Records> set subcompartments="Internal Use Only" labelcfg:Health Records> set conflicts="Payment Data" labelcfg:Health Records> set minclass="Confidential" labelcfg:Health Records> end labelcfg:lef> add compartment="Highly Restricted" labelcfg:Highly Restricted> clear bit labelcfg:Highly Restricted> set minclass="Confidential" labelcfg:Highly Restricted> set subcompartments="Payment Data,Health Records" labelcfg:Highly Restricted> end labelcfg:lef> select classification="Confidential" labelcfg:Confidential> set invalid="" labelcfg:Confidential> end labelcfg:lef> set min_label=Public labelcfg:lef> set clearance="Confidential Internal Use Only" labelcfg:lef> verify labelcfg:lef> commit labelcfg:lef> exit #示例 3 在编码上下文中使用 info 子命令
gfaden@islay% labelcfg -e /etc/security/tsol/lef labelcfg:lef> info title=Sample Data Protection Policy classification=Public level=1 classification=Confidential level=2 compartment=Highly Restricted subcompartments="Payment Data,Health Records" minclass=Confidential compartment=Payment Data bit=1 subcompartments="Internal Use Only" minclass=Confidential compartment=Health Records bit=2 subcompartments="Internal Use Only" conflicts="Payment Data" minclass=Confidential compartment=Internal Use Only bit=0 minclass=Confidential min_label=Public clearance=Confidential Internal Use Only示例 4 使用 list 选项显示有效的标签
labelcfg:lef> list "Confidential Highly Restricted" "Confidential Payment Data" "Confidential Health Records" "Confidential Internal Use Only" Public labelcfg:lef>示例 5 更改区间的名称
labelcfg:lef> select compartment="Heath Records" labelcfg:Health Records> set name="Medical Records" labelcfg:Medical Records> info compartment=Medical Records bit=2 subcompartments="Internal Use Only" conflicts="Payment Data" minclass=Confidential labelcfg:Medical Records> end labelcfg:lef>
有关下列属性的说明,请参见 attributes(7):
|
尽管 labelcfg 可与来自 Trusted Extensions 的标签编码文件一起使用,但是它并不管理《Compartmented Mode Workstation Labeling: Encodings Format》中描述的所有字段。例如,它不支持必需组合或打印机标题。所以,它可能不适合于修改现有编码文件。
sandbox(1)、clearance(7)、labels(7)、chk_encodings(8) 和 labeld(8)