SELinux 入門

SELinux 入門

カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセキュリティ システムが導入されました。このシステムは、米国国家安全保障局 (NSA) によって提供された Security Enhanced Linux (SELinux) です。Linux カーネル サブシステムに堅牢な強制アクセス制御アーキテクチャを導入します。

これまで Linux を使い続けて SELinux を無効にしたり無視したりしてきた方にとって、この記事は役に立つでしょう。Linux デスクトップまたはサーバーの下位に存在し、権限を制限し、脆弱なプログラムやデーモンが損害を引き起こす可能性を排除する SELinux システムの概要を説明します。

始める前に、SELinux は主に Red Hat Linux とその派生ディストリビューションで利用できるツールであることを知っておく必要があります。同様に、Ubuntu と SUSE (およびその派生製品) は AppArmor を使用します。 SELinux と AppArmor は大きく異なります。 SELinux は SUSE、openSUSE、Ubuntu などにインストールできますが、Linux に非常に精通していない限り、非常に困難です。

それでは、SELinux について紹介したいと思います。

DAC 対 MAC

Linux における従来のアクセス制御標準は、任意アクセス制御 (DAC) です。この形式では、ソフトウェアまたはデーモンはユーザー ID (UID) またはセット所有者ユーザー ID (SUID) として実行され、オブジェクト (ファイル、ソケット、およびその他のプロセス) に対するそのユーザーの権限を持ちます。これにより、悪意のあるコードが特定の権限で実行され、重要なサブシステムにアクセスすることが容易になります。

一方、強制アクセス制御 (MAC) は、機密性と整合性に基づいて情報の分離を強制し、損害を制限します。この制限ユニットは、従来の Linux セキュリティ メカニズムとは独立して動作し、スーパーユーザーの概念はありません。

SELinuxの仕組み

SELinux に関連する概念について考えてみましょう。

  • 科目
  • ターゲットオブジェクト
  • ポリシー
  • モード

サブジェクト (プログラムなど) がターゲット オブジェクト (ファイルなど) にアクセスしようとすると、カーネル内の SELinux セキュリティ サーバーがポリシー データベースからチェックを実行します。現在のモードに基づいて、SELinux セキュリティ サーバーが権限を付与すると、プリンシパルはターゲットにアクセスできます。 SELinux セキュリティ サーバーが権限を拒否した場合、拒否メッセージが /var/log/messages に記録されます。

比較的簡単そうに聞こえますね。実際のプロセスはより複雑ですが、紹介を簡略化するために重要な手順のみを記載します。

モデル

SELinux には 3 つのモード (ユーザーが設定可能) があります。これらのモードは、SELinux がプリンシパル要求に応答する方法を決定します。これらのモードは次のとおりです。

  • 強制 — SELinux ポリシーの強制、SELinux ポリシー ルールに基づいてターゲットへのアクセスを許可または拒否する
  • 許可 - SELinux ポリシーは強制されず、アクセスは実際には拒否されませんが、拒否情報はログに書き込まれます。
  • 無効 — SELinuxを完全に無効にする

図 1: getenforce コマンドは、SELinux が Enforcing 状態にあることを示します。

デフォルトでは、ほとんどのシステム上の SELinux は Enforcing に設定されています。システムが現在どのモードになっているかはどうすればわかりますか?これは、簡単なコマンド getenforce で確認できます。このコマンドの使い方は非常に簡単です (SELinux のモードを報告するだけなので)。このツールを使用するには、ターミナル ウィンドウを開いて getenforce コマンドを実行します。このコマンドは、Enforcing、Permissive、または Disabled を返します (上記の図 1 を参照)。

SELinux モードの設定は実際には非常に簡単です。設定するモードによって異なります。注意: SELinux を無効にすることは決して推奨されません。なぜ?これを実行すると、ディスク上のファイルに誤った権限ラベルが付けられる可能性があり、修正するには権限ラベルの再設定が必要になる場合があります。また、無効モードで起動されたシステムのモードを変更することはできません。最適なモードは、Enforcing または Permissive です。

SELinux モードは、コマンドラインまたは /etc/selinux/config ファイルから変更できます。コマンドラインからモードを設定するには、setenforce ツールを使用できます。強制モードを設定するには、次の手順を実行します。

  • ターミナルウィンドウを開く
  • suを実行し、管理者パスワードを入力します
  • setenforce 1を実行する
  • getenforceを実行して、モードが正しく設定されていることを確認します(図2)

