二人ルール : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20060417 2006年 4月 17日 月曜日

二人ルール

二人ルール・・・もうひとつのセキュリティ

コンピューターセキュリティに係わる事件は収まるどころかまだまだ出そうな勢いですが、事件の原因を見てみると、外部からの攻撃と同様に、内部からの攻撃、人的ミス、組織の問題に起因するケースが多々あるように思われます。もちろんコンピュータはこれらの問題に対して無力ではありませんし、Sun Microsystems からもアイデンティティ管理やシンクライアント、Solaris 組み込みのセキュリティ機能など、様々なソリューションが提供されており、これらの機能を正しく使えば、相当強固なセキュリティを確保できます。しかし極めて重要な作業を行う場合、個人への役割付与では、たとえ権限を細かく分割しても不十分な場合もあります。

たとえば「二人ルール」。核ミサイルの発射スイッチを2人同時に操作するアレですが、これは個人の暴走やミスを防止するのに極めて有効です。コンピュータ管理にもこのような仕組みがあると良いと思いませんか? 実は Solaris の RBAC をうまく使うとこの「二人ルール」を実現できるのです。以下の例を見てください。一連の設定の後、このシステムでは端末の前に二人揃わないとスーパーユーザ権限を行使できなくなります。


RBACを使った「二人ルール」の実装 (基本編)

まず担当者2人を決定します。仮に Aさん、Bさんと呼びます。

root 役割を引き受けることができるローカルユーザ(admuser)を用意します。パスワードは Aさんが管理します。

    # useradd -c "Local administrative user" -d /export/home1 admuser
    # passwd -r files admuser

root としてログインしていないことを確認します。

    # who
    jdoe console May 24 13:51 (:0)
    jdoe pts/5 May 24 13:51 (:0.0)
    jdoe pts/4 May 24 13:51 (:0.0)
    jdoe pts/10 May 24 13:51 (:0.0)

root ユーザを役割に変更します。root パスワードは Bさんが管理します。

    # usermod -K type=role root

root が役割であることを確認します。user_attr ファイルの root エントリは、次のようになります。

    root::::type=role;auths=solaris.*,solaris.grant;profiles=Web Console
    Management,All;lock_after_retries=no

root 役割を先に用意したローカルユーザ(admuser)に割り当てます。

    # usermod -R root admuser

新しい端末ウィンドウを開き、root 役割を引き受けます。

    % su admuser
    Enter password:  ( Aさんが admuser パスワードを入力する)
    % roles
    root
    % su root
    Enter password: ( Bさんが root パスワードを入力する)
    #

これで Aさん、Bさんの二人が揃わないと root権限を行使できなくなりました。しかし、いざという時、どちらかが休みや出張では困るので代理を立てたいところです。上の例を少しひねって、管理者グループの誰か二人が揃えば root権限を行使できるようにしてみましょう。


RBACを使った「二人ルール」の実装 (応用編)

管理者グループのメンバを userA, userB, userC の三人とします。各メンバにはスーパーユーザ権限を持った役割 roleA, roleB, roleC を与えますが、各自自分の持つ役割にだけは su できないようにしておきます。こうすることで、スーパーユーザ権限を使うためにグループの他のメンバが必要となるわけです。

まず、それぞれのメンバに割り当てる役割 roleA, roleB, roleC を作成します。

jws50# roleadd -d /export/home/roleA -m roleA
jws50# roleadd -d /export/home/roleB -m roleB
jws50# roleadd -d /export/home/roleC -m roleC

jws50#  getent passwd roleA roleB roleC
roleA:x:202732:1::/export/home/roleA:/bin/pfsh
roleB:x:202733:1::/export/home/roleB:/bin/pfsh
roleC:x:202804:1::/export/home/roleC:/bin/pfsh

作成した役割に、スーパーユーザ権限を持つ Primary Administrator 権利プロファイルを割り当てます。

jws50# rolemod -P "Primary Administrator" roleA
jws50# rolemod -P "Primary Administrator" roleB
jws50# rolemod -P "Primary Administrator" roleC

jws50# profiles -l roleA roleB roleC

      Primary Administrator:
          *    uid=0, gid=0
      All:
          *    

      Primary Administrator:
          *    uid=0, gid=0
      All:
          *    

      Primary Administrator:
          *    uid=0, gid=0
      All:
          *    

各役割を管理グループメンバに割り当てます。各自自身の管理する役割には su できないことに注目してください。

jws50# usermod -R roleB,roleC userA
jws50# usermod -R roleC,roleA userB
jws50# usermod -R roleA,roleB userC

jws50# roles userA userB userC
userA : roleB,roleC
userB : roleC,roleA
userC : roleA,roleB

役割のパスワードを設定します。roleA のパスワードは userA、roleB のパスワードは userB、roleC のパスワードは userC が管理します。

jws50# passwd roleA

新しいパスワード:
新しいパスワードを再入力してください:     ( userA が管理)
passwd: roleA のパスワードが変更されました

jws50# passwd roleB
新しいパスワード
新しいパスワードを再入力してください:    ( userB が管理)
passwd: roleB のパスワードが変更されました

jws50# passwd roleC
新しいパスワード
新しいパスワードを再入力してください:    ( userC が管理)
passwd: roleC のパスワードが変更されました

これで管理グループメンバ (userA, userB, userC) のうち二人が揃えばスーパーユーザ権限を行使できるようになりました。実際のシステムでは audit 設定や端末入出力ログ採取など運用のルールを決めておく方が良いでしょう。

投稿されたコメント:

コメント
  • HTML文法 不許可