Solaris のシステム管理 (セキュリティサービス)

第 16 章 システムのセキュリティ (手順)

この章では、Solaris 環境のシステムのセキュリティを設定する手順について説明します。

この章で説明する手順は次のとおりです。

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

ユーザーログイン情報の表示

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

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

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


    # logins -x -l username
    

    -x

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

    -l username

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

    logins コマンドは、ローカルの /etc/passwd ファイルとネームサービスパスワードデータベース (使用している場合) を使用して、ユーザーのログイン状態を表示します。詳細は、logins(1M) のマニュアルページを参照してください。

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

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


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

rimmer

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

500

ユーザー ID (UID) を示す 

staff

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

10

グループ ID (GID) を示す 

Arnold J. Rimmer

コメントを示す 

/export/home/rimmer

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

/bin/sh

ログインシェルを示す 

PS 010170 10 7 -1

次のパスワード有効期限情報を示す 

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

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

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

  • 警告期間

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

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

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


    # logins -p
    

    -p オプションを指定すると、パスワードを持たないユーザーが表示されます。logins コマンドは、ローカルの /etc/passwd ファイルとネームサービスパスワードデータベースを使用して、ユーザーのログイン状態を表示します。

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

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


# logins -p
pmorph          501     other           1       Polly Morph
#

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

ユーザーのログインを一時的に無効にするには、次のどちらかの操作を行います。

/etc/nologin ファイルの作成

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

このファイルが存在するシステムにユーザーがログインしようとすると、nologin ファイルの内容が表示されて、ユーザーのログインは中断されます。スーパーユーザーのログインは影響を受けません。詳細については、nologin(4) のマニュアルページを参照してください。

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

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


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

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

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

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


# vi /etc/nologin
(ここでシステムメッセージを追加する)
 
# cat /etc/nologin 
***ログインは許可されません。***
 
***システムは AM12:00 まで利用できません。***

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

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. 間違ったパスワードを使用してシステムに 5 回ログインしようとしたログが記録されていることを確認します。/var/adm/loginlog ファイルを表示します。


    # more /var/adm/loginlog
    rimmer:/dev/pts/1:Wed Jan 16 09:22:31 2002
    rimmer:/dev/pts/1:Wed Jan 16 09:22:39 2002
    rimmer:/dev/pts/1:Wed Jan 16 09:22:45 2002
    rimmer:/dev/pts/1:Wed Jan 16 09:22:53 2002
    rimmer:/dev/pts/1:Wed Jan 16 09:23:01 2002
    #

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

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

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

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

ユーザーのログインプログラム (/etc/passwd ファイルで指定) が /etc/d_passwd ファイル内で見つからない場合や、/etc/passwd ファイルのログインシェルフィールドが空の場合は、/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 username
      
    2. 一時的なユーザーのパスワードを作成します。


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


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

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

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


      temp:U9gp9SyA/JlSk:7967:::::7988:
    5. 一時的なユーザーを削除します。


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

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

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

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


    /usr/bin/sh:*:

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

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

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


注 -

Solaris をインストールする場合、コンソールへのスーパーユーザーログインはデフォルトで制限されます。


スーパーユーザーのアカウントを使用しない場合は、役割によるアクセス制御 (RBAC) を設定します。RBAC の概要については、第 17 章「役割によるアクセス制御 (概要)」を参照してください。

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

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

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


    CONSOLE=/dev/console

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

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

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

/var/adm/sulog ファイルを監視すると、su の操作を監視することができます。su コマンドを使用するたびに、このファイルにログが記録されます。このファイルへの su ログの記録は、デフォルトで、 /etc/default/su ファイルの次のエントリで有効になっています。


SULOG=/var/adm/sulog

su コマンドを使用すると、sulog ファイルには、ユーザーからスーパーユーザーに切り替えたときの su コマンドの使用を含め、すべての su コマンドの使用歴が記録されます。各エントリは、コマンドが入力された日時、su コマンドの成否 (+ または -)、コマンドが実行されたポート、およびユーザー名と切り替えたユーザー ID を示します。

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

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

  2. /var/adm/sulog ファイルの内容を定期的に監視します。


    # 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