連載
» 2001年08月18日 00時00分 公開

ゼロから始めるLinuxセキュリティ(1):インストール直後に絶対やるべき作業と設定 (3/3)

[大貫大輔,株式会社ラック/不正アクセス対策事業本部]
前のページへ 1|2|3       

ユーザーとアカウントの管理および認証方式

アカウントおよびパスワードの管理

 ここで重要なことは、不要なアカウントを作成しないようにすることです。管理者が1人であれば、当然1つで十分です。管理者が変わったときなどは、すぐに前管理者のアカウントを削除し、rootのパスワードも変更しましょう。当然のことながら推測されてしまいそうな簡単なパスワードを設定するようなことは絶対にやめましょう。

 また、アプリケーションを起動するための専用のユーザーを作ることがあるかと思います。SMTPサービスを提供するのに最近使われるようになってきたqmailでは、専用のユーザーとグループを作る必要があります。このアカウントの作成に際してuseraddコマンドを使うのは問題ないのですが、必ずsオプションを指定して/bin/falseなどにするようにしましょう。

# /usr/sbin/useradd -u 10001 -g 10002 -s /bin/false hoge 

 sオプションを指定しないと勝手に「/bin/bash」にされて、何らかの原因(セキュリティホールなど)によりこのアカウントでログインされるとシェルを起動してしまいます。sオプションで/bin/falseのようにシェルを架空のものにしておけば、このアカウントでログインを許してしまったとしてもシェルが起動できないため、コマンドが実行される恐れはありません()。

注:これでも、直接シェルが起動されてしまうようなバッファオーバーフロー系の攻撃にはあまり意味を持ちません。ただし、デーモンをrootで起動するよりは安全といえます。

シャドウパスワード

 /etc/passwdファイルは、恐らく以下のような記述になっているものと思います。

hoge:x:1000:1000:hoge:/home/hoge:/bin/bash 

 コロン(:)で区切られたフィールドは、それぞれ以下のような意味を持っています。

アカウント名:暗号化されたパスワード:ユーザーID:グループID:フルネーム:ホームディレクトリ:シェル 

 「暗号化されたパスワード」を格納する2つ目のフィールドは「x」になっていると思います。これは、シャドウパスワードが有効になっているからです。最近のディストリビューションでは、インストール時にこの機能を有効にするか聞かれるのでぜひ有効にしましょう。シャドウパスワードが有効になっていると、/etc/passwdのパスワードフィールドは上記のように「x」に置き換わり、暗号化されたパスワードはrootしか見ることのできない/etc/shadowファイルに記録されます

 シャドウパスワードを無効にした場合、暗号化されたパスワードはだれでも読むことができる/etc/passwdに保存されます。パスワードがだれにでも見られるようになっていると、パスワードクラッキングソフトを使って簡単にパスワードを推測されてしまいます。

MD5暗号化パスワード

 この機能もシャドウパスワードと同じく、インストール時に使用するかどうかを聞かれます。Linuxでは、この機能を有効にしなくてもcrypt()によりパスワードを暗号化します。

 UNIXの場合、デフォルトの暗号化アルゴリズムはDESが使われていますが、DESには入力文字列長に8文字という制限があります。しかし、MD5ではこの制限がなくなります。つまり、8文字以上のパスワードを設定できるようになります。当然ながら、文字数が多ければそれだけ暗号化パスワードを解読するのが困難になります。

 この機能を生かすためにも、8文字以上のパスワードを設定しましょう)。

注:MD5だからといって、DESよりパスワードクラックからの脅威が大きく軽減されるわけではありません。MD5で暗号化しても、8文字以下のパスワードを設定してしまえばDESと差はありません。

rootになれるユーザーの制限

 デフォルトの設定では、suコマンドを実行してパスワード認証をクリアすればだれでもrootになれます。これはセキュリティ上好ましくありません。そこで、suコマンドでrootになれるアカウントを制限するように設定します。

 まず、/etc/login.defsファイルの編集が必要です。このファイルを開いたら、以下の1行を追加します。

SU_WHEEL_ONLY        yes

 次に/etc/groupファイルのwheelの行を修正します。ここでは、例としてrootになれるアカウント名を「user」に限定することにします。もし、user以外のアカウントにもrootになることを許可するのであれば、カンマで区切って列挙します。

wheel:x:10:root,user 

 さらに、上記の設定を有効にするため/etc/pam.d/suファイルに以下の行を追加します。

auth    required    /lib/security/pam_wheel.so use_uid group=wheel 

 これで、suコマンドでrootになれるアカウントはuserのみとなります。

rootアカウントでのリモートログインの不許可

 リモートからLinuxマシンのメンテナンスを行うときは、ssh以外使わないようにします。しかし、sshのデフォルト設定はrootアカウントでのログインを許可してしまいます。そこで、rootアカウントでは直接ログインできないようにsshの設定ファイルを変更します。こうすることで、sshによる認証とsuコマンドによる認証の2段階を経なければrootになれないようになり、セキュリティを強化できます。

 まず、/etc/ssh/sshd_configファイルをviを使って変更します。

# vi /etc/ssh/sshd_config 

 このファイルの18行目あたりに以下のような記述があります。

PermitRootLogin yes 

 これを無効にするため「yes」を「no」に変更して、

PermitRootLogin no 

 設定ファイルの変更を反映させるためにsshデーモンをreloadします。

# /etc/rc.d/init.d/sshd reload 

 reloadしたら、正しく機能するか確認してみましょう。

# ssh -l root localhost
root@loclahost's password: 

 設定が反映されると、正しいパスワードを入力してもrootアカウントではログインできません。

PAMについて

 ここでPAMPluggable Authentication Modules)についてもお話ししておく必要があるでしょう。PAMを一言でいうと、認証方式を一括管理しているプログラムです。以前はアプリケーションごとに何種類もの認証方式があり、その認証方式の変更には再コンパイルが必要でした。しかし、PAMを用いることで、認証方式の変更のみであればPAMの設定ファイルを編集するだけで済むようになります。最近のディストリビューションであればPAMに対応しています。

 Red Hat Linux 7.1Jの場合、PAMの設定ファイルは/etc/pam.dディレクトリに、プログラムごとに用意されています。

chfs ftp login passwd rexec rsh sshd sudo
chsh kbdrate other ppp rlogin smtp su system-auth

 これらがすべて必要というわけではありません。例えば、/etc/pam.dディレクトリの中にrlogin用の設定ファイルがあります。現在の設定では、このサービスは停止していると思いますが、これが提供されていると仮定してみます。この状態でloginで接続要求があると、Linuxは以下のような動作をします。

  • 最初に/etc/pam.d/rloginファイルを探す
  • /etc/pam.d/rloginがなければ/etc/pam.d/otherファイルを参照する
  • otherファイルには認証を拒絶する設定が記述されているのでPAMが認証を拒否する

 つまり、/etc/pam.dディレクトリに該当するサービス用のファイルが用意されていなければ、うっかり不要なサービスを提供していたとしても接続を拒否できるというわけです。よって、危険なサービスに関する設定ファイルについてはファイル名を変更してしまいましょう。ここでいう危険なサービスとは、rshrexecrloginの3つになります。

# mv rsh .rsh
# mv rexec .rexec
# mv rlogin .rlogin 

 このように、mvコマンドを利用してドットファイルにしてしまいましょう。

次回予告

次回は、ファイルシステムのセキュリティおよびinetd+TCP_Wrapper、xinetdによるアクセス制御などについて解説します。掲載は9月中旬の予定です。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。