第3章 制限のあるユーザーおよび制限のないユーザーの管理

以下のセクションでは、Linux ユーザーの SELinux ユーザーへのマッピング、基本的な制限のあるユーザードメイン、新しいユーザーの SELinux ユーザーへのマッピングを説明します。

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

各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは SELinux ユーザーの制限を継承できます。

システムで SELinux ユーザーマッピングを表示するには、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       *

Red Hat Enterprise Linux では、Linux ユーザーはデフォルトで SELinux の default ログインにマッピングされ、SELinux unconfined_u ユーザーにマッピングされます。以下の行は、デフォルトのマッピングを定義します。

__default__          unconfined_u         s0-s0:c0.c1023       *

制限のある Linux ユーザー、および制限のない Linux ユーザーは、実行可能なメモリーチェックおよび書き込み可能なメモリーチェックに依存し、また MCS または MLS によっても制限されます。

利用可能な SELinux ユーザーを一覧表示するには、以下のコマンドを実行します。

$ seinfo -u
Users: 8
   guest_u
   root
   staff_u
   sysadm_u
   system_u
   unconfined_u
   user_u
   xguest_u

seinfo コマンドは、setools-console パッケージにより提供されることに注意してください。デフォルトではインストールされません。

unconfined_t ドメインから自身の制限のあるドメインに移行できるものとして SELinux ポリシーが定義するアプリケーションを実行すると、制限のない Linux ユーザーは制限のあるドメインの制限を受けます。このセキュリティー上の利点は、Linux ユーザーが制限なしで実行している場合でも、アプリケーションは制限されたままになります。したがって、アプリケーションにおける不具合の悪用はポリシーによって制限できます。

同様に、これらのチェックを制限のあるユーザーに適用できます。制限のある各ユーザーは、制限のあるユーザードメインによって制限されます。SELinux ポリシーは、制限のあるユーザードメインから自身のターゲット制限のあるドメインへの移行を定義することもできます。このような場合、制限のあるユーザーはそのターゲットの制限のあるドメインの制限を受けます。主な点として、特別な権限は、ロールに応じて制限のあるユーザーに関連付けられる点が挙げられます。

3.2. SELinux ユーザー機能

以下の表は、Red Hat Enterprise Linux における Linux ユーザーの基本的な制限のあるドメインの例です。

表3.1 SELinux ユーザー機能

ユーザーロールドメインX Window Systemsu または 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_t ドメイン、user_t ドメイン、guest_t ドメイン、および xguest_t ドメインの Linux ユーザーは、ホームディレクトリーと /tmp でアプリケーションを実行できます。

    ユーザーのパーミッションを継承するアプリケーションの実行を防ぐには、guest_exec_content および xguest_exec_content ブール値を off に設定します。これにより、不具合のあるアプリケーションや悪意のあるアプリケーションがユーザーのファイルを変更できなくなります。

  • xguest_t ドメインの Linux ユーザーにアクセスできる唯一のネットワークアクセスは、Web ページに接続する Firefox です。
  • sysadm_u ユーザーは、SSH を使用して直接ログインできません。sysadm_u の SSH ログインを有効にするには、ssh_sysadm_login ブール値を on に設定します。

    # setsebool -P ssh_sysadm_login on

system_u は、システムプロセスおよびオブジェクトに対する特別なユーザー ID であることに注意してください。Linux ユーザーに関連付けることはできません。また、unconfined_u および root は制限のないユーザーです。このような理由により、SELinux ユーザー機能の以前の表には含まれていません。

上記の SELinux ユーザーとともに、semanage user コマンドを使用して、これらのユーザーにマップできる特別なロールがあります。これらのロールは、SELinux でユーザーに許可するものを決定します。

  • webadm_r は、Apache HTTP Server に関連する SELinux タイプの処理のみが可能です。
  • dm_r は、MariaDB データベースおよび PostgreSQL データベース管理システムに関連する SELinux タイプの処理のみが可能です。
  • logadm_r は、syslog および auditlog プロセスに関連する SELinux タイプの処理のみが可能です。
  • secadm_r は SELinux の処理のみが可能です。
  • auditadm_r は、Audit サブシステムに関連するプロセスのみを管理できます。

利用可能なロールの一覧を表示するには、seinfo -r コマンドを実行します。

seinfo -r
Roles: 14
   auditadm_r
   dbadm_r
   guest_r
   logadm_r
   nx_server_r
   object_r
   secadm_r
   staff_r
   sysadm_r
   system_r
   unconfined_r
   user_r
   webadm_r
   xguest_r

seinfo コマンドは、setools-console パッケージにより提供されることに注意してください。デフォルトではインストールされません。

関連情報

  • 詳細は、man ページの seinfo(1)semanage-login(8)、および xguest_selinux(8) を参照してください。

3.3. SELinux の unconfined_u ユーザーに自動的にマッピングされた新規ユーザーの追加

