SELinux の初心者ガイド

SELinux の初心者ガイド

コース受講生向けに用意された記事の翻訳 「Linuxのセキュリティ」

SELinux または Security Enhanced Linux は、悪意のある侵入を防ぐために米国国家安全保障局 (NSA) によって開発された拡張アクセス制御メカニズムです。 これは、既存の任意 (または選択的) モデル (英語の Discretionary Access Control、DAC)、つまり読み取り、書き込み、実行のアクセス許可に加えて、強制 (または必須) のアクセス制御モデル (英語の Mandatory Access Control、MAC) を実装します。

SELinux には XNUMX つのモードがあります。

  1. 施行 — ポリシールールに基づくアクセス拒否。
  2. パーミッシブ — 強制モードでは禁止されるポリシーに違反するアクションのログを保存します。
  3. 身体障がい者 — SELinux を完全に無効にします。

デフォルトでは、設定は次のとおりです /etc/selinux/config

SELinux モードの変更

現在のモードを確認するには、次を実行します。

$ getenforce

モードを許可に変更するには、次のコマンドを実行します。

$ setenforce 0

または、モードを変更するには 許容的 на 施行、 実行する

$ setenforce 1

SELinux を完全に無効にする必要がある場合は、構成ファイルを介してのみ実行できます。

$ vi /etc/selinux/config

無効にするには、SELINUX パラメータを次のように変更します。

SELINUX=disabled

SELinuxのセットアップ

各ファイルとプロセスは、ユーザー、ロール、タイプなどの追加情報を含む SELinux コンテキストでマークされます。 SELinux を初めて有効にする場合は、まずコンテキストとラベルを設定する必要があります。 ラベルとコンテキストを割り当てるプロセスは、タグ付けとして知られています。 マーキングを開始するには、設定ファイルでモードを次のように変更します。 許容的.

$ vi /etc/selinux/config
SELINUX=permissive

モード設定後 許容的、ルートに次の名前の空の隠しファイルを作成します。 autorelabel

$ touch /.autorelabel

そしてコンピュータを再起動します

$ init 6

注: モードを使用します。 許容的 モードを使用しているため、マーキング用 施行 再起動中にシステムがクラッシュする可能性があります。

一部のファイルでダウンロードが停止しても、マーキングには時間がかかるため、心配する必要はありません。 マーキングが完了し、システムが起動したら、構成ファイルに移動してモードを設定できます。 施行そしてまた実行します:

$ setenforce 1

これで、コンピュータ上で SELinux が正常に有効になりました。

ログの監視

マーキング中またはシステムの実行中にエラーが発生した可能性があります。 SELinux が正しく動作しているかどうか、またポートやアプリケーションなどへのアクセスをブロックしていないかどうかを確認するには、ログを確認する必要があります。 SELinux ログは次の場所にあります。 /var/log/audit/audit.log, ただし、間違いを見つけるためにすべてを読む必要はありません。 Audit2why ユーティリティを使用してエラーを見つけることができます。 次のコマンドを実行します。

$ audit2why < /var/log/audit/audit.log

その結果、エラーのリストが表示されます。 ログにエラーがなかった場合、メッセージは表示されません。

SELinux ポリシーの構成

SELinux ポリシーは、SELinux セキュリティ メカニズムを管理する一連のルールです。 ポリシーは、特定の環境に対する一連のルールを定義します。 次に、禁止されたサービスへのアクセスを許可するポリシーを構成する方法を学びます。

1. 論理値(スイッチ)

スイッチ (ブール値) を使用すると、新しいポリシーを作成しなくても、実行時にポリシーの一部を変更できます。 これらを使用すると、SELinux ポリシーを再起動したり再コンパイルしたりせずに変更を加えることができます。


FTP 読み取り/書き込み経由でユーザーのホーム ディレクトリを共有したいとします。すでに共有していますが、アクセスしようとしても何も表示されないとしましょう。 これは、SELinux ポリシーにより、FTP サーバーによるユーザーのホーム ディレクトリへの読み取りおよび書き込みが禁止されているためです。 FTP サーバーがホーム ディレクトリにアクセスできるようにポリシーを変更する必要があります。 これを行うためのスイッチがあるかどうかを確認してみましょう

$ semanage boolean -l

このコマンドは、使用可能なスイッチを現在の状態 (オンまたはオフ) と説明とともにリストします。 grep を追加して FTP のみの結果を検索することで、検索を絞り込むことができます。

$ semanage boolean -l | grep ftp

すると次のことがわかります

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

このスイッチは無効になっているので、次のように有効にします。 setsebool $ setsebool ftp_home_dir on

これで、ftp デーモンがユーザーのホーム ディレクトリにアクセスできるようになります。
注: 次のようにすることで、説明なしで利用可能なスイッチのリストを取得することもできます。 getsebool -a

2. ラベルとコンテキスト

これは、SELinux ポリシーを実装する最も一般的な方法です。 すべてのファイル、フォルダー、プロセス、ポートは SELinux コンテキストでマークされます。

  • ファイルとフォルダーの場合、ラベルは拡張属性としてファイル システムに保存され、次のコマンドで表示できます。
    $ ls -Z /etc/httpd
  • プロセスとポートのラベル付けはカーネルによって管理され、これらのラベルは次のように表示できます。

プロセス

$ ps –auxZ | grep httpd

$ netstat -anpZ | grep httpd


次に、ラベルとコンテキストをより深く理解するために例を見てみましょう。 ディレクトリの代わりに Web サーバーがあるとします。 /var/www/html/ использует /home/dan/html/。 SELinux はこれをポリシー違反とみなし、Web ページを表示できなくなります。 これは、HTML ファイルに関連付けられたセキュリティ コンテキストを設定していないためです。 デフォルトのセキュリティ コンテキストを表示するには、次のコマンドを使用します。

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

ここにあります httpd_sys_content_t HTML ファイルのコンテキストとして。 このセキュリティ コンテキストを現在のディレクトリに設定する必要があります。現在のディレクトリには次のコンテキストがあります。

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

ファイルまたはディレクトリのセキュリティ コンテキストを確認するための代替コマンド:

$ semanage fcontext -l | grep '/var/www'

また、正しいセキュリティ コンテキストが見つかったら、semanage を使用してコンテキストを変更します。 /home/dan/html のコンテキストを変更するには、次のコマンドを実行します。

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

semanage を使用してコンテキストが変更された後、restorecon コマンドはファイルとディレクトリのデフォルトのコンテキストをロードします。 これで、Web サーバーはフォルダーからファイルを読み取ることができるようになります。 /home/dan/htmlこのフォルダーのセキュリティ コンテキストが次のように変更されたため、 httpd_sys_content_t.

3. ローカルポリシーを作成する

上記の方法が役に立たず、audit.log にエラー (avc/denial) が記録される場合があります。 この問題が発生した場合は、ローカル ポリシーを作成する必要があります。 上で説明したように、audit2why を使用するとすべてのエラーを見つけることができます。

エラーを解決するローカル ポリシーを作成できます。 たとえば、httpd (Apache) または smbd (samba) に関連するエラーが発生した場合、エラーを grep して、それらに対するポリシーを作成します。

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

それは http_policy и smb_policy は、作成したローカル ポリシーの名前です。 次に、これらの作成されたローカル ポリシーを現在の SELinux ポリシーにロードする必要があります。 これは次のようにして実行できます。

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

ローカル ポリシーがダウンロードされ、audit.log に avc または denail が記録されなくなります。

これは、SELinux の理解を助けるための私の試みでした。 この記事を読んで、SELinux をより快適に感じていただければ幸いです。

出所: habr.com

コメントを追加します