openssh/sftp-server 仮想 chroot が機能しない

openssh/sftp-server 仮想 chroot が機能しない

たとえば、sshに接続して実行すると、sshfs接続を介してルートディレクトリを取得/usr/libexec/openssh/sftp-server -d /opt/filesできます。/

例:testユーザーがあり、authorized_keys2つのアクセス権があります。 1 つはすべてのアクセス権を持ち、もう 1 つは制限付きアクセス権を持っています。例:

restrict,command="/usr/libexec/openssh/sftp-server -d /opt/files" ssh-rsa AAA...

ただし、次のキーを使用してルートディレクトリをマウントできます。

# mkdir /mnt/remote
# sshfs test@hostname:/ /mnt/remote
# ls /mnt/remote
bin boot dev etc home ...

Pythonで開発されたカスタムソフトウェアとの統合を作成しようとしています。したがって、chrootに対して異なる権限を持つ複数のユーザーを使用するのではなく、単一のユーザーを使用しようとしています。委任されたアクセスに基づいて単一のユーザーを使用したいと思います。別のディレクトリ各キーに対してこれを行います。

ベストアンサー1

単に-dオプションを使用してsftp-serverもセッションがルート化されるわけではありません。

sftp-serverそれ自体には特別な権限がなく、chroot()システムコールにはroot権限(またはCAP_SYS_CHROOT別の機能を使用する場合は特定の機能)が必要です。したがって、sftp-serverrootとして実行しない限り、実際のchroot操作を実行することは事実上不可能です。

マニュアルsftp-server(8)ページには次のように記載されています。

-d 起動ディレクトリ

ユーザーの代替開始ディレクトリを指定します。 [...] デフォルトは、ユーザーのホームディレクトリを使用することです。このオプションは便利ですsshd_config(5) ChrootDirectory オプションとともに使用されます。

したがって、あなたのsftp-server -d /opt/filesものは「仮想chroot」ではありません。cd /opt/filesSFTPセッションに対する制御をリモートクライアントに付与する前のプロセスにすぎません。

特定のユーザーだけをchrootするには、ファイルの最後に次のようにします/etc/ssh/sshd_config

Match User test
ChrootDirectory /opt/files

実際のchrootを実行する予定の場合は、このオプションの説明をよく読んでくださいChrootDirectory。これをディレクトリとして使用するための要件はChrootDirectory非常に厳格です。

残念ながら、セッションがルートとして指定されるディレクトリを決定するためにキーを使用できないようです。このChrootDirectoryオプションは一部の%-トークンを受け入れますが、最新バージョンの OpenSSH の sshd_config(5) マニュアルページ説明する:

ChrootDirectory は %%、%h、%U、%u タグを受け入れます。

これら 4 つのトークンは、リテラル%文字、ユーザーのホームディレクトリ、数値で構成されるユーザー ID、およびユーザー名を表します。

たとえば、Pythonアプリケーションに複数のクライアント用にファイルを準備させることが目標である場合、ユーザーグループはそれです。多くの最新のLinuxディストリビューションでは、各ユーザーはユーザー名と同じグループ名を使用してそのユーザー専用のグループとして作成されます。

次のようにユーザーアカウントを設定できます。

ユーザー 小学校グループ 補助グループ
Pythonアプリ Pythonアプリ テスト1、テスト2、テスト3 ...
テスト1 テスト1 (何もない)
テスト2 テスト2 (何もない)
テスト3 テスト3 (何もない)
... ... ...

ユーザーのホームディレクトリに少なくとも710()に設定された権限があり、test1各ホームディレクトリに権限が2770()のグループ書き込み可能サブディレクトリがある場合、ユーザーはすべてのグループ書き込み可能サブディレクトリサブディレクトリにアクセスできますが、アクセスできません。ユーザー間にパブリックグループメンバーシップがないため、互いのホームディレクトリまたはその中にあるグループ書き込み可能ディレクトリにアクセスできません。グループ書き込み可能サブディレクトリのsetgidビットは、ユーザーが作成したすべてのファイルがユーザー固有のグループに割り当てられることを保証するため、ユーザーはグループ名を表示できません。test2test3drwx--x---drwxrws---pythonapptest...test...pythonapptest...pythonapp

もちろん、数百または数千人の顧客がいる場合、このアプローチはそれまで拡張するのが難しいかもしれません。

おすすめ記事