4.2. Root アクセスの制御
ホームマシンを管理する場合、ユーザーは一部のタスクを
root
ユーザーとして実行するか、sudo や su などの 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
ログインを許可しないようにできます。
- root シェルの変更
- ユーザーが
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 クライアント
- 任意のコンソールデバイス (tty) を使用した root アクセスの無効化
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
- Root SSH ログインの無効化
- SSH プロトコルを介した
root
ログインを防ぐには、SSH デーモンの設定ファイル/etc/ssh/sshd_config
を編集し、以下の行を変更します。#PermitRootLogin yes
の行を以下のように変更します。PermitRootLogin no
表4.4 Root SSH ログインの無効化 影響あり 影響なし ツールの OpenSSH スイートを使用したroot
アクセスを防ぎます。以下のプログラムはroot
アカウントにアクセスできません。- ssh
- scp
- sftp
OpenSSH のツール群に含まれないプログラム。 - PAM を使用して、サービスへの root アクセスを制限する
- PAM は、
/lib/security/pam_listfile.so
モジュールを通じて、特定のアカウントを拒否するための優れた柔軟性を提供します。管理者は、このモジュールを使用して、ログインを許可されていないユーザーのリストを参照できます。システムサービスへのroot
アクセスを制限するには、/etc/pam.d/
ディレクトリーの target サービスのファイルを編集し、pam_listfile.so
モジュールが認証に必要であることを確認します。以下は、/etc/pam.d/vsftpd
PAM 設定ファイルの vsftpd FTP サーバーに モジュールを使用する方法の例です(ディレクティブが 1 行にある場合は最初の行の最後にある\
文字は必要あり ません )。auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
これにより、PAM は/etc/vsftpd.ftpusers
ファイルを参照し、一覧表示されたユーザーのサービスへのアクセスを拒否します。管理者はこのファイルの名前を変更することができ、各サービスごとに個別のリストを保持することも、1 つの中央リストを使用して複数のサービスへのアクセスを拒否することもできます。管理者が複数のサービスへのアクセスを拒否する場合は、同様の行を PAM 設定ファイル(メールクライアントの場合は/etc/pam.d/pop
および/etc/pam.d/imap
、SSH クライアントの場合は/etc/pam.d/ssh
など)に追加できます。PAM の詳細は、/usr/share/doc/pam-<version>/html/ ディレクトリーにある 『The Linux-』 PAM System Administrator's Guide
を参照してください。表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 などのマシン上で安全でないサーバーを実行する可能性があり、ユーザー名とパスワードが危険にさらされる可能性があります。これらのサービスは、この情報をプレーンテキストでネットワーク経由で送信します。 - 電子メールの添付ファイルを root で実行 — まれにですが、Linux に影響を与える電子メールウィルスが存在します。悪意のあるプログラムは、
root
ユーザーによって実行されると、最大の脅威となります。 - 監査証跡の維持 -
root
アカウントは複数のユーザーが共有されるため、複数のシステム管理者がシステムを保守できるため、特定の時点でどのユーザーがroot
であったかを把握することはできません。セパレートログインの場合、ユーザーがログインしたアカウントと、セッション追跡のための一意の番号がタスク構造に入れられ、ユーザーが起動するすべてのプロセスに継承されます。同時ログインを使用する場合、一意の番号を使用して、特定のログインへのアクションを追跡することができます。アクションが監査イベントを生成すると、その一意な番号に関連するログインアカウントとセッションが記録されます。これらのログインとセッションを表示するには、aulast コマンドを使用します。aulast コマンドの--proof
オプションを使用すると、特定の ausearch クエリーを提案し、特定のセッションによって生成された監査可能なイベントを分離できます。監査システムの詳細については、7章システム監査を参照してください。
4.2.3. Root アクセスの制限
管理者は、
root
ユーザーへのアクセスを拒否するのではなく、su または sudo などの setuid プログラムを介したアクセスのみを許可したい場合があります。su および sudo の詳細は、Red Hat Enterprise Linux 7 System Administrator's Guide の Gaining Privileges の章および su (1)
および sudo (8
)の man ページを参照してください。
4.2.4. 自動ログアウトの有効化
ユーザーが
root
としてログインすると、無人ログインセッションが重大なセキュリティーリスクを引き起こす可能性があります。このリスクを減らすために、一定時間後にアイドル状態のユーザーを自動的にログアウトさせるようにシステムを設定することができます。
root
として、/etc/profile
ファイルの先頭に次の行を追加して、このファイルの処理が中断されないようにします。trap "" 1 2 3 15
root
として、以下の行を/etc/profile
ファイルに追加し、120 秒後に自動的にログアウトします。export TMOUT=120 readonly TMOUT
TMOUT
変数は、指定された秒数のアクティビティーがない場合にシェルを終了します(上記の例では120
に設定)。特定のインストールのニーズに応じて、制限を変更することができます。
4.2.5. ブートローダーのセキュア化
Linux ブートローダーをパスワードで保護する主な理由は、以下のとおりです。
- シングルユーザーモードへのアクセスの防止 - 攻撃者がシステムをシングルユーザーモードで起動できる場合、
root
パスワードを求められることなく、root
として自動的にログインします。警告/etc/sysconfig/init
ファイルのSINGLE
パラメーターを編集して、パスワードを使用してシングルユーザーモードへのアクセスを保護することは推奨されません。攻撃者は、GRUB 2 のカーネルコマンドラインでカスタム初期コマンド(init=
パラメーターを使用)を指定することにより、パスワードをバイパスできます。Red Hat Enterprise Linux 7 System Administrator's Guide の Protecting GRUB 2 with a Password の章に記載されているように、GRUB 2 ブートローダーをパスワードで保護することが推奨されています。 - GRUB 2 コンソールへのアクセスの防止 - マシンがブートローダーとして GRUB 2 を使用する場合、攻撃者は GRUB 2 エディターインターフェイスを使用して設定を変更したり、cat コマンドを使用して情報を収集したりできます。
- 安全でないオペレーティングシステムへのアクセスの防止 — デュアルブートシステムの場合、攻撃者は、たとえば DOS のような、アクセス制御およびファイルパーミッションを無視するオペレーティングシステムを起動時に選択することができます。
Red Hat Enterprise Linux 7 には、Intel 64 および AMD64 プラットフォームに GRUB 2 ブートローダーが含まれています。GRUB 2 の詳細については、Red Hat Enterprise Linux 7 System Administrator's Guide の Working With the GRUB 2 Boot Loader の章を参照してください。
4.2.5.1. インタラクティブスタートアップの無効化
ブートシーケンスの最初に I キーを押すと、対話的にシステムを起動できます。インタラクティブな起動中に、システムは各サービスを 1 つずつ起動するように要求します。しかし、これでは、お客様のシステムに物理的にアクセスした攻撃者が、セキュリティー関連サービスを無効化し、システムにアクセスすることができる可能性があります。
root
としてユーザーが対話的にシステムを起動しないようにするには、/etc/sysconfig/init
ファイルの PROMPT
パラメーターを無効にします。
PROMPT=no
4.2.6. ハードリンクおよびシンボリックリンクの保護
悪意のあるユーザーが保護されていないハードリンクやシンボリックリンクによって引き起こされる潜在的な脆弱性を悪用するのを防ぐため、Red Hat Enterprise Linux 7 には、特定の条件を満たす場合にのみリンクの作成または追跡を許可する機能が搭載されています。
ハードリンクの場合、次のいずれかが当てはまる必要があります。
- ユーザーは、リンク先のファイルを所有しています。
- ユーザーは、リンク先のファイルに対して、すでに読み取りと書き込みのアクセス権を持っています。
シンボリックリンクの場合、プロセスは、スティッキービットを持つ誰でも書き込み可能なディレクトリーの外部にある場合にのみリンクをたどることが許可されます。または、以下のいずれかが当てはまる必要があります。
- シンボリックリンクに続くプロセスが、シンボリックリンクの所有者となります。
- ディレクトリーの所有者は、シンボリックリンクの所有者と同じになります。
この保護機能は、デフォルトでオンになっています。これは、
/usr/lib/sysctl.d/50-default.conf ファイルの以下のオプションによって制御されます。
fs.protected_hardlinks = 1 fs.protected_symlinks = 1
デフォルト設定を上書きして保護を無効にするには、以下の内容で
/etc/sysctl .d/
ディレクトリーに 51-no-protect-links.conf
などの新しい設定ファイルを作成します。
fs.protected_hardlinks = 0 fs.protected_symlinks = 0
注記
デフォルトのシステム設定を上書きするには、新しい設定ファイルに
.conf
拡張子が必要で、デフォルトのシステムファイルの 後 に読み込む必要があることに注意してください(ファイルは辞書的な順序で読み取られます)。そのため、ファイル名の最初に番号が大きいファイルに含まれる設定が優先されます。
sysctl
メカニズムを使用した起動時のカーネルパラメーターの設定についての詳細は、sysctl.d(5) の man ページを参照してください。