名前
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.
- 一般的なファイルパーミッションを適切に用いる
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 を無視することができるだろう。バグ
ない =8^)関連項目
rssh.conf(5), sshd(8), ssh(1), scp(1), sftp(1)7 Jul 2003 | man pages |