LPIC-1 - 102試験 - 110:セキュリティ - 110.2 ホストのセキュリティ設定

Last Update : September 18 2014 21:34:19

     

a. スーパーサーバ

ネットワークを介したサービスを提供するデーモンは通常、メイン・メモリーに常駐してネットワーク経由の要求を常時監視します。このため、複数のサービスを起動していると、CPUの負荷やメモリーの消費量が増加してシステム全体のパフォーマンスが低下することがあります。

これを避けるためにLinuxでは、各ネットワークサービスは停止していて、複数のサービスを1個のデーモンが代表して監視し、接続が確立した時点で個別のネットワークサービスデーモンを呼び出す仕組みになっています。代表して監視するデーモン、デーモンのためのデーモンを「スーパーサーバー」あるいは「スーパー・デーモン」と呼びます。

スーパーサーバを利用すると、複数のサービスを起動しておく必要がなく、スーパーサーバひとつですべてのポートを監視することができますのでサーバのメモリなどのリソースの消費を防ぐことができます。また、スタンドアローン型のサービス(スーパーサーバを経由せずサービスを提供する)は、1度サービスがダウンすると、手動で再起動するしかありませんが、スーパーサーバ型の場合はサービスが1度ダウンしたとしても、もう1度コネクションを行うことでスーパーサーバがサービスを呼び出すことができます。 しかし、サービスを提供するデーモンに対して、コネクションが多発するものや、速度を重視するサービスの場合は、スーパーサーバを経由することになりますので、応答が遅くなります。そのようなサービスの場合は、スタンドアロン型が適しています。

また、TCPWrappersという仕組みと組み合わせて使うことで、アクセス制御を集中的に管理することができます。
デメリットとしては、応答が遅れるということがあります。クライアントからの要求にすばやく応答しなければならないサービスには不向きです。

 Linuxディストリビューションの多くは「xinetd」というスーパーサーバーを備えています。xinetdは、例えば、ファイル転送サービスであるftp(ポート番号20、21)やリモートからログインするためのtelnet(ポート番号23)、sendmailなどが利用するsmtp(ポート番号25)などを監視します。

【 デーモン 】

ネットワークを通じてサービスを提供するサービス(サーバ)をデーモンと呼びます。 起動後は常にメモリ上に常駐していてクライアントからの要求にこたえます。


b. inetd

スーパーサーバの一つである inetd は定められたインターネットソケットを監視し、接続要求を待ちます。 監視しているソケットに対して接続要求が出されると、 そのソケットに対応したサービスを判定し、 サービスを提供するプログラムを起動します。 サービスプログラムが完了すると、 inetd は再びソケットの監視を行ないます。
inetdが各サービスごとに登録されたポート番号(/etc/inetd.confファイルに登録:ポート番号は/etc/servicesファイルに記述されている)を監視し、あるポートにクライアントからの要求があれば、それに対応するポート番号のデーモン(子プロセス)を起動させる。inetdの指示に従い配下の各サービスが活動するので、inetdがスーパーサーバと呼ばれます。


c. TCP Wrapper

intedを介在させて各サービスを起動させる際、inetdと各デーモンの間にはラッパー(Wrapper)プログラムと呼ばれるアクセス制御と記録を行うプログラムが動いています。それを行うのがtcpdデーモンです。
TCP Wrapper(tcpd) は、ラッパー=ラップをかけて包み込むことにより、アクセス制御と記録を行うプログラムです。
inetdが各デーモンを呼び出す前にアクセス許可と不許可とのリスト(/etc/hosts.allow、/etc/hosts.denyファイル)を参照し、許可されていれば該当デーモンを起動します。inted自体はアクセス制御の機能を持っていないので、このtcpdと組み合わせてアクセス制御を行っています。
ただし、tcpdのアクセス制御は、接続先のIPアドレスのみによるものであり、さらに、TCP Wrapperの名前が示すように、inetd経由で使用されるTCPポートしか監視することはできません。UDP等のプロトコルのアクセス制御はできません。
したがって、tcpdのアクセス制御はかなり限定されたものです。そのために、よりきめ細かな設定を行うことができるスーパーサーバとして、xinetdが利用されるようになってきました。

