【ざっくりと理解する】SELinuxとは?

  • このエントリーをはてなブックマークに追加
  • Pocket

SELinuxとはセキュリティ関連のLinuxカーネル制御機能だ。Linuxディストリビューションではなく、強制アクセス制御機能を加えるモジュールの名前だ。

このページではSELinuxについて簡単にご説明していこう。

SELinuxとは?

ディストリビューションではない

SELinuxと聞くとディストリビューションの一つだと思うかもしれないが、そうではなく、カーネルの制御機能のひとつだ。

Security-Enhanced-Linuxの略称になる。

アクセス制御に使う

SELinuxを利用すると細かいアクセス制御が可能になる。例えば、サービス毎に最小限の権限を与え管理することなどが可能になる。

root権限ですら制限をかけることも可能となっており、redhat系のディストリビューションであるCentOSやFedoraの場合はデフォルトで導入されているシステムだ。

使わないケースも多い

SELinuxを意図的に無効化しているサーバも多い。

実際のところSELinuxをなしにしても問題なくサーバとして機能するという部分と、SELinuxの難解さという面があいまってそうなっているのだろう。余計な挙動が起こって、むしろ管理しにくいというケースがある。

もう一つ注意点がある。

SELinuxは事後防衛的な手段だ。もしサーバに侵入されたとしても、被害を最小限に抑えるための仕組みとなっている。そのため侵入事態を防衛できるものではないことを念頭においておきたい。

今回はザックリとだが、SELinuxに実際に触れてみようと思う。

サーバの状態を確認

SELinuxの状態の確認は

# getenforce

とすると確認出来る。CentOS7ではデフォルトで「Enforcing」となっており、機能が有効になっている。ステータスは

  • enforcing SELinux有効でありアクセス制御が有効となる
  • permissive アクセス制御は無効だが警告メッセージを表示する
  • disabled SELinux無効

より詳しい情報は

# sestatus

sestatus

とすると確認出来る

SELinuxの有効化と無効化

# setenforce 0

状態をpermissiveモードへ変更

# setenforce 1

状態をenforcingモードへ変更

setenforceでの変更はリアルタイムで一時的なものである、再起動すると初期化されてしまう。恒久的に設定を有効化、もしくは無効化したい場合

# vi /etc/selinux/config

を設定する「SELINUX=」の部分を編集する

  • enforcingを恒久設定 SELINUX=enforcing
  • permissiveを恒久設定 SELINUX=permissive
  • disabledを恒久設定 SELINUX=disabled

注)なお、/etc/selinux/configの変更後に再起動しないと反映されないようだ。

SELinuxとhttpdで実験してみる

まずは

一応setools-consoleをインストールしておこう。

# yum install setools-console

そして

# setenforce 1

としてSELinuxを有効化しよう。「setenforce 0」とするとpermissiveモードで動作し言わばSELinuxのデバッグモードとなる。

動作時に警告はだすが、アクセス権限は通常のLinuxと同じ状態になる。この状態で警告メッセージを一通り確認した上で適切な、権限分担設定を行うようにしよう。

SELinuxを意図しない状態で設定してしまうと、ログインすらできなくなる場合があるので注意しよう。一応CentOS7ではSELinuxが有効な状態でログインやXの稼動などが可能になるように設定されているので、現状のままログなどを観察してみよう。

デフォルトの状態でhttpdを稼動させてテストページを表示してみよう

# systemctl start httpd

とするとテストページが表示されるはずだ。では次に自分で作成したindex.htmlを表示させてみよう。

/var/www/html/index.html

に配置すれば正常に表示できるはずだ。次にhttpd.confを適切に設定して自分で公開ディレクトリを作成、今回は/www-httpdを作成、コンテンツindex.htmlを作成、ブラウザをリロードしてみよう。

# mkdir /www-httpd

# vi /etc/httpd/conf/httpd.conf

# vi index.html

# systemctl restart httpd

しかし結果はテストページが表示されてしまうと思う。

この状態で

# setenforce 0

として再度ブラウザをリロードしてみよう。正常にindex.htmlの内容が表示されるはずだ。SELinuxによって動作が制限されていたことがわかる。ではログを参照してみよう

# tail -n0 -f /var/log/audit/audit.log

にログが残るのでtailコマンドで表示、ブラウザをリロードすると以下のような内容が表示されるはずだ。

selinux-httpd

「denied」と記述されているあたり、アクセスが拒否されたことがわかる。ではどうすればアクセスを許可できるのか?実際にやってみよう

chconを使用する。SELinuxのラベルつまり、パーミッション情報を変更する。

# chcon -R -t httpd_sys_content_t /www-httpd

これで正常に作成したindex.htmlが表示されるはずだ。

試しに

# ls -Zd /www-httpd

としてみよう。以下のようになっているはずだ。なお「-Z」はSELinuxの情報を表示するオプションとなっている。

ls-dZ

しかしこの設定は一時的なもので恒久的ではない、なので設定ファイルを生成し適応する。

# semanage fcontext -a -t httpd_sys_content_t "/www-httpd(/.*)?"

# cat /etc/selinux/targeted/contexts/files/file_contexts.local

context

とすると設定が記述されているのが確認出来る

# restorecon -R -v /www-httpd

restoreconを実行すると「/etc/selinux/targeted/contexts/files/file_contexts.local」を参照して「/www-httpd」に「httpd_sys_content_t "/www-httpd(/.*)?"」を適応するようになっている。

再度ブラウザでhttpdにアクセスしてみよう。index.htmlの中身が表示されるはずだ。

最後にログを確認しよう

# tail -n0 -f /var/log/audit/audit.log

今度はリロードしてもアクセス拒否のログは残らないはずだ。

上の例を再度まとめ

上の例では、SELinuxによって細かいパーミッション管理をしている。

最初はchconでパーミッションを手動設定した。しかしそのままだとrestoreconで標準設定にもどってしまうので、設定ファイルを生成しこれらの設定は「/etc/selinux/targeted/」にしまわれている。

今回「semanage fcontext」で「file_contexts.local」を生成、独自の設定ファイルを作成してrestoreconで読み込みをかけたことになる。

まとめ

このページではSELinuxについて簡単にご説明をしてきた。SELinuxの使い方がなんとなくイメージしていただければ幸いだ。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. hirotak より:

    すみません。
    setools-consoel

    setools-console
    のtypoですよね?

    1. リカレントテクノロジー より:

      おっしゃる通りです。ありがとうございます。修正いたしました。

  2. yt より:

    良記事ありがとうございます。
    一点相談なのですが、/etc/selinux/configの変更後に再起動しないと反映されない旨は記載しておいた方が良いかと思います。
    (当記事を見て/etc/selinux/configを変更したのですが、再起動せずに作業を進めており、作業の最後の方で反映されてない事に気付き再起動...という事案が発生したため)

    1. リカレントテクノロジー より:

      ご指摘ありがとうございます。こちら記事に反映させていただきます。

yt へ返信する コメントをキャンセル

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する