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

第 17 章 マシンのセキュリティの適用 (手順)

この章では、Solaris 環境のマシンのセキュリティを設定する手順について説明します。これらの手順の概要については、次の節を参照してください。

マシンセキュリティの概要については、第 15 章「マシンセキュリティの管理 (概要)」を参照してください。

マシンのセキュリティの適用 (作業マップ)

コンピュータのセキュリティレベルは、コンピュータの最も弱い点によって決まります。次の作業マップは、どのような分野を監視してそのセキュリティを確保すべきかを示しています。

作業 

説明 

参照先 

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

logins コマンドを使ってユーザーのログイン状態を表示する

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

パスワードを所有していないユーザーを発見する 

logins コマンドを使って、パスワードを必要としないアカウントを持つユーザーだけを発見する

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

ログインを一時的に無効にする 

システムシャットダウンや定常的な保守の中でマシンへのユーザーログインを拒否する 

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

パスワードの強力な暗号化を可能にする 

パスワード暗号化のアルゴリズムを指定する 

パスワード暗号化のアルゴリズムを指定する方法

ネームサービスでパスワードの強力な暗号化を提供する 

ネームサービスを使用するときのパスワード暗号化のアルゴリズムを指定する 

NIS+ ドメイン用の新しいパスワードアルゴリズムを指定する方法

NIS ドメイン用の新しいパスワードアルゴリズムを指定する方法

LDAP ドメイン用の新しいパスワードアルゴリズムを指定する方法

新しいパスワード暗号化モジュールを追加する 

サードパーティアルゴリズムを追加する 

サードパーティのパスワード暗号化モジュールをインストールする方法

ログイン失敗操作を保存する 

正しいパスワードの入力に 5 回失敗したユーザーのログを作成する 

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

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

モデムやダイヤルアップポートを通してリモートログインするユーザーに追加パスワードを要求する 

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

ダイヤルアップエントリを一時的に無効にする 

ユーザーがモデムやポートを通してリモートからダイヤルできないようにする 

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

su コマンドを使用しているユーザーを監視する

sulog ファイルを定期的に読み取る

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

スーパーユーザーの活動をコンソールに表示する 

スーパーユーザーのアクセス操作を監視する 

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

スーパーユーザーがリモートからコンソールにアクセスできないようにする 

自身のユーザー名でログインしてから root になるよう、リモートユーザーに要求する 

スーパーユーザー (root) でのリモートログインを防ぐ方法

ユーザーがマシンパラメータを変更できないようにする 

ユーザーが PROM の設定を変更できないようにする 

ハードウェアアクセスのパスワードを必須にする方法

アボートシーケンスを無効にする 

ユーザーが PROM にアクセスできないようにする 

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

ログインとパスワードのセキュリティ

この節では、ログインの制御と監視について説明します。

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

  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   Annalee J. Rimmer
                     /export/home/rimmer
                     /bin/sh
                     PS 010170 10 7 -1

rimmer

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

500

ユーザー ID (UID) を示す 

staff

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

10

グループ ID (GID) を示す 

Annalee 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
#

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

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

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


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

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

    このファイルを作成することによって、システムシャットダウンや定常的な保守の際にユーザーログインを禁止できます。nologin ファイルが存在するシステムにユーザーがログインしようとすると、このファイルの内容が表示されます。そのあとユーザーのログインは中断されます。

    スーパーユーザーのログインは影響を受けません。詳細については、nologin(4) のマニュアルページを参照してください。

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

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


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

システムを実行レベル 0、すなわちシングルユーザーモードにすることもできます。シングルユーザーモードに変更する方法の詳細については、『Solaris のシステム管理 (基本編)』の「システムのシャットダウン (手順)」を参照してください。

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

  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
    #

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

    loginlog ファイルは急激に大きくなることがあります。このファイルを適切に使用できるように保つためには、その内容をときどき確認して消去する必要があります。loginlog ファイルに多数の操作が記録されている場合は、コンピュータシステムにだれかが侵入しようとした可能性があります。詳細は、loginlog(4) のマニュアルページを参照してください。

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


