第1回 インストール直後に絶対やるべき作業と設定 

大貫大輔
株式会社ラック
不正アクセス対策事業本部
2001/8/18

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

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

 ここで重要なことは、不要なアカウントを作成しないようにすることです。管理者が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月中旬の予定です。

3/3

Index
ゼロから始めるLinuxセキュリティ
  Page 1
終わらないセキュリティ対策の世界
  Page 2
OSインストール時の注意点
 インストールは必要最小限の構成で
 パッケージを最新版にアップデート
不要なサービスの停止
 停止すべき「不要なサービス」
デーモンの起動について
 単独で起動するデーモンの起動と停止
 inetd経由で起動されるデーモンの停止方法
 xinetdについて
  Page 3
ユーザーとアカウントの管理および認証方法

 rootになれるユーザーの制限
 rootアカウントでのリモートログインの不許可
 PAMについて

連載 ゼロから始めるLinuxセキュリティ


 Linux Squareフォーラム セキュリティ関連記事
連載:習うより慣れろ! iptablesテンプレート集(全4回)
初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう
連載:ゼロから始めるLinuxセキュリティ(全11回)
奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見
特集:WebDAV時代のセキュリティ対策[前編]
WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる
特集:FreeS/WANによるIPSecの導入と運用[前編]
LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう
特集:Linux以外のIPSecスタックとの相互接続[前編]
別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる
特集:sshでセキュアネットワーク
サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH