Solaris のシステム管理 (第 2 巻)

第 18 章 システムのセキュリティの手順

この章では、システムにセキュリティを適用する手順について説明します。この章で説明する手順は次のとおりです。

システムにセキュリティを適用する概要については、「システムのセキュリティ」を参照してください。

セキュリティ情報の表示

この節では、ユーザーのログイン情報を表示する方法について説明します。

ユーザーのログイン状態を表示する方法

  1. スーパーユーザーになります。

  2. logins コマンドを使用してユーザーのログイン状態を表示します。


    # logins -x -l username
    

    -x

    ログイン状態情報の拡張セットを表示する 

    -l username

    指定するユーザーのログイン状態を表示する。username はユーザーのログイン名。複数のログイン名は、コンマで区切って指定する

    logins(1M) コマンドは、ローカルの /etc/passwd ファイルと NIS または NIS+ パスワードデータベースを使用して、ユーザーのログイン状態を表示します。

例 - ユーザーのログイン状態を表示する

次の例には、ユーザー rimmer のログイン状態が表示されています。


# logins -x -l rimmer
rimmer       500     staff           10   Arnold J. Rimmer
                     /export/home/rimmer
                     /bin/sh
                     PS 010170 10 7 -1

rimmer

ユーザーのログイン名を示す 

500

UID (ユーザー ID) を示す 

staff

ユーザーの一次グループを示す 

10

GID (グループ ID) を示す 

Arnold J. Rimmer

コメントを示す 

/export/home/rimmer

ユーザーのホームディレクトリを示す 

/bin/sh

ログインシェルを示す 

PS 010170 10 7 -1

次のパスワードの有効日数情報を示す 

o パスワードの最終変更日 

o 次に変更するまでに必要な日数 

o 変更しないで使用できる日数 

o 警告期間 

パスワードを持たないユーザーを表示する方法

ユーザー全員が有効なパスワードを持っているかどうかを確認する必要があります。

  1. スーパーユーザーになります。

  2. logins コマンドを使用して、パスワードを持っていないユーザーを表示します。


    # logins -p
    

    -p

    パスワードを持っていないユーザーのリストを表示する 

    logins コマンドは、ローカルの /etc/passwd ファイルと NIS または NIS+ パスワードデータベースを使用して、ユーザーのログイン状態を表示します。

例 - パスワードを持たないユーザーを表示する

次の例には、パスワードを持っていないユーザー pmorph が表示されています。


# logins -p
pmorph          501     other           1       Polly Morph
#

ユーザーのログインを一時的に無効にする

ユーザーのログインを一時的に無効にするには、次のようにします。

/etc/nologin ファイルの作成

このファイルを作成する目的は、システムシャットダウンや定期保守のためにシステムが一定の時間利用できなくなるときに、ユーザーのログインを禁止して、ユーザーに通知することです。

このファイルが存在するシステムにユーザーがログインしようとすると、nologin(4) ファイルの内容が表示されて、ユーザーのログインは中断されます。スーパーユーザーのログインは影響を受けません。

ユーザーのログインを一時的に無効にする方法

  1. スーパーユーザーになります。

  2. エディタを使用して、/etc/nologin ファイルを作成します。


    # vi /etc/nologin
    
  3. システムの利用に関するメッセージを入力します。

  4. ファイルを閉じて、保存します。

例 - ユーザーのログインを無効にする

この例は、システムが利用できないことをユーザーに通知する方法を示しています。


# vi /etc/nologin
(ここでシステムメッセージを追加する。)
 
# cat /etc/nologin 
***No logins permitted.***
 
***The system will be unavailable until 12 noon.***

失敗したログイン操作の保存

root 専用の読み取り権と書き込み権を使用して /var/adm/loginlog ファイルを作成すると、失敗したログイン操作を保存できます。loginlog ファイルを作成した後は、操作に 5 回以上失敗すると、失敗したログイン操作がすべてこのファイルに自動的に書き込まれます。詳細は、「失敗したログイン操作を保存する方法」を参照してください。