注意 – 注意 –

最初にダイヤルアップパスワードを設定するときには、少なくとも 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 ファイルに暗号化パスワードをコピーします。

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

  9. パスワードをダイヤルアップユーザーに知らせます。

    盗聴のおそれがない方法でパスワードを知らせる必要があります。

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

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

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


    /usr/bin/sh:*:

パスワード暗号化のデフォルトアルゴリズムを変更する

デフォルトでは、ユーザーパスワードは crypt_unix アルゴリズムで暗号化されます。Solaris 9 12/02 リリースでは、デフォルトのパスワード暗号化アルゴリズムを変更することによって、MD5 や Blowfish など、より強力な暗号化アルゴリズムを使用することができます。ユーザーがパスワードを次に変更するときには、パスワードは、指定されているアルゴリズムによって暗号化されます。


注 –

以前の Solaris リリースが動作している環境で以下の各手順を使用することはできません。この機能は、Solaris 9 12/02 リリースが動作しているマシンでのみ有効です。


パスワード暗号化のアルゴリズムを指定する方法

この手順では、ユーザーがパスワードを変更するときのデフォルト暗号化アルゴリズムとして BSD-Linux バージョンの MD5 アルゴリズムが使用されます。このアルゴリズムは、Solaris、BSD、Linux バージョンの UNIX が混在するマシンネットワークに適しています。パスワード暗号化アルゴリズムとアルゴリズム識別子の一覧は、表 15–1 を参照してください。

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

  2. 暗号化アルゴリズムの識別子を、/etc/security/policy.conf ファイルの CRYPT_DEFAULT 変数の値として指定します。

    選択についての説明をコメントとして入力できます。


    # vi  /etc/security/policy.conf
    …
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5
    #
    # Use the version of MD5 that works with Linux and BSD systems.
    # Passwords previously encrypted with __unix__ will be encrypted with MD5
    # when users change their passwords.
    #
    #CRYPT_DEFAULT=__unix__
    CRYPT_DEFAULT=1
    

    この例では、アルゴリズム構成を指定することによって、最も弱いアルゴリズムである crypt_unix がパスワードの暗号化に使用されることがないようにします。crypt_unix モジュールで暗号化されているパスワードは、次回のパスワード変更から crypt_bsdmd5 で暗号化されます。

    アルゴリズムの選択を構成するための構文については、policy.conf(4) のマニュアルページを参照してください。

例 — パスワードの暗号化に Blowfish アルゴリズムを使用する

この例では、CRYPT_DEFAULT 変数の値として Blowfish アルゴリズムの識別子、すなわち 2a が指定されています。パスワードの暗号化を制御する policy.conf のエントリは次のようになります。


CRYPT_ALGORITHMS_ALLOW=1,2a,md5
#CRYPT_ALGORITHMS_DEPRECATE=__unix__
CRYPT_DEFAULT=2a

この構成は、Blowfish アルゴリズムを使用する BSD システムに対応しています。

NIS+ ドメイン用の新しいパスワードアルゴリズムを指定する方法

  1. パスワード暗号化アルゴリズムを NIS+ マスター上の /etc/security/policy.conf ファイルに指定します。

  2. 混乱をできるだけ少なくするために、NIS+ マスターの /etc/security/policy.conf ファイルを NIS+ ドメインのすべてのホストにコピーします。

NIS+ ドメインのユーザーがパスワードを変更すると、NIS+ ネームサービスは、NIS+ マスターにある/etc/security/policy.conf ファイルのアルゴリズム構成を調べます。rpc.nispasswd デーモンが動作するこの NIS+ マスターが、暗号化されたパスワードを作成します。

NIS ドメイン用の新しいパスワードアルゴリズムを指定する方法

  1. パスワード暗号化アルゴリズムを NIS クライアント上の /etc/security/policy.conf ファイルに指定します。

  2. 変更された /etc/security/policy.conf ファイルを NIS ドメインのすべてのクライアントマシンにコピーします。

  3. 混乱をできるだけ少なくするために、変更された /etc/security/policy.conf ファイルを NIS ルートサーバーとスレーブサーバーにコピーします。

