Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

3.3. 制限のあるユーザーおよび制限のないユーザー

各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは SELinux ユーザーの制限を継承できます。この Linux ユーザーマッピングは、root で semanage login -l コマンドを実行して表示されます。
~]# semanage login -l

Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *
Red Hat Enterprise Linux では、Linux ユーザーはデフォルトで SELinux の __default__ ログインにマッピングされ、これは、SELinux unconfined_u ユーザーにマッピングされます。以下の行は、デフォルトのマッピングを定義します。
__default__               unconfined_u              s0-s0:c0.c1023
以下の手順では、新しい Linux ユーザーをシステムに追加し、そのユーザーを SELinux unconfined_u ユーザーにマッピングする方法を説明します。これは、デフォルトで Red Hat Enterprise Linux でそうであるように、root ユーザーが制限なしで実行されていることを前提としています。

手順3.4 新しい Linux ユーザーの SELinux unconfined_u ユーザーへのマッピング

  1. root で以下のコマンドを入力し、newuser という名前の Linux ユーザーを作成します。
    ~]# useradd newuser
  2. Linux newuser ユーザーにパスワードを割り当てるには、以下を実行します。root で以下のコマンドを実行します。
    ~]# passwd newuser
    Changing password for user newuser.
    New UNIX password: Enter a password
    Retype new UNIX password: Enter the same password again
    passwd: all authentication tokens updated successfully.
    
  3. 現在のセッションからログアウトし、Linux newuser ユーザーとしてログインします。ログインすると、PAM モジュール pam_selinux は Linux ユーザーを SELinux ユーザー (この場合は unconfined_u) に自動的にマッピングし、作成された SELinux コンテキストを設定します。Linux ユーザーのシェルはこのコンテキストで起動します。以下のコマンドを入力して、Linux ユーザーのコンテキストを表示します。
    [newuser@localhost ~]$ id -Z
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
    注記
    システムで newuser ユーザーが不要になった場合は、Linux newuser のセッションからログアウトし、アカウントにログインして root で userdel -r newuser コマンドを実行します。これにより、newuser が自分のホームディレクトリーとともに削除されます。
制限のある Linux ユーザー、および制限のない Linux ユーザーは、実行可能なメモリーチェックおよび書き込み可能なメモリーチェックに依存し、また MCS または MLS によっても制限されます。
利用可能な SELinux ユーザーを一覧表示するには、以下のコマンドを実行します。
~]$seinfo -u
Users: 8
   sysadm_u
   system_u
   xguest_u
   root
   guest_u
   staff_u
   user_u
   unconfined_u
seinfo コマンドは、setools-console パッケージにより提供されることに注意してください。これは、デフォルトではインストールされません。
制限のない Linux ユーザーが、unconfined_t ドメインから自身の制限のあるドメインに移行できるものとして SELinux ポリシーが定義するアプリケーションを実行すると、制限のない Linux ユーザーは制限のあるドメインの制限を引き続き受けます。このセキュリティー上の利点は、Linux ユーザーが制限なしで実行している場合でも、アプリケーションは制限されたままになります。したがって、アプリケーションにおける不具合の悪用はポリシーによって制限できます。
同様に、これらのチェックを制限のあるユーザーに適用できます。制限のある各 Linux ユーザーは、制限のあるユーザードメインによって制限されます。SELinux ポリシーは、制限のあるユーザードメインから自身のターゲット制限のあるドメインへの移行を定義することもできます。このような場合、制限のある Linux ユーザーは、その対象である制限のあるドメインの制限を受けます。主な点として、特別な権限は、ロールに応じて制限のあるユーザーに関連付けられる点が挙げられます。以下の表では、Red Hat Enterprise Linux で、Linux ユーザー向けの基本的な制限のあるドメインの例を確認できます。

表3.1 SELinux ユーザー機能

User ロール ドメイン X Window System su または sudo ホームディレクトリーおよび /tmp (デフォルト) での実行 ネットワーク
sysadm_u sysadm_r sysadm_t はい su および sudo はい はい
staff_u staff_r staff_t はい sudo のみ はい はい
user_u user_r user_t はい いいえ はい はい
guest_u guest_r guest_t いいえ いいえ はい いいえ
xguest_u xguest_r xguest_t はい いいえ はい Firefox のみ
  • user_t ドメイン、guest_t ドメイン、および xguest_t ドメイン内の Linux ユーザーは、SELinux ポリシーが許可した場合 (passwd など)、設定したユーザー ID (setuid) アプリケーションのみを実行できます。これらのユーザーは、su および sudo setuid アプリケーションを実行できないため、これらのアプリケーションを使用して root にすることはできません。
  • sysadm_t ドメイン、staff_t ドメイン、user_t ドメイン、および xguest_t ドメインの Linux ユーザーは、X Window System およびターミナルを使用してログインできます。
  • デフォルトで、staff_tuser_tguest_t、および xguest_t ドメインの Linux ユーザーは、ホームディレクトリーと /tmp でアプリケーションを実行できます。これらのユーザーが、ユーザーのパーミッションを継承するアプリケーションを実行できないようにするには、書き込みアクセス権のあるディレクトリーで guest_exec_content および xguest_exec_content ブール値を off に設定します。これにより、不具合のあるアプリケーションや悪意のあるアプリケーションがユーザーのファイルを変更できなくなります。
    ユーザーがホームディレクトリーおよび /tmp でアプリケーションを実行するのを許可および禁止する方法については、「アプリケーションを実行するユーザーに対するブール値」 を参照してください。
  • xguest_t ドメインの Linux ユーザーにアクセスできる唯一のネットワークアクセスは、Web ページに接続する Firefox です。