以下の手順では、新しい Linux ユーザーをシステムに追加する方法を説明します。ユーザーは自動的に SELinux unconfined_u ユーザーにマッピングされます。

前提条件

  • root ユーザーは、Red Hat Enterprise Linux でデフォルトで実行するため、制限なしで実行されています。

手順

  1. 以下のコマンドを実行して example.user という名前の新規 Linux ユーザーを作成します。

    useradd example.user
  2. Linux の example.user ユーザーにパスワードを割り当てるには、次のコマンドを実行します。

    passwd example.user
    Changing password for user example.user.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
  3. 現在のセッションからログアウトします。
  4. Linux の example.user ユーザーとしてログインします。ログインすると、PAM モジュール pam_selinux は Linux ユーザーを SELinux ユーザー (この場合は unconfined_u) に自動的にマッピングし、作成された SELinux コンテキストを設定します。Linux ユーザーのシェルはこのコンテキストで起動します。

検証手順

  1. example.user ユーザーとしてログインしたら、Linux ユーザーのコンテキストを確認します。

    $ id -Z
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

関連情報

  • 詳細は、man ページの pam_selinux(8) を参照してください。

3.4. 新規ユーザーを SELinux で制限されたユーザーとして追加

新規 SELinux が限定したユーザーをシステムに追加するには、以下の手順に従います。この手順では、ユーザーアカウントを作成するコマンドを使用して、ユーザーを SELinux の staff_u ユーザー権限にマッピングします。

前提条件

  • root ユーザーは、Red Hat Enterprise Linux でデフォルトで実行するため、制限なしで実行されています。

手順

  1. 以下のコマンドを実行して example.user という名前の新規 Linux ユーザーを作成し、SELinux staff_u ユーザーにマップします。

    useradd -Z staff_u example.user
  2. Linux の example.user ユーザーにパスワードを割り当てるには、次のコマンドを実行します。

    passwd example.user
    Changing password for user example.user.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
  3. 現在のセッションからログアウトします。
  4. Linux の example.user ユーザーとしてログインします。ユーザーのシェルは staff_u コンテキストで起動します。

検証手順

  1. example.user ユーザーとしてログインしたら、Linux ユーザーのコンテキストを確認します。

    $ id -Z
    uid=1000(example.user) gid=1000(example.user) groups=1000(example.user) context=staff_u:staff_r:staff_t:s0-s0:c0.c1023

関連情報

  • 詳細は、man ページの pam_selinux(8) を参照してください。

3.5. SELinux ユーザーを制限するためのシステムの設定

デフォルトでは、管理者権限を持つユーザーを含め、Red Hat Enterprise Linux のすべての Linux ユーザーは、制限のない SELinux ユーザー unconfined_u にマッピングされます。SELinux の制限のあるユーザーにユーザーを割り当てることで、システムのセキュリティーを強化できます。これは、「V-71971 Security Technical Implementation Guide」に準拠するのに役立ちます。制限のあるユーザーおよび制限のないユーザーの詳細は、「制限のあるユーザーおよび制限のないユーザーの管理」を参照してください。

3.5.1. 一般ユーザーの設定

SELinux ユーザー user_u にマッピングすることで、システムのすべての一般ユーザーを制限できます。

手順

  1. SELinux ログインレコードの一覧を表示します。この一覧には、SELinux ユーザーへの 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       *
  2. 明示的なマッピングのないすべてのユーザーを表す __default__ ユーザーを、SELinux ユーザー user_u にマッピングします。

    # semanage login -m -s user_u -r s0 __default__

検証手順

  1. _default__ ユーザーが、SELinux ユーザー user_u にマッピングされていることを確認します。

    # semanage login -l
    
    Login Name    SELinux User   MLS/MCS Range    Service
    
    __default__   user_u         s0               *
    root          unconfined_u   s0-s0:c0.c1023   *
  2. 新規ユーザーのプロセスが SELinux コンテキスト user_u:user_r:user_t:s0 で実行されることを確認します。

    1. 新しいユーザーを作成します。

      # adduser example.user
    2. example.user のパスワードを定義します。

      # passwd example.user
    3. root としてログアウトし、新規ユーザーとしてログインします。
    4. ユーザーの ID のセキュリティーコンテキストを表示します。

      [example.user@localhost ~]$ id -Z
      user_u:user_r:user_t:s0
    5. ユーザーの現在のプロセスのセキュリティーコンテキストを表示します。

      [example.user@localhost ~]$ ps axZ
      LABEL                           PID TTY      STAT   TIME COMMAND
      -                                 1 ?        Ss     0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
      -                              3729 ?        S      0:00 (sd-pam)
      user_u:user_r:user_t:s0        3907 ?        Ss     0:00 /usr/lib/systemd/systemd --user
      -                              3911 ?        S      0:00 (sd-pam)
      user_u:user_r:user_t:s0        3918 ?        S      0:00 sshd: example.user@pts/0
      user_u:user_r:user_t:s0        3922 pts/0    Ss     0:00 -bash
      user_u:user_r:user_dbusd_t:s0  3969 ?        Ssl    0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
      user_u:user_r:user_t:s0        3971 pts/0    R+     0:00 ps axZ

