CentOS 7でのSELinuxの紹介–パート1:基本概念

前書き

Security Enhanced LinuxまたはSELinuxは、最新のLinuxディストリビューションに組み込まれている高度なアクセス制御メカニズムです。 最初は、コンピュータシステムを悪意のある侵入や改ざんから保護するために、米国国家安全保障局によって開発されました。 時間が経つにつれて、SELinuxはパブリックドメインでリリースされ、その後さまざまなディストリビューションがコードに組み込みました。

多くのシステム管理者は、SELinuxがやや未知の領域だと感じています。 このトピックは気が遠くなると思われ、時には非常に混乱します。 ただし、適切に構成されたSELinuxシステムはセキュリティリスクを大幅に削減できます。また、それについて少し知っていると、アクセス関連のエラーメッセージのトラブルシューティングに役立ちます。 このチュートリアルでは、SELinuxの背後にある概念(パッケージ、コマンド、構成ファイル)、およびアクセスが拒否されたときにログに記録されるエラーメッセージについて学習します。 また、SELinuxを実際に使用する実際的な例もいくつか見られます。

_ 注意 +このチュートリアルに示されているコマンド、パッケージ、およびファイルは、CentOS 7でテストされています。 他のディストリビューションでも概念は同じです。 _

このチュートリアルでは、特に明記しない限り、rootユーザーとしてコマンドを実行します。 ルートアカウントにアクセスできず、sudo特権を持つ別のアカウントを使用する場合は、コマンドの前に「+ sudo +」キーワードを付ける必要があります。

SELinuxを選ぶ理由

始める前に、いくつかの概念を理解しましょう。

SELinuxは、* MAC (必須アクセス制御)と呼ばれるものを実装しています。 これは、すべてのLinuxディストリビューションに既に存在する DAC *(Discretionary Access Control)の上に実装されています。

DACを理解するために、まず、従来のLinuxファイルセキュリティの仕組みを検討しましょう。

従来のセキュリティモデルには、ファイル、ディレクトリに対する読み取り、書き込み、および実行(r、w、x)のアクセス許可の組み合わせを持つことができるユーザー、グループ、およびその他(u、g、o)の3つのエンティティがあります。 ユーザー* jo がホームディレクトリにファイルを作成すると、そのユーザーはそのファイルへの読み取り/書き込みアクセス権を持ち、 jo *グループも同様にアクセス権を持ちます。 「他の」エンティティは、おそらくアクセスできません。 次のコードブロックでは、joのホームディレクトリの仮想コンテンツを検討できます。

この* jo *ユーザーを設定する必要はありません。チュートリアルの後半で多くのユーザーを設定します。

次のようなコマンドを実行します。

ls -l /home/jo/

次のような出力を表示できます。

total 4
-rwxrw-r--. 1 jo jo 41 Aug  6 22:45 myscript.sh

これで、joはこのアクセスを変更できます。 joは、このファイルへのアクセスを他のユーザーやグループに許可(および制限)したり、ファイルの所有者を変更したりできます。 これらのアクションにより、重要なファイルがこのアクセスを必要としないアカウントにさらされる可能性があります。 joは安全性を高めるように制限することもできますが、それは任意です。システム管理者がシステム内のすべてのファイルに対して強制する方法はありません。

別のケースを考えてみましょう。Linuxプロセスが実行されると、rootユーザーまたはスーパーユーザー特権を持つ別のアカウントとして実行される場合があります。 つまり、ブラックハットのハッカーがアプリケーションを制御した場合、ユーザーはそのアプリケーションを使用して、ユーザーアカウントがアクセスできるリソースにアクセスできます。 rootユーザーとして実行されているプロセスの場合、基本的にこれはLinuxサーバー内のすべてを意味します。

ユーザーが各自のホームディレクトリからシェルスクリプトを実行できないように制限するシナリオを考えます。 これは、実動システムで作業している開発者がいる場合に発生する可能性があります。 ログファイルを表示したいが、「+ su 」または「 sudo +」コマンドを使用したり、ホームディレクトリからスクリプトを実行したりしたくない。 どのようにそれをしますか?

SELinuxは、このようなアクセス制御要件を微調整する方法です。 SELinuxを使用すると、ユーザーまたはプロセスができることを定義できます。 すべてのプロセスを独自のドメインに限定し、許可されたドメインの特定の種類のファイルや他のプロセスとのみ対話できるようにします。 これにより、ハッカーがプロセスをハイジャックしてシステム全体にアクセスすることを防ぎます。

