たとえば、sshに接続して実行すると、sshfs接続を介してルートディレクトリを取得/usr/libexec/openssh/sftp-server -d /opt/files
できます。/
例:test
ユーザーがあり、authorized_keys
2つのアクセス権があります。 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-server
rootとして実行しない限り、実際のchroot操作を実行することは事実上不可能です。
マニュアルsftp-server(8)
ページには次のように記載されています。
-d 起動ディレクトリ
ユーザーの代替開始ディレクトリを指定します。 [...] デフォルトは、ユーザーのホームディレクトリを使用することです。このオプションは便利ですsshd_config(5) ChrootDirectory オプションとともに使用されます。
したがって、あなたのsftp-server -d /opt/files
ものは「仮想chroot」ではありません。cd /opt/files
SFTPセッションに対する制御をリモートクライアントに付与する前のプロセスにすぎません。
特定のユーザーだけを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ビットは、ユーザーが作成したすべてのファイルがユーザー固有のグループに割り当てられることを保証するため、ユーザーはグループ名を表示できません。test2
test3
drwx--x---
drwxrws---
pythonapp
test...
test...
pythonapp
test...
pythonapp
もちろん、数百または数千人の顧客がいる場合、このアプローチはそれまで拡張するのが難しいかもしれません。