japan.internet.comThe Internet & IT Network
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2009年7月4日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
LinuxTutorial2007年3月9日 09:00

Linux のログイン制限

海外海外internet.com発の記事
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート
ログイン戦略

ある日、マルチユーザー Linux システムのセキュリティに関して聞かれたある賢者は、「ユーザーとしてログインを許可すると、だれもが root になってしまう」と答えたという。うなずける部分も多いが、目前の妥協案が受け入れがたいこともある。そこで、危険を抑えながら信頼できない見知らぬユーザーにシェルへのログインを許可する方法について考察してみよう。

一般的に、ログインユーザーを厳しく制限したいと考える人種は2種類存在する。ひとつは、共同作業をする人々で、ふたつの別組織が共同作業を余儀なくされているケースもある。もうひとつは、セキュリティを危険にさらすだろうと確信しながらも、うさん臭い人物にシェルへのアクセスを許可したいと考えている人々だ。もし可能であれば、アクセスを与えないというのが最善策だが、与えるのであれば、パッチは必ず毎日適用したい。

信頼できないユーザーには絶対にシェルを利用させない、というのが有効な場合もあるが、ユーザーを中に入れなくてはならない場合もある。

かなり簡単な例としては、別の場所にいるリモートユーザーがログインし、同じ一連のコマンドを毎日実行しなくてはならない場合がある。この作業が簡単にスクリプト化でき、それだけが当該サーバーを利用する目的だ、と仮定すれば、シェルは絶対に必要ない。OpenSSH を使えば、ひとつの SSH キーに一連の命令を適用することができる。

SSH キーの入力終了後、以下のオプションを付加する。

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="~/bin/script.sh"

これは、キーを使うすべての SSH 接続に対して、事実上の制限を加え、参照されるスクリプトしか実行できなくする。たとえば、これを Web サーバーを再起動する「setuid」スクリプトにすることもできる。OpenSSH が command= テキストのいかなるバリエーションでも拒否するため、これはかなり安全だ。このキーを持っているユーザーは、明示的に許可されたコマンドしか実行できなくなる。

これと、場合によってはしゃれた Web ベースのツールや cron ジョブ以外となると選択肢はあまり残らない。ユーザーは、とにかくログインして作業をするしかないときもあり、そのような場合には、やらなくてはならない仕事が用意されている。

常に最新の状態になるようパッチをあてておくことは言うまでもない。ただ、ここでは「とにかく自動化せよ」とだけ言っておき、その部分にはあまり深く踏み込まないでおく。マシンのセキュリティ確保はまったく別の問題だが、検討すべき点をいくつか指摘する。

未知の攻撃から身を守るための第一防衛線が、SELinux(Security-Enhanced Linux)を有効にすることだ。

SELinux は、だれかが悪用を試みる前に、既知のセキュリティホールに対処することが要求される「アップデート」の手段を執るだけでなく、バッファオーバーフローも防ぐことができる。SELinux は大幅に改善されたアクセスシステムを提供しており、プログラムの運用に不要なものへのアクセスは制限する。これとオーバーフロー防止機能を組み合わせると、Linux システムに対して危害を加えることは相当難しくなる。

さらに、マルチユーザーマシンのセキュリティ確保については、「ユーザーの所有である場合を除き、実行中のプロセスをユーザーの目に触れさせてはならない」という、活発に議論されている教訓がある。このような制限は、Linux や BSD では簡単に有効にできるが、実際は、これで安心できるのだろうか。その答えは、「おそらく安心できる」であり、同時に「あまり意味はない」というところだ。

「おそらく安心できる」と思われる方は、プロセスの引き数を考えていただきたい。コマンドに一連の引き数を付けて実行すると、そのコマンドと引き数は「ps」実行時のリストに表示される。また、コマンドラインでパスワードも入力すれば、プロセスが実行中の間は「ps」を実行するユーザー全員にこれが見えてしまう。ユーザーがサーバー上で実行中のデーモンプロセスを見えるようにするのは攻撃目標を教えるようなものだ、という考えは多い。いずれにせよ、この情報はほかの方法を使えば簡単に入手できるので、「あまり意味はない」ということになる。

この議論が始まると、必ずだれかが「chroot jail」の話を持ち出してくる。「chroot」は「change root (root の変更)」の略で、まさしくその処理を行う。

