序章

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

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

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

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

なぜSELinuxなのか

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

SELinuxは、 MAC (強制アクセス制御)として知られているものを実装します。 これは、すべてのLinuxディストリビューションにすでに存在する DAC (随意アクセス制御)の上に実装されています。

DACを理解するために、まず、従来のLinuxファイルセキュリティがどのように機能するかを考えてみましょう。

従来のセキュリティモデルでは、ユーザー、グループ、その他(u、g、o)の3つのエンティティがあり、ファイルまたはディレクトリに対して読み取り、書き込み、実行(r、w、x)のアクセス許可を組み合わせることができます。 ユーザー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サーバーの両方を実行するテストサーバーを構築します。 最小限のパッケージがインストールされたCentOS7のベアインストールから開始し、そのサーバーに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 を押すと、ApacheWebサーバーデーモンがインストールされます。

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)
...
...

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

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では多くのパッケージが使用されています。 一部はデフォルトでインストールされます。 RedHatベースのディストリビューションのリストは次のとおりです。

  • policycoreutils (SELinuxを管理するためのユーティリティを提供します)
  • policycoreutils-python (SELinuxを管理するためのユーティリティを提供します)
  • selinux-policy (SELinuxリファレンスポリシーを提供します)
  • selinux-policy-targeted (SELinuxターゲットポリシーを提供します)
  • libselinux-utils (SELinuxを管理するためのいくつかのツールを提供します)
  • setroubleshoot-server (監査ログメッセージを解読するためのツールを提供します)
  • setools (監査ログの監視、ポリシーのクエリ、およびファイルコンテキスト管理のためのツールを提供します)
  • setools-console (監査ログの監視、ポリシーのクエリ、およびファイルコンテキスト管理のためのツールを提供します)
  • mcstrans (さまざまなレベルをわかりやすい形式に変換するためのツール)

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

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に設定する必要があります。 すべてのファイルに適切なラベルが付けられていない場合、制限されたドメインで実行されているプロセスは、正しいコンテキストでファイルにアクセスできないために失敗する可能性があります。 これにより、起動プロセスが失敗したり、エラーで開始したりする可能性があります。 チュートリアルの後半で、コンテキストおよびドメインを紹介します。

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

reboot

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

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

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番目のフェーズでは、構成ファイルを編集して、SELINUXディレクティブをpermissiveからenforcingに変更する必要があります。 /etc/sysconfig/selinux ファイル:

...
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 指図。 (実行できないことに注意してください setenforce SELinuxが無効になっている場合。)

まず、CentOS7システムで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のセキュリティエンジンの中心は、そのポリシーです。 ポリシーは、その名前が意味するものです。システム内のすべてのセキュリティとアクセス権を定義する一連のルールです。 また、すべてとは、ユーザー、役割、プロセス、およびファイルを意味します。 ポリシーは、これらの各エンティティが互いにどのように関連しているかを定義します。

いくつかの基本的な用語

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

ユーザー

SELinuxには、ビルド済みのユーザーのセットがあります。 すべての通常のLinuxユーザーアカウントは、1人以上のSELinuxユーザーにマップされます。

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

役割

role は、ユーザーとプロセスの間に位置するゲートウェイのようなものです。 ロールは、どのユーザーがそのプロセスにアクセスできるかを定義します。 役割はグループのようなものではなく、フィルターのようなものです。ユーザーは、役割が許可されていれば、いつでも役割を入力または引き受けることができます。 SELinuxポリシーでのロールの定義は、どのユーザーがそのロールにアクセスできるかを定義します。 また、ロール自体がアクセスできるプロセスドメインも定義します。 SELinuxの一部がロールベースのアクセス制御(RBAC)として知られているものを実装しているため、役割が機能します。

主題と目的

サブジェクトはプロセスであり、オブジェクトに影響を与える可能性があります。

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

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

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

タイプはオブジェクト用です

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

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

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

ポリシー自体は、まあまあのユーザーはまあまあの役割のみを引き受けることができ、それらの役割はまあまあのドメインにのみアクセスすることを許可されるという一連のルールです。 ドメインは、まあまあのファイルタイプにしかアクセスできません。 次の画像は概念を示しています。

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

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

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

SELinuxポリシーの動作

SELinuxポリシーは、従来のDACセキュリティに代わるものではありません。 DACルールがファイルへのユーザーアクセスを禁止している場合、防御の最前線がすでにアクセスをブロックしているため、SELinuxポリシールールは評価されません。 SELinuxのセキュリティに関する決定は、DACのセキュリティが評価された後に実行されます。

SELinux対応システムが起動すると、ポリシーがメモリにロードされます。 SELinuxポリシーは、ブート時にロードされるカーネルモジュールと同様に、モジュラー形式で提供されます。 また、カーネルモジュールと同様に、実行時に動的にメモリに追加したり、メモリから削除したりできます。 SELinuxで使用されるポリシーストアは、ロードされたモジュールを追跡します。 The sestatus コマンドはポリシーストア名を表示します。 The 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
...

The .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

変更されたブール値は永続的ではありません。 再起動後、元の値に戻ります。 物事を永続的にするために、-Pスイッチを setsebool 指図。

結論

このチュートリアルの最初の部分では、SELinuxに関するいくつかの基本的な概念を理解しようとしました。 SELinuxがシステムを保護する方法、システムを有効にする方法、システムを実行できるモードについて見てきました。 SELinuxポリシーのトピックにも触れました。 次に、SELinuxを使用してファイルとプロセスへのアクセスを制限する方法を学習します。