テストシステムのセットアップ

概念の学習を支援するために、WebサーバーとSFTPサーバーの両方を実行するテストサーバーを構築します。 最小限のパッケージがインストールされたCentOS 7のベアインストールから開始し、Apacheおよびvsftpデーモンをそのサーバーにインストールします。 ただし、これらのアプリケーションのいずれも構成しません。

また、クラウドサーバーにいくつかのテストユーザーアカウントを作成します。 これらのアカウントは、レッスン全体を通してさまざまな場所で使用します。

最後に、必要なSELinux関連パッケージをインストールします。 これは、最新のSELinuxコマンドを使用できるようにするためです。

ApacheおよびSFTPサービスのインストール

まず、* root *ユーザーとしてサーバーにログインし、次のコマンドを実行してApacheをインストールします。

yum install httpd

出力には、ダウンロードされるパッケージが表示され、インストールの許可を求められます。

Loaded plugins: fastestmirror, langpacks
...
...
================================================================================
Package       Arch           Version                     Repository       Size
================================================================================
Installing:
httpd         x86_64         2.4.6-18.el7.centos         updates         2.7 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 2.7 M
Installed size: 9.3 M
Is this ok [y/d/N]:
  • y *を押すと、Apache Webサーバーデーモンがインストールされます。

Downloading packages:
httpd-2.4.6-18.el7.centos.x86_64.rpm                       | 2.7 MB   00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : httpd-2.4.6-18.el7.centos.x86_64                             1/1
 Verifying  : httpd-2.4.6-18.el7.centos.x86_64                             1/1

Installed:
 httpd.x86_64 0:2.4.6-18.el7.centos

Complete!

デーモンを手動で起動します。

service httpd start

`+ service httpd status`コマンドを実行すると、サービスが現在実行されていることが表示されます。

Redirecting to /bin/systemctl status  httpd.service
httpd.service - The Apache HTTP Server
  Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
  Active: active (running) since Tue 2014-08-19 13:39:48 EST; 1min 40s ago
Main PID: 339 (httpd)
...
...

次に、vsftpdをインストールします。

yum install vsftpd

出力は次のようになります。

Loaded plugins: fastestmirror, langpacks
...
...
==============================================================================================================
Package                  Arch                     Version                       Repository              Size
==============================================================================================================
Installing:
vsftpd                   x86_64                   3.0.2-9.el7                   base                   165 k

Transaction Summary
==============================================================================================================
Install  1 Package

Total download size: 165 k
Installed size: 343 k
Is this ok [y/d/N]:
  • y *を押してパッケージをインストールします。

次に、 `+ service vsftpd start +`コマンドを使用してvsftpdデーモンを起動します。 出力には、次のようなものが表示されます。

Redirecting to /bin/systemctl status  vsftpd.service
vsftpd.service - Vsftpd ftp daemon
  Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
  Active: active (running) since Tue 2014-08-19 13:48:57 EST; 4s ago
 Process: 599 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 600 (vsftpd)
...
...

SELinuxパッケージのインストール

SELinuxでは多くのパッケージが使用されます。 一部はデフォルトでインストールされます。 以下は、Red Hatベースのディストリビューションのリストです。

  • policycoreutils(SELinuxを管理するためのユーティリティを提供)

  • policycoreutils-python(SELinuxを管理するためのユーティリティを提供)

  • selinux-policy(SELinux参照ポリシーを提供)

  • selinux-policy-targeted(SELinuxターゲットポリシーを提供)

  • libselinux-utils(SELinuxを管理するためのいくつかのツールを提供)

  • setroubleshoot-server(監査ログメッセージを解読するためのツールを提供)

  • setools(監査ログの監視、クエリポリシー、およびファイルコンテキスト管理のためのツールを提供)

  • setools-console(監査ログの監視、ポリシーのクエリ、およびファイルコンテキスト管理のためのツールを提供)

  • mcstrans(さまざまなレベルをわかりやすい形式に変換するツール)

これらのいくつかは既にインストールされています。 CentOS 7システムにインストールされているSELinuxパッケージを確認するには、rootユーザーとして以下のようないくつかのコマンドを実行します( `+ grep +`の後に異なる検索語を使用)。

rpm -qa | grep selinux

出力は次のようになります。

libselinux-utils-2.2.2-6.el7.x86_64
libselinux-2.2.2-6.el7.x86_64
selinux-policy-targeted-3.12.1-153.el7.noarch
selinux-policy-3.12.1-153.el7.noarch
libselinux-python-2.2.2-6.el7.x86_64