TCP Wrapperは、ネットワークサービスに対しホスト側でのアクセス制御を提供します。パッケージ内で最も重要なコンポーネントは/usr/lib/libwrap.a ライブラリです。一般的な表現では、TCPでラップしたサービスは、libwrap.a ライブラリに対してコンパイルされたものを指します。

TCP Wrapperのサービスに接続の要求があった場合、TCP Wrappeサービスは最初に ホストアクセスファイル(/etc/hosts.allow 及び/etc/hosts.deny)を参照して、クライアントが接続を許可されているかどうかを判定します。ほとんどの場合、その後、syslogデーモン(syslogd)を使用して/var/log/secure 又は/var/log/messages へその要求しているホスト名と要求サービスを書き込みます。

もし、クライアントが接続を許可されていた場合、TCP Wrappeは要求されたサービスへの接続制御を開放し、それ以上クライアントとサーバーとの間の通信を邪魔しません。
アクセスの制御とロギングに加えて、TCP Wrappeは先ずクライアントと折衝をするためのコマンドを起動して、それから要求されたネットワークサービスへの接続を拒否するか、制御の開放をします。

ファイアウォールでも同等のことはできます。ルール変更をしたあとファイアウォールの場合は再起動しないとルール変更が反映されませんが、TCP Wrapperはルール変更後再起動しないでもすぐに変更が反映されます。ただし、アクセス制御をしていますがTCP Wrapperの場合は、ポートを塞いでいるわけではありません。ルールで指定したネットワークからのアクセスに対して制御をしているだけに過ぎません。そのため、手軽に使えますがTCP Wrapperだけではファイアウォールの代替にはなりません。また、変更した設定内容を保存すると、即座にルール変更が反映されるため、リモート接続をしてまちがった設定をしてしまった場合、すぐにリモートから接続できなくなってしまいます。

TCPWrapperによるアクセス制御の大原則は、
アクセスはすべて拒否、限定的に一部のネットワークからのアクセスを許可します。

先に、拒否リスト(hosts.deny)を設定し、あとから許可する通信だけを許可リスト(hosts.allow)に書き加えて設定は完了です。 後は、いちいち、デーモン起動のコマンドを入力する必要はありません。

かつて、inetdをスーパサーバとして実装していたときは inetd + TCPWrapper の組み合わせがスーパーサーバでした。現在では、xinetdだけでデーモンの制御及びアクセスとネットワークごとのアクセス制御ができるので、Tcpwrapperはスーパーサーバーには使わなくなってきています。


d. xinetd

inetdを発展させ、さらに安全性を高め、より詳細な設定をできるようにしたのが、xinetdです。

inetdよりもxinetdを使うメリット

  • inetdでは、TCP Wrapperを用いなければアクセス制御をかけることができませんでした。これに対し、xinetdはその設定ファイルの記述のみで、アクセス制御をかけることが可能です。すなわち、 xinetdは、inetdとTCP Wrapperを組み合わせた機能を持っています(xinetdでもTCP Wrapperはサポートされているので利用することもできます)。
  • xinetdはTCPだけでなく、UDPのアクセス制御もできます。
  • inetd経由でデーモンを起動するユーザーはrootである必要がありました。xinetdではその必要がありません。xinetdではサービス専用のアカウントを作成することができ、そのアカウントの権限でデーモンを起動することができます。これにより、そのサービスがバッファオーバーフロー攻撃でシェルを実行されてしまっても、そのアカウントの権限のみであるのため、root権限の必要なファイルの書き換えなどはできません。

xinetdの動作に関する基本的な設定は、/etc/xinetd.confファイルで行います。xinetdに制御される各種サービスに共通の設定を行うものです。そして、各種サービスの個別の設定は、/etc/xinetd.dディレクトリ以下にあるファイルで行います。



e. SUID

SUID が設定されているコマンドやプログラムが実行されると、実行したユーザーではなく、そのファイルの所有者の権限で実行されたものとみなします。
そのため、所有者がrootであるファイルにSUIDが設定されているとroot権限で実行されることになります。
セキュリティ上は問題になる場合が多いので、SUIDのセットされているファイルをチェックしておく必要があります。

