rootを越えろ!スルーされがちなSELinuxの秘密-後編-
みなさん、こんにちは。えんピぐらしです。それでは前回の続きです。
rootを越えろ!スルーされがちなSELinuxの秘密-前編-今回はSELinuxが動くところを見ていきます。
「SELinuxが動く」ということは、設定変更した箇所が実際にSELinuxによってブロックされるということです。どうやってブロックされるかはログで確認します。
なお、SELinuxの概念については、参考サイトに詳しく書かれていますのでこの記事では省きます。ご了承下さい。
環境
OS:CentOS 6.8
インストールしたrpm(依存パッケージは除く):
httpd-2.2.15-54……Webサーバ
setroubleshoot-server-3.0.47-12……SELinuxのトラブルシュート
SELinuxの動作を確認してみよう
今回やってみるのは「Apacheのポート番号を変更する」です。
ApacheはWebサーバの一つで、デフォルトの設定は80番ポートで公開されています。この番号を変更すると、SELinuxがセキュリティ違反と見なして動作します。
SELinuxの設定が「enforcing」であることの確認
最初にSELinuxが有効になっていることを確認します。
※クリックで拡大Apacheのポート番号変更
/etc/httpd/conf/httpd.confファイルの以下の行を変更します。
Listen 80
↓
Listen 82
Apacheを再起動
「service httpd restart」コマンドで再起動すると、エラーがコマンドライン上で発生します。
※クリックで拡大早速ログで確認していきましょう。
「/var/log/audit/audit.log」で先頭がtype=AVCとなっているのが、SELinuxでエラーを検知した部分です。
※クリックで拡大audit.logからは、82番ポートでdeniedになっていることが確認できますね。
また、setroubleshoot-serverをインストールしていると、/var/log/messagesにもログが出力されます。
CentOS 6では以下のようなログが出力されます。
ログに従ってsealertコマンドを実行することでトラブルシュートするべき手順を確認します。
出力結果の3行目以降からを抜粋します。
※クリックで拡大「semanage port -a -t PORT_TYPE -p tcp 82」が問題を解決するべきコマンドとなります。このコマンドを実行することで、82番ポートを設定してもセキュリティ違反となりません。
PORT_TYPEは以下の中から選びますが、今回は「http_port_t」が一番合っていそうなので、そちらを選択します。
jboss_messaging_port_t, jboss_management_port_t, ntop_port_t, http_cache_port_t, http_port_t, puppet_port_t.
実際に実行してみましょう
※クリックで拡大Apacheを再起動
※クリックで拡大今度はエラーになりませんでした。
因みに80以外には、8080と81に設定してもエラーにならないことを確認しました。
経験則ではありますが、Webサーバで使われるようなポート番号になります。
このように、SELinuxが有効になっているシステムでは、必要な設定を少しずつ外していき、エラーを取り除きます。
めんどくさいと思われるかもしれませんが、セキュリティの穴を防ぐ、確実な方法です。
締めの一言
最後までお読み頂いてありがとうございました。
SELinuxだけ設定していればいいかというと、全ての問題が解決するわけではありません。DoS攻撃は防げませんし、パスワードが流出してしまえば不正な操作を許してしまいます。
(そもそも全て解決するのであれば、もっと導入されているはずですし……)
セキュリティの高いシステムを作ることはとても大変で、構築や運用に多大な労力がかかりますが、非常に大事なことですね。
それでは締めの一言です。
一度でいいから見てみたい、
SELinux動くとこ
以上、ありがとうございました〜
参考資料
-
SNS
-
投稿日
-
カテゴリー
BTM Useful