Executable

在 openBSD 中標記二進製文件可寫和可執行

  • September 7, 2016

從 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 設置所需標誌的正確語法。非常感謝任何幫助/建議。

重讀openBSD升級指南找到了答案,文件系統掛載選項必須在fstab中調整。

wxallowed 掛載選項。W^X 現在預設嚴格執行;如果程序位於使用 wxallowed mount(8) 選項掛載的文件系統上,則程序只能違反它。只要 /usr/local 是一個單獨的文件系統,這允許基本系統更加安全。

基本系統沒有違反 W^X 的程序,但埠樹包含很多:chromium、mono、node、gnome、libreoffice、jdk、zeal 等。如果您想定期執行這些埠中的任何一個,您需要在 fstab(5) 中為 /usr/local 的掛載選項添加 wxallowed,例如:

 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 的埠。

引用自:https://unix.stackexchange.com/questions/308179