SUIDのセットされているファイルを見つけるには

# find / -perm -u+s -ls
983060 40 -rwsr-xr-x 1 root root 35832 9月 27 2009 /bin/ping 983074 64 -rwsr-xr-x 1 root root 59540 11月 8 18:23 /bin/mount 983111 24 -rwsr-xr-x 1 root root 24312 3月 21 2012 /bin/su 983114 40 -rwsr-xr-x 1 root root 40632 11月 8 18:23 /bin/umount 983061 36 -rwsr-xr-x 1 root root 31244 9月 27 2009 /bin/ping6 : 省略


f. シャドウパスワード

Linuxにおける旧来のパスワード管理方式では、/etc/passwdファイルに暗号化したパスワードを格納していました。  /etc/passwdファイルは一般ユーザーでも読み取り可能な上、時間をかければ暗号解読が可能なので、セキュリティ上好ましくありません。

そこで現在ではシャドウパスワードというパスワード管理方式が使われるのが一般的です。
この方式では、パスワードはスーパーユーザーにしか読み取り権限がない/etc/shadowファイルに格納されます。

パスワード管理方式はLinuxインストール時に選択しますが、運用中でも自由に切り替えることが可能です。
旧来のパスワード管理方式からシャドウパスワードに切り替えるには pwconv コマンドを使用します。シャドウパスワードに切り替えると、/etc/shadowファイルが作成され、パスワードはそこに格納されます。/etc/passwdファイルのパスワードフィールドには「x」が入ります。
逆にシャドウパスワードから旧来のパスワード管理方式に戻すには pwunconv コマンドを使用します。このとき/etc/shadowファイルは削除され、パスワードは/etc/passwdファイルに格納されます。

ユーザーパスワードと同様にグループパスワードもシャドウ化できます。
グループパスワードをシャドウ化するには grpconv コマンドを使用します。シャドウ化すると、/etc/gshadowファイルが作成され、パスワードはそこに格納されます。/etc/groupファイルのパスワードフィールドには「x」が入ります。
逆に旧来のパスワード管理方式に戻すには grpunconv コマンドを使用します。このとき/etc/gshadowファイルは削除され、パスワードは/etc/groupファイルに格納されます。



g. ログインの禁止

/etc/nologinファイルがあるとloginプロセスはroot以外の新たなユーザをログインさせません。(/etc/nologinファイルはゼロバイトでもよい) したがって/etc/nologinファイルを作成しておけば、それ以降root以外のユーザはログインできなくなります。一般ユーザがログインを行おうとすると/etc/nologinファイルの内容が表示されます。

システムメンテナンスを行う際など、/etc/nologinファイルにメッセージを書いておき、ログインユーザのログインを許可させたくないときなどに使用できます。
また、コンソールからrootしかログインしない場合にも使用できます。

サービスが使用するアカウントで、ログインする必要のないアカウントには、そのアカウントのログインシェルに /bin/false や /sbin/nologin をセットしておきます。

サービス用のアカウント serv をログイン禁止にします。
# usermod -s /sbin/nologin serv
# cat /etc/passwd
: serv:x:513:513::/home/serv:/sbin/nologin : 省略


z. 出題範囲概要

●主要な知識範囲
シャドウパスワードおよびその機能について知っている
使用していないネットワークサービスをオフにする
TCPラッパーの役割について理解している
●重要なファイル、用語、ユーティリティ
/etc/nologin, /etc/passwd, /etc/shadow, /etc/xinetd.d/*, /etc/xinetd.conf, /etc/inet.d/*, /etc/inetd.conf, /etc/inittab, /etc/init.d/*, /etc/hosts.allow, /etc/hosts.deny


  [ 例題 ] 
  1. 102:110.2 問01  /etc/nologin
  2. 102:110.2 問02  xinetd
  3. 102:110.2 問03  xinetd
  4. 102:110.2 問04  シャドウパスワード
  5. 102:110.2 問05  接続の許可
  6. 102:110.2 問06  root以外のユーザのシステムへのログインさせない


     

www.it-shikaku.jp