6.8. Separating system administration from security administration in MLS

デフォルトでは、sysadm_r ロールには secadm_r ロールの権限があります。つまり、sysadm_r ロールを持つユーザーは、セキュリティーポリシーを管理できることを意味します。セキュリティー認証の制御を強化する必要がある場合は、Linux ユーザーを secadm_r ロールに割り当て、SELinux ポリシーの sysadm_secadm モジュールを無効にすることで、システム管理をセキュリティー管理から分離することができます。

前提条件

  • SELinux ポリシーが mls に設定されている。
  • SELinux モードが Enforcing に設定されている。
  • policycoreutils-python-utils パッケージがインストールされている。
  • secadm_r ロールに割り当てられる Linux ユーザー。

    • ユーザーは、staff_u SELinux ユーザーに割り当てられます。
    • このユーザーのパスワードが定義されています。
    警告

    secadm ロールに割り当てられるユーザーでログインできることを確認してください。そうでない場合は、システムの SELinux ポリシーの将来の変更を防ぐことができます。

手順

  1. ユーザー向けに、新しい sudoers ファイルを /etc/sudoers.d ディレクトリーに作成します。

    # visudo -f /etc/sudoers.d/<sec_adm_user>

    sudoers ファイルを整理しておくには、<sec_adm_user>secadm ロールに割り当てられる Linux ユーザーに置き換えます。

  2. /etc/sudoers.d/<sec_adm_user> ファイルに、以下の内容を追加します。

    <sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL

    この行は、すべてのホスト上の <secadmuser> が、すべてのコマンドを実行することを許可し、デフォルトでユーザーを secadm SELinux タイプとロールにマップします。

  3. <sec_adm_user> ユーザーでログインします。

    注記

    SELinux のコンテキスト (SELinux のユーザー、ロール、タイプで構成) が変更されていることを確認するために、ssh、コンソール、または xdm を使用してログインします。su および sudo などの他の方法では、SELinux コンテキスト全体を変更することはできません。

  4. ユーザーのセキュリティーコンテキストを確認します。

    $ id
    uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023
  5. root ユーザーの対話型シェルを実行します。

    $ sudo -i
    [sudo] password for <sec_adm_user>:
  6. 現在のユーザーのセキュリティーコンテキストを確認します。

    # id
    uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
  7. ポリシーから sysadm_secadm モジュールを無効にします。

    # semodule -d sysadm_secadm
    重要

    semodule -r コマンドを使用してシステムポリシーモジュールを削除する代わりに、semodule -d コマンドを使用します。semodule -r コマンドは、システムのストレージからモジュールを削除します。これは、selinux-policy-mls パッケージを再インストールしないと、モジュールを再び読み込むことができないことを意味します。

検証

  1. secadm ロールに割り当てられたユーザーとして、root ユーザーの対話型シェルで、セキュリティーポリシーデータにアクセスできることを確認します。

    # seinfo -xt secadm_t
    
    Types: 1
       type secadm_t, can_relabelto_shadow_passwords, (...) userdomain;
  2. root シェルからログアウトします。

    # logout
  3. <sec_adm_user> ユーザーからログアウトします。

    $ logout
    Connection to localhost closed.
  4. 現在のセキュリティーコンテキストを表示します。

    # id
    uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
  5. sysadm_secadm モジュールの有効化を試してください。コマンドは失敗するはずです。

    # semodule -e sysadm_secadm
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    semodule:  Failed!
  6. sysadm_t SELinux タイプに関する詳細の表示を試してください。コマンドは失敗するはずです。

    # seinfo -xt sysadm_t
    [Errno 13] Permission denied: '/sys/fs/selinux/policy'