4.2. Root アクセスの制御

ホームとなるマシンを管理する際に、ユーザーは root ユーザーとして、または sudosu などの setuid プログラムで有効な root 権限を取得して一部のタスクを実行する必要があります。setuid プログラムは、プログラムを実行しているユーザーではなく、プログラムの所有者のユーザー ID (UID) で実行されるプログラムです。これらのプログラムは、以下の例のように、ロング形式のリストの所有者セクションにある s で示されます。
~]$ ls -l /bin/su
-rwsr-xr-x. 1 root root 34904 Mar 10  2011 /bin/su

注記

s は大文字または小文字の場合があります。大文字の場合は、基になるパーミッションビットが設定されていないことを示します。
しかし、組織のシステム管理者は、組織のユーザーが自身のマシンにどの程度の管理アクセスを持つかを決定しなくてはなりません。pam_console.so と呼ばれる PAM モジュールを使うと、再起動やリムーバブルメディアのマウントなど通常は root ユーザーにのみ許可されているアクティビティーを、物理コンソールに最初にログインしたユーザーが実行できるようになります。しかし、ネットワーク設定の変更、新たなマウスの設定、ネットワークデバイスのマウントといったシステム管理者の他の重要なタスクは、管理者権限なしでは実行できません。したがって、システム管理者はネットワーク上のユーザーにどの程度のアクセスを許可するかを判断する必要があります。

4.2.1. Root アクセスの拒否

上記またはその他の理由でユーザーが root でログインすることに管理者が不安を感じる場合、root パスワードは秘密にし、ランレベル 1 へのアクセスやシングルユーザーモードへのアクセスをブートローダーパスワード保護で拒否してください (このトピックに関する詳細については 「ブートローダーのセキュア化」 を参照)。
管理者は、以下の 4 つの方法で root ログインを拒否できます。
Changing the root shell
ユーザーが直接 root としてログインしないように、システム管理者は /etc/passwd ファイルで root アカウントのシェルを /sbin/nologin に設定できます。

表4.2 Root シェルの無効化

影響あり影響なし
root シェルへのアクセスを阻止し、そのようなアクセス試行をログに記録します。以下のプログラムは root アカウントにアクセスできません。
  • login
  • gdm
  • kdm
  • xdm
  • su
  • ssh
  • scp
  • sftp
FTP クライアント、メールクライアント、多くの setuid プログラムなどのシェルを必要としないプログラム。以下のプログラムは root アカウントにアクセスできません
  • sudo
  • FTP クライアント
  • Email クライアント
Disabling root access via any console device (tty)
root アカウントへのアクセスをさらに制限するために、管理者は /etc/securetty ファイルを編集してコンソールでの root ログインを無効にすることができます。このファイルには、root ユーザーがログイン可能なすべてのデバイスが一覧表示されます。このファイル自体がない場合、root ユーザーはシステム上のどんな通信デバイス (コンソールか raw ネットワークインターフェースかに関係なく) からでもログインできます。この状態は危険です。ユーザーは Telnet 経由で root としてマシンにログインでき、プレーンテキストのパスワードがネットワーク上で送信されてしまうからです。
デフォルトでは、Red Hat Enterprise Linux 7 の /etc/securetty ファイルにより、root ユーザーのみがマシンに物理的に接続されたコンソールでログインできます。root ユーザーによるログインを防ぐには、root でシェルプロンプトから以下のコマンドを入力して、このファイルの内容を削除します。
echo > /etc/securetty
KDM、GDM、XDM のログインマネージャーでの securetty サポートを有効にするには、以下の行を追加します。
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
追加対象のファイルは以下のとおりです。
  • /etc/pam.d/gdm
  • /etc/pam.d/gdm-autologin
  • /etc/pam.d/gdm-fingerprint
  • /etc/pam.d/gdm-password
  • /etc/pam.d/gdm-smartcard
  • /etc/pam.d/kdm
  • /etc/pam.d/kdm-np
  • /etc/pam.d/xdm

警告

/etc/securetty ファイルを空白にしても、root ユーザーがリモートでツールの OpenSSH スイートを使用してログインすることは止められません。これは、認証が終わるまでコンソールが開かれないためです。

表4.3 Root ログインの無効化