loginlog ファイルには、失敗した操作ごとに 1 つずつエントリが入っています。各エントリには、ユーザーのログイン名、tty デバイス、操作の失敗回数が入っています。4 回以下の失敗であれば、ログに記録されません。

loginlog ファイルは急激に大きくなることがあります。このファイル内の情報を使用し、ファイルが大きくなりすぎないようにするには、ファイルの内容をときどきチェックして消去しなければなりません。このファイルが多数の作業を示す場合は、コンピュータシステムに誰かが侵入しようとした可能性があります。このファイルの詳細は、loginlog(4) のマニュアルページを参照してください。

失敗したログイン操作を保存する方法

  1. スーパーユーザーになります。

  2. /var/adm ディレクトリ内で loginlog ファイルを作成します。


    # touch /var/adm/loginlog
    
  3. loginlog ファイル上で root 用の読み取り権と書き込み権を設定します。


    # chmod 600 /var/adm/loginlog
    
  4. loginlog ファイル上でグループのメンバーシップを sys に変更します。


    # chgrp sys /var/adm/loginlog
    
  5. ログが機能していることを確認するには、loginlog ファイルを作成した後で、間違ったパスワードを使用してシステムに 5 回ログインします。次に、/var/adm/loginlog ファイルを表示します。


    # more /var/adm/loginlog
    rimmer:/dev/pts/4:Mon Jul 12 13:52:15 1999
    rimmer:/dev/pts/4:Mon Jul 12 13:52:23 1999
    rimmer:/dev/pts/4:Mon Jul 12 13:52:31 1999
    rimmer:/dev/pts/4:Mon Jul 12 13:52:39 1999
    #

ダイヤルアップパスワードによるパスワード保護

モデムやダイヤルアップポートを通じてシステムにアクセスするユーザーに「ダイヤルアップパスワード」を要求して、パスワード機構にセキュリティ層を追加できます。ダイヤルアップパスワードは、ユーザーがシステムへのアクセス権を取得する前に入力しなければならないパスワードです。

スーパーユーザー以外はダイヤルアップパスワードを作成または変更できません。システムの完全性を確保するために、月に一度はパスワードを変更する必要があります。この機構の最も有効な使用方法は、ゲートウェイシステムへのアクセス権を取得するためのダイヤルアップパスワードを要求することです。

ダイヤルアップパスワードの作成には、/etc/dialups/etc/d_passwd という 2 つのファイルが必要です。/etc/dialups には、ダイヤルアップパスワードが必要なポートのリストが入っています。/etc/d_passwd には、ダイヤルアップパスワードとして暗号化されたパスワードを要求するシェルプログラムのリストが入っています。

dialups(4) ファイルには、次のような端末装置のリストが含まれます。


/dev/term/a
/dev/term/b

d_passwd(4) ファイルには 2 つのフィールドがあります。1 つのフィールドはパスワードを要求するログインシェルで、もう 1 つのフィールドは暗号化されたパスワードです。/etc/dialups ファイルと /etc/d_passwd ファイルは次のように使用されます。

ユーザーが /etc/dialups にリストされたポート上でログインしようとすると、ログインプログラムは /etc/passwd に格納されたユーザーのログインエントリを検索し、ログインシェルを /etc/d_passwd 内のエントリと比較します。これらのエントリによって、ユーザーがダイヤルアップパスワードを入力する必要があるかどうかが決まります。


/usr/lib/uucp/uucico:encrypted_password:
/usr/bin/csh:encrypted_password:
/usr/bin/ksh:encrypted_password:
/usr/bin/sh:encrypted_password:

図 18-1 に、基本的なダイヤルアップパスワードシーケンスを示します。

図 18-1 基本的なダイヤルアップパスワードシーケンス

Graphic

/etc/d_passwd ファイル

