CentOS7におけるSELinuxによる怪

2019年10月13日

テクノロジー

毎日のホッとする一時はどんな時ですか? 僕は、午前中にジョギングした後のランチ後にちょっとだけ昼寝する瞬間が、夜に寝ているよりも癒やされている気がします。 やはり昼寝文化は良いもんだという実感が湧いてきました。 さて、今回は、1日潰してしまったサーバー設定時のトラブルについて、ブログを書きたいと思います。 とかく嫌われているSELinuxですが、これまでインストールしてすぐにDisableしていたので、あまり気にもしたことが無かったのですが、とある新規サーバーで、Nginx+PHP-fpmの挙動がおかしくなったので調べていったらSELinuxが原因だったことがわかり、その一部始終を備忘録として残しておきます。

思いも寄らない症状

新しくWEBサービス用のサーバーをいつも使っているクラウドサーバーで構築した時の話です。 これまで使い慣れていたCentOS6をずっと使っていたのですが、半年ぐらい前にCentOS6が無くなりCentOS7になったという情報は頭にあり、CentOS7のコマンドの違いも、Dockerを使って心得ていました。 そんなCentOS7も本番サーバーですでに何台も構築済みで何の心配もなかったのですが、いつものようにNginx+PHP-fpm構成で効率のいいLAMP環境をセットしていた時に、稼働するプログラムファイルをアップロードした時に、ブラウザに何も表示されなかったので、どうやらクラウドサーバーの鍵登録が出来ていないとのことで、そのセットはさほど難しくなかったのですが、sshでもweb80番ポートでも、何故かアクセスできません。 なんとなくfirewallであると考えてポート登録を行ったら問題なくアクセスできるようになってサービスが立ち上がりました。 この状態でサーバーセット完了だと思い、とりあえずログインするサービスだったので、試しに管理権限でログインしてみたところ、ログインができないではありませんか・・・ ローカルPCの環境では何に問題も無く動いているので、とりあえずnginxのエラーログを見てみると以下のようなログが吐き出されていました。 [error] 1052#1052: *14 FastCGI sent in stderr: "PHP message: PHP Warning: mkdir(): Permission denied in /var/www/html/session.php on line 22 ローカル要素は除外したログですが、プログラムの特定の箇所でのエラーが出力されているようです。 そして明確に"mkdir(): Permission denied"と、フォルダが権限エラーで作成できていない事がわかります。 このsessiopn.phpでは、sessionデータをサービスディレクトリに一時保存する仕組みにしており、ログインした時に任意のフォルダを自動作成するようにしていました。 このフォルダが作られないため、セッションフォルダも作られず、結果セッションエラーになり、ログインが出来ない状態になっていたようです。

SELinuxとFirewalldとiptables

エラー内容は分かったけど、しばらくはその原因が全くわかりませんでした。 phpの上位バージョンによる何かしらのコンフリクトが起こっているのか? サーバーのnginxかphp-fpmの初期設定が何かしら間違っているのか? firewallの設定が足りていなかったのか・・・??? どれもはずれで、半日以上あーだこーだ作業した結果、SELinuxが原因で合ったことがわかりました。 これまですぐにdisableしていたのだが、このサーバーはその手順が抜けていて、そのピンポイントに気が付かなかったのがそもそもの原因だったのと、一度勘ぐってdisableしていたのですが、もう一つの必要だった解決策の、フォルダのアクセス権限を777にしていなかったこの2点が絶妙に行き違いになっていました。

SELinuxについて

Security-Enhanced Linuxの略であるこのモジュール(機能)は、どのサイトでもインストール後すぐにdisable化することが叫ばれています。 CentOSの上位バージョンで何故そんな嫌われモジュールがデフォルトでONになっているのでしょう? そもそも、アプリの特定の機能が使えなくなるそんなアプリケーションって、管理するのもめんどくさいしこの「設定もかなりボリューミーでやってられるか!」というエンジニアが圧倒的に多いことがわかり、無くても良い存在になっているようです。 ますます、SELinuxというアプリの存在否定が強いのに、デフォルト状態なのが不思議でなりません。 名称からセキュアなアプリであるという印象はわかりますが、実態は何をするアプリかは僕も現時点で把握できていません。 https://ja.wikipedia.org/wiki/Security-Enhanced_Linux wikiペってみました。 wikipediaから理解できたのは、ファイルアクセスをパーミッションではない領域で管理できる仕組みで、設定がとにかく複雑になるという事も書かれています。

あとがき

やはりdisable化する方が無難に感じるのは致し方ないかもしれませんね。 一部でSELinuxをちゃんとセットしようというサーバーエンジニアの主張ページなども見かけますが、個人的にファイル管理が複数の原因でトラブルが発生しそうなので、実運用には向かないアプリであると現時点では自分で判断してしまいました。 効率的に設定ができるアップデートがされるか、この設定が必須になるような自体になれば考え直したいと思いますが、CentOSを今後も使い続けていきたいのであれば、disableをオススメします。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。