SELinux関係で起きたトラブル

最初に言っておく!

正直まだ使いこなせていないし、よく分かっていない!

ファイルの属性値

属性値の確認方法

ファイルにSELinux用の属性値のようなものが割り当てられており、これに応じてセキュリティが作動する模様。

以下はサーバ証明書の例である。属性値は”unconfined_u:object_r:cert_t:s0″の箇所。”-Z”オプションにより参照可能。
私の例では、nginxがHTTPS通信のためにファイルを参照しようとしたところエラーが発生していた。
もちろんグループにnginxを入れていたし問題ないはずと思っていたがエラーに…。
そんな時にSELinuxが有効になっていることを思い出して調べてみると、この属性値を変更する必要があったみたい。

lls -lZ ./

合計 20
-rw-r-----. 1 root nginx unconfined_u:object_r:cert_t:s0      1766  1月 23 14:12 servername.key
-rw-r-----. 1 root nginx unconfined_u:object_r:cert_t:s0      4233  1月 23 14:01 ssl_combined.crt

属性値の変更方法

つまり上のファイルの属性値を下の”-t”オプションに指定したことになります。
ちなみにファイルだけでなく、ディレクトリも可能だそうです。

“semanage”は指定ファイルの属性値を専用の設定ファイルに保存し、”restorecon”はその設定ファイルの内容を実際に反映する、というものだ。

一時的な設定も可能なようなのでこちらを参照してください。

semanage fcontext -a -t 属性値 ファイル
restorecon -v ファイル

ネットワークの属性値

属性値の確認方法

ネットワークにも属性値(ラベル)が割り当てられており、これに応じてセキュリティが作動する模様。

私が触れた例ではnginxでリバースプロキシを設置した時にこのラベルを操作することで通信可能になったことがある。それはこちらの通りにして解決したはず。

利用可能なラベルはこちらを参照。

getsebool -P ラベル名

属性値の変更方法

先の例では値を”0″か”1″を選択した。

setsebool -P ラベル名 値

Dockerのマウント時にも

composeファイルのVolumes欄で

後から何の意味もなかったことが分かったがこの指定は当時のエラーを解消するものではなかったようだ。
(どんなエラーかも忘れてしまったが…。)

詳細はこちらで。

DockerのSELinuxセキュリティの観点からこちら読むべきかもしれません。

version: '3'
    services:
        redmine:
            img: sample
            volumes:
                - type: bind
                  source: ./data/plugins
                  target: /usr/src/redmine/plugins
                  bind:
                    selinux: Z

コメントを残す