この章では、Solaris 環境のマシンのセキュリティを設定する手順について説明します。これらの手順の概要については、次の節を参照してください。
マシンセキュリティの概要については、第 15 章「マシンセキュリティの管理 (概要)」を参照してください。
コンピュータのセキュリティレベルは、コンピュータの最も弱い点によって決まります。次の作業マップは、どのような分野を監視してそのセキュリティを確保すべきかを示しています。
作業 |
説明 |
参照先 |
---|---|---|
ユーザーのログイン状態を表示する |
logins コマンドを使ってユーザーのログイン状態を表示する | |
パスワードを所有していないユーザーを発見する |
logins コマンドを使って、パスワードを必要としないアカウントを持つユーザーだけを発見する | |
ログインを一時的に無効にする |
システムシャットダウンや定常的な保守の中でマシンへのユーザーログインを拒否する | |
パスワードの強力な暗号化を可能にする |
パスワード暗号化のアルゴリズムを指定する | |
ネームサービスでパスワードの強力な暗号化を提供する |
ネームサービスを使用するときのパスワード暗号化のアルゴリズムを指定する |
NIS+ ドメイン用の新しいパスワードアルゴリズムを指定する方法 |
新しいパスワード暗号化モジュールを追加する |
サードパーティアルゴリズムを追加する | |
ログイン失敗操作を保存する |
正しいパスワードの入力に 5 回失敗したユーザーのログを作成する | |
ダイヤルアップパスワードを作成する |
モデムやダイヤルアップポートを通してリモートログインするユーザーに追加パスワードを要求する | |
ダイヤルアップエントリを一時的に無効にする |
ユーザーがモデムやポートを通してリモートからダイヤルできないようにする | |
su コマンドを使用しているユーザーを監視する |
sulog ファイルを定期的に読み取る | |
スーパーユーザーの活動をコンソールに表示する |
スーパーユーザーのアクセス操作を監視する | |
スーパーユーザーがリモートからコンソールにアクセスできないようにする |
自身のユーザー名でログインしてから root になるよう、リモートユーザーに要求する | |
ユーザーがマシンパラメータを変更できないようにする |
ユーザーが PROM の設定を変更できないようにする | |
アボートシーケンスを無効にする |
ユーザーが PROM にアクセスできないようにする |
この節では、ログインの制御と監視について説明します。
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 |
スーパーユーザーになるか、同等の役割を引き受けます。
logins コマンドを使用して、パスワードを持っていないユーザーをすべて表示します。
# logins -p |
-p オプションを指定すると、パスワードを持たないユーザーが表示されます。logins コマンドでは、ローカルマシン上およびネットワーク上のパスワードデータベースを使用できます。このコマンドでは、ローカルの /etc/passwd ファイルを使用できます。このコマンドではまた、ネームサービスのパスワードデータベースを使ってユーザーのログイン状態を表示できます。
次の例では、パスワードを持っていないユーザー pmorph が表示されます。
# logins -p pmorph 501 other 1 Polly Morph # |
スーパーユーザーになるか、同等の役割を引き受けます。
エディタを使用して、/etc/nologin ファイルを作成します。
# vi /etc/nologin |
システムの利用に関するメッセージを入力します。
ファイルを閉じて、保存します。
このファイルを作成することによって、システムシャットダウンや定常的な保守の際にユーザーログインを禁止できます。nologin ファイルが存在するシステムにユーザーがログインしようとすると、このファイルの内容が表示されます。そのあとユーザーのログインは中断されます。
スーパーユーザーのログインは影響を受けません。詳細については、nologin(4) のマニュアルページを参照してください。
この例は、システムが利用できないことをユーザーに通知する方法を示しています。
# vi /etc/nologin (ここでシステムメッセージを追加する) # cat /etc/nologin ***ログインは許可されません。*** ***システムは AM12:00 まで利用できません。*** |
システムを実行レベル 0、すなわちシングルユーザーモードにすることもできます。シングルユーザーモードに変更する方法の詳細については、『Solaris のシステム管理 (基本編)』の「システムのシャットダウン (手順)」を参照してください。
/var/adm ディレクトリに loginlog ファイルを作成します。
# touch /var/adm/loginlog |
loginlog ファイルに root の読み取り権と書き込み権を設定します。
# chmod 600 /var/adm/loginlog |
loginlog ファイルのグループのメンバーシップを sys に変更します。
# chgrp sys /var/adm/loginlog |
間違ったパスワードを使用してシステムに 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 つのポートにログインしたまま別のポートでパスワードをテストしてください。ログアウトして新しいパスワードをテストすると、元どおりログインできなくなることがあります。まだ別のポートにログインしていれば、元に戻ってミスを訂正できます。
スーパーユーザーになるか、または同等の役割を引き受けます。
シリアルデバイスのリストが入った /etc/dialups ファイルを作成します。このファイルには、ダイヤルアップパスワードで保護されているすべてのポートを含めてください。
/etc/dialups ファイルは次のようになります。
/dev/term/a /dev/term/b /dev/term/c |
ダイヤルアップパスワードを要求するログインプログラムが入った /etc/d_passwd ファイルを作成します。
uucico、sh、ksh、csh など、ユーザーがログイン時に実行できるシェルプログラムを含めます。/etc/d_passwd ファイルは次のようになります。
/usr/lib/uucp/uucico:encrypted-password: /usr/bin/csh:encrypted-password: /usr/bin/ksh:encrypted-password: /usr/bin/sh:encrypted-password: |
この手順のあとの方で、各ログインプログラムに暗号化されたパスワードを追加することになります。
2 つのファイルの所有権を root に設定します。
# chown root /etc/dialups /etc/d_passwd |
2 つのファイルのグループの所有権を root に設定します。
# chgrp root /etc/dialups /etc/d_passwd |
2 つのファイルの root の読み取り権と書き込み権を設定します。
# chmod 600 /etc/dialups /etc/d_passwd |
暗号化パスワードを作成します。
一時的なユーザーを作成します。
# useradd username |
一時的なユーザーのパスワードを作成します。
# passwd username |
# grep username /etc/shadow> username.temp |
username.temp ファイルを編集します。
暗号化パスワードを除くすべてのフィールドを削除します。2 つ目のフィールドに、暗号化パスワードが入っています。
たとえば、次の行では、暗号化パスワードは U9gp9SyA/JlSk です。
temp:U9gp9SyA/JlSk:7967:::::7988: |
一時的なユーザーを削除します。
# userdel username |
username.temp ファイルから /etc/d_passwd ファイルに暗号化パスワードをコピーします。
ログインシェルごとに別のパスワードを作成するか、共通のパスワードを使用できます。
パスワードをダイヤルアップユーザーに知らせます。
盗聴のおそれがない方法でパスワードを知らせる必要があります。
デフォルトでは、ユーザーパスワードは crypt_unix アルゴリズムで暗号化されます。Solaris 9 12/02 リリースでは、デフォルトのパスワード暗号化アルゴリズムを変更することによって、MD5 や Blowfish など、より強力な暗号化アルゴリズムを使用することができます。ユーザーがパスワードを次に変更するときには、パスワードは、指定されているアルゴリズムによって暗号化されます。
以前の Solaris リリースが動作している環境で以下の各手順を使用することはできません。この機能は、Solaris 9 12/02 リリースが動作しているマシンでのみ有効です。
この手順では、ユーザーがパスワードを変更するときのデフォルト暗号化アルゴリズムとして BSD-Linux バージョンの MD5 アルゴリズムが使用されます。このアルゴリズムは、Solaris、BSD、Linux バージョンの UNIX が混在するマシンネットワークに適しています。パスワード暗号化アルゴリズムとアルゴリズム識別子の一覧は、表 15–1 を参照してください。
スーパーユーザーになるか、同等の役割を引き受けます。
暗号化アルゴリズムの識別子を、/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) のマニュアルページを参照してください。
この例では、CRYPT_DEFAULT 変数の値として Blowfish アルゴリズムの識別子、すなわち 2a が指定されています。パスワードの暗号化を制御する policy.conf のエントリは次のようになります。
CRYPT_ALGORITHMS_ALLOW=1,2a,md5 #CRYPT_ALGORITHMS_DEPRECATE=__unix__ CRYPT_DEFAULT=2a |
この構成は、Blowfish アルゴリズムを使用する BSD システムに対応しています。
パスワード暗号化アルゴリズムを NIS+ マスター上の /etc/security/policy.conf ファイルに指定します。
混乱をできるだけ少なくするために、NIS+ マスターの /etc/security/policy.conf ファイルを NIS+ ドメインのすべてのホストにコピーします。
NIS+ ドメインのユーザーがパスワードを変更すると、NIS+ ネームサービスは、NIS+ マスターにある/etc/security/policy.conf ファイルのアルゴリズム構成を調べます。rpc.nispasswd デーモンが動作するこの NIS+ マスターが、暗号化されたパスワードを作成します。
パスワード暗号化アルゴリズムを NIS クライアント上の /etc/security/policy.conf ファイルに指定します。
変更された /etc/security/policy.conf ファイルを NIS ドメインのすべてのクライアントマシンにコピーします。
混乱をできるだけ少なくするために、変更された /etc/security/policy.conf ファイルを NIS ルートサーバーとスレーブサーバーにコピーします。
NIS ドメインのユーザーがパスワードを変更すると、NIS クライアントは、/etc/security/policy.conf ファイルにある自身のローカルアルゴリズム構成を調べ、パスワードを暗号化します。
適切に構成された LDAP クライアントでは、新しいパスワードアルゴリズムを使用できます。LDAP クライアントは NIS クライアントと同じように動作します。
パスワード暗号化アルゴリズムを LDAP クライアント上の /etc/security/policy.conf ファイルに指定します。
変更された policy.conf ファイルを LDAP ドメインのすべてのクライアントマシンにコピーします。
クライアントの /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 ファイルに新しいモジュールとその識別子を指定してください。
pkgadd コマンドを実行してソフトウェアを追加します。
ソフトウェアの追加方法については、『Solaris のシステム管理 (基本編)』の「ソフトウェアパッケージの追加または削除」を参照してください。
/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 |
/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 章「役割によるアクセス制御 (手順)」を参照してください。
sulog ファイルには、ユーザーからスーパーユーザーに切り替えたときの su コマンドの使用を含め、すべての su コマンドの使用歴が記録されます。
スーパーユーザーになるか、同等の役割を引き受けます。
/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 |
/etc/default/su ファイルを編集します。
次の行のコメントを解除します。
CONSOLE=/dev/console |
su コマンドを使ってスーパーユーザー になります。
システムコンソールにメッセージが出力されるか確認します。
この方法では、現在作業中のシステムでスーパーユーザーのアクセス権を取得しようとする人をただちに検出できます。
Solaris リリースをインストールすると、デフォルトで、スーパーユーザーログインはコンソールに限定されます。
/etc/default/login ファイルを編集します。
次の行のコメントを解除します。
CONSOLE=/dev/console |
スーパーユーザーアクセスをコンソールに限定しておくと、コンソールからしかスーパーユーザーとしてシステムにログインできません。このシステムにリモートログインするユーザーは、まず自分のユーザーログインを使用してログインする必要があります。自分のユーザー名でログインしたあとに、su コマンドを使ってスーパーユーザーになります。
このシステムにスーパーユーザーとしてリモートログインして、操作が失敗することを検証してください。
マシンの起動時にパスワードの入力を必須にすることによって物理マシンを保護することができます。さらに、ユーザーがアボートシーケンスを使ってウィンドウシステムを離れるのを防ぐことによってマシンを保護する方法もあります。
スーパーユーザーになるか、同等の役割を引き受けます。
端末から PROM セキュリティモードに入ります。次の行を入力します。
# eeprom security-mode=command Changing PROM password: New password: password Retype new password: password |
値として command か full を選択します。詳細については、eeprom(1M) のマニュアルページを参照してください。
PROM パスワードの入力を要求されない場合は、システムがすでに PROM パスワードを持っています。PROM パスワードを変更する場合は、次のコマンドを実行します。
# eeprom security-password=<Type the Return key> Changing PROM password: New password: password Retype new password: password |
新しい PROM セキュリティモードとパスワードはただちに有効になりますが、それがわかるのは、ほとんどの場合、次回の起動時です。
PROM パスワードを忘れないでください。このパスワードがないと、ハードウェアは使用できません。
マシンのアボートシーケンスを無効にするには、次の手順を使用します。デフォルトのシステム動作では、システムのアボートシーケンスは有効になっています。
一部のサーバーシステムにはキースイッチがあります。このスイッチを安全な位置に設定すると、ソフトウェアキーボードのアボート設定が無効になります。そのため、次の手順で行なった変更が実装されないことがあります。
スーパーユーザーになるか、同等の役割を引き受けます。
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 |
キーボードのデフォルトを更新します。
# kbd -i |