影響あり影響なし
コンソールまたはネットワーク経由での root アカウントへのアクセスを阻止します。以下のプログラムは root アカウントにアクセスできません。
  • login
  • gdm
  • kdm
  • xdm
  • tty を開くその他のネットワークサービス
root としてログインしないが、setuid または別のメカニズムで管理タスクを実行するプログラム。以下のプログラムは root アカウントにアクセスできません
  • su
  • sudo
  • ssh
  • scp
  • sftp
Disabling root SSH logins
SSH プロトコル経由での root ログインを防ぐには、SSH デーモンの設定ファイルである /etc/ssh/sshd_config を編集し、
#PermitRootLogin yes
の行を以下のように変更します。
PermitRootLogin no

表4.4 Root SSH ログインの無効化

影響あり影響なし
ツールの OpenSSH スイート経由での root アクセスを防ぎます。以下のプログラムは root アカウントにアクセスできません。
  • ssh
  • scp
  • sftp
ツールの OpenSSH スイートの一部ではないプログラム
Using PAM to limit root access to services
PAM (/lib/security/pam_listfile.so モジュール経由) を使用すると、特定アカウントを柔軟に拒否できます。管理者はこのモジュールを使用してログインが許可されないユーザーリストを参照できます。システムサービスへの root アクセスを制限するには、/etc/pam.d/ ディレクトリー内の対象サービスのファイルを編集し、認証に pam_listfile.so モジュールが必要となるようにします。
以下の例では、/etc/pam.d/vsftpd PAM 設定ファイルの vsftpd FTP サーバーにこのモジュールを使用しています (一行目の末にある \ の文字は、ディレクティブが一行の場合は必要ありません)。
auth   required   /lib/security/pam_listfile.so   item=user \
sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
これにより、PAM が/etc/vsftpd.ftpusers ファイルを見て、リストに載っているユーザーにサービスへのアクセスを拒否するように指示します。管理者はこのファイル名を変更し、各サービスごとに別個のリストを維持したり、複数サービスへのアクセスを拒否する集中リストを使用したりすることができます。
管理者が複数サービスへのアクセスを拒否したい場合、メールクライアントでは /etc/pam.d/pop/etc/pam.d/imap ファイルに、SSH クライアントでは /etc/pam.d/ssh ファイルのような PAM 設定ファイルに同様の行を追加することができます。
PAM についての詳細情報は、『The Linux-PAM System Administrator's Guide』 を参照してください。/usr/share/doc/pam-<version>/html/ ディレクトリーにあります。

表4.5 PAM を使った root の無効化

影響あり影響なし
PAM 対応のネットワークサービスへの root アクセスを防ぎます。以下のサービスは root アカウントにアクセスできません。
  • login
  • gdm
  • kdm
  • xdm
  • ssh
  • scp
  • sftp
  • FTP クライアント
  • Email クライアント
  • すべての PAM 対応サービス
PAM 非対応のプログラムおよびサービス

4.2.2. Root アクセスの許可

組織内のユーザーが信頼できコンピューターの知識を持っていれば、root アクセスを許可することは問題ではありません。ユーザーに root アクセスを許可すれば、デバイスの追加やネットワークインターフェースの設定などの重要性の低いアクティビティーを個別のユーザーが行うことができるので、システム管理者はネットワークセキュリティーや他の重要な問題に専念できます。
一方で、個別のユーザーに root アクセスを許可すると、以下のような問題が発生することがあります。
  • マシンの誤った設定root アクセスを持つユーザーは自身のマシンを間違って設定する可能性があり、この問題を解決するには助けを必要とします。ひどい場合には、知らないうちにセキュリティーホールを開いてしまう可能性もあります。
  • 安全でないサービスの実行root アクセスを持つユーザーは、FTP や Telnet といった安全でないサービスを自身のマシン上で実行して、ユーザー名やパスワードを危険にさらす可能性があります。これらのサービスは、ユーザー名やパスワードをプレーンテキストでネットワーク上で送信します。
  • Email の添付ファイルを root として実行 — 滅多にないことですが、Linux に影響を及ぼす Email ウイルスも存在します。悪意のあるプログラムは、root ユーザーとして実行された場合に脅威となります。
  • 監査証跡がそのままになる — 多くの場合、root アカウントは複数のユーザーが共有し、複数のシステム管理者がシステムのメインテナンスをできるようになっているため、ある時点でこのうちのどのユーザーが root だったかを見分けることは不可能です。別のログインを使用すると、ユーザーがログインしたアカウントとセッション追跡目的の一意の番号がタスク構造に組み込まれ、ユーザーが開始する各プロセスによって継承されます。同時ログインを使用すると、一意の番号は特定ログインのアクションの追跡に使用できます。アクションが監査イベントを生成する際には、ログインアカウントとその一意の番号に関連付けられているセッションとともに記録されます。これらのログインとセッションを表示するには、aulast コマンドを使用します。aulast コマンドの --proof オプションを使うと、特定のセッションで生成された監査可能なイベントを切り離す特定の ausearch クエリーの提示が可能になります。監査システムの詳細については、5章システム監査を参照してください。

