Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

setroubleshootによるSELinuxのトラブルシュート

こんにちは、鯨井貴博@opensourcetechです。

 

今回はCentOS6.6(64ビット)上のApache(httpd)を使用して、

SELinuxのトラブルシュートを行おうと思います。

 

OS情報は、/etc/redhat-releaseunameコマンドで確認出来ます。

f:id:opensourcetech:20150303183952p:plain

 

SELinuxのポリシーにわざと引っかかるように、

/etc/httpd/conf/httpd.confにて

Apacheのドキュメントルートをデフォルトの「/var/www/html」から

/home/apache/html」に変更します。

f:id:opensourcetech:20150303183956p:plain

 

そして、そのドキュメントルートとなるディレクトリや

コンテンツファイル(index.html)を作成します。

f:id:opensourcetech:20150303183959p:plain

 

その後、Apache(httpd)を起動。

service httpd start

ServerNameディレクティブが設定されていない事を示すメッセージが出ますが、

気にせずいきます。

f:id:opensourcetech:20150303184002p:plain

 

iptables(FW)についても「iptables -F」で無効化しておきます。

f:id:opensourcetech:20150303184005p:plain

 

さて、この状態でクライアントよりApacheにアクセスします。

すると以下のようにパーミッションの問題でアクセス出来ず、

Forbidden」となりHTTPステータスコード403が返されます。

f:id:opensourcetech:20150303184008p:plain

 

tail -f /var/log/httpd/access.logでアクセスログを確認すると、

以下のように403が出力されております。

f:id:opensourcetech:20150303184011p:plain

 

tail -f /var/log/httpd/error.logを見ると、「Permission denied」、

f:id:opensourcetech:20150303184013p:plain

 

tail -f /var/log/audit/audit.logを見ると、以下のようにSELinuxのメッセージが出力されております。

f:id:opensourcetech:20150303184016p:plain

 

ls -dZ」で確認出来るSELinuxの設定などがどうも関連しているようですね。

f:id:opensourcetech:20150303184020p:plain

 

では本題。

setroubleshootによる問題解決を行いましょう。

まずはインストールです。

yum install setroubleshoot

f:id:opensourcetech:20150303184022p:plain

 

setroubleshootをインストール後にクライアントからアクセスをすると、

/var/log/messageどうすればSELinuxでの対応が出来るかというヒント(sealert)が出力されるようになります。

f:id:opensourcetech:20150303184039p:plain

 

続いて上記メッセージにあるsealertコマンドを実行すると、

具体的に実行するべきコマンドが示されます。

sealert -l ID

f:id:opensourcetech:20150303184043p:plain

 

日本語がおかしい場合は、

LANG=C sealert -l IDとすれば英語表記に変更出来ます。

f:id:opensourcetech:20150303184047p:plain

 

そのメッセージに従ってコマンドを実行します。

以下の例では、/var/log/audit/audit/logの内容から、

audit2allowを使用してアクセスを許可する為のモジュールパッケージ(mypol.pp)を生成し、semoduleコマンドでそれを適用します。

f:id:opensourcetech:20150303184050p:plain

 

再びクライアントからアクセスしてみても、まだアクセスはできませんので、

またsetroubleshootによるトラブルシュートを繰り返します。

f:id:opensourcetech:20150303184100p:plain

f:id:opensourcetech:20150303184104p:plain

 

その後、クライアントからアクセスすると無事にコンテンツファイル(index.html)の内容が表示されました。

f:id:opensourcetech:20150303184108p:plain

 

 

 ちなみに、今回行った操作ではモジュールパッケージ(mypol.pp)

カレントディレクトリひ出力されます。

f:id:opensourcetech:20150303184949p:plain

 

また、sestatusコマンドでSELinuxのステータス、

sestatus -bでブーリアン(ブール)を含めたステータスが確認出来ます。

f:id:opensourcetech:20150303184941p:plain

f:id:opensourcetech:20150303184954p:plain

f:id:opensourcetech:20150303184957p:plain

f:id:opensourcetech:20150303185004p:plain

f:id:opensourcetech:20150303185008p:plain

f:id:opensourcetech:20150303185012p:plain

f:id:opensourcetech:20150303185015p:plain

f:id:opensourcetech:20150303185020p:plain

 

 

これで、

setenforce 0」や

/etc/sysconfig/selinuxにてSELINUX=disabled/permissiveにせず、

より安全なサーバ構築が出来そうですね。

 

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

Opensourcetech by Takahiro Kujirai