次のコマンドですべてのパッケージをインストールすることができます(yumは既に持っているものをすべて更新します)、またはシステムから欠落しているパッケージだけをインストールします:

yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans

これで、すべてのSELinuxパッケージがロードされたシステムができました。 また、ApacheおよびSFTPサーバーがデフォルト構成で実行されています。 また、* root *アカウントに加えて、テスト用に4つの通常のユーザーアカウントが用意されています。

SELinuxモード

SELinuxをいじくりましょう。SELinuxモードから始めましょう。 いつでも、SELinuxは3つの可能なモードのいずれかになります。

  • 実施する

  • 寛容

  • 無効

強制モードでは、SELinuxはLinuxシステムでそのポリシーを「強制」し、ユーザーおよびプロセスによる不正アクセスの試みが拒否されていることを確認します。 アクセス拒否は、関連するログファイルにも書き込まれます。 SELinuxポリシーと監査ログについては後で説明します。

許容モードは、半有効状態のようなものです。 SELinuxは許可モードではポリシーを適用しないため、アクセスは拒否されません。 ただし、ポリシー違反はすべて監査ログに記録されます。 SELinuxを実施する前にテストするのに最適な方法です。

無効モードは一目瞭然です。システムは強化されたセキュリティで実行されません。

SELinuxモードとステータスの確認

`+ getenforce +`コマンドを実行して、現在のSELinuxモードを確認できます。

getenforce

SELinuxは現在無効になっているはずなので、出力は次のようになります。

Disabled

`+ sestatus +`コマンドを実行することもできます:

sestatus

SELinuxが無効になっている場合、出力には次のように表示されます。

SELinux status:        disabled

SELinux構成ファイル

SELinuxのメイン構成ファイルは/ etc / selinux / configです。 次のコマンドを実行して、その内容を表示できます。

cat /etc/selinux/config

出力は次のようになります。

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

このファイルには2つのディレクティブがあります。 SELINUXディレクティブはSELinuxモードを指示し、前に説明したように3つの可能な値を持つことができます。

SELINUXTYPEディレクティブは、使用されるポリシーを決定します。 デフォルト値は「+ targeted +」です。 SELinuxでは、ターゲットポリシーを使用して、アクセス制御のアクセス許可をカスタマイズおよび微調整できます。 他の可能な値は、高度な保護モードである「MLS」(マルチレベルセキュリティ)です。 また、MLSでは、追加のパッケージをインストールする必要があります。

SELinuxの有効化と無効化

SELinuxの有効化は非常に簡単です。ただし、無効にするのとは異なり、2段階のプロセスで行う必要があります。 SELinuxが現在無効になっており、前のセクションのすべてのSELinuxパッケージがインストールされていると想定しています。

最初のステップとして、 `+ / etc / selinux / config +`ファイルを編集して、SELINUXディレクティブを許容モードに変更する必要があります。

vi /etc/sysconfig/selinux
...
SELINUX=permissive
...

システム内のすべてのファイルは、SELinuxを実施する前にコンテキストにラベルを付ける必要があるため、最初にステータスを* permissive *に設定する必要があります。 すべてのファイルに適切なラベルが付けられていない限り、制限されたドメインで実行されているプロセスは、正しいコンテキストのファイルにアクセスできないため失敗する可能性があります。 これにより、ブートプロセスが失敗したり、エラーで開始したりする可能性があります。 _contexts_と_domains_はチュートリアルの後半で紹介します。

次に、システムの再起動を発行します。

reboot

再起動プロセスでは、SELinuxコンテキストでラベル付けされたサーバー内のすべてのファイルが表示されます。 システムは許容モードで実行されているため、SELinuxエラーとアクセス拒否が報告されますが、何も停止しません。

  • root *としてサーバーに再度ログインします。 次に、/ var / log / messagesファイルの内容から文字列「SELinux is prevent」を検索します。

cat /var/log/messages | grep "SELinux is preventing"

エラーが報告されていない場合は、次のステップに安全に移動できます。 ただし、/ var / log / messagesファイルで「SELinux」を含むテキストを検索することをお勧めします。 このシステムでは、次のコマンドを実行しました。

cat /var/log/messages | grep "SELinux"

これにより、実行中のGNOMEデスクトップに関連するいくつかのエラーメッセージが表示されました。 これは、SELInuxが無効になっている場合、または許容モードの場合に発生していました。

