scp と sftp の両方だけ、またはその一方のみを許可する
-c scp|sftp-server
[ options... ] [ ... ]
-v
オプション付きで起動されたら、
rssh
はバージョン番号を表示して終了する。
rssh
へのその他の引数はリモートの
ssh (1)
クライアントによって指定されたものが渡される。
一般のユーザはこのことをほとんど意識する必要はない。
制御を
scp (1)
または
sftp (1)
に渡すために、
rssh に渡される引数は、リモート側のシェルが受け取ったものを(そのまま)
使わなければならない。
もし
rssh
が適合しない引数を受け取った場合には、エラーメッセージを出して終了する。
ユーザが実行しようとしたプログラムが許可されなかった場合は
エラーメッセージを出力して終了する。
また、(コマンド置換のような)シェルコマンドを実行しようとした場合も
エラーメッセージを出力して終了する。
rssh
には設定ファイル rssh.conf(5) があり、
rssh
の動きのいくつかを設定可能である。
詳細は man ページを参照のこと。
CHROOT
ファイルを参照のこと。
ユーザーが任意のコマンドを実行できないことを確かなものにしたいなら、
chroot jail を使用し、提供しようとしているサービスに必要なプログラム以外を
そこに置かないように気をつけること。
そうすれば、標準的なコマンドの実行を防ぐことができる。
そして、システムの実行ファイルがあるファイルシステムと、
ユーザーのファイルを分けておき、
(もしオペレーティングシステムにその機能があれば)
ユーザーのファイルのある
ファイルシステムを
noexec
オプション付きでマウントする。
こうすれば、目的のマシンに(例えば scp を使って)アップロードされた
プログラムが実行されるのを防ぐことができる。
最後に、chroot jail の中でユーザーがアクセスできてはならないものに
ついては、標準的な Unix/POSIX ファイルパーミッションを使用すること。
$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
を無視することができるだろう。
ある
ならば、かなり制限がかかるものの、この問題に対する回避方法がある。
ユーザのホームディレクトリは絶対にそのユーザが書き込めては*いけない*。
もし書き込めてしまえば、ユーザは 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 が
存在するかを検出し、静的コンパイルを無効にする。