ククログ

株式会社クリアコード > ククログ > Thunderbirdで「マスターパスワードを使用する」設定が強制適用されない事象と、修正までの回避策

Thunderbirdで「マスターパスワードを使用する」設定が強制適用されない事象と、修正までの回避策

屋代です。

Mozilla Thunderbirdをお使いのお客様から、次のような問い合わせがありました。

  1. Thunderbirdにマスターパスワード1を強制的に適用する設定を導入したい
  2. インストールディレクトリC:\Program Files\Mozilla Thunderbird配下にdistributionディレクトリを作成しpolicies.jsonを配置した
  3. policies.json"PrimaryPassword":trueと記載したが、マスターパスワードが無効化できてしまう

調査したところ、Thunderbirdの不具合と判明しました。

お問い合わせをいただいた時点でお客様がお使いだったThunderbirdのバージョンは、128.8.0esr(64ビット)でした。

実は記事執筆時点での最新バージョン(140.3.0esr)でも、Thunderbirdのリリースチャンネル、esrチャンネルとも、本記事の事象は未修正のままとなっています。

そこでこの記事では、マスターパスワード適用に関するThunderbirdの不具合が解消され、policies.jsonに記載する方法が有効となるまでの代替手段として、お客様にご案内した回避策を紹介します。

Thunderbirdのマスターパスワードを強制的に適用する方法

具体的には、次の2ファイルを配置します。インストールフォルダが異なる場合は適宜読み替えてください。

(1)C:\Program Files\Mozilla Thunderbird\defaults\pref\autoconfig.js

pref("general.config.filename", "autoconfig.cfg");
pref("general.config.vendor", "autoconfig");
pref("general.config.obscure_value", 0);

// You also need below if you use scripts for reading globalChrome.css
pref("general.config.sandbox_enabled", false);

(2)C:\Program Files\Mozilla Thunderbird\autoconfig.cfg

// You must leave this first line as comment.

{ // Disallow to remove the Primary Password, previously called master password
  const { classes: Cc, interfaces: Ci } = Components;
  const observer = {
    observe(aSubject, aTopic, aData) {
      switch (aTopic) {
        case 'mail-startup-done':
          Services.obs.removeObserver(observer, 'mail-startup-done');
          Cc['@mozilla.org/enterprisepolicies;1']
            .getService(Ci.nsIEnterprisePolicies)
            .wrappedJSObject
            .disallowFeature('removeMasterPassword');
          return;
      }
    },
    QueryInterface(aIID) {
      if (!aIID.equals(Ci.nsIObserver) &&
          !aIID.equals(Ci.nsISupports)) {
        throw Components.results.NS_ERROR_NO_INTERFACE;
      }
      return this;
    }
  };
  Services.obs.addObserver(observer, 'mail-startup-done');
} 

付記:Bugzillaへ報告した経験談

クリアコードでは「いつでも問題をアップストリームで直す」ことが推奨されています。この件のBugzillaへの報告2 を筆者が担当することになりました。

既存の報告を探すと、2022年2月時点で作成されたスレッドがありました。そこに、先ほど紹介した回避策を投稿してみました。
https://bugzilla.mozilla.org/show_bug.cgi?id=1755068#c29

翌日確認すると、意外にも投稿後数時間のあいだに何件か反応がありました。要約すると「修正ポイントがわかったので修正する方向で進める」でした。

筆者の投稿を見て、Assigneeの方は「ポリシーが適用されないのは"sessionstore-windows-restored"ロジックが抜けているから」とピンと来たようです。といっても私には話が飛躍しすぎていて、それがどう事象の解決につながるか理解の範疇を超えていました。

社内外より後日教示いただいた内容を総合すると、次のような話でした。

  • Thunderbirdのポリシー適用処理はFirefoxのコードを流用している。
  • Fifefoxのポリシー設定(の一部)は、"sessionstore-windows-restored" イベント通知のタイミングで反映される。
  • Thunderbirdにも "mail-tabs-session-restored" の名称で同様のイベントが存在する。
  • しかしFirefox由来のコードはそのイベントを知らない。
  • よって、"mail-tabs-session-restored" (=Thunderbirdのウィンドウとタブの復元が終わった)イベント通知のタイミングではポリシー適用処理も実行されない。

そこで、ThunderbirdでもFirefoxと同名の"sessionstore-windows-restored" イベントを通知することによって、ポリシー適用処理を実行させる方針となったようです。

ただしリンクされていたコード修正用のスレッド https://phabricator.services.mozilla.com/D249050 を見ますと、記事執筆時点でもまだWIPとなっています。単純にロジックを足して済む問題でもなさげですので、推移を見守っている状況です。

おわりに

この事例のように、当社のThundebrirdサポートサービスでは、お客様からのお問い合わせに基づいてトラブルの原因究明や回避方法のご案内を行っています。ソースコードまで調査しますので、多くのケースでより的確な対策を示せることが特色です。組織内のThundebrirdの運用で何か困りごとがございましたら、一度お問い合わせフォームからご相談ください。

  1. 「マスターパスワード」の名称は英語版Thunderbirdでは「Primary Password」に変更されています Primary Password is replacing Master Password in Thunderbird (support.mozilla.org)。 当記事では日本語UIの文言にならい「マスターパスワード」を使用します。

  2. Bugzillaへの報告自体が初めてだったので、BugzillaのUser Guideに目を通してLog In with GitHubするところから始めました。