![我可以在没有 shell-escape 的情况下默认启用 FFI 吗?](https://linux22.com/image/442801/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%B2%A1%E6%9C%89%20shell-escape%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%BB%98%E8%AE%A4%E5%90%AF%E7%94%A8%20FFI%20%E5%90%97%EF%BC%9F.png)
所包含的 FFI 库luatex
可能很危险,因此默认情况下禁用它(至少在 TeXLive 中)。为了访问该库,必须luatex
使用该--shell-escape
选项进行调用。TeXLive(配置文件?)中是否有一种方法可以永久允许不使用选项的 FFI 库shell-escape
?
答案1
没有允许 FFI 而不允许 shell 转义的选项,因为这不是一个有用的限制。
由于 FFI 允许您访问几乎任意的 C 库,它尤其允许您直接执行系统库调用来运行任意命令。因此,一旦允许 FFI,禁止直接 shell 逃逸就不再有任何好处。
另一方面,TeX Live做允许您启用 shell 转义,因此默认情况下也启用 FFI:找到您的本地texmf.cnf
(例如kpsewhich texmf.cnf
,路径应类似于.../texmf-local/web2c/texmf.cnf
或.../2021/texmf.cnf
,执行不是编辑下的文件texmf-dist
)并添加一行:
# DANGER: Allow shell escape in all lualatex documents by default.
shell_escape.lualatex = t
其他选项包括= p
仅允许受限命令(TeX Live 的默认设置)并= f
禁止所有类型的 shell 转义。如果要更改所有格式的设置,可以shell_escape
不设置。.lualatex
我建议您不要这样做。这可能会导致与他人合作时出现问题(因为他们现在需要其他选项来编译您的文件,而不是您),并且它允许您编译的任何文档在您的系统上执行任意命令。如果启用此功能,您必须确保如果您不完全信任文档和所有使用的包/类/...,则永远不要编译文档。