在 openBSD 中标记二进制文件可写和可执行

在 openBSD 中标记二进制文件可写和可执行

从 OpenBSD 6.0 开始,强制实施 W^X 强制执行。

需要权限才能违反此规则的二进制文件可以使用 ld 命令进行标记:

根据 ld -zwxneeded 设置的 WX_OPENBSD_WXNEEDED 标志,在 execve(2) 时识别 W^X 标记的二进制文件。

我试过:

    ld -b <binary> -zwxneeded
    ld <binary> -zwxneeded

    # ld -b sbcl -zwxneeded
    ld: no input files
    # ld sbcl -zwxneeded    
    sbcl: could not read symbols: File format not recognized

我一直在阅读 ld 手册页,但无法找出文件 I/O 设置所需标志的正确语法。非常感谢任何帮助/建议。

答案1

重读 openBSD 升级指南后找到答案,必须在 fstab 中调整文件系统挂载选项。

wxallowed 挂载选项。 W^X 现在默认严格执行;仅当程序位于使用 wxallowed mount(8) 选项挂载的文件系统上时,程序才能违反它。只要 /usr/local 是一个单独的文件系统,这就可以使基本系统更加安全。

基本系统没有违反 W^X 的程序,但 ports 树包含相当多的程序:chromium、mono、node、gnome、libreoffice、jdk、zeal 等。如果您想定期运行这些 ports 中的任何一个,您需要将 wxallowed 添加到 fstab(5) 中 /usr/local 的挂载选项中,例如:

  01020304050607.h /usr/local ffs rw,nodev,wxallowed 1 2

小磁盘可能没有单独的 /usr/local 分区。在这种情况下,请将 wxallowed 添加到包含它的最小分区:/usr 或 /。

从没有 wxallowed 挂载选项的分区启动违反 W^X 的程序将产生核心转储,并且 dmesg(8) 将包含诸如 soffice.bin(15529): mprotect W^X 违规之类的条目。您可以通过发出 mount -uo wxallowed /usr/local 来暂时允许违反 W^X 的端口。

相关内容