3.3. 制限のあるユーザーおよび制限のないユーザー
各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは SELinux ユーザーの制限を継承できます。この Linux ユーザーマッピングは、root で semanage login -l コマンドを実行して表示されます。
Red Hat Enterprise Linux では、Linux ユーザーはデフォルトで SELinux の
__default__ ログインにマッピングされ、これは、SELinux unconfined_u ユーザーにマッピングされます。以下の行は、デフォルトのマッピングを定義します。
__default__ unconfined_u s0-s0:c0.c1023
__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
~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuserユーザーにパスワードを割り当てるには、以下を実行します。root で以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 現在のセッションからログアウトし、Linux
newuserユーザーとしてログインします。ログインすると、PAM モジュール pam_selinux は Linux ユーザーを SELinux ユーザー(この場合はunconfined_u)に自動的にマッピングし、作成された SELinux コンテキストを設定します。Linux ユーザーのシェルはこのコンテキストで起動します。以下のコマンドを入力して、Linux ユーザーのコンテキストを表示します。id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[newuser@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記システムでnewuserユーザーが不要になった場合は、Linuxnewuserのセッションからログアウトし、アカウントにログインして root で userdel -r newuser コマンドを実行します。これにより、newuserが自分のホームディレクトリーとともに削除されます。
制限のある Linux ユーザー、および制限のない Linux ユーザーは、実行可能なメモリーチェックおよび書き込み可能なメモリーチェックに依存し、また MCS または MLS によっても制限されます。
利用可能な SELinux ユーザーをリスト表示するには、以下のコマンドを実行します。
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
seinfo コマンドは、setools-console パッケージにより提供されることに注意してください。これは、デフォルトではインストールされません。
制限のない Linux ユーザーが、
unconfined_t ドメインから自身の制限のあるドメインに移行できるものとして SELinux ポリシーが定義するアプリケーションを実行すると、制限のない Linux ユーザーは制限のあるドメインの制限を引き続き受けます。このセキュリティー上の利点は、Linux ユーザーが制限なしで実行している場合でも、アプリケーションは制限されたままになります。したがって、アプリケーションにおける不具合の悪用はポリシーによって制限できます。
同様に、これらのチェックを制限のあるユーザーに適用できます。制限のある各 Linux ユーザーは、制限のあるユーザードメインによって制限されます。SELinux ポリシーは、制限のあるユーザードメインから自身のターゲット制限のあるドメインへの移行を定義することもできます。このような場合、制限のある Linux ユーザーは、その対象である制限のあるドメインの制限を受けます。主な点として、特別な権限は、ロールに応じて制限のあるユーザーに関連付けられる点が挙げられます。以下の表では、Red Hat Enterprise Linux で、Linux ユーザー向けの基本的な制限のあるドメインの例を確認できます。
| ユーザー | ロール | ドメイン | 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 ドメイン、およびxドメインの Linux ユーザーは、SELinux ポリシーで許可されている場合にのみ、setuid (set user ID)アプリケーションを実行できます(guest_tpasswdなど)。これらのユーザーは、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_rcan only administrate SELinux.auditadm_rは、auditサブシステムに関連するプロセスのみを管理できます。
利用可能なロールのリストを表示するには、以下のコマンドを実行します。
seinfo -r
~]$ 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
~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - デフォルトの SElinux ポリシーコンテキストファイルを設定します。たとえば、SELinux ユーザー
staff_uと同じ SELinux ルールを設定するには、staff_uコンテキストファイルをコピーします。cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した SELinux ユーザーを既存の Linux ユーザーにマッピングします。
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sudoers.d/ディレクトリーに Linux ユーザーと同じ名前で新しい設定ファイルを作成し、以下の文字列を追加します。echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow restoreconユーティリティーを使用して、linux_user ホームディレクトリーのラベルを変更します。restorecon -FR -v /home/linux_user
~]# restorecon -FR -v /home/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023
~]$ id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow - sudo を実行して、ユーザーの SELinux コンテキストを、
/etc/sudoers.d/linux_userで指定した補助 SELinux ロールに変更します。sudo で使用する-iオプションは、対話式シェルが実行される原因となっていました。sudo -i id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023
~]$ sudo -i ~]# id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
~]# 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_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに作成した Linux ユーザーとしてシステムにログインし、ユーザーにデフォルトの SELinux ロールのラベルがあることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow