嵌套权限和 linkauth (链接验证)

嵌套权限和 linkauth (链接验证)
Source

在我们的多签和权限指南的下一部分中,我们将帮助您掌握 linkauth,这是 EOSIO 软件的另一个强大功能,可以为您的帐户增加安全性。

linkauth 将合约中的特定操作分配给您创建的权限。 这样,您就可以限制一个**或一个帐户,让他们只能访问预定义的操作,从而限制他们在帐户遭到入侵时对您的帐户造成损害的程度。

Linkauth 的使用场景

让我们看看一个用例,帮助我们完全理解什么情况下和及为什么可以使用 linkauth 。 一个完美的例子是节点领取奖励的情况。 由于节点需要每天执行此操作,因此这个功能能自动化,让它更加高效。 为了使其自动化,节点需要委托他们的**访问脚本。与其使用一个能访问整个帐户的**来认领奖励,节点可以创建一个只能认领奖励的**。 如果该**遭到破坏,黑客唯一可以实现的就是代表节点向节点自己的帐户申请奖励。

生成认领奖励操作的**对后,你将首先使用 updateauth 创建 claimer 权限本身:

eosc system updateauth [ACCOUNT_NAME] claimer active [FILENAME.yaml]

如果你还没有阅读过,请查看我们关于使用 eosc 更新帐户权限结构的文章。 现在,你可以使用此命令分配该权限:

eosc system linkauth [BP_ACCOUNT] eosio claimrewards claimer

嵌套权限和 linkauth (链接验证)

使用这个新结构,添加的 claimer 权限及其相关**只能调用 claimrewards 操作而不能执行任何其他操作。

EOSIO 链在进行授权检查时始终是以合约+操作开始,并查找满足它的权限。 只有一个权限可以匹配一对指定的合约+操作,如果没有设置链接,它就默认为 activeeosio.any 除外)。

有五个系统操作无法通过 linkauth 做链接。 它们是:updateauthdeleteauthlinkauthunlinkauthcanceldelay。 因此,你无法将这些操作分配给特定级别的权限。

操作的分开

如果你想要删除某权限对某操作的执行能力,你还可以用 linkauth ,把执行操作的能力给另一个权限。该权限级别位于自己的权限流中,在 owner下的姊妹权限。 可以参照以下权限结构:

嵌套权限和 linkauth (链接验证)

你会注意到,claimer 权限将 owner 作为父级,并且不是嵌套在 active 权限之下的(如上图所示)。 此帐户的 active 权限将无法再调用 claimrewards 操作,会遇到断言错误。 父权限将能够执行操作,但是一旦权限结构分支出姊妹权限,这些操作就会被隔离。

其实每个帐户上都有一个隐藏权限叫 eosio.any。它存在于每个权限流的子级别。 你可以将 linkauth 操作链接到 eosio.any,这让你的帐户中的每个级别的权限都可以访问该操作。 做这个的时候需要很小心,因为最弱的权限是用来保护操作的授权,因此它只用于低风险操作。

**使用 unlinkauth 和 **deleteauth 删除权限

如果要从自己创建的权限中删除链接操作,可以使用相反的功能 unlinkauth

eosc system unlinkauth [ACCOUNT_NAME] eosio claimrewards

你可以使用 deleteauth 完全删除权限,但只能在没有任何链接操作还附加在该权限的时候。 你必须首先为该级别权限的所有链接调用 unlinkauth,然后才能调用 deleteauth

eosc system deleteauth [ACCOUNT_NAME] claimer

现在,你应该充分了解了如何用权限结构创建一个能够安全保护你的帐户的系统,了解了这种独特的权限和特定于授权某种操作的**。 在下一篇文章中,我们将探讨如何使用 eosc 简化签名的收集过程。

第一章 | EOSIO 多签和权限总览
第二章 | 使用 eosc 更改帐户的权限结构
第三章 | 满足 multisig(多签)权限
第四章 | 嵌套权限和 linkauth (链接验证)
第五章 | 收集一个 multisig (多签)签名