ここでは,root権限の保護についてまとめていきます.よろしくお願いいたします.
目次
- root権限の保護
- rootシェルの無効化
- securettyの設定
- OpenSSHのrootログインの無効化
- PAMによるアクセス制限
-
その他の防御手段
- suの権限
- sudoの権限
- シングルユーザモードの禁止
- ブートローダのセキュア化
- ブートローダのインタラクティブモードの禁止
- 参考ページ
環境
- 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 | |
---|---|---|---|---|---|---|---|---|
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 -
securettyの設定
securettyファイルはrootログインが可能なttyデバイスを指定します.
$ sudo cat /etc/securetty
バックアップを取ってから,このファイルを空にしましょう.なお,このファイル自体を削除してしまうと,どのデバイスからでも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
で保存して次のファイルに移動です.
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
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コマンドによる昇格を制限する必要があります.こちらを参考に設定を行ってください.
-
Qiita:目指せLinuxマスター(弐) ~suコマンドの権限~
- wheelグループ以外のユーザーのsuをすべて禁止する設定にしていましたが,rootへの昇格のみを制限するように変更しました.ご確認ください.
sudoersを設定してsudoの権限を制限
sudoコマンドはrootアカウントにログインすることなく,root権限でコマンドを実行できるようにします.sudoの権限はsudoersファイルで設定します.こちらを参考に設定を行ってください.
今回扱うroot権限保護の手段は以上となりますが,root権限へのアクセス手段はまだまだあります.特に,物理マシンを直接操作できる環境においては,root保護のセキュリティシステムを解除する手段が色々と残っています.
しかし,あまり雁字搦めにしすぎると,トラブルが発生して通常の方法でログインできなくなった場合などに,正規のシステム管理者がアクセスできなくなるという懸念があります.私の作業する環境では,これ以上の厳密さは不要と考えますので,以下の内容は参考程度に記すまでに留めておこうと思います.
情報セキュリティは,何から何を守るのか,どの程度コストをかけて守るのかを常に考える必要があります.
シングルユーザモードの禁止
Linuxには,シングルユーザモードという起動方法があります.私たちが普段使っているのはグラフィカルモード,GUIなしの場合はマルチユーザモードで,どちらもアカウントを選択してログインしますが,シングルユーザモードは,rootアカウントでのみログインできます.
起動モードはシステムの起動時に変更することができ,例えばrootのパスワードを忘れてしまったときなどに利用して,新たにパスワードを設定することができます.
また,ランレベルを1にして起動しても同様にシングルユーザモードで起動します.
これらを制限するには,ブートローダのパスワード保護が必要になります.また,ブートローダのインタラクティブモードを回避する必要もあります.
ブートローダの設定などは,Red Hat Enterprise Linuxのマニュアルなどを参考にするとよいでしょう.
---- 以上