NIS ドメインのユーザーがパスワードを変更すると、NIS クライアントは、/etc/security/policy.conf ファイルにある自身のローカルアルゴリズム構成を調べ、パスワードを暗号化します。

LDAP ドメイン用の新しいパスワードアルゴリズムを指定する方法

適切に構成された LDAP クライアントでは、新しいパスワードアルゴリズムを使用できます。LDAP クライアントは NIS クライアントと同じように動作します。

  1. パスワード暗号化アルゴリズムを LDAP クライアント上の /etc/security/policy.conf ファイルに指定します。

  2. 変更された policy.conf ファイルを LDAP ドメインのすべてのクライアントマシンにコピーします。

  3. クライアントの /etc/pam.conf ファイルが pam_ldap モジュールを使用していないことを確認します。

    pam_ldap.so.1 を含むエントリの前にコメント記号 (#) があることを確認します。また、pam_authtok_store.so.1 モジュールには新しい server_policy オプションを使用しないでください。

ローカルアルゴリズム構成に基づくパスワードの暗号化や、パスワードの認証は、クライアントの pam.conf ファイルの PAM エントリに従って行われます。

LDAP ドメインのユーザーがパスワードを変更すると、LDAP クライアントは、/etc/security/policy.conf ファイルにある自身のローカルアルゴリズム構成を調べ、パスワードを暗号化します。クライアントは、 {crypt} タグ付きの暗号化パスワードをサーバーに送信します。このタグは、パスワードが暗号化済みであることをサーバーに知らせます。パスワードはそのままの形でサーバーに格納されます。認証時に、クライアントはこのパスワードをサーバーから取り出します。クライアントは、このパスワードと、入力されたユーザーのパスワードからクライアントが暗号化したばかりのパスワードとを比較します。


注 –

LDAP サーバーでパスワードポリシー制御を使用するには、pam.conf ファイルの pam_authtok_store エントリに server_policy オプションを指定します。これによって、パスワードは、Sun ONE Directory Server の暗号化メカニズムを使って暗号化されます。この手順については、『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』の「クライアントの設定 (手順)」を参照してください。


サードパーティのパスワード暗号化モジュールをインストールする方法

サードパーティのパスワード暗号化アルゴリズムは、通常、ソフトウェアパッケージの一部として配布されます。したがって、pkgadd コマンドを実行すると、/etc/security/crypt.conf ファイルはベンダーのスクリプトによって 変更されるはずです。このあとで、/etc/security/policy.conf ファイルに新しいモジュールとその識別子を指定してください。

  1. pkgadd コマンドを実行してソフトウェアを追加します。

    ソフトウェアの追加方法については、『Solaris のシステム管理 (基本編)』の「ソフトウェアパッケージの追加または削除」を参照してください。

  2. /etc/security/crypt.conf ファイルを開いて、暗号化アルゴリズムのリストに新しいモジュールとモジュール識別子が含まれていることを確認します。

    次の例は、crypt_rot13 アルゴリズムをインストールしたパッケージによって変更された crypt.conf ファイルです。


    # crypt.conf
    #
    md5 /usr/lib/security/$ISA/crypt_md5.so
    rot13 /usr/lib/security/$ISA/crypt_rot13.so
    
    # For *BSD - Linux compatibility
    # 1 is MD5,  2a is Blowfish
    1 /usr/lib/security/$ISA/crypt_bsdmd5.so
    2a /usr/lib/security/$ISA/crypt_bsdbf.so
  3. /etc/security/policy.conf ファイルに、新たにインストールされたアルゴリズムの識別子を追加します。

    次に、識別子 rot13 を追加する必要がある policy.conf ファイルの一部を示します。


    # Copyright 1999-2002 Sun Microsystems, Inc.  All rights reserved.
    # ...
    #ident  "@(#)policy.conf        1.6     02/06/07 SMI"
    # ...
    # crypt(3c) Algorithms Configuration
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5,rot13
    #CRYPT_ALGORITHMS_DEPRECATE=__unix__
    CRYPT_DEFAULT=md5

この例では、現在のパスワードが crypt_rot13 アルゴリズムで暗号化されていれば、rot13 アルゴリズムが使用されます。新しいユーザーパスワードは crypt_sunmd5 アルゴリズムで暗号化されます。このアルゴリズム構成は Solaris だけからなるネットワークで有効です。

スーパーユーザーの監視と制限

スーパーユーザーのアカウントを使用する代わりに、役割によるアクセス制御を設定できます。役割によるアクセス制御を RBAC と呼びます。RBAC の概要については、第 18 章「役割によるアクセス制御 (概要)」を参照してください。RBAC の設定方法については、第 19 章「役割によるアクセス制御 (手順)」を参照してください。

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

sulog ファイルには、ユーザーからスーパーユーザーに切り替えたときの 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-janedoe
    SU 01/12 14:56 + pts/0 pmorph-root
    SU 01/12 14:57 + pts/0 pmorph-root

    ここには、次のような情報が表示されます。

    • コマンドが入力された日時

    • コマンドの成否

      + は成功を表します。- は失敗を表します。

    • コマンドが実行されたポート

    • ユーザー名と切り替えたユーザー ID

    このファイルへの su ログの記録は、デフォルトで、 /etc/default/su ファイルの次のエントリで有効になっています。


    SULOG=/var/adm/sulog

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

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

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

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


    CONSOLE=/dev/console

  4. su コマンドを使ってスーパーユーザー になります。

    システムコンソールにメッセージが出力されるか確認します。

    この方法では、現在作業中のシステムでスーパーユーザーのアクセス権を取得しようとする人をただちに検出できます。

スーパーユーザー (root) でのリモートログインを防ぐ方法


注 –

Solaris リリースをインストールすると、デフォルトで、スーパーユーザーログインはコンソールに限定されます。


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

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

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


    CONSOLE=/dev/console

    スーパーユーザーアクセスをコンソールに限定しておくと、コンソールからしかスーパーユーザーとしてシステムにログインできません。このシステムにリモートログインするユーザーは、まず自分のユーザーログインを使用してログインする必要があります。自分のユーザー名でログインしたあとに、su コマンドを使ってスーパーユーザーになります。

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

ハードウェアのセキュリティの適用

マシンの起動時にパスワードの入力を必須にすることによって物理マシンを保護することができます。さらに、ユーザーがアボートシーケンスを使ってウィンドウシステムを離れるのを防ぐことによってマシンを保護する方法もあります。

ハードウェアアクセスのパスワードを必須にする方法

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

  2. 端末から PROM セキュリティモードに入ります。次の行を入力します。


    # eeprom security-mode=command
    
    Changing PROM password:
    	New password: password
    	Retype new password: password
    

    値として commandfull を選択します。詳細については、eeprom(1M) のマニュアルページを参照してください。

  3. PROM パスワードの入力を要求されない場合は、システムがすでに PROM パスワードを持っています。PROM パスワードを変更する場合は、次のコマンドを実行します。


    # eeprom security-password=<Type the Return key>
    Changing PROM password:
    New password: password
    Retype new password: password
    

    新しい PROM セキュリティモードとパスワードはただちに有効になりますが、それがわかるのは、ほとんどの場合、次回の起動時です。


    注意 – 注意 –

    PROM パスワードを忘れないでください。このパスワードがないと、ハードウェアは使用できません。


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

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

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

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

  2. KEYBOARD_ABORT の値を disable に変更します。

    /etc/default/kbd ファイルの enable 行をコメントにし、disable 行を追加します。


    # vi /etc/default/kbd
    …
    # KEYBOARD_ABORT affects the default behavior of the keyboard abort
    # sequence, see kbd(1) for details.  The default value is "enable".
    # The optional value is "disable".  Any other value is ignored.
    …
    #KEYBOARD_ABORT=enable
    KEYBOARD_ABORT=disable
    
  3. キーボードのデフォルトを更新します。


    # kbd -i