ほとんどのユーザーはログインするときにシェルを実行しているので、すべてのシェルプログラムのエントリが /etc/d_passwd 内に必要です。この種のプログラムは、uucicoshkshcsh などです。一部のユーザーがログインシェルから何か実行する場合は、そのログインシェルもファイルに含めてください。

ユーザーのログインプログラム (/etc/passwd 内で指定) が /etc/d_passwd 内で見つからない場合や、/etc/passwd 内のログインシェルフィールドが空 (NULL) の場合は、/usr/bin/sh のパスワードエントリが使用されます。

ダイヤルアップパスワードを作成する方法


注意 - 注意 -

最初にダイヤルアップパスワードを設定するときには、少なくとも 1 つの端末にログインしている状態で、別の端末上でパスワードをテストしてください。余分のパスワードをインストールし、ログアウトして新しいパスワードをテストする間にミスすると、元どおりログインできなくなることがあります。まだ別の端末にログインしていれば、元に戻ってミスを訂正できます。


  1. スーパーユーザーになります。

  2. ダイヤルアップパスワード保護が必要なすべてのポートなど、端末装置のリストが入った /etc/dialups ファイルを作成します。

    /etc/dialups ファイルは次のようになります。

    /dev/term/a

    /dev/term/b

    /dev/term/c

  3. ダイヤルアップパスワードを要求するログインプログラムと暗号化されたダイヤルアップパスワードが入った /etc/d_passwd ファイルを作成します。

    uucicoshkshcsh など、ユーザーがログイン時に実行できるシェルプログラムを含めます。/etc/d_passwd ファイルは次のようになります。

    /usr/lib/uucp/uucico:encrypted_password:

    /usr/bin/csh:encrypted_password:

    /usr/bin/ksh:encrypted_password:

    /usr/bin/sh:encrypted_password:

  4. 2 つのファイルの所有権を root に設定します。


    # chown root /etc/dialups /etc/d_passwd
    
  5. 2 つのファイルのグループの所有権を root に設定します。


    # chgrp root /etc/dialups /etc/d_passwd
    
  6. 2 つのファイルの root の読み取り権と書き込み権を設定します。


    # chmod 600 /etc/dialups /etc/d_passwd
    
  7. 暗号化パスワードを作成します。

    1. ダミーユーザーを作成します。


      # useradd user-name
      
    2. ダミーユーザーのパスワードを作成します。


      # passwd user-name
      
    3. 暗号化パスワードを取り出します。


      # grep user-name /etc/shadow > user-name.temp
      
    4. user-name.temp ファイルを編集します。

      暗号化パスワード (第 2 のフィールド) を除くすべてのフィールドを削除します。

      たとえば、次の行では、暗号化パスワードは U9gp9SyA/JlSk です。


      temp:U9gp9SyA/JlSk:7967:::::7988:
    5. ダミーユーザーを削除します。


      # userdel user-name
      
  8. user-name.temp ファイルから /etc/d_passwd ファイルに暗号化パスワードをコピーします。

    ログインシェルごとに別のパスワードを作成するか、共通のパスワードを使用できます。

ダイヤルアップログインを一時的に無効にする方法

  1. スーパーユーザーになります。

  2. 次のエントリ 1 行を /etc/d_passwd ファイルに挿入します。


    /usr/bin/sh:*:

コンソールのスーパーユーザー (root) アクセスの制限

スーパーユーザーアカウントは、基本的な機能を実行するためにオペレーティングシステムに使用され、オペレーティングシステム全体を広範囲に制御します。また、スーパーユーザーアカウントは重要なシステムプログラムにアクセスして実行できます。このため、スーパーユーザーによって実行されるプログラムの場合、セキュリティ上の制約はほとんどありません。

/etc/default/login ファイルを通じて特定の装置へのスーパーユーザーアクセスを制限すると、システム上のスーパーユーザーアカウントを保護できます。たとえば、スーパーユーザーアクセスをコンソールに限定しておけば、コンソールからしかスーパーユーザーとしてシステムにログインできなくなります。誰かがシステムにリモートログインして管理作業を実行する場合は、まず自分のユーザーログインを使用してログインしてから、su(1M) コマンドを使用してスーパーユーザーにならなければなりません。詳細は、次の節を参照してください。