図 2: SELinux モードを Enforcing に設定する。

モードを Permissive に設定するには、次の手順を実行します。

  • ターミナルウィンドウを開く
  • suを実行し、管理者パスワードを入力します
  • setenforce 0を実行する
  • getenforceを実行して、モードが正しく設定されていることを確認します(図3)

図 3: SELinux モードを Permissive に設定する。

注意: コマンドラインでモードを設定すると、SELinux 構成ファイルの設定が上書きされます。

SELinux コマンド ファイルでモードを設定する場合は、お気に入りのエディターでそのファイルを開き、次の行を見つけます。

SELINUX=許容

好みに応じてモードを設定し、ファイルを保存できます。

SELinux モードを変更する 3 番目の方法 (ブートローダー経由) もありますが、新しいユーザーにはこれをお勧めしません。

戦略タイプ

SELinux ポリシーには 2 種類あります。

  • 対象 — 対象となるネットワークプロセス(dhcpd、httpd、named、nscd、ntpd、portmap、snmpd、squid、syslogd)のみが保護されます。
  • 厳密 - すべてのプロセスに対する完全な SELinux 保護

/etc/selinux/config ファイルでポリシー タイプを変更できます。お気に入りのエディターでこのファイルを開き、次の行を見つけます。

SELINUXTYPE=ターゲット

ニーズに合わせてこのオプションをターゲットまたは厳格に変更します。

完全なSELinuxステータスを確認する

SELinux 対応システムの詳細なステータス レポートを取得するために使用できる便利な SELinux ツールがあります。このコマンドはターミナルで次のように実行されます:

セステータス -v

図 4 のような出力が表示されます。

図 4: sestatus -v コマンドの出力。

皮膚だけ

ご想像のとおり、私は SELinux についてはまだ表面的な部分しか触れていません。 SELinux は確かに複雑なシステムであり、その仕組みとデスクトップやサーバーでより適切に動作させる方法をよりしっかりと理解するには、より深い調査が必要です。トラブルシューティングとカスタム SELinux ポリシーの作成についてはまだ説明していません。

SELinux は、すべての Linux 管理者が知っておくべき強力なツールです。 SELinux について紹介したので、Linux.com に戻るか (このトピックに関する記事がさらに公開されています)、より詳細なガイドについては NSA SELinux ドキュメントを確認することを強くお勧めします。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • SELINUXの動作原理の詳細な説明
  • Linuxにおけるselinuxの基本設定チュートリアルの詳細な説明
  • Android の SELinux TE について簡単に説明します
  • Android Selinux の権限と問題の詳細な説明
  • CentOS 7 システムで SELinux が MongoDB の起動を妨げる問題の詳細な説明
  • SELinux により PHP が MySQL に異常接続する。MySQL サーバーに接続できない問題の解決方法
  • selinux(ファイアウォール)を無効にする方法
  • Linux での SELinux を理解する方法

<<:  Mac インストール mysqlclient プロセス分析

>>:  Navicat の MySQL へのリモート接続の実装手順の分析

推薦する

MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要

1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...

ウェブフロントエンド開発者が知っておくべき 9 つの実用的な CSS プロパティ

1. 角を丸くする今日の Web デザインは、常に最新の開発テクノロジーに追随しており、HTML5 ...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

JavaScript でプライベート変数を宣言する 2 つの方法

序文JavaScript は、キーワードを使用してプライベート変数を宣言できる他の言語とは異なります...

HTML入力ドロップダウンメニューを実装する方法

コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...

Zabbixは複数のmysqlプロセスの監視を実装します

1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...

H5 WeChatパブリックアカウント認証を実装するための簡単な手順

序文昨日、h5 WeChat認証の実装が必要なプロジェクトがありました。したがって、この機能を完了す...

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

MySQLのMERGEストレージエンジンの詳細な説明

MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時に...

クラウド CentOS で Docker リモート サービス リンクを有効にするための実装手順

ここでは、dockerがインストールされたcentosサーバーを紹介し、リモートリンクサービスを開始...

広告を閉じる効果を実現するJavascript

参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...

MySQLトリガートリガー例の詳細な説明

目次トリガーとは何かトリガーを作成する表は次のようになります。さらにいくつかの単語を挙げます。制限と...

CSSはリモコンのボタンを模倣する

注: このデモはミニプログラム環境でテストされており、他の h5 および pc Web ページにも適...

Angularの親子コンポーネント通信の詳細な説明

目次概要1. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...