実際、この質問はとても広いです...
私が本当に知りたいのは、それが本当にchrootであるかどうか、そしてもしchrootに必須のバイナリ/libが明らかに不足しているにもかかわらず、その刑務所でSSHユーザーdaamon [1]を起動する方法です。
驚いたことに、Googleはこの問題に対して沈黙を守りました。しかし、これを説明する良い参考資料があれば十分です(しかし、私は彼らのCを読んで理解するのに十分な教育を受けていません)。
[1]:メインルートOpenSSHデーモンが接続されたときに起動されるユーザー権限を持つ実際の一時デーモンについて話しています。
答え1
他の答えは(質問のように)やや曖昧なので、その現象をより詳しく説明します。このトピックはすべての人のためではありませんが、興味のある人には知っておくと良いことです。
持つ二つこの作業はさまざまな場所で行われており、あなたchroot
も作業しているので、あなたのアイデアを調整しようとしています。
持つ特権の分離、これはセキュリティメカニズムであり、部分的には
chroot
ネットワークサブ制限としても機能します。これは一般的に/var/empty
。理由は簡単です。抜け穴があればおそらくこのプロセスはファイルシステムを見ることができず、特に制限されているため、悪用することはできません(詳細についてはSandbox、SECCOMPキーワードを参照)。
後で
chroot
ファイルシステム全体へのアクセスを防ぐために、SFTPだけでなくユーザーセッションも特定のディレクトリに配置できます。タイトルを見ると、この部分があなたが興味を持っているかもしれません。これ魔法chrootのsftpの点は
Subsystem sftp internal-sftp
(フルパスの代わりにSubsystem sftp /usr/lib/openssh/sftp-server
)指定できることです。これはバイナリではなく完全にコンパイルされたsshd
ことを意味します。sftp-server
exec
着信電話サーバーの動作を定義する関数です。これは、ユーザーのサポートファイルを必要としませんchroot
(シェルと依存共有オブジェクトを必要とする通常のセッションとは異なり)。この種の情報に興味がある場合は、ロギングソケットが必要な場合があります。
答え2
私はリモートサーバーコマンドを使用して呼び出されたsshにいくつかの追加ロギングを追加することで、権限分離操作モードを処理しようとしました。あなたが言ったように、あなたはそれについて多くを見つけることができませんでした。
確かな鍵は「UsePrivilegeSeparation」オプションです。
ユーザー認証中、sshd ブランチは権限を放棄し、ユーザー sshd を使用して chroot で実行されます。ソースコードを分析してみると、/var/emptyにルートが変わることがわかりました。
また、chrootの前後のコード間で特定の操作が一致する必要があることを確認するために、いくつかのチェックを実行します。これはまだ見ていません。
関連リンクも残します:
http://www.openbsd.org/papers/openssh-measures-asiabsdcon2007-slides.pdf