注 -

システムをインストールするときには、コンソールへのスーパーユーザーログインはデフォルトで制限されます。


スーパーユーザー (root) ログインをコンソールに限定する方法

  1. スーパーユーザーになります。

  2. /etc/default/login ファイルを編集します。

  3. 次の行のコメントを解除します。


    CONSOLE=/dev/console

    このシステムにリモートログインするユーザーは、まず自分のユーザーログインを使用してログインしてから、su コマンドを使用してスーパーユーザーにならなければなりません。

  4. このシステムにスーパーユーザーとしてリモートログインして、操作が失敗することを確認してください。

su コマンドを使用するユーザーの監視

su コマンドの試行に対する監視は /etc/default/su ファイルを通じて開始できます。このファイルを通じて、/var/adm/sulog ファイルを使用可能にし、su コマンドを使用して別のユーザーに変更されるたびに監視できます。詳細は、su コマンドを使用中のユーザーを監視する方法」を参照してください。

sulog ファイルには、ユーザーをスーパーユーザーに切り替えるコマンドではなく、su コマンドのすべての使用状況がリストされます。各エントリは、コマンドが入力された日時、su コマンドの成否 (+ または -)、コマンドが実行されたポート、およびユーザー名と切り替え後の識別名を示します。

/etc/default/su ファイルを通じて、リモートシステムから su コマンドを使用してスーパーユーザーアクセス権を取得しようとする操作が発生するたびにコンソールに表示されるようにシステムを設定することもできます。これは、現在作業中のシステム上で誰かがスーパーユーザーアクセス権を取得しようとした場合に、それを即座に検出する優れた方法です。詳細は、次の節を参照してください。

su コマンドを使用中のユーザーを監視する方法

  1. スーパーユーザーになります。

  2. /etc/default/su ファイルを編集します。

  3. 次の行のコメントを解除します。


    SULOG=/var/adm/sulog
  4. /etc/default/su ファイルを変更し終わったら、su コマンドを何度か使用して /var/adm/sulog ファイルを表示します。su コマンドを使用した時刻ごとにエントリが表示されます。


    # more /var/adm/sulog
    SU 12/20 16:26 + pts/0 nathan-root
    SU 12/21 10:59 + pts/0 nathan-root
    SU 01/12 11:11 + pts/0 root-joebob
    SU 01/12 14:56 + pts/0 pmorph-root
    SU 01/12 14:57 + pts/0 pmorph-root

コンソールへのスーパーユーザー (root) アクセス操作を表示する方法

  1. スーパーユーザーになります。

  2. /etc/default/su ファイルを編集します。

  3. 次の行のコメントを解除します。


    CONSOLE=/dev/console

    su コマンドを使用してスーパーユーザーになり、システムコンソールにメッセージが出力されるかどうかを確認してください。

システムのアボートシーケンスの変更

システムのアボートシーケンスを無効または有効にするには、次の手順を使用します。デフォルトのシステム動作では、システムのアボートシーケンスは有効になっています。

サーバーシステムの中には、キースイッチがあり、それが安全な位置に設定されていると、ソフトウェアキーボードのアボート設定変更を無効にするものがあります。そのため、次の手順で変更を行っても変更が有効にならない場合があります。

システムのアボートシーケンスを無効または有効にする方法

  1. スーパーユーザーになります。

  2. 次のどちらかの手順で、システムのアボートシーケンスを無効または有効にします。

    1. /etc/default/kbd ファイルの次の行からポンド記号 (#) を削除して、システムのアボートシーケンスを無効にします。


      #KEYBOARD_ABORT=disable
    2. /etc/default/kbd ファイルの次の行にポンド記号 (#) を追加して、システムのアボートシーケンスを有効にします。


      KEYBOARD_ABORT=disable
  3. キーボードのデフォルトを更新します。


    # kbd -i