Aug 20 11:31:14 localhost kernel: SELinux:  Initializing.
Aug 20 11:31:16 localhost kernel: SELinux:  Disabled at runtime.
Aug 20 11:31:21 localhost journal: Unable to lookup SELinux process context: Invalid argument
Aug 20 11:33:20 localhost gnome-session: SELinux Troubleshooter: Applet requires SELinux be enabled to run.

Aug 20 11:37:15 localhost kernel: SELinux:  Initializing.
Aug 20 11:37:17 localhost kernel: SELinux:  Disabled at runtime.
Aug 20 11:37:23 localhost journal: Unable to lookup SELinux process context: Invalid argument
Aug 20 11:37:44 localhost gnome-session: SELinux Troubleshooter: Applet requires SELinux be enabled to run.

Aug 20 11:39:42 localhost kernel: SELinux:  Initializing.
Aug 20 11:39:44 localhost kernel: SELinux:  Disabled at runtime.
Aug 20 11:39:50 localhost journal: Unable to lookup SELinux process context: Invalid argument

これらのタイプのエラーは問題ありません。

2番目のフェーズでは、設定ファイルを編集して、 `+ / etc / sysconfig / selinux +`ファイルのSELINUXディレクティブを* permissive から enforcing *に変更する必要があります。

...
SELINUX=enforcing
...

次に、サーバーを再起動します。

reboot

サーバーがオンラインに戻ったら、 `+ sestatus +`コマンドを実行してSELinuxステータスを確認できます。 サーバーに関する詳細が表示されます。

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          error (Success)
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

/ var / log / messagesファイルを確認します。

cat /var/log/messages | grep "SELinux"

エラーはないはずです。 出力は次のようになります。

Aug 20 11:42:06 localhost kernel: SELinux:  Initializing.
Aug 20 11:42:09 localhost systemd[1]: Successfully loaded SELinux policy in 183.302ms.

Aug 20 11:44:25 localhost kernel: SELinux:  Initializing.
Aug 20 11:44:28 localhost systemd[1]: Successfully loaded SELinux policy in 169.039ms.

SELinuxモードとステータスの確認(再度)

`+ getenforce +`コマンドを実行して、現在のSELinuxモードを確認できます。

getenforce

システムが強制モードで実行されている場合、出力は次のようになります。

Enforcing

SELinuxが無効になっている場合、出力は異なります。

Disabled

`+ sestatus`コマンドを実行して、より良い画像を取得することもできます。

sestatus

SELinuxが無効になっていない場合、出力には現在のステータス、現在のモード、構成ファイルで定義されているモード、およびポリシータイプが表示されます。

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

SELinuxが無効になっている場合、出力には次のように表示されます。

SELinux status:        disabled

`+ setenforce `コマンドを使用して、強制モードと許容モードを一時的に切り替えることもできます。 (SELinuxが無効になっている場合、「 setenforce +」を実行できないことに注意してください。)

まず、CentOS 7システムでSELinuxモードを強制モードから許容モードに変更します。

setenforce permissive

`+ sestatus +`コマンドを実行すると、現在のモードが設定ファイルで定義されているモードと異なることが表示されます:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

*強制*に切り替えます:

setenforce enforcing

SELinuxポリシー

SELinuxのセキュリティエンジンの中心にあるのは_policy_です。 ポリシーとは、その名前が示すとおり、システム内のすべてのセキュリティとアクセス権を定義する一連のルールです。 そして、「すべて」と言うとき、ユーザー、ロール、プロセス、およびファイルを意味します。 ポリシーは、これらの各エンティティが相互にどのように関連するかを定義します。

いくつかの基本的な用語

ポリシーを理解するには、基本的な用語を学ぶ必要があります。 詳細については後で説明しますが、ここでは簡単に紹介します。 SELinuxポリシーは、ロールへのユーザーアクセス、ドメインへのロールアクセス、およびタイプへのドメインアクセスを定義します。

ユーザー

SELinuxには、あらかじめ構築されたユーザーのセットがあります。 通常のLinuxユーザーアカウントはすべて、1人以上のSELinuxユーザーにマップされます。

Linuxでは、ユーザーがプロセスを実行します。 これは、ユーザー* vi *がviエディターでドキュメントを開く(viプロセスを実行するjoのアカウントになる)か、httpdデーモンを実行するサービスアカウントと同じくらい簡単です。 SELinuxの世界では、プロセス(デーモンまたは実行中のプログラム)は_subject_と呼ばれます。

