Let's note CF-SV8RDCVSにOpenBSD/amd64 7.9をインストールし、環境を構築中です。Webブラウザは、昔からFirefoxを利用しているので、OpenBSDでもFirefoxを使用しようと思います。インストール自体は「doas pkg_add firefox」するだけなので簡単でした。日本語変換は「fcitx-anthy」を入れており、こちらも問題ありません。Firefox Syncとか、Feedlyにも問題なさそうです。最後にTiddlyWiki5を利用するために「ファイルを開く」(Ctrl-O)したら、なんだか様子がおかしいです。
TW5のファイルが「~/Documents」 以下に置いてあるのですが、そもそもファイルダイアログで「~/Documents」が出てきません。出てこないならば、手入力で選択しようと思いましたが、それも出来ませんでした。さらに、Windows11でFirefoxを使っている感覚からすると、OpenBSDのcwmで動くFirefoxは、ウィンドウに枠もないし、「本当にこれで良いのか」と思うくらいシンプルな画面です。
最近はGeminiと対話を繰り返すことで問題を解決していくことが多いので、本件もGeminiに相談しました。Geminiからは、Firefoxの「about:config」で設定を調整すれば解決すると案内されましたが、全く効果はありませんでした。
OpenBSD版Firefoxは、パッケージから「doas pkg_add firefox」で入れています。ソースは「ports/www/mozilla-firefox」にあるので、手がかりとなるような情報がないものかと探してみました。パッチファイルなどが置かれていましたが、「たったこれだけ?」と思うくらい、僅かなファイルしかありません。Geminiに「ports/www/mozilla-firefox/Makefile」を解析してもらったところ、「mozilla.port.mk」を参照しているという情報を得ました。探してみると「ports/www/mozilla/mozilla.port.mk」にありました。
Geminiによると、OpenBSDは「UNVEIL(2)」によりセキュリティを強化しているという示唆が得られました。さらに「unveil.main」というファイルが重要な役割を担っているとも示唆します。しかし不思議なことに「ports/www/mozilla-firefox」以下のファイル内を探しても、「unveil()」とか「unveil.main」という文字列は見つかりません。
ソースを見ても分からないなら、実行ファイルを確認しようと考えました。「/usr/local/lib/bin/firefox」は「/usr/local/lib/firefox/firefox」へのシンボリックリンクになっています。このファイルをstringsにかけてみましたが、「unveil.main」という文字列がありません。こうなったら最後の手段ktraceとkdumpを試してみます。「ktrace -f ktrace.out firefox」としてFirefoxを起動し、すぐに終了させます。そして生成されたファイルを「kdump -f ktrace.out」してみます。その結果「/etc/firefox/unveil.main」にアクセスしている記録が残っていました。
「/etc/firefox/unveil.main」にアクセスしていることは確認できましたが、「ports/www/mozilla-firefox」以下のファイルには対応する実装が見当たりません。しかも「strings /usr/local/lib/firefox/firefox」でも「unveil.main」がありません。これは一体どういうことなのでしょうか。実装が無いのに、ktrace.outに記録されているとしたら、OpenBSDは魔術を使ったことになってしまいます。それはあり得ません。
Geminiの示唆によると、Frirefoxの実体は、「/usr/local/lib/firefox/firefox」ではなく、「/usr/local/lib/firefox/libxul.so」とのことです。「strings /usr/local/lib/firefox/libxul.so.162.0」として調べてみると、確かに「unveil.main」がありました。さらにktrace.outには「5489 firefox NAMI "/usr/local/lib/firefox/libxul.so.162.0"」が記録されていました。
ここまでの調査では、Mozillaが提供しているソースに対して、OpenBSDがパッチをあてているのではないかと仮定していました。しかしそういう風には見えません。そこで、Mozillaの公式サイトから「firefox-157.0.1.source.tar.xz」を入手し、「unveil」という文字列を探してみました。 その結果「firefox-157.0.1/dom/ipc/ContentChild.cpp: OpenBSDFindPledgeUnveilFilePath("unveil.main", unveilFile);」を発見しました。この事実は何を意味しているのか考えると、要するにMozillaが提供するファイルにはOpenBSDに特化した実装が既に入っているという事です。つまりMozillaが提供するファイルに、OpenBSD側portsでパッチをあてているという仮定が間違っているのです。Mozillaが提供するファイルに、OpenBSD用の実装が最初から入っているのです。
Firefoxパッケージをインストールすると「/usr/local/share/doc/pkg-readmes/firefox」が入ります。これを読むと興味深い事実が判明します。
- 設定ファイル「unveil.main」は、「/etc/firefox/unveil.main」に決め打ちになっています。
- 設定ファイル「/etc/firefox/unveil.main」の内容を「disable」とすれば、セキュリティ制限が解除されるようです。
- 環境変数「MOZ_LOG=OpenBSDSandbox:5」を設定すると、ログが出力されるようです。
調査を始めたときの問題(Ctrl-Oのファイルダイアログの件)は、解決していません。しかし「/etc/firefox/unveil.main」がセキュリティを強化してからではないかと思われます。これを「disable」にすれば一件落着かもしれません。でもOpenBSDの「セキュリティ重視」というポリシーを無視することになってしまいます。どのように解決するのかは、これから考えてみます。