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

 皆さま,こんにちは. 迷子のエンリュです.

 今回はroot権限の保護ということでやっていきたいと思います.sshをはじめとしたあらゆるサービスに対して管理者への昇格権限や操作の実行権限などを管理し,root権限が不正に使われないようにしていきます.よろしくお願いいたします.

 前回のはじめにお話しした内部不正の話で,一般ユーザーのアクセス権限が適切に管理される必要があると言いました.システムの管理者権限はその最たるものです.root権限が奪われてしまえば,あらゆる設定を変えることができ,あらゆるデータにアクセスすることができ,あらゆるプログラムをインストールして走らせることができます.

 したがって,root権限の保護はシステムの保護に直結します.ユーザーを信用することも大切ですが,その信用を守るためにもしっかり力を入れていきたいところです.

 それでは早速始めていきましょう.

目次

root権限の保護

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

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

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

 root権限はシステムを管理するために必要なものですから,ユーザーがシステムを操作するサービスからは大抵利用することができます.loginやgdmなどのディスプレイマネージャ,その他ttyを開くネットワークサービスは最も基本的なシステム操作用のサービスとなります.ttyとは仮想コンソールデバイといい,最初にログインする端末を表します.これらはrootシェルを使って直接rootアカウントにアクセスすることができます.

 suOpenSSHもログインを行い,rootシェルを起動することができます.これらはsetuidを用いて管理者権限を利用します.これは実行時にファイルの所有者の権限でタスクを実行するというもので,便利な反面,セキュリティ面での注意が必要となります.suに関してはlogin.defsやPAMを用いてアクセス制御を行いました.同様に,OpenSSHを用いるsshなどもroot権限でのアクセス可否を設定することができます.

 sudoもsetuidプログラムです.これはシェルを必要としないでroot権限によるタスク実行を可能にします.rootアカウントに直接アクセスすることはできませんが,PAMなどを用いてアクセスを制限する必要があります.

 FTPクライアント,Emailクライアントもroot権限へのアクセスが可能です.これらはPAMを利用しているため,適切な設定を行ってアクセスを制限することができます.

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クライアントには影響がないことに注意しましょう.

 ログインシェルについては前回の記事(第14回#ログインシェルの管理)も参考にしてください.

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

f:id:LostEnryu:20161104065133p:plain

securettyの設定

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

$ sudo cat /etc/securetty

f:id:LostEnryu:20161104065152p:plain

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

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

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

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で保存して次のファイルに移動です.

f:id:LostEnryu:20161104065223p:plain

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

f:id:LostEnryu:20161104065246p:plain

PAMによるアクセス制限

 PAMはこれまでも何度となく扱ってきました.suをwheelに限定する際はpam_wheelモジュールを使い,物理コンソールでログインしたユーザーにroot権限が必要なコマンドの実行許可を与える際はpam_consoleモジュールを使いました.

今回使用するのはpam_listfileモジュールです.これは,ファイルにリストされたユーザーやホスト名にサービスの実行許可を与えたり,逆に禁止したりすることができます.man pam_listfileで使い方を調べることができます.簡単な使い方は以下の通りです.

# リストに書かれていれば許可
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のマニュアルなどを参考にするとよいでしょう.

次回

 今回のroot権限保護によって,システムのセキュリティレベルはかなり向上したといっていいでしょう.次回はいよいよネットワーク接続に向けて,おもにセキュリティ面で準備できることをまとめていきます.よろしくお願いいたします.

参考ページ

情報セキュリティはいくら気にしても慎重が過ぎることはありません

 今回の内容はこちらの記事でも扱っています.

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

Previous Top Next
【第14回】 Journey 【第16回】
情報セキュリティの雪山(2) ~セキュアなアカウント管理~ Index 情報セキュリティの雪山(4) ~ネットワーク接続の準備~