「SELinux」カテゴリーアーカイブ

CGIでソケット通信を行えるようにするには、SELinuxの設定変更が必要

Linux上のApacheでCGIを利用してソケット通信を行いたい場合がありますが、SELinuxではデフォルトで許可されていません。

今回は、CGIでftp通信を行おうとしたのですが、拒否されてしまいました。

対策としては、SELinuxの設定を変更してApache(httpd)から発行されたソケット通信を含む処理を許可してあげます。

以下はその方法です。

まずデフォルトの設定状態を確認します。

次にhttpd_can_network_connectを許可します。

再度、設定内容を確認します。

これで、ソケット通信は可能になります。

 

Apache DocumentRoot以外のディレクトリをシンボリックリンクで繋げたら、Forbidden 403 エラーの対策

Linux上のApacheでDocumentRoot以外の場所を参照できるようシンボリックリンクで接続したら、Forbiddenと表示されました。

Forbidden
You don’t have permission to access /user_dir/hoge.html on this server.

パーミッションや所有者をApacheに変更してみたり、色々試した結果SELinuxを無効にすることで正常に動作することを確認しました。

Permissiveになっていれば、SELinuxはモニタリング状態でありアクセス制御は掛かっていない状態になっています。

SELinux事態を無効(モニタリング状態)にしておくのは、あまり良いことではありません。

出来ればアクセス制御は正常に行われている状態にすべきです。

アクセスできない原因がSELinuxのアクセス制御に影響されることが確定されたら、以下の操作を行うことでこの問題を解決することが出来ます。

さて、一般にパーミッションの確認などをする際には、ls -laなど個人差はありますがlsコマンドを使います。
SELinuxコンテキストも同じように確認することが出来ます。
コマンドは以下になります。

通常のファイルはこんな感じです。

さてSELinuxコンテキストを変更するには、まず最初に対象となるディレクトリに対して設定を行います。

続いて、対象ディレクトリ内のすべてのファイルとフォルダーに対して設定を反映します。

対象ディレクトリ以下に多量のファイルがあると、時間が掛かる場合があります。
SELinuxを有効にします。
SELinuxの有効化は以下のコマンドを実行します。

最後にブラウザで動作確認を行ってください。

これでもForbiddenが表示される場合は、上記の操作に問題があるか?本当にパーミッションが間違っていないか?確認してください。

ついでに確認方法を記載します。

上記でも記載したとおり以下のコマンドで確認します。

設定が変更されているのが解ると思います。