「chroot /home/charlie /bin/bash」というコマンドを実行すると、chroot がシェルで/home/charlie/bin/bash を実行し、/home/charlie にユーザーを閉じこめる。「bash」シェルが有効な限り、ファイルシステムの新しい root は/home/charlie となる。これで、実際のファイルシステムへのアクセスは、この場所以外はまったくできなくなる。そして、利用可能なあらゆるコマンドと、それに必要なライブラリは、この chroot jail にコピーする必要がある。便利な環境を実現するのは一苦労なのだ。実際は、ユーザーごとに専用の Linux Xen や Solaris Zone インスタンスを与えた方が簡単だ。

最後に説明するのが制限付きシェルだ。最も人気の高い「rbash」は、制限付きの bash シェルだ。ユーザーのシェルを rbash に設定すると、間違いなく完全にセキュリティが消えてしまう。rbash は理論上、「./」(現在のディレクトリ)を含め、ユーザーがフルパスを指定して何かを実行することができなくする。これはつまり、自分で書いたスクリプトやダウンロードしたエクスプロイトコードをはじめ、ユーザーがコマンドを実行しにくくなることを意味する。

「$PATH」はグローバルでコントロールされているため、ユーザーはこれらの場所でしか何かを実行することができない。残念ながら、「/bin/」もこれらのパスのなかに置かなければならないため、ユーザーは新しいシェルを実行するだけであり、rbash は「exec bash」で見えなくなる。
これを緩和するには、ユーザーのパスに管理者が作成したディレクトリしか与えない、という方法もある。このディレクトリのなかでは、すべての正規コマンドに symlink を配置するだけだ。設定は chroot 同様に厄介だが、こちらの方がはるかに許容度が高い。

ユーザーがダウンロードしたプログラムを実行できなくする方法がいくつかあるのは確かだが、結局のところ、システムのマルチユーザー環境下におけるセキュリティは、インストールされたすべてのソフトウェアのセキュリティに依存することになる。そして、SELinux のようにエクスプロイトコードの被害を防ぐことが、最も実用的な手段となる。頻繁にアップデートされるシステムと組み合わせれば、rbash のような新たな制限も一般には必要でなくなる。

では、ここで学んだ本当の教訓は何だろう。セキュリティは不便だということだ。そして、もしそれが不便でないのなら、その方法はどこかが間違っているということだ。

関連テーマ
このエントリーを含むはてなブックマーク この記事をクリップ!
BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
この記事をokyuuへインポート
最新トップニュース
データメーション
【データメーション】
中国が「Green Dam」フィルタ規制を撤回(7月1日)
Graphic Design Forum
【Graphic Design Forum】
Chris Dickman(6月25日)
プライバシー ジャパン・インターネットコム版
【プライバシー ジャパン・インターネットコム版】
グーグル・ストリートビューの問題について総務省の見解(6月23日)
エンジニアの独り言
【エンジニアの独り言】
システムを「使う」時代のエンジニアに求められるもの(6月2日)
最新ハイテク講座
最新ハイテク講座
電気は家庭でつくる時代へ!燃料電池「エネファーム」(7月3日)
アクセス解析で見るWebマーケティング
アクセス解析で見るWebマーケティング
決定力を探るアクセス解析(7月3日)
百式のネットビジネス研究
百式のネットビジネス研究
ファーストフードを高級っぽく盛り付けて紹介している「Fancy Fast Food」(7月3日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(7月2日)
成約率、反応率を上げる Web 文章術
成約率、反応率を上げる Web 文章術
言葉がダイレクトにキャッシュを生む(7月2日)
不況時代の Web ビジネス最適化講座
不況時代の Web ビジネス最適化講座
アクセス解析エキスパートここだけの話、Web コンシェルジュの“勉強法”こっそり教えます(7月2日)
「Webからの脅威」―その傾向と最新対策
「Webからの脅威」―その傾向と最新対策
不正プログラムの分類(7月1日)
DevX
DevX
JavaScriptとDOMによる動的なWebページの作成(6月30日)
エンジニア転職ノウハウ開発室
エンジニア転職ノウハウ開発室
今のままで大丈夫?3匹の子ブタ的キャリア危険度診断(6月30日)
アイレップの SEM フロンティア
アイレップの SEM フロンティア
Web サイトは「無駄な穴のたくさん開いたじょうご」〜サイト成果向上の基本的な考え方(6月30日)
Copyright 2009 Japan Internet.com K.K. All Rights Reserved.http://www.internet.com/