役割

_role_は、ユーザーとプロセスの間にあるゲートウェイのようなものです。 ロールは、そのプロセスにアクセスできるユーザーを定義します。 役割はグループのようなものではなく、フィルターのようなものです。ユーザーは、役割が許可する限り、いつでも役割を入力または引き受けることができます。 SELinuxポリシーのロールの定義は、どのユーザーがそのロールにアクセスできるかを定義します。 また、ロール自体がアクセスできるプロセスドメインも定義します。 SELinuxの一部が* Role Based Access Control *(RBAC)として知られているものを実装するため、役割が働き始めます。

件名とオブジェクト

_subject_はプロセスであり、_object_に影響を及ぼす可能性があります。

SELinuxの_object_は、実行可能なすべてのものです。 これには、ファイル、ディレクトリ、ポート、tcpソケット、カーソル、またはXサーバーがあります。 サブジェクトがオブジェクトに対して実行できるアクションは、サブジェクトの_permissions_です。

ドメインはサブジェクト用です

_domain_は、SELinuxサブジェクト(プロセス)を実行できるコンテキストです。 そのコンテキストは、サブジェクトのラッパーのようなものです。 プロセスにできることとできないことを伝えます。 たとえば、ドメインは、サブジェクトがアクセスできるファイル、ディレクトリ、リンク、デバイス、またはポートを定義します。

タイプはオブジェクト用

_type_は、ファイルの目的を規定するファイルのコンテキストのコンテキストです。 たとえば、ファイルのコンテキストによって、それがWebページであるか、ファイルが `+ / etc +`ディレクトリに属する​​か、ファイルの所有者が特定のSELinuxユーザーであることが示される場合があります。 ファイルのコンテキストは、SELinuxの用語では_type_と呼ばれます。

では、SELinuxポリシーとは何ですか?

SELinuxポリシーは、ロールへのユーザーアクセス、ドメインへのロールアクセス、およびタイプへのドメインアクセスを定義します。 最初に、ユーザーはロールの入力を許可され、次にロールがドメインへのアクセスを許可される必要があります。 ドメインは、特定の種類のファイルのみにアクセスするように制限されています。

ポリシー自体は、まあまあのユーザーはまあまあのロールのみを引き受けることができ、それらのロールはまあまあのドメインのみにアクセスすることを許可されるというルールの束です。 ドメインは順番にファイルにのみアクセスできます。 次の図は、概念を示しています。

image:https://assets.digitalocean.com/articles/SELinuxCentOS7/1.jpg [SELinuxユーザー、ロール、ドメイン、およびファイル]

用語のヒント:特定のドメイン内で実行されているプロセスが特定の種類のオブジェクトに対して特定の操作のみを実行できる最後の部分は、Type Enforcement(TE)と呼ばれます。

ポリシーのトピックに戻ると、SELinuxポリシーの実装も通常、デフォルトで「ターゲット」になっています。 前に見たSELinux構成ファイルを覚えている場合、SELINUXTYPEディレクティブは `+ targeted +`に設定されます。 つまり、デフォルトでは、SELinuxはシステム内の特定のプロセスのみを制限します(つまり、 特定のプロセスのみが対象となります)。 対象外のドメインは、制限のないドメインで実行されます。

別の方法は、ポリシーで承認されない限り、すべてのアクセスが拒否されるデフォルト拒否モデルです。 これは非常に安全な実装になりますが、これはまた、開発者がすべての可能なオブジェクトに対してすべてのプロセスが必要とする可能性のあるあらゆる許可を予測する必要があることを意味します。 デフォルトの動作では、SELinuxは特定のプロセスのみに関係します。

  • SELinuxポリシーの動作*

SELinuxポリシーは、従来のDACセキュリティを置き換えるものではありません。 DACルールがファイルへのユーザーアクセスを禁止している場合、最初の防衛線でアクセスが既にブロックされているため、SELinuxポリシールールは評価されません。 SELinuxのセキュリティに関する決定事項が影響を及ぼします_after_ DACセキュリティが評価されました。

SELinux対応システムが起動すると、ポリシーがメモリにロードされます。 SELinuxポリシーは、ブート時にロードされるカーネルモジュールによく似たモジュラー形式で提供されます。 また、カーネルモジュールと同様に、実行時にメモリに動的に追加および削除できます。 SELinuxが使用する_policy store_は、ロードされたモジュールを追跡します。 `+ sestatus `コマンドはポリシーストア名を表示します。 ` semodule -l +`コマンドは、現在メモリにロードされているSELinuxポリシーモジュールを一覧表示します。

