情報セキュリティの基本 ~root権限の保護~

  • 33
    いいね
  • 0
    コメント

 ここでは,root権限の保護についてまとめていきます.よろしくお願いいたします.

目次

環境

  • Cent OS 6.8

 より細かい環境については,ブログを参考にしてください.

 また,今回の内容はブログの第15回により詳しく掲載しておりますので参考にしてください.

   【第15回】情報セキュリティの雪山(3) ~root権限の保護~

root権限の保護

root権限にアクセスできるプログラム・サービス

 root権限にアクセスできるプログラム・サービスを一覧にすると,次のようになります.

  • login
  • gdm, kdm, xdmなどのディスプレイマネージャ
  • ttyを開くその他のネットワークサービス
  • su
  • ssh, scp, sftpなどのOpenSSHを使用するプログラム
  • sudo
  • FTPクライアント
  • Emailクライアント

root権限へのアクセスを拒否する方法

 root権限へのアクセスを拒否する方法は,対象とするサービスによって異なります.ここでは,次のような方法でroot権限へのアクセスを拒否していきます.それぞれの方法が上で挙げたサービスに対して有効かどうかと合わせてみていきましょう.有効であればo, 無効または影響がない場合は-で表示しています.

アクセス拒否方法 概要 login DM su sudo SSH FTP Email
rootシェルの無効化 rootのログインシェルを無効化します o o o - o - -
securettyの設定 securettyファイルを編集してrootアカウントがログインできるttyを制限します o o - - - o o
SSHのrootログインの無効化 OpenSSHの設定を変更しSSH経由のrootログインを無効化します - - - - o - -
PAMによるアクセス制限 PAMを使用してサービスへのrootアクセスを制限します o o o o o o o

 これらの対策を行って,何重にもセキュリティウォールを築いておくことが大切です.それでは早速作業を始めていきましょう.なお,この作業を始めてしまうとrootアカウントに簡単にはアクセス出来なくなってしまいますので,sudoなどで管理者用のユーザーアカウントからroot権限が使えることを確かめてから行ってください.仮想マシンのバックアップを取っておくのもいいでしょう.

rootシェルの無効化

 rootアカウントのログインシェルは,デフォルトではbashになっています.これをnologinシェルに変更してアクセスを阻止し,アクセス試行をログに記録するようにします.FTPクライアントやEmailクライアントには影響がないことに注意しましょう.

 ログインシェルについてはこちらの記事(セキュアなアカウント管理#ログインシェルの管理)も参考にしてください.

$ usermod -s /sbin/nologin root
$ getent passwd root
$ su -

refuse_root#1_1.PNG

securettyの設定

 securettyファイルはrootログインが可能なttyデバイスを指定します.

$ sudo cat /etc/securetty

refuse_root#2_1.PNG

 バックアップを取ってから,このファイルを空にしましょう.なお,このファイル自体を削除してしまうと,どのデバイスからでもrootログインが可能になってしまうため注意しましょう.

$ sudo cp /etc/securetty /etc/securetty.bak
$ sudo vi /etc/securetty
> dG    # ファイルの末尾まで全消去
> :wq

 次にディスプレイマネージャのログイン処理時のPAM認証にsecurettyのチェックを加えます.以下のPAMの設定ファイルの先頭に

pam_securetty.soの追加
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

を追加します.追加するPAM設定ファイルは,

  • /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/pam.d/loginには元から記述されています.

 viでloginごとまとめて開き,該当行をコピーしていくと楽でしょう.yyで行のコピー,Shift+pで上の行に貼り付け, pで下の行に貼り付け,:wnで保存して次のファイルに移動です.

refuse_root#2_3.PNG

OpenSSHのrootログインの無効化

 SSHプロトコルとは,暗号化された通信を利用して外部から接続する方式で,SSHサーバを立てることでどこからでもアクセスができる便利なサービスを提供します.しかし,便利なものはそれだけ危険がつきまとうもの.セキュアな設定を常に意識する必要があります.

 SSHの設定ファイルは/etc/ssh/sshd_configです.今回はこの中のPermitRootLoginのパラメータを設定します.

 PermitRootLoginの値はyes, without-password, forced-commands-only, noがあります.デフォルトではyesになっています.通常はrootログインを拒否し,コマンドオプションを設定したときのみ許可するのがforced-commands-onlyです.完全にrootログインを拒否するのがnoです.設定はこのどちらかにしましょう.ここではnoにします.

$ sudo vi /etc/ssh/ssh_config

refuse_root#3_1.PNG

PAMによるアクセス制限

 PAMはこれまでも何度となく扱ってきました.suをwheelに限定する際はpam_wheelモジュールを使い,物理コンソールでログインしたユーザーにroot権限が必要なコマンドの実行許可を与える際はpam_consoleモジュールを使いました.今回使用するのはpam_listfileモジュールです.これは,ファイルにリストされたユーザーやホスト名にサービスの実行許可を与えたり,逆に禁止したりすることができます.man pam_listfileで使い方を調べることができます.簡単な使い方は以下の通りです.

pam_listfile.soの使い方
# リストに書かれていれば許可
auth required pam_listfile.so onerr=fail item=user sense=allow file=FILENAME
# リストに書かれていたら拒絶
auth required pam_listfile.so onerr=succeed item=user sense=deny file=FILENAME

 今はまだ追加すべきファイルがないので割愛しますが,上の3つの方法で制限しきれないときはこちらの方法を使っていきます.使うことがあれば逐次追記していきたいと思います.

その他の防御手段

suコマンドの権限を制限

 suコマンドはログイン処理によるroot昇格が可能なコマンドです.suコマンドによる昇格を制限する必要があります.こちらを参考に設定を行ってください.

sudoersを設定してsudoの権限を制限

 sudoコマンドはrootアカウントにログインすることなく,root権限でコマンドを実行できるようにします.sudoの権限はsudoersファイルで設定します.こちらを参考に設定を行ってください.

 今回扱うroot権限保護の手段は以上となりますが,root権限へのアクセス手段はまだまだあります.特に,物理マシンを直接操作できる環境においては,root保護のセキュリティシステムを解除する手段が色々と残っています.

 しかし,あまり雁字搦めにしすぎると,トラブルが発生して通常の方法でログインできなくなった場合などに,正規のシステム管理者がアクセスできなくなるという懸念があります.私の作業する環境では,これ以上の厳密さは不要と考えますので,以下の内容は参考程度に記すまでに留めておこうと思います.

 情報セキュリティは,何から何を守るのか,どの程度コストをかけて守るのかを常に考える必要があります.

シングルユーザモードの禁止

 Linuxには,シングルユーザモードという起動方法があります.私たちが普段使っているのはグラフィカルモード,GUIなしの場合はマルチユーザモードで,どちらもアカウントを選択してログインしますが,シングルユーザモードは,rootアカウントでのみログインできます.

 起動モードはシステムの起動時に変更することができ,例えばrootのパスワードを忘れてしまったときなどに利用して,新たにパスワードを設定することができます.

 また,ランレベルを1にして起動しても同様にシングルユーザモードで起動します.

 これらを制限するには,ブートローダのパスワード保護が必要になります.また,ブートローダのインタラクティブモードを回避する必要もあります.

 ブートローダの設定などは,Red Hat Enterprise Linuxのマニュアルなどを参考にするとよいでしょう.

---- 以上

参考ページ

こちらもよろしくお願いいたします.

エンリュの迷い森|トップページ