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

各 Linux ユーザーは、SELinux ポリシーを使って SELinux ユーザーにマッピングされます。これにより、SELinux ユーザーに課された制限が Linux ユーザーに継承されます。root で semanage login -l を実行すると、この Linux ユーザーマッピングが表示されます。
~]# 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_selinux PAM モジュールが自動的にこの 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 ユーザーは、実行可能および書き込み可能なメモリーチェックに依存し、また 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 パッケージが提供することに注意してください。
unconfined_t ドメインから自身の制限のあるドメインへの移行が可能と SELinux ポリシーが定義しているアプリケーションを、制限のない Linux ユーザーが実行しても、この制限のない Linux ユーザーはまだその制限のあるドメインの制約に影響を受けます。ここでのセキュリティーの利点は、Linux ユーザーが制限なしで実行していてもアプリケーションには制限が残っているという点です。このため、アプリケーションの欠点が悪用されても、ポリシーで制限できます。
同様に、これらのチェックを制限のあるユーザーに適用することもできます。制限のある Linux ユーザーはそれぞれ、制限のあるユーザードメインで限定されます。SELinux ポリシーは、制限のあるユーザードメインから自身のターゲットの制限のあるドメインへの移行を定義することもできます。その場合は、制限のある Linux ユーザーはターゲットの制限のあるドメインの制約の影響を受けることになります。つまり、特別の権限は、そのロールにしたがって制限のあるユーザーに関連付けられるということです。下記の表では、Red Hat Enterprise Linux における Linux ユーザーの基本的な制限のあるドメインの例を示しています。

表3.1 SELinux ユーザーの権限

ユーザーロールドメインX Window Systemsu または sudoホームディレクトリーおよび /tmp (デフォルト) で実行ネットワーク
sysadm_usysadm_rsysadm_tyessu および sudoyesyes
staff_ustaff_rstaff_tyessudo のみyesyes
user_uuser_ruser_tyesnoyesyes
guest_uguest_rguest_tnonoyesno
xguest_uxguest_rxguest_tyesnoyesFirefox のみ
  • user_tguest_txguest_t ドメインの Linux ユーザーは、SELinux ポリシーが許可する場合に、決まったユーザー ID (setuid) アプリケーションしか実行できません (例、passwd)。これらのユーザーは susudo setuid アプリケーションを実行できないので、これらのアプリケーションを使って root になることができません。
  • sysadm_tstaff_tuser_txguest_t ドメイン内の Linux ユーザーは、X Window System と端末を使用してログインできます。
  • デフォルトでは、staff_t ドメイン、user_t ドメイン、guest_t ドメイン、および xguest_t ドメインの Linux ユーザーは、ホームディレクトリーおよび /tmp でアプリケーションを実行できます。ユーザーがアクセス権を継承するアプリケーションを、書き込みアクセス権のあるディレクトリーで実行できないようにするには、guest_exec_content および xguest_exec_content のブール値を off に設定します。これにより、欠陥のあるアプリケーションや悪意のあるアプリケーションがユーザーのファイルを変更するのを防ぐことができます。
    ユーザーがホームディレクトリーと /tmp でアプリケーションを実行するのを許可および阻止する方法は、「アプリケーションを実行するユーザーのためのブール値」を参照してください。
  • xguest_t ドメインの Linux ユーザーにある唯一のネットワークアクセスは、ウェブページに接続する Firefox です。
system_u は、システムプロセスおよびオブジェクトのための特別なユーザーアイデンティティーです。Linux ユーザーに関連付けないでください。また、unconfined_u および root は、拘束されていないユーザーです。これらの理由から、上述の、SELinux ユーザー機能の表には含まれていません。
すでに説明した SELinux ユーザーの他に、これらのユーザーにマッピング可能な特別ロールがあります。これらのロールは、SELinux がユーザーに許可するものを決定します。
  • webadm_r は、Apache HTTP サーバーに関連する 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 ユーザーの権限」にあるように、staff_u および sysadm_u の制限のある SELinux ユーザーのみがデフォルトで sudo の使用を許可されています。それらのユーザーが sudo を使ってコマンドを実行すると、ユーザーのロールは /etc/sudoers 設定ファイルか、ある場合は /etc/sudoers.d/ ディレクトリー内の各ファイルで指定されているルール基づいて変更することができます。
sudo についての詳細情報は、『Red Hat Enterprise Linux 7 システム管理者のガイド』の「権限の取得」の章を参照してください。

手順3.5 sudo 移行の設定

この手順では、sudo を設定して、新規作成の SELinux_user_u の制限のあるユーザーを default_role_t から administrator_r の管理者ロールに移行する方法を説明します。既存の SELinux ユーザーに対して制限のある管理者ロールを設定するには、最初の 2 ステップを省略してください。また、以下のコマンドは root ユーザーで実行する必要があることに注意してください。以下の手順のプレースホルダー (default_role_t または administrator_r 等) についてより深く理解するには、ステップ 6 の例を参照してください。
  1. 新規 SELinux ユーザーを作成し、そのユーザーに対してデフォルトの SELinux ロールと補助的な制限のある管理者ロールを指定します。
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
  2. デフォルトの SElinux ポリシーコンテキストファイルをセットアップします。たとえば、staff_u SELinux ユーザーと同じ SELinux ルールを用意するには、staff_u コンテキストファイルをコピーします。
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
  3. 新規作成の Linux ユーザーを既存の 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/sh " > /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
    sudo を実行すると、そのユーザーの SELinux コンテキストは /etc/sudoers.d/linux_user で指定されている補助的な SELinux ロールに変更されます。sudo-i オプションを使用すると、インタラクティブシェルが実行されます。
    ~]$ sudo -i
    ~]# id -Z
    SELinux_user_u:administrator_r:administrator_t:s0-s0:c0.c1023
    最初のステップで指定された例の SELinux_user_u ユーザーの場合、出力は以下のようになります。
    ~]$ id -Z
    confined_u:staff_r:staff_t:s0:c0.c1023
    ~]$ sudo -i
    ~]# id -Z
    confined_u:webadm_r:webadm_t:s0:c0.c1023
    以下の例では、デフォルトで割り当てられる staff_r ロールと、sudoconfined_u のロールを staff_r から webadm_r に変更するよう設定されている SELinux ユーザー confined_u を新規に作成します。
    ~]# 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) TYPE=webadm_t ROLE=webadm_r /bin/sh " > /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

このページには機械翻訳が使用されている場合があります (詳細はこちら)。