几周前,当我全新安装 MacTeX 2020 并尝试使用命令编译一些文档时,>>lualatex filename.tex
我收到此错误:attempt to call a nil value (field 'cpath specification')
。在浏览器中复制粘贴该错误后,我得到了这个帖子这似乎表明自 TeXLive 2020 以来,lualatex 需要与 一起运行--shell-escape
。虽然与那里的情况不同,我没有任何尝试加载的动态库(错误几乎发生在任何文件中,尽管我的所有 lualatex 文件都需要一个外部.lua
文件,而该文件也不需要任何动态库)。当时我尝试使用--shell-escape
并解决了该问题。从那时起,我更新了所有软件包一次,似乎我不再需要--shell-escape
编译相同的文档。有什么变化吗?发行说明没有任何新内容,还是我看错了发行说明?
作为问题的第二部分:是否--shell-escape
会使 LuaLaTeX 用户更容易受到恶意代码的攻击?与此相关:现在 tex live 实用程序通过单击对话框询问一次性问题以增强安全性,它实际上做了什么?
答案1
最近有一个lualibs
错误,当未启用 shell-escape 时,每当无法使用主要机制加载模块时,就会打印该错误,从而破坏一些依赖于替代加载位置的代码。昨天这个错误已经修复,这可能是您的代码在没有 的情况下开始工作的原因shell-escape
。
只要你知道执行的是哪段代码,shell-escape
出于某些目的使用是没问题的。但由于shell-escape
允许运行任意本机二进制文件,因此使用shell-escape
启用的情况下运行不受信任的代码基本上与下载不受信任的应用程序并不受任何限制地执行它们相同。在这种情况下,不受信任的代码包括软件包中的代码,因此即使你自己编写文档但使用不受信任的软件包,这些 cas 也会运行任意代码。所以特别是当你不知道为什么您的文档应该需要shell-escape
,您可能应该将其保持禁用状态。
答案2
大多数 LuaLaTeX 文档不需要--shell-escape
。我在 Windows 和 Linux 上的 TeX Live 2020 中使用 LuaLaTeX 编译了许多文档,而不需要它们。一个需要 shell 转义的软件包是。安装脚本minted
也是如此。texlua
不可能说出文档中哪些内容需要在没有 MWE 的情况下进行 shell 逃逸。
Shell 转义通常是一种安全风险,因为它们可以运行任意代码。在 Linux 上,我尝试通过以系统用户身份安装所有 TeX 文件来缓解此问题,该系统用户只能访问 TeX 发行版。因此,所有脚本都以该用户身份运行,而不是以我的用户帐户或 root 身份运行。
然而,这实际上没有什么实际价值。可以修改 TeX 安装的脚本可以修改程序,然后我使用安全凭证运行这些程序,基本上可以做所有事情,但安装驱动程序。