3.5.2. 管理者ユーザーの設定

以下の方法のいずれかを使用して、管理者ユーザーを制限できます。

3.5.2.1. sysadm_u へのマッピングによる管理者の制約

SELinux ユーザー sysadm_u に直接マッピングすることで、管理者権限を持つユーザーを制限できます。ユーザーがログインすると、セッションは SELinux コンテキスト sysadm_u:sysadm_r:sysadm_t で実行されます。

前提条件

  • root ユーザーは制限なしで実行します。これは、Red Hat Enterprise Linux のデフォルトです。

手順

  1. 必要に応じて、sysadm_u ユーザーが SSH を使用してシステムに接続できるようにするには、次のコマンドを実行します。

    # setsebool -P ssh_sysadm_login on
  2. 新しいユーザーを作成し、そのユーザーを wheel ユーザーグループに追加し、そのユーザーを SELinux ユーザー sysadm_u にマッピングします。

    # adduser -G wheel -Z sysadm_u example.user
  3. 必要に応じて、既存のユーザーを SELinux ユーザー sysadm_u にマッピングし、そのユーザーを wheel ユーザーグループに追加します。

    # usermod -G wheel -Z sysadm_u example.user

検証手順

  1. example.user が、SELinux ユーザー sysadm_u にマッピングされていることを確認します。

    # semanage login -l | grep example.user
    example.user     sysadm_u    s0-s0:c0.c1023   *
  2. SSH などを使用して example.user としてログインし、ユーザーのセキュリティーコンテキストを表示します。

    [example.user@localhost ~]$ id -Z
    sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
  3. root ユーザーに切り替えます。

    $ sudo -i
    [sudo] password for example.user:
  4. セキュリティーコンテキストが変更されていないことを確認します。

    # id -Z
    sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
  5. sshd サービスを再起動するなど、管理タスクを実行します。

    # systemctl restart sshd

    出力がない場合は、コマンドが正常に完了します。

    コマンドが正常に完了しない場合は、以下のメッセージが表示されます。

    Failed to restart sshd.service: Access denied
    See system logs and 'systemctl status sshd.service' for details.

3.5.2.2. sudo および sysadm_r ロールを使用した管理者の制約

管理者権限を持つ特定のユーザーを SELinux ユーザー staff_u にマッピングし、ユーザーが SELinux 管理者ロール sysadm_r を取得できるように sudo を設定できます。このロールにより、SELinux 拒否なしで管理タスクを実行できます。ユーザーがログインすると、セッションは、SELinux コンテキスト staff_u:staff_r:staff_t で実行されますが、sudo を使用してコマンドを入力すると、セッションは staff_u:sysadm_r:sysadm_t コンテキストに変わります。

前提条件

  • root ユーザーは制限なしで実行します。これは、Red Hat Enterprise Linux のデフォルトです。

手順

  1. 新規ユーザーを作成し、そのユーザーを wheel ユーザーグループに追加し、そのユーザーを SELinux ユーザー staff_u にマッピングします。

    # adduser -G wheel -Z staff_u example.user
  2. 必要に応じて、既存のユーザーを SELinux ユーザー staff_u にマッピングし、そのユーザーを wheel ユーザーグループに追加します。

    # usermod -G wheel -Z staff_u example.user
  3. example.user が SELinux 管理者ロールを取得できるようにするには、/etc/sudoers.d/ ディレクトリーに新規ファイルを作成します。以下に例を示します。

    # visudo -f /etc/sudoers.d/example.user
  4. 以下の行を新規ファイルに追加します。

    example.user  ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL

検証手順

  1. example.user が SELinux ユーザー staff_u にマッピングされていることを確認します。

    # semanage login -l | grep example.user
    example.user     staff_u    s0-s0:c0.c1023   *
  2. SSH などを使用して example.user としてログインし、root ユーザーに切り替えます。

    [example.user@localhost ~]$ sudo -i
    [sudo] password for example.user:
  3. root セキュリティーコンテキストを表示します。

    # id -Z
    staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
  4. sshd サービスを再起動するなど、管理タスクを実行します。

    # systemctl restart sshd

    出力がない場合は、コマンドが正常に完了します。

    コマンドが正常に完了しない場合は、以下のメッセージが表示されます。

    Failed to restart sshd.service: Access denied
    See system logs and 'systemctl status sshd.service' for details.

3.5.3. 関連情報

  • 追加のオプションは、ナレッジベースアーティクル「「How to set up a system with SELinux confined users」を参照してください。
  • 詳細は、man ページの user_selinux(8)staff_selinux(8)、および sysadm_selinux(8) を参照してください。

3.6. 関連情報

  • 詳細は、man ページの unconfined_selinux(8) を参照してください。

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