テックブログ

技術ネタ

SELinuxでハマった時の話

こんにちはkinjoです。

SELinux環境でアプリケーションがうまく動かないことがありました。
おそらくSELinuxの影響だろうとあたりはついていたのですが、
ログに何も出力されてない状態でした。

調べてみると「サイレント拒否」というものがあり、
ログが記載されない場合があるとのこと。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-possible_causes_of_silent_denials

[root@cent_test ~]# seinfo
Statistics for policy file: /sys/fs/selinux/policy
Policy Version & Type: v.28 (binary, mls)

   Classes:            94    Permissions:       262
   Sensitivities:       1    Categories:       1024
   Types:            4747    Attributes:        251
   Users:               8    Roles:              14
   Booleans:          307    Cond. Expr.:       356
   Allow:          101734    Neverallow:          0
   Auditallow:        155    Dontaudit:        8846
   Type_trans:      17759    Type_change:        74
   Type_member:        35    Role allow:         39
   Role_trans:        416    Range_trans:      5697
   Constraints:       109    Validatetrans:       0
   Initial SIDs:       27    Fs_use:             29
   Genfscon:          105    Portcon:           602
   Netifcon:            0    Nodecon:             0
   Permissives:         6    Polcap:              2

「Dontaudit」の部分がログに出ないルールです。大量にありますね。

ちょっとだけどんなものがあるか確認

[root@cent_test ~]# sesearch --dontaudit |less -N
     1  Found 8846 semantic av rules:
     2     dontaudit qmail_inject_t httpd_t : unix_stream_socket { read write getattr } ;
     3     dontaudit sanlk_resetd_t sanlk_resetd_t : capability { net_admin sys_module } ;
     4     dontaudit user_usertype krb5kdc_conf_t : dir { ioctl read getattr lock search open } ;
     5     dontaudit udev_t udev_t : udp_socket listen ;
 ~略~
  8844     dontaudit mozilla_t user_home_t : dir { ioctl read getattr lock search open } ;
  8845     dontaudit chfn_t chfn_t : capability net_bind_service ;
  8846     dontaudit chfn_t chfn_t : capability net_bind_service ;
  8847     dontaudit minidlna_t home_root_t : dir { ioctl read getattr lock search open } ;
  8848

サイレント拒否を解除してログが出るようにしてみます。

[root@cent_test ~]# semodule -DB
[root@cent_test ~]# seinfo

Statistics for policy file: /sys/fs/selinux/policy
Policy Version & Type: v.28 (binary, mls)

   Classes:            94    Permissions:       262
   Sensitivities:       1    Categories:       1024
   Types:            4747    Attributes:        251
   Users:               8    Roles:              14
   Booleans:          307    Cond. Expr.:       356
   Allow:          101734    Neverallow:          0
   Auditallow:        155    Dontaudit:           0
   Type_trans:      17759    Type_change:        74
   Type_member:        35    Role allow:         39
   Role_trans:        416    Range_trans:      5697
   Constraints:       109    Validatetrans:       0
   Initial SIDs:       27    Fs_use:             29
   Genfscon:          105    Portcon:           602
   Netifcon:            0    Nodecon:             0
   Permissives:         6    Polcap:              2

Dontaudit が0になりました。

[root@cent_test ~]# sesearch  --dontaudit

sesearch でもdontauditのルールが出ませんね。
この状態ならログに出力が行われますので、
許可設定を行えば大丈夫です。

SELinuxでログが出てないけど動かない。とかいう時に サイレント拒否 される場合があるという事を
覚えておくと良いかも。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください