Show Table of Contents
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 ログインを拒否できます。
- Changing the root shell
- ユーザーが直接
rootとしてログインしないように、システム管理者は/etc/passwdファイルでrootアカウントのシェルを/sbin/nologinに設定できます。表4.2 Root シェルの無効化
影響あり 影響なし rootシェルへのアクセスを阻止し、そのようなアクセス試行をログに記録します。以下のプログラムはrootアカウントにアクセスできません。logingdmkdmxdmsusshscpsftp
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/securettyKDM、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アカウントにアクセスできません。logingdmkdmxdm- tty を開くその他のネットワークサービス
rootとしてログインしないが、setuid または別のメカニズムで管理タスクを実行するプログラム。以下のプログラムはrootアカウントにアクセスできません。susudosshscpsftp
- Disabling root SSH logins
- SSH プロトコル経由での
rootログインを防ぐには、SSH デーモンの設定ファイルである/etc/ssh/sshd_configを編集し、#PermitRootLogin yes
の行を以下のように変更します。PermitRootLogin no
表4.4 Root SSH ログインの無効化
影響あり 影響なし ツールの OpenSSH スイート経由でのrootアクセスを防ぎます。以下のプログラムはrootアカウントにアクセスできません。sshscpsftp
ツールの 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/vsftpdPAM 設定ファイルのvsftpdFTP サーバーにこのモジュールを使用しています (一行目の末にある\の文字は、ディレクティブが一行の場合は必要ありません)。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アカウントにアクセスできません。logingdmkdmxdmsshscpsftp- 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 ユーザーへのアクセスを完全に拒否するのではなく、管理者が su や sudo となどの setuid プログラム経由でのアクセスのみを許可したい場合もあるかもしれません。su および sudo の詳細については、Red Hat Enterprise Linux 7 システム管理者のガイドの章 権限の取得 と、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 システム管理者のガイドの GRUB 2 パスワードの保護 の章にあるように、GRUB 2 ブートローダーをパスワードで保護することが推奨されます。 - GRUB 2 コンソールへのアクセスを防ぐ — マシンがブートローダーに GRUB 2 を使用している場合、攻撃者は GRUB 2 エディターインターフェースを使って設定を変更したり、
catコマンドを使用して情報収集ができるようになります。 - 安全でないオペレーティングシステムへのアクセスを防ぐ — デュアルブートシステムの場合、攻撃者はアクセス制御やファイルパーミッションを無視する (例えば、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
4.2.6. ハードリンクおよびシンボリックリンクの保護
保護されていないハードリンクおよびシンボリックリンクにより引き起こされた脆弱性を悪意のあるユーザーが利用しないようにするために、Red Hat Enterprise Linux 7 には、特定の条件を満たす場合のみリンクの作成または実行を許可する機能が含まれます。
ハードリンクの場合は、以下のいずれかに該当する必要があります。
- ユーザーがリンク先のファイルを所有します。
- ユーザーがリンク先のファイルへの読み取りアクセスおよび書き込みアクセスをすでに持っています。
シンボリックリンクの場合、プロセスは、スティッキービットが設定された誰でも書き込みが可能なディレクトリーの外にいるとき、または以下のいずれかの条件を満たすときにのみリンクを実行することが許可されます。
- シンボリックリンクを実行するプロセスはシンボリックリンクの所有者です。
- ディレクトリーの所有者はシンボリックリンクの所有者と同じです。
この保護はデフォルトで有効になり、
/usr/lib/sysctl.d/50-default.conf ファイルの以下のオプションで制御されます。
fs.protected_hardlinks = 1 fs.protected_symlinks = 1
デフォルトの設定を上書きし、保護を無効にするには、
51-no-protect-links.conf などの名前の新しい設定ファイルを以下の内容で /etc/sysctl.d/ ディレクトリーに作成します。
fs.protected_hardlinks = 0 fs.protected_symlinks = 0
注記
デフォルトのシステム設定を上書きするには、新しい設定ファイルの拡張子を
.conf にし、デフォルトのシステムファイルの後にその設定ファイルを読み取る必要があります (ファイルは辞書の順序で読み取られるため、ファイル名の最初の番号が大きいファイルに含まれる設定が優先されます)。
See the sysctl.d(5) manual page for more detailed information about the configuration of kernel parameters at boot using the
sysctl mechanism.

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.