これを理解するために、 `+ semodule +`コマンドを実行しましょう:

semodule -l | less

出力は次のようになります。

abrt    1.2.0
accountsd       1.0.6
acct    1.5.1
afs     1.8.2
aiccu   1.0.2
aide    1.6.1
ajaxterm        1.0.0
alsa    1.11.4
amanda  1.14.2
amtu    1.2.3
anaconda        1.6.1
antivirus       1.0.0
apache  2.4.0
...
...

`+ semodule +`は、SELinuxポリシーモジュールのインストール、削除、リロード、アップグレード、有効化、無効化など、他の多くのタスクに使用できます。

おそらく、モジュールファイルの場所を知りたいと思うでしょう。 最新のディストリビューションのほとんどには、SELinuxパッケージの一部としてモジュールのバイナリバージョンが含まれています。 ポリシーファイルの拡張子は.ppです。 CentOS 7の場合、次のコマンドを実行できます。

ls -l /etc/selinux/targeted/modules/active/modules/

リストには、拡張子が「+ .pp +」のファイルがいくつか表示されます。 よく見ると、それらは異なるアプリケーションに関連しています:

...
-rw-r--r--. 1 root root 10692 Aug 20 11:41 anaconda.pp
-rw-r--r--. 1 root root 11680 Aug 20 11:41 antivirus.pp
-rw-r--r--. 1 root root 24190 Aug 20 11:41 apache.pp
-rw-r--r--. 1 root root 11043 Aug 20 11:41 apcupsd.pp
...

しかし、 `+ .pp +`ファイルは人間が読むことはできません。

SELinuxのモジュール化の仕組みは、システムの起動時に、ポリシーモジュールが「アクティブポリシー」と呼ばれるものに結合されることです。 次に、このポリシーがメモリにロードされます。 この読み込まれたポリシーの結合されたバイナリバージョンは、 `+ / etc / selinux / targeted / policy +`ディレクトリの下にあります。

ls -l /etc/selinux/targeted/policy/

アクティブなポリシーが表示されます。

total 3428
-rw-r--r--. 1 root root 3510001 Aug 20 11:41 policy.29

SELinuxブール設定の変更

ポリシーモジュールファイルを読むことはできませんが、その設定を調整する簡単な方法があります。 これは、SELinux _booleans_を介して行われます。

それがどのように機能するかを見るために、 `+ semanage boolean -l +`コマンドを実行しましょう。

semanage boolean -l | less

これは、オンまたはオフにできるさまざまなスイッチ、その機能、および現在のステータスを示しています。

ftp_home_dir                   (off  ,  off)  Allow ftp to home dir
smartmon_3ware                 (off  ,  off)  Allow smartmon to 3ware
mpd_enable_homedirs            (off  ,  off)  Allow mpd to enable homedirs
xdm_sysadm_login               (off  ,  off)  Allow xdm to sysadm login
xen_use_nfs                    (off  ,  off)  Allow xen to use nfs
mozilla_read_content           (off  ,  off)  Allow mozilla to read content
ssh_chroot_rw_homedirs         (off  ,  off)  Allow ssh to chroot rw homedirs
mount_anyfile                  (on   ,   on)  Allow mount to anyfile
...
...

最初のオプションでは、FTPデーモンがユーザーのホームディレクトリにアクセスできます。 現在、設定はオフになっています。

設定を変更するには、 `+ setsebool +`コマンドを使用できます。 例として、匿名FTP書き込みアクセスを考えてみましょう。

getsebool ftpd_anon_write

これは、現在スイッチがオフになっていることを示しています。

ftpd_anon_write --> off

次に、ブール値を変更して有効にします。

setsebool ftpd_anon_write on

値を再度確認すると、変更が表示されます。

ftpd_anon_write --> on

変更されたブール値は永続的ではありません。 再起動後に元の値に戻ります。 永続的なものにするために、 `+ setsebool +`コマンドで-Pスイッチを使用できます。

結論

このチュートリアルの最初の部分では、SELinuxに関するいくつかの基本的な概念を理解しようとしました。 SELinuxがシステムを保護する方法、有効にする方法、実行できるモードを確認しました。 SELinuxポリシーのトピックにも触れました。 次に、https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-2-files-and-processes [SELinuxを使用してアクセスを制限する方法を学びますファイルとプロセスへ]。