ここで重要なことは、不要なアカウントを作成しないようにすることです。管理者が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のようにシェルを架空のものにしておけば、このアカウントでログインを許してしまったとしてもシェルが起動できないため、コマンドが実行される恐れはありません(注)。
/etc/passwdファイルは、恐らく以下のような記述になっているものと思います。
hoge:x:1000:1000:hoge:/home/hoge:/bin/bash
コロン(:)で区切られたフィールドは、それぞれ以下のような意味を持っています。
アカウント名:暗号化されたパスワード:ユーザーID:グループID:フルネーム:ホームディレクトリ:シェル
「暗号化されたパスワード」を格納する2つ目のフィールドは「x」になっていると思います。これは、シャドウパスワードが有効になっているからです。最近のディストリビューションでは、インストール時にこの機能を有効にするか聞かれるのでぜひ有効にしましょう。シャドウパスワードが有効になっていると、/etc/passwdのパスワードフィールドは上記のように「x」に置き換わり、暗号化されたパスワードはrootしか見ることのできない/etc/shadowファイルに記録されます。
シャドウパスワードを無効にした場合、暗号化されたパスワードはだれでも読むことができる/etc/passwdに保存されます。パスワードがだれにでも見られるようになっていると、パスワードクラッキングソフトを使って簡単にパスワードを推測されてしまいます。
この機能もシャドウパスワードと同じく、インストール時に使用するかどうかを聞かれます。Linuxでは、この機能を有効にしなくてもcrypt()によりパスワードを暗号化します。
UNIXの場合、デフォルトの暗号化アルゴリズムはDESが使われていますが、DESには入力文字列長に8文字という制限があります。しかし、MD5ではこの制限がなくなります。つまり、8文字以上のパスワードを設定できるようになります。当然ながら、文字数が多ければそれだけ暗号化パスワードを解読するのが困難になります。
この機能を生かすためにも、8文字以上のパスワードを設定しましょう(注)。
デフォルトの設定では、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のみとなります。
リモートから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(Pluggable 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ディレクトリに該当するサービス用のファイルが用意されていなければ、うっかり不要なサービスを提供していたとしても接続を拒否できるというわけです。よって、危険なサービスに関する設定ファイルについてはファイル名を変更してしまいましょう。ここでいう危険なサービスとは、rsh、rexec、rloginの3つになります。
# mv rsh .rsh # mv rexec .rexec # mv rlogin .rlogin
このように、mvコマンドを利用してドットファイルにしてしまいましょう。
次回予告
次回は、ファイルシステムのセキュリティおよびinetd+TCP_Wrapper、xinetdによるアクセス制御などについて解説します。掲載は9月中旬の予定です。
Copyright © ITmedia, Inc. All Rights Reserved.