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に違反するプログラムはありませんが、ポートツリーには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 違反ポートを一時的に許可できます。