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
ユーザーへのマッピング
- root で以下のコマンドを入力し、
newuser
という名前の Linux ユーザーを作成します。~]#
useradd newuser - 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. - 現在のセッションからログアウトし、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
ユーザーが不要になった場合は、Linuxnewuser
のセッションからログアウトし、アカウントにログインして 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 ユーザー向けの基本的な制限のあるドメインの例を確認できます。
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_t
、user_t
、guest_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 タイプの処理のみが可能です。詳細は、「タイプ」 を参照してください。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 つの手順を省略します。
- 新しい SELinux ユーザーを作成し、このユーザーにデフォルトの SELinux ロールと、補助制限のある管理者ロールを指定します。
~]#
semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u - デフォルトの SElinux ポリシーコンテキストファイルを設定します。たとえば、SELinux ユーザー
staff_u
と同じ SELinux ルールを設定するには、staff_u
コンテキストファイルをコピーします。~]#
cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u - 新たに作成した SELinux ユーザーを既存の Linux ユーザーにマッピングします。
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
/etc/sudoers.d/
ディレクトリーに Linux ユーザーと同じ名前で新しい設定ファイルを作成し、以下の文字列を追加します。~]#
echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_userrestorecon
ユーティリティーを使用して、linux_user ホームディレクトリーのラベルを変更します。~]#
restorecon -FR -v /home/linux_user- 新たに作成した 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:c0.c1023
default_role_r や administrator_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