4.2.3. Root アクセスの制限

root ユーザーへのアクセスを完全に拒否するのではなく、管理者が susudo となどの setuid プログラム経由でのアクセスのみを許可したい場合もあるかもしれません。su および sudo の詳細については、Red Hat Enterprise  Linux 7 システム管理者のガイドの章 権限の取得 と、su(1) および sudo(8) の man ページを参照してください。

4.2.4. 自動ログアウトの有効化

root としてログインしている場合に、このセッションを無人状態にしておくと、重大なセキュリティーリスクをもたらす恐れがあります。このリスクを軽減するために、一定期間が経過してからアイドル状態のユーザーを自動的にログアウトするようにシステムを設定することができます。
  1. root として /etc/profile ファイルの先頭に以下の行を追加して、このファイルの処理が中断されないようにします。
    trap "" 1 2 3 15
  2. root として、/etc/profile ファイルに以下の行を挿入して、120 秒後に自動的にログアウトされるようにします。
    export TMOUT=120
    readonly TMOUT
    TMOUT 変数は、指定した期間 (秒) に活動がない場合にはシェルを中断します (上記の例では 120)。特定のインストールのニーズに応じて時間制限を変更してください。

4.2.5. ブートローダーのセキュア化

Linux ブートローダーをパスワードで保護する主要な理由は以下のとおりです。
  1. シングルユーザーモードへのアクセスを防ぐ — 攻撃者がシングルユーザーモードでシステムを起動できると、攻撃者は root パスワードを求められずに自動的に root としてログインします。

    警告

    /etc/sysconfig/init ファイルで SINGLE パラメーターを編集してシングルユーザーモードへのアクセスを保護する方法は推奨されません。攻撃者は、GRUB 2 のカーネルコマンドライン上で (init= を使って) カスタム初期コマンドを特定することでパスワードを迂回できます。Red Hat Enterprise Linux 7 システム管理者のガイドの GRUB 2 パスワードの保護 の章にあるように、GRUB 2 ブートローダーをパスワードで保護することが推奨されます。
  2. GRUB 2 コンソールへのアクセスを防ぐ — マシンがブートローダーに GRUB 2 を使用している場合、攻撃者は GRUB 2 エディターインターフェースを使って設定を変更したり、cat コマンドを使用して情報収集ができるようになります。
  3. 安全でないオペレーティングシステムへのアクセスを防ぐ — デュアルブートシステムの場合、攻撃者はアクセス制御やファイルパーミッションを無視する (例えば、DOS などの) OS を起動時に選択できます。
Intel 64 および AMD64 プラットホームの Red Hat Enterprise Linux 7 では、GRUB 2 ブートローダーが同梱されています。GRUB 2 の詳細については、Red Hat Enterprise  Linux 7 システム管理者のガイドの GRUB 2 ブートローダーの操作 の章を参照してください。

4.2.5.1. インタラクティブスタートアップの無効化

起動順序の最初に I キーを押すと、インタラクティブな方法でシステムを起動できます。この方法では、システムがユーザーにサービスを 1 つずつ開始するように求めます。しかし、システムに物理的なアクセスがある攻撃者の場合は、この方法だとセキュリティー関連のサービスを無効にし、システムへのアクセスを許すことになってしまいます。
ユーザーがシステムを対話的に起動しないようにするには、root として /etc/sysconfig/init ファイルの PROMPT パラメーターを以下のように無効にします。
PROMPT=no