3.9. 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 コンテキストに変更されます。

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

前提条件

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

手順

  1. 新規または既存のユーザーを staff_u SELinux ユーザーにマッピングします。

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

      # adduser -G wheel -Z staff_u <example_user>
    2. 既存のユーザーをマッピングするには、ユーザーを Wheel ユーザーグループに追加し、そのユーザーを SELinux ユーザー Staff_u にマッピングします。

      # usermod -G wheel -Z staff_u <example_user>
  2. ユーザーのホームディレクトリーのコンテキストを復元します。

    # restorecon -R -F -v /home/<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.