system_u は、システムプロセスおよびオブジェクトの特別なユーザー ID であることに注意してください。これは、Linux ユーザーに関連付けることはできません。また、unconfined_u および root は制限のないユーザーです。このような理由により、これらのユーザーは、前述の SELinux ユーザー機能の表には含まれていません。
前述の SELinux ユーザーとともに、これらのユーザーにマップできる特別なロールがあります。これらのロールは、SELinux でユーザーに許可するものを決定します。
  • webadm_r は、Apache HTTP Server に関連する SELinux タイプの処理のみが可能です。詳細は、「タイプ」 を参照してください。
  • dbadm_r は、MariaDB データベースおよび PostgreSQL データベース管理システムに関連する SELinux タイプの処理のみが可能です。詳細は、「タイプ」 および 「タイプ」 を参照してください。
  • logadm_r は、syslog および auditlog プロセスに関連する SELinux タイプの処理のみが可能です。
  • secadm_r は SELinux の処理のみが可能です。
  • auditadm_r は、audit サブシステムに関連するプロセスのみを管理できます。
利用可能なロールの一覧を表示するには、以下のコマンドを実行します。
~]$ seinfo -r
前述したように、seinfo コマンドは、setools-console パッケージにより提供されます。これは、デフォルトではインストールされません。

3.3.1. sudo 移行および SELinux ロール

特定のケースでは、制限のあるユーザーが root 権限を必要とする管理タスクを実行する必要があります。これを実行するには、このような制限のあるユーザーが、sudo コマンドを使用して、制限のある管理者 SELinux ロールを取得する必要があります。sudo コマンドは、信頼できるユーザーに管理アクセスを付与するために使用されます。信頼されるユーザーが、管理コマンドの前に sudo を付けると、この ユーザー自身 のパスワードが要求されます。ユーザーが認証され、コマンドが許可されると、管理コマンドは root 権限で実行されているかのように実行されます。
表3.1「SELinux ユーザー機能」 に示されているように、sudo をデフォルトで使用できるのは、staff_u および sysadm_u SELinux の制限のあるユーザーのみになります。このようなユーザーが sudo でコマンドを実行すると、/etc/sudoers 設定ファイルで指定されたルールに基づいて、または、/etc/sudoers.d/ ディレクトリーのそれぞれのファイル (このようなファイルが存在する場合) に基づいて、ロールを変更することができます。
sudo の詳細は、Red Hat Enterprise Linux 7 System Administrator's Guide の 『Gaining Privileges』 セクションを参照してください。

手順3.5 sudo 移行の設定

この手順では、新たに作成された SELinux_user_u の制限のあるユーザーを default_role_r から administrator_r 管理者ロールに移行するように sudo を設定する方法を説明します。
注記
既存の SELinux ユーザーに制限のある管理者ロールを設定するには、最初の 2 つの手順を省略します。
  1. 新しい SELinux ユーザーを作成し、このユーザーにデフォルトの SELinux ロールと、補助制限のある管理者ロールを指定します。
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
  2. デフォルトの SElinux ポリシーコンテキストファイルを設定します。たとえば、SELinux ユーザー staff_u と同じ SELinux ルールを設定するには、staff_u コンテキストファイルをコピーします。
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
  3. 新たに作成した SELinux ユーザーを既存の Linux ユーザーにマッピングします。
    semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
  4. /etc/sudoers.d/ ディレクトリーに Linux ユーザーと同じ名前で新しい設定ファイルを作成し、以下の文字列を追加します。
    ~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
  5. restorecon ユーティリティーを使用して、linux_user ホームディレクトリーのラベルを変更します。
    ~]# restorecon -FR -v /home/linux_user
  6. 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
    ~]$ id -Z
    SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023
  7. sudo を実行して、ユーザーの SELinux コンテキストを、/etc/sudoers.d/linux_user で指定した補助 SELinux ロールに変更します。sudo で使用する -i オプションは、対話式シェルが実行される原因となっていました。
    ~]$ sudo -i
    ~]# id -Z
    SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023
default_role_radministrator_r などのプレースホルダーをさらに理解するには、以下の例を参照してください。

例3.1 sudo 移行の設定

この例では、デフォルトで割り当てられたロール staff_r と、confined_u のロールを staff_r から webadm_r に変更するように設定された sudo を使用して、新しい SELinux ユーザー confined_u を作成します。
  • root ユーザーとして、sysadm_r ロールまたは unconfined_r ロールで以下のコマンドをすべて入力します。
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u
    ~]# semanage login -a -s confined_u -rs0:c0.c1023 linux_user
    ~]# restorecon -FR -v /home/linux_user
    ~]# echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_user
  • 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
    ~]$ id -Z
    confined_u:staff_r:staff_t:s0:c0.c1023
    ~]$ sudo -i
    ~]# id -Z
    confined_u:webadm_r:webadm_t:s0:c0.c1023