Polkit 使用什么 JavaScript 解释器来解释rules.d 文件?

Polkit 使用什么 JavaScript 解释器来解释rules.d 文件?

Polkit 使用什么 JavaScript 解释器来解释rules.d 文件?

撰写本文时的源代码链接到已失效的维基百科标题“ECMAScript.2C_5th_Edition”,但这只是解释器写入的规范,而不是用于解释 polkit 规则文件的特定实现。

了解授权系统中嵌入的 JavaScript 解释器的用途和使用方式,最好能清楚地声明。消除细节歧义,例如解释器嵌入的位置、共享运行时的内容、何时解释规则文件函数、是否异步解释它们等;显然也不错。

答案1

这可能是 Mozilla 的实现。

在我的 Centos 7 机器上:

% ldd /usr/lib/polkit-1/polkitd | grep js
        libmozjs-17.0.so => /lib64/libmozjs-17.0.so (0x00007f7c25d9f000)

% rpm -qif /lib64/libmozjs-17.0.so
Name        : mozjs17
Version     : 17.0.0
Release     : 20.el7
Architecture: x86_64
Install Date: Sun May 13 09:40:16 2018
Group       : Development/Languages
Size        : 4045213
License     : GPLv2+ or LGPLv2+ or MPLv1.1
Signature   : RSA/SHA256, Wed Apr 25 07:27:32 2018, Key ID 24c6a8a7f4a80eb5
Source RPM  : mozjs17-17.0.0-20.el7.src.rpm
Build Date  : Tue Apr 10 20:33:07 2018
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.mozilla.org/js/
Summary     : JavaScript interpreter and libraries
Description :
JavaScript is the Netscape-developed object scripting language used in millions
of web pages and server applications worldwide. Netscape's JavaScript is a
superset of the ECMA-262 Edition 3 (ECMAScript) standard scripting language,
with only mild differences from the published standard.

答案2

看起来 polkit 现在使用 duktape (https://duktape.org/) 用于执行 JavaScript:

nu ❯ paru -Qi polkit
Name            : polkit
Version         : 122-1
Description     : Application development toolkit for controlling system-wide privileges
Architecture    : x86_64
URL             : https://gitlab.freedesktop.org/polkit/polkit
Licenses        : LGPL
...
Depends On      : duktape  expat  glib2  pam  systemd
...

~
nu ❯ paru -Qi duktape
Name            : duktape
Version         : 2.7.0-6
Description     : Embeddable Javascript engine
Architecture    : x86_64
URL             : https://duktape.org/
Licenses        : MIT
...

从网站上看,duktape 2.6.0 似乎已经实现了 ECMAScript 2015 和 2016 的大部分内容,但我想您可能希望使用某种测试工具(甚至是网站)仔细检查您的规则是否没有执行超出其范围的任何操作

答案3

事实上,现有的两个答案都有些正确。 Polkit 实际上支持mozjsduktape作为其 JS 解释器,可在编译时配置。所以今天的答案是“这取决于你的分布”。

duktape2022 年初添加了对候补口译员的支持这位先生,似乎所有三个主要基础发行版(经过测试:ArchLinux、Debian 12、Fedora 38)都已切换到它。然而,对于旧版本和/或面向稳定性的发行版(尤其是 RHEL 9)来说,情况可能并非如此。


因此,找到适合您的发行版的最终方法是检查/usr/lib/polkit-1/polkitd链接的库,正如 @StephenHarris 所建议的那样。你可以运行这个 oneliner:

ldd /usr/lib/polkit-1/polkitd | grep -E '(mozjs|duktape)'

如果它没有打印任何内容,则意味着polkit您的包是在没有 JS 规则支持的情况下构建的。

相关内容