2013年12月26日木曜日

Fedora 20 で SELINUX=disabled が効かなくなった件について

一部TLをお騒がせしたらしい↓の件ですが、
これはFedora特有の(おそらく)バグです。
→ 2013/12/30 追記: やはりバグでした。 libselinux-2.2.1-6.fc20 に yum updateすることで解消します。2.2.1-6 は2014/01/01ごろまでには各ミラーに行き渡ると思います。待てない場合は updates-testing リポジトリのを使うと良いです。詳細はリンク先参照。

Q&A
  • 設定まちがってんだろm9 → いいえ
  • rebootしてないだけだろm9 → いいえ
  • RedHatもそのうちpermissive強制になるの?→単なるバグと思われるので、ならないと思います
  • 同じ事象に遭遇しちゃったんだけどどうすれば? → permissiveでも問題ないなら放置でOK。permissiveで問題があるなら yum downgrade 'libselinux*' で 2.1.13-19 に戻すか、kernelオプションに selinux=0 を追加してkernelでSELinuxを切りましょう


詳細
今朝(JSTで2013/12/25早朝)あたりから fedora 20 で yum update すると libselinux-* が2.2.1-4.fc20 にアップデートされるようになりましたが、アップデート後 SELINUX=disabled が効かなくなります。
これは、libselinux-2.2.1-4.fc20にあたっているFedora用のパッチ libselinux-rhat.patch の以下の部分が原因と思われます。

@@ -410,7 +494,7 @@ int selinux_init_load_policy(int *enforce)
         * already mounted and selinuxmnt set above.
         */

-       if (seconfig == -1) {
+       if (*enforce == -1) {
                /* Runtime disable of SELinux. */
                rc = security_disable();
                if (rc == 0) {

ifブロックの中はランタイムでSELinuxをdisableにするコードです(たぶん)。
seconfigは /etc/selinux/config のSELINUX行に基づいて 1, 0, -1のいずれかがセットされますが、rhat.patchにより *enforce の値を見るように変更されています。

実はlibselinuxのコードをちゃんと理解してるわけではないのですが、src/load_policy.cのこのコードの前の方を見ると

445         if (secmdline >= 0)
446                 *enforce = secmdline;
447         else if (seconfig >= 0)
448                 *enforce = seconfig;
449         else
450                 *enforce = 0;   /* unspecified or disabled */

となっており、*enforce が -1 になることは理論上ありません。rhat.patchのこの部分は  libselinux-2.2.1-1 から 'Add support for policy compressed with xv' のために入れられているようですが、真意は不明です。

本件についてはFedora(RedHat)のbugzillaに報告済みですが、別の人に先を越されてたので今後の状況はそちらを見ていただくのが良いかと思います。回避策の詳細についても載っていますので参考になさってください。

以上です。

追記(2013/12/28):
私が報告した#1046470のほうで作業が進められ、patchから指摘箇所のhunkを削ったFix版の libselinux-2.2.1-6.fc20がリリースされることになりました。

メンテナのdwalshさんが不在なので、awilliamさんが対応してくださいましたが、

  • いろんな変更が1パッチ(rhat.patch)に入ってるんで該当箇所の変更意図はDanさんじゃないとよくわからん
  • 該当箇所はアップストリームで何年も変わってないんで、アップストリーム追従などではない
  • SELINUX=disabledでkernelオプションをselinux=1 enforce=0にした場合にpermissiveになってほしかったんじゃないか説(2.2.1-4だとそうなる)
  • だとしても今までの挙動を壊すほどのFixじゃないわー

という感じでとりあえず挙動を以前と同じに戻す方向の暫定対処と思われます。Danさんが戻り次第、根本対処がされるものと思われます。

追記(2013/12/30):
libselinux-2.2.1-6.fc20がQAシステム(Bodhi)を通過してFedora20のstableリポジトリにプッシュされ、#1046470はクローズとなりました。


参考リンク:

0 件のコメント:

コメントを投稿