reply戻る


SElinux

SELinuxって何?
Security-Enhanced Linuxの省略形で、Linuxに搭載されたアクセス制御機能のことです。

Linux標準のアクセス制御(パーミッション設定)はユーザや、ユーザが所属するグループに対し、アクセスできるファイルの権限を設定しますが、 SELinuxは動作するプロセス(プログラム)に対して、アクセスできるファイルの権限を設定します。
SELinuxの設定手順
正しく設定しているはずなのに、プログラムが動かない。それはひょっとしたらSELinuxによってアクセスが制限されているからかもしれません。
そんなときは次の手順で必要なアクセス許可を設定しましょう。
  1. SELinuxの状態を知る

    getenforceコマンドを実行します。

    戻り値が"enforcing"なら SELinuxは有効状態です。
    それ以外の値の場合はSELinuxは無効状態ですので、プログラムが動作しない原因とSELinuxは無関係です。
  2. SELinuxを一時的に無効にしてみる

    下記コマンドでSELinuxを一時的に無効することで、プログラムが動作するか確認します。

    setenforce permissive

    一時的に無効にしても、プログラムが動作しない場合は、その原因とSELinuxは無関係です。
    下記コマンドを実行して、SELinuxを有効に戻しておきましょう。
    setenforce enforcing

    これでプログラムが動作するようになれば、プログラムの動作を妨げているのはSELinuxです。
    一時的に無効にしたまま、次の工程に移ります。
  3. audit.logを確認する

    SELinuxのアクセス制御結果は /var/log/audit/audit.logに出力されます。
    プログラムを動作させてみて、audit.logにどのようなログが出力されているか確認しましょう。

    もしtelnetやsshで接続していて2窓開けることができるのであれば、片方で
    tailf /var/log/audit/audit.log
    コマンドを実行した状態で、もう一方の窓でプログラムを動作させるとわかりやすいかもしれません。

    ログの例:
    type=AVC msg=audit(1474171675.373:45152): avc: denied { open } for pid=29938 comm="httpd" path="/etc/httpd/conf/.h tdigest" dev="dm-0" ino=403956464 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_tmp_t:s0 tclass=file
  4. ログから許可する内容を確認する

    上記のログの内容のうち、次に着目します。

    denied { open }
    ファイルのオープンを拒否された。

    path="/etc/httpd/conf/.htdigest"
    アクセスを拒否されたファイル

    scontext=system_u:system_r:httpd_t:s0
    httpd_tドメイン (プロセスが所属するドメイングループ)

    tcontext=unconfined_u:object_r:user_tmp_t:s0
    user_tmp_tタイプ (ファイルが所属するタイプグループ)

    tclass=file
    ファイルクラスfile


    この場合、httpd_tドメインはuser_tmp_tタイプにアクセスすることを許可されていないのでエラーが発生している状態となる。
    そのため、.htdigestファイルのタイプを変更することにする。

  5. ファイルタイプの変更

    chcon -t httpd_sys_content_t /etc/httpd/conf/.htdigest
reply戻る