システムやネットワークへの無許可のログインも防止する必要があります。この制限は、パスワード制御とログイン制御によって行うことができます。システム上のすべてのアカウントには、パスワードを設定します。パスワードはシンプルな認証メカニズムです。アカウントにパスワードを設定しないと、ユーザー名を推測できる侵入者であれば誰でもネットワーク全体にアクセスできることになります。力ずくの野蛮な攻撃を許さないためには、強力なパスワードアルゴリズムが必要です。
ユーザーがシステムにログインすると、login コマンドは /etc/nsswitch.conf ファイル内の情報に従って、該当するデータベースを照会します。このファイルには次のエントリを含めることができます。
files – ローカルマシンの /etc ファイルを指定する
nis – NIS マスターサーバーの NIS データベースを指定する
nisplus – NIS+ root サーバーの NIS+ データベースを指定する
ldap – LDAP サーバーの LDAP ディレクトリサービスを指定する
nsswitch.conf ファイルの詳細は、nsswitch.conf(4) のマニュアルページを参照してください。ネームサービスまたはディレクトリサービスの詳細は、『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』または『Solaris のシステム管理 (ネーミングとディレクトリサービス : FNS、NIS+ 編)』を参照してください。
login コマンドは、入力されたユーザー名とパスワードを確認します。ユーザー名がパスワードファイルにないと、 login コマンドはマシンへのアクセスを拒否します。あるいは、入力されたユーザー名に対するパスワードが正しくないと、login コマンドはマシンへのアクセスを拒否します。有効なユーザー名とそれに対応するパスワードが入力されれば、システムはマシンへのアクセスをユーザーに許可します。
Solaris システムには、精巧な認証メカニズムと承認メカニズムが備わっています。ネットワークレベルでの認証メカニズムや承認メカニズムについては、リモートアクセスの認証と承認を参照してください。
ユーザーはシステムにログインするときに、ユーザー名とパスワードの両方を入力する必要があります。ログイン名は公開されていますが、パスワードは秘密にしなければなりません。ユーザーは、自分のパスワードを他人に知られてはいけません。また、ユーザーが各自のパスワードを慎重に選択し、頻繁に変更するようにしなければなりません。
パスワードは、最初にユーザーアカウントを設定するときに作成されます。ユーザーアカウントのセキュリティを管理するために、パスワード有効期限を設定し、パスワードを定期的に強制変更することができます。また、ユーザーアカウントを無効にして、パスワードをロックすることもできます。パスワードの管理の詳細については、『Solaris のシステム管理 (基本編)』の「ユーザーアカウントとグループの管理 (概要)」および passwd(1) のマニュアルページを参照してください。
ネットワークで /etc 内のファイルを使用している場合、パスワード情報はシステムの /etc/passwd ファイルと /etc/shadow ファイルに保持されます。ユーザー名などの情報は、パスワードファイル /etc/passwd に保持されます。暗号化されたパスワードは、/etc/shadow という「シャドウファイル」に保持されます。このセキュリティ方式によって、暗号化されたパスワードにアクセスされることを防ぎます。/etc/passwd ファイルは、マシンにログインするユーザーであれば誰でも使用できますが、/etc/shadow ファイルを読み取ることができるのはスーパーユーザーだけです。passwd コマンドを使用すると、ローカルシステム上のユーザーのパスワードを変更できます。
ネットワークで NIS+ を使用している場合、パスワード情報は NIS+ データベースに保持されます。NIS+ データベース内の情報は、アクセス権を許可されたユーザーを制限することによって保護できます。NIS+ データベースに保持されているユーザーのパスワードを変更するには、passwd コマンドを使用します。
ネットワークで NIS を使用している場合、パスワード情報は NIS パスワードマップに保持されます。NIS では、パスワードの有効期間を指定できません。NIS パスワードマップに保持されているユーザーのパスワードを変更するには、passwd コマンドを使用します。
Solaris の LDAP ネーミングサービスは、パスワード情報とシャドウ情報を LDAP ディレクトリツリーの ou=people コンテナに格納します。Solaris LDAP ネーミングサービスクライアントでユーザーのパスワードを変更するには、passwd –r ldap コマンドを使用します。LDAP ネーミングサービスは、パスワードを LDAP リポジトリに格納します。
Solaris 9 12/02 リリースでは、SunTM Open Net Environment (Sun ONE) Directory Server 上のパスワードポリシーが適用されます。つまり、クライアントの pam_ldap モジュールは、Sun ONE Directory Server で適用されているパスワードポリシー制御に従います。詳細は、『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』の「LDAP ネームサービスのセキュリティモデル」を参照してください。
パスワードの強力な暗号化は攻撃に対する最初の障壁になります。Solaris 9 12/02 リリースには、4 つのパスワード暗号化モジュールがあります。MD5 モジュール群と Blowfish モジュールでは、UNIX アルゴリズムよりも強固なパスワードの暗号化が行われます。
サイトのアルゴリズム構成は、/etc/security/policy.conf ファイルに指定します。policy.conf ファイルには、次の表に示す識別子でアルゴリズムを指定します。
表 15–1 パスワードの暗号化アルゴリズム
識別子 |
説明 |
アルゴリズムのマニュアルページ |
---|---|---|
1 |
BSD システムや Linux システムの MD5 アルゴリズムと互換性のある MD5 アルゴリズム |
crypt_bsdmd5(5) |
2a |
BSD システムの Blowfish アルゴリズムと互換性のある Blowfish アルゴリズム |
crypt_bsdbf(5) |
md5 |
BSD バージョンや Linux バージョンの MD5 よりも強力とされている Sun MD5 アルゴリズム |
crypt_sunmd5(5) |
__unix__ |
従来の UNIX 暗号化アルゴリズム。policy.conf ファイルのデフォルトモジュールはこのアルゴリズム |
crypt_unix(5) |
次に、デフォルトの policy.conf ファイルを示します。
# # Copyright 1999-2002 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # /etc/security/policy.conf # # security policy configuration for user attributes. see policy.conf(4) # #ident "@(#)policy.conf 1.6 02/06/07 SMI" # AUTHS_GRANTED=solaris.device.cdrw PROFS_GRANTED=Basic Solaris User # crypt(3c) Algorithms Configuration # # CRYPT_ALGORITHMS_ALLOW specifies the algorithms that are allowed to # be used for new passwords. This is enforced only in crypt_gensalt(3c). # CRYPT_ALGORITHMS_ALLOW=1,2a,md5 # To deprecate use of the traditional unix algorithm, uncomment below # and change CRYPT_DEFAULT= to another algorithm. For example, # CRYPT_DEFAULT=1 for BSD/Linux MD5. # #CRYPT_ALGORITHMS_DEPRECATE=__unix__ # The Solaris default is the traditional UNIX algorithm. This is not # listed in crypt.conf(4) since it is internal to libc. The reserved # name __unix__ is used to refer to it. # CRYPT_DEFAULT=__unix__ |
CRYPT_DEFAULT の値を変更すると、新しいユーザーのパスワードは、新しい値に対応するアルゴリズムを使って暗号化されます。現在のユーザーがパスワードを変更したときに新しいパスワードがどのアルゴリズムで暗号化されるかは、古いパスワードがどのように暗号化されているかによって異なります。
たとえば、CRYPT_ALGORITHMS_ALLOW=1,2a,md5 かつ CRYPT_DEFAULT=1 であるとします。次の表は、パスワードの暗号化にどのアルゴリズムが使用されるかを示します。
元のパスワードアルゴリズム |
変更後のパスワードアルゴリズム |
意味 |
---|---|---|
crypt_bsdmd5 |
crypt_bsdmd5 |
crypt_bsdmd5 の識別子は 1、すなわち CRYPT_DEFAULT の値。ユーザーのパスワードは引き続き crypt_bsdmd5 アルゴリズムで暗号化される |
crypt_bsdbf |
crypt_bsdbf |
crypt_bsdbf の識別子は 2a。CRYPT_ALGORITHMS_ALLOW リストには 2a があるため、新しいパスワードは crypt_bsbdf アルゴリズムで暗号化される |
crypt_md5 |
crypt_md5 |
crypt_md5 の識別子は md5。CRYPT_ALGORITHMS_ALLOW リストには md5 があるため、新しいパスワードは crypt_md5 アルゴリズムで暗号化される |
crypt_unix |
crypt_bsdmd5 |
crypt_unix の識別子は __unix__。__unix__ 識別子は CRYPT_ALGORITHMS_ALLOW リストにないため、crypt_unix アルゴリズムを使用することはできない。新しいパスワードは CRYPT_DEFAULT アルゴリズムで暗号化される |
アルゴリズムの選択を構成するための構文については、policy.conf(4) のマニュアルページを参照してください。新しいパスワード暗号化アルゴリズムを使用する方法については、パスワード暗号化のデフォルトアルゴリズムを変更するを参照してください。
システムにアクセスする一般的な方法としては、通常のユーザーログインを使用するものと、root ログインを使用するものがあります。また、多数の特別な「システム」ログインを使用すると、ユーザーは root アカウントを使用しなくても管理コマンドを実行できます。システム管理者は、これらのログインアカウントにパスワードを割り当てます。
次の表に、システムのログインアカウントとその用途を示します。システムログインは特殊な機能を実行します。それぞれのログインに固有のグループ識別子番号 (GID) が付いています。各ログインには固有のパスワードを設定し、必要のある人だけに知らせるようにしてください。
表 15–2 システムログイン
ログインアカウント |
グループ ID |
用途 |
---|---|---|
root |
0 |
ほぼ無制限。ほかのすべてのログイン、保護、アクセス権に優先する。root アカウントはシステム全体へのアクセス権を持つ。root ログインのパスワードはきわめて厳密に保護する必要がある。root アカウントはほとんどの Solaris コマンドを所有する |
daemon |
1 |
バックグラウンド処理を制御する |
bin |
2 |
一部の Solaris コマンドを所有する |
sys |
3 |
多数のシステムファイルを所有する |
adm |
4 |
特定のシステム管理ファイルを所有する |
lp |
71 |
プリンタ用のオブジェクトデータファイルとスプールデータファイルを所有する |
uucp |
5 |
UNIX 間のコピープログラム、UUCP 用のオブジェクトデータファイルとスプールデータファイルを所有する |
nuucp |
9 |
システムにログインしてファイル転送を開始するためにリモートシステムで使用される |
侵入者にとって、リモートログインは魅力的な手段です。Solaris オペレーティング環境には、リモートログインを監視、制限、および無効にするコマンドがいくつもあります。手順については、ログインとパスワードのセキュリティを参照してください。
デフォルトでは、システムのマウスやキーボード、フレームバッファ、オーディオデバイスなど、一定のシステムデバイスを、リモートログインを通して制御したり読み取ったりすることはできません。詳細は、logindevperm(4) のマニュアルページを参照してください。
モデムやダイヤルアップポートを通してアクセスされうるコンピュータには、セキュリティ層をもう 1 つ追加できます。つまり、モデムやダイヤルアップポートを通してシステムにアクセスするユーザーには「ダイヤルアップパスワード」を要求することができます。ダイヤルアップパスワードは、ユーザーがマシンへのアクセス権を取得する前に入力する必要があるパスワードです。
スーパーユーザー以外はダイヤルアップパスワードを作成または変更できません。システムの完全性を確保するために、月に一度はパスワードを変更する必要があります。この機能の最も有効な使用方法は、ゲートウェイシステムへのアクセス権を取得するためのダイヤルアップパスワードを要求することです。ダイヤルアップパスワードの設定方法については、ダイヤルアップパスワードを作成する方法を参照してください。
ダイヤルアップパスワードの作成には、/etc/dialups と /etc/d_passwd という 2 つのファイルが必要です。dialups ファイルには、ダイヤルアップパスワードを必要とするポートのリストを含みます。d_passwd ファイルには、追加のダイヤルアップパスワードとして暗号化パスワードを必要とするシェルプログラムのリストを含みます。これら 2 つのファイルの情報は次のように処理されます。
/etc/passwd 内のユーザーのログインシェルが /etc/d_passwd 内のエントリと一致する場合、そのユーザーはダイヤルアップパスワードを入力する必要があります。
/etc/passwd 内のユーザーのログインシェルが /etc/d_passwd 内で見つからない場合、/usr/bin/sh のパスワードエントリが使用されます。
/etc/passwd 内のログインシェルフィールドが空の場合は、/usr/bin/sh のパスワードエントリが使用されます。
/etc/passwd 内のユーザーのログインシェルが /etc/d_passwd 内で見つからない場合、そのユーザーはデフォルトのパスワードを入力する必要があります。デフォルトのパスワードは /usr/bin/sh のエントリです。
/etc/passwd 内のログインシェルフィールドが空の場合、そのユーザーはデフォルトのパスワードを入力する必要があります。デフォルトのパスワードは /usr/bin/sh のエントリです。
/etc/d_passwd に /usr/bin/sh のエントリがない場合、/etc/passwd 内のログインシェルフィールドが空のユーザー、または /etc/d_passwd 内のエントリと一致しないユーザーには、ダイヤルアップパスワードの入力を求めるプロンプトは表示されません。
/etc/d_passwd にエントリ /usr/bin/sh:*: しか入っていない場合、ダイヤルアップログインは使用できません。