RSSH(1) Derek D. Martin RSSH(1) 名前 rssh - scp と sftp の両方だけ、またはその一方のみを許可する制限付セキュ アシェル 書式 rssh -c scp|sftp-server [ options... ] [ ... ] 説明 rssh はホストへの ssh(1) を使ったアクセスの制限を提供する制限付きシェル で 、 シ ェ ルが rssh に設定されたユーザには、 scp(1), sftp(1), cvs(1), rdist(1), rsync(1) のうちの一つ以上のコマンド のみ使用を許可する。主 に 、OpenSSH (http://www.openssh.com を参照) と共に動作するように意図され てはいるが、他の実装とも共に動作するだろう。 機密をもつシステムの管理者は、このシェルをインストールすべきである。 ア ク セスが制限されるべきすべてのユーザに対し、そのパスワードエントリを編 集し、シェルが rssh になるようにする。例えば以下のようにする。 luser:x:666:666::/home/luser:/usr/bin/rssh もし -v オプション付きで起動されたら、 rssh はバージョン番号を表示し て 終 了する。 rssh へのその他の引数はリモートの ssh(1) クライアントによっ て指定されたものが渡される。一般のユーザはこのことをほとんど意識する 必 要はない。制御を scp(1) または sftp(1) に渡すために、 rssh に渡される引 数は、リモート側のシェルが受け取ったものを(そのまま) 使わなければならな い 。もし rssh が適合しない引数を受け取った場合には、エラーメッセージを 出して終了する。ユーザが実行しようとしたプログラムが許可されなかった 場 合 はエラーメッセージを出力して終了する。また、(コマンド置換のような)シ ェルコマンドを実行しようとした場合もエラーメッセージを出力して終了す る 。 rssh には設定ファイル rssh.conf(5) があり、 rssh の動きのいくつかを設定 可能である。詳細は man ページを参照のこと。 セキュリティ上の注意 コマンドライン解析器 rssh バージョン 2.2.3 の時点では、任意のコマンドの実行を引き起こす ( そ の結果、rssh のセキュリティをかいくぐる) ようなコマンドラインオプション を避けるために、コマンドライン全体を解析しなくてはならない。ソースコ ー ド を健全にしておくため、やや熱心すぎるぐらいにコマンドラインオプション をマッチングする。実際にはこれは問題にはならないが、理論上は可能だか ら である。 本 当はそうではないにもかかわらず、「安全でないコマンドラインオプション を拒否した」という理由で rssh の実行を拒否されるという問題に突き当た っ た ら、コマンドラインを次のように変えてみて欲しい。すべての短いオプショ ンを1文字のオプションフラグで指定する (例えば、-ep の代わりに -e -p) 、 引 数とそれぞれのオプションをスペースで区切る (例えば、-p123 の代わりに -p 123)。ほとんど全ての場合で、これで問題は解決する。お分かりのとおり完 全な検索はしていないが、一般的に有り得るような問題は見つかっていない。 別 の解決策は、rcp, rdist, rsync に対する完全なコマンドライン解析器を実 装しておくことがだが、それはこのプロジェクトの目的でない。実用上は、 既 に ある解析器で十分である」しかし、もしそうでない場合を見つけたのなら、 詳細を rssh メーリングリストに投稿して欲しい。 rssh メーリングリスト へ の投稿に関する詳細は rssh ホームページから得ることができる。 rssh をかいくぐることに対する安全策 rssh は他のいくつかのプログラムと相互に作用するように設計されている。た とえ rssh に完全にバグがなくても、他のプログラムの変更が rssh が提供 し て いる保護機能を無視する結果となり得る。システム管理者、すなわちあなた にとって重要なことは、 rssh と共に使うようにしたサービスを現在のまま に し ておき、それらのコマンドがユーザーに任意のコマンドの実行を許可するよ うな仕組みを提供していないことを確かにしておくことでである。また、す べ て の リ リースの目標はバグがないことである一方、完璧なものなど無い…… rssh には発見されていないバグがあるかもしれず、それはユーザーが rssh を 無視することを許してしまうかもしれない。 そ のような脆弱性から、システムを守ることができる。 3つの基本的な方法が ある。 1. ユーザーを chroot jail に押し込める 2. ユーザーのホームのあるファイルシステムを noexec オプション付き で マウントする 3. 一般的なファイルパーミッションを適切に用いる rssh は、ユーザーを chroot jail に入れる能力をシステム管理者に与える。 詳細は rssh.conf(5) の man ページと、ソースコードと共に配布されて い る CHROOT ファイルを参照のこと。ユーザーが任意のコマンドを実行できないこと を確かなものにしたいなら、 chroot jail を使用し、提供しようとしているサ ー ビスに必要なプログラム以外をそこに置かないように気をつけること。そう すれば、標準的なコマンドの実行を防ぐことができる。 そして、システムの実行ファイルがあるファイルシステムと、ユーザーのフ ァ イ ルを分けておき、 (もしオペレーティングシステムにその機能があれば) ユ ーザーのファイルのあるファイルシステムを noexec オプション付きでマウ ン トする。こうすれば、目的のマシンに(例えば scp を使って)アップロードされ たプログラムが実行されるのを防ぐことができる。 最後に、chroot jail の中でユーザーがアクセスできてはならないものにつ い ては、標準的な Unix/POSIX ファイルパーミッションを使用すること。 OpenSSH のバージョンと rssh の無視 OpenSSH 3.5 より前では、一般的には sshd(8) はユーザのホームディレクトリ にあるファイルを解析しようとし、またユーザの $HOME/.ssh ディレクトリ か ら スタートアップスクリプトを実行しようとする。 rssh は決してユーザーの 環境(変数)を使用しようとはしない。関連するコマンド(訳注: sftp-server な ど) は、コンパイル時に指定されたコマンドへのフルパスを指定して execv(3) を呼び出すことで実行される。これはユーザの PATH 変数には依存しないし 、 他の環境変数にも依存しない。 し かしながら、起こりうるいくつかの問題が存在する。これは完全に OpenSSH プロジェクトの sshd の動作の仕方に原因があり、決して rssh の欠陥では な い。たとえば、存在するであろう一つの問題としては、 OpenSSH の少なくとも いくつかのリリースの sshd(8) の man ページによれば、 $HOME/.ssh/rc ファ イ ルに書かれているコマンドはユーザのデフォルトシェルの代わりに /bin/sh によって実行される。著者がテストに使えるシステムではこの問題は発生し な い 。すなわち、コマンドはユーザに設定されたシェル (rssh) によって実行さ れ、それは実行を許可しない。しかし、もしこれがあなたのシステムで有効 に な っ てしまっていれば、悪意のあるユーザは /bin/sh に実行されるであろう $HOME/.ssh/rc ファイルをアップロードして、 rssh を無視することができ る だろう。 実 際のところ、もしこの脆弱性問題が存在する(OpenSSH の)リリースがあると すれば、それは古く、旧式のバージョンである。最近のバージョンのOpenSSHを 動かしている限りは、私が言える範囲では問題ないはずだ。 もし使っている sshd がこの攻撃に対して脆弱で あるならば、かなり制限がか かるものの、この問題に対する回避方法がある。 ユーザのホームディレクトリ は 絶対にそのユーザが書き込めては*いけない*。もし書き込めてしまえば、ユ ーザは sftp を使って(.ssh)ディレクトリの名前を変えるか消すかして、あ た ら し い 同 名 の デ ィ レ ク トリを作り、好きな環境ファイル(訳注: 上記 $HOME/.ssh/rc ファイルのこと)をそこに書き込める。ファイルのアップロード を 開放するためには、ユーザが書き込めるディレクトリが作成されていなけれ ばならず、ホームディレクトリのそれ以外の場所には書き込めないことをユ ー ザに承知させなければならない。 二 つ 目 の 問 題 は 、 ユ ーザが環境に変数を設定できることを可能にする $HOME/.ssh/environment ファイルを、sshd がユーザの認証後に読み込むこ と である。環境変数 LD_LIBRARY_PATH または LD_PRELOAD を上手に操作して、任 意の共有ライブラリを rssh バイナリにリンクさせることによって rssh を 完 全 に 欺くことを許してしまう。この問題を防ぐために、 rssh は(バージョン 0.9.3 の時点では)デフォルトでは静的にコンパイルされる。前述の制限付きの 回 避 方法は、この種の攻撃も防ぐことができる。 OpenSSH 3.5 の時点では、 sshd は PermitUserEnvironment オプションをサポートしており、これはデ フ ォ ルトで "no" に設定されている。このオプションは、 rssh のような制限つ きシェルが静的リンクの必要なしに適切に機能することを可能にする 。 rssh バ ージョン 1.0.1 の時点で、configure スクリプトは OpenSSH 3.5 が存在す るかを検出し、静的コンパイルを無効にする。 バグ ない =8^) 関連項目 rssh.conf(5), sshd(8), ssh(1), scp(1), sftp(1) man pages 7 Jul 2003 RSSH(1)
Copyright(C) linux-cmd.com All Rights Reserved. Author Takayuki Yukawa