第1回 パスワードの管理と運用を考える
管理者として避けて通れないのが、一般ユーザーも含めたパスワードの管理と運用である。一般ユーザーのパスワードがセキュリティホールになる可能性もあるが、ユーザーに対して「適切なパスワードにしろ」というだけではうまくいくはずがない。管理者として何ができるのか、何をすべきなのかを再検討してみよう。(編集局)
浅野史彦、小川典嗣
アイティーブースト(http://www.itboost.co.jp/)
2002/6/15
LinuxでTelnetやFTPなどのサービスを利用するには、システムからその利用を許可されている必要があります。大きくは、
- 「あるIPアドレスからの要求は拒否する」など
接続元ホストによって許可/拒否を決定する方法
- 「あるユーザーからの接続は認める」など
接続ユーザーによって許可/拒否を決定する方法
の2つが考えられます。通常はこれら2つの方法を組み合わせて、ユーザーにシステムを利用させるのですが、今回は後者のユーザーベースで認証する方法を取り上げます。
パスワードの仕組みとウイークポイント
Linuxは、ログインプロセスによって正当なユーザーであるかどうかを検証します。ユーザーがシステムにログインする際は、ユーザー名とパスワードの提示を行い、システムの利用の可否や割り当てられた権限での作業を行うことができます。
そのため、パスワードは絶対に破られてはならないものになります。小まめに情報をチェックしてセキュリティを保っているつもりでも、簡単に破られるパスワードを設定していることがセキュリティホールになっている場合も多くあります。
■Linuxにおける認証の仕組み
従来のUNIXの認証方式は、単純に/etc/passwdを参照するというものでした。しかし、現在のLinuxディストリビューションはセキュリティ確保のためMD5やシャドウパスワードなど、さまざまな認証方法を採用するようになっています。そうなってくると、ユーザー認証が必要なプログラムもそれぞれが多くの認証方式に対応しなければならなくなってきます。これでは開発の手間ばかりが増加してしまいます。
そこで、アプリケーションからより簡単にユーザー認証のカスタマイズを行うために、最近のLinuxおよびUNIXではPAM(Pluggable Authentication Modules)が利用されています。現在では、ほとんどのディストリビューションがデフォルトで利用しています。従来の認証が必要な際も、PAMから呼び出されて利用されます。
認証に必要なデータをローカルマシン以外から取得することも可能です。その場合は、PAMの設定(Red Hat Linuxでは/etc/pam.dディレクトリ以下の設定ファイル)とともに、NSS(Name Service Switch:/etc/nsswitch.conf)の設定が必要になります。
/etc/nsswitch.conf このファイルでは、アカウントやパスワードなどのデータをどこから検索するのかを定義します。特に何も意識しなければ、ローカルに存在する/etc/passwdや/etc/shadow、/etc/groupといったファイルが参照されます。この設定ファイルを編集することによって、ユーザーアカウントなどの情報の検索順序をLDAPデータベース→NISデータベース→ローカルファイルのように指定することができます。 |
/etc/pam.dディレクトリ このディレクトリに各サービスの設定ファイルを作成します。設定ファイルでは、認証方法、パスワードの変更方法、認証後の動作などを設定できます。 |
図1 PAM、NSSと各種サーバの関係 |
また、一言に「パスワード」といっても、さまざまなものが存在します。システムにアクセスするためのパスワードは基本的には/etc/passwd(最近は/etc/shadow)にありますが、SambaやApacheのベーシック認証、APOPなどを使用する場合は/etc/passwdとは別のファイルで独自に管理されます。
■パスワードへの攻撃と対策
パスワードはどのようにして破られるのでしょうか。以下のようなことがその原因として考えられます。
- 総当たり攻撃
パスワードは文字の組み合わせです。その組み合わせをすべて試せば、どれかは正解になります。パスワードに設定できるASCII文字95種で、例えば4文字のパスワードを設定すると8000万以上の組み合わせが考えられます。8000万以上というと十分にみえるかもしれませんが、最新のコンピュータでは毎秒800万件近くの組み合わせを検証できるため、ものの十数秒でパスワードを破られてしまいます。
パスワードを8文字まで増やすと、6600兆もの組み合わせになります。総当たりで正解を見つけようとすると、単純計算で20年以上の時間が必要になります。
- 辞書攻撃
総当たり攻撃よりも効率よくパスワードを破る方法として、辞書攻撃があります。パスワードに使われそうな単語を集めた辞書をpasswdプログラムと同じ暗号化アルゴリズムで暗号化し、それらを比較することでパスワードを解析します。
総当たりや辞書攻撃からパスワードを守るには、簡単に破られるパスワードを設定しないことが原則となります。具体的には、以下の項目について考える必要があるでしょう。
安易な文字列 | 自分の名前や生年月日、電話番号など、簡単に予測できるものは使用しない |
短過ぎる パスワード |
総当たり攻撃に弱い |
辞書に載って いるような単語 |
辞書攻撃に弱い |
記憶できない 文字列 |
パスワードを長く、複雑にし過ぎると覚えられない。すると、逆にデスクトップ上にパスワードのメモを張り付けたりするユーザーが増え、危険になる |
定期的な パスワード変更 |
パスワードを変更しないと総当たり攻撃に弱い |
- 盗聴
ネットワークサービスの多くは、それ自身暗号化機能を持っていません。FTP、Telnet、POP3など、パスワード認証を伴うネットワークサービスは、アカウント/パスワードを平文のままネットワークに流してしまいます。平文のアカウント/パスワードは、盗聴ツールを使えば非常に簡単に見ることができます。
盗聴からパスワードを守るには、ワンタイムパスワードの利用やデータの暗号化が考えられます。
- ユーザーの意識の問題
安易に他人にパスワードを教えてしまうことや、パスワードを覚えようとせず、メモをディスプレイに張っているユーザーの存在は悩みの種の1つです。パスワードの大切さをユーザーに認識させる必要があります。
まずは、ユーザーに対してデータの大切さを教育する必要があります。また、パスワードの定期的な変更を強制する手段を提供しましょう。
■パスワード変更を強制する有効期限
パスワードに有効期限を設定することもできます。これは、/etc/shadowで管理されています(LDAPなどで管理することも可能です)。
/etc/shadowの各行には、「:」(コロン)で区切られた9つのフィールドが存在します。
- ログイン名
- 暗号化されたパスワード
- 1970年1月1日から最後にパスワードを変更した日までの日数
- パスワードが変更可となるまでの日数(最低日数)
- パスワードを変更しなければならなくなる日までの日数(有効日数)
- パスワード有効期限が来ることを何日前からユーザーに警告するか
- パスワード有効期限が過ぎてからアカウントがロックされるまでの日数
- 1970年1月1日からアカウントがロックされる日までの日数
- 予約欄。特に使用されていない
これらの値はvipwコマンドで編集するか、あるいはchageコマンドで設定可能です。ユーザーアカウントを引数にしてchageコマンドを実行すると、対話的に
- Minimum Password Age(最低日数)
- Maximum Password Age(有効日数)
- Last Password Change(最終変更日)
- Password Expiration Warning(アカウントをロックする日付)
- Password Inactive(パスワード期限切れ後、アカウントをロックするまでの日数)
を指定できます。
# chage test |
chageコマンド実行例 |
また、以下のオプションを利用すると、対話形式ではなく直接設定変更が可能です。ただし、この書式が使えるのはrootユーザーのみです。
オプション
|
設定項目
|
-m | パスワードの変更可能最低日数。パスワードを変更したくないユーザーが、パスワードを一時変更した後、もう一度元のパスワードを使用することを防ぐ効果がある。「0」を指定すると、ユーザーはいつでもパスワードを変更できる |
-M | パスワードの最大有効日数 |
-d | (1970年1月1日から)パスワード最終更新日までの日数。「YYYY/MM/DD」という書式でも指定できる |
-E | (1970年1月1日から)アカウントがロックされて使用できなくなるまでの日数。「YYYY/MM/DD」という書式でも指定できる |
-I | 有効期限後、アカウントがロックされるまでの日数。「0」を指定すると、この機能が無効になる |
-W | パスワードの変更が必要になる前に警告を出す日数 |
また、/etc/login.defsによって上記項目の一部のデフォルト値を設定できます。パスワードの変更可能最低日数、有効期限、警告日数は、それぞれPASS_MIN_DAYS、PASS_MAX_DAYS、PASS_WARN_AGEに対応しています。
1/2
|
|
||||
|
連載 Linux管理者への道 |
Linux Squareフォーラム Linux/システム学習関連記事 |
連載:Windowsユーザーに教えるLinuxの常識(全12回) Windowsのセオリーが通用しないLinux。Linux初心者向けに、LinuxというOSの考え方/常識をゼロから伝授! |
|
連載:LFSで作って学ぶLinuxの仕組み(全4回) 管理者(root)は、何をしなければならないのか? 管理に際して検討すべきことは? 管理のための技術とは? など、駆け出し管理者のための考え方や方法論を検討する |
|
連載:Linux管理者への道(全8回) 「Linux From Scratch」というシンプルなLinuxをインストール&環境構築する作業を通して、LinuxがOSとして機能するための仕組みや設定を見直そう |
|
Linux Squareフォーラム全記事インデックス |
|
- 新たなユーザー体験をもたらすKDE 4.1(前編) (2008/10/21)
約5年掛けて開発されてきた「KDE 4.1」がついに登場。アーキテクチャの変更だけでなく、ユーザー体験を大きく改善する機能が追加された - DNSリゾルバのニューフェイス「Unbound」 (2008/10/17)
2008年5月に登場したDNSリゾルバ「Unbound」は高速に動作し、DNSキャッシュポイズニング攻撃への耐性も高い - SugarCRMの簡単なカスタマイズ (2008/10/15)
ラベルの変更やフィールドの追加といった簡単なカスタマイズならば、ソースコードに手を加えることなく、SugarCRMの管理画面から可能です - タイマにまつわるエトセトラ (2008/10/9)
ハードウェアの進歩は日進月歩。それがかえって、古いハードを前提としたタイマの仕組みをめぐる議論を引き起こすことに……
|
|
スポンサーからのお知らせ
- - PR -
お勧め求人情報
**先週の人気講座ランキング**
〜ネットワーク編〜
◆ | New! 【サポート終了間近!】旧いJava SEの 最長15年延命&バージョンUP支援はこちら |
◆ | 2009年度の新人研修では、Javaがトレンド! 『でも、Javaってどう教えたらいいの?』 |
◆ | 将来へのヒントと実現できる採用企業紹介 『経験=価値』の確立と“3つのポイント” |
◆ | 効率よく確実な内部統制を!情報漏えい 事故の際に発生する総コストは○億円!! |
◆ |
組み込みソフトウェア専業ベンダが “腕磨きの場”として今、注目される理由 |
◆ | 「Office」のUI改善の歴史から紐解く “ユーザーエクペリエンス”とは何か |
◆ | 本当の意味での工事進行基準を満たせ! 〜エンジニア・キャリア進化論(第11回)〜 |
◆ | 「予想年間コスト算出機能」でコスト削減 効果も一目瞭然!サーバ運用の強い味方 |
◆ | 授業料が年額52万800円〜、 大学院で、お財布にやさしいスキルアップ |
◆ | これからSOA適用に取り組む企業へ SOAの中核に必須な重要ポイントを見極めよ! |