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
ログインを拒否できます。
- 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/
ディレクトリー内の対象サービスのファイルを編集し、認証に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
クエリーの提示が可能になります。監査システムの詳細については、6章システム監査を参照してください。
4.2.3. Root アクセスの制限
管理者が、
root
ユーザーへのアクセスを完全に拒否するのではなく、su
や sudo
となどの setuid プログラム経由でのアクセスのみを許可したい場合もあります。su
および sudo
の詳細は、Red Hat Enterprise Linux 7 システム管理者のガイドの章 権限の取得 と、man ページの su(1)
および sudo(8)
を参照してください。
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 システム管理者のガイド』の Working With the GRUB 2 Boot LoaderGRUB 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
にし、デフォルトのシステムファイルの後にその設定ファイルを読み取る必要があります (ファイルは辞書の順序で読み取られるため、ファイル名の最初の番号が大きいファイルに含まれる設定が優先されます)。
sysctl
メカニズムを使用した起動時のカーネルパラメーターの設定に関する詳細は、man ページの sysctl.d(5) を参照してください。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。