web-dev-qa-db-ja.com

ForceCommandスクリプトのChrootDirectoryの後にシェル呼び出しとしてinternal-sftpを呼び出す

私のSSH / SFTP実装では、特定のユーザーグループに対して、ログイン後にユーザーをhomeフォルダーに制限し、SFTPアクセシビリティを付与する前に他の条件を確認するようにしたいと思います。

ユーザーをホームディレクトリに制限するのは簡単でした、と私は付け加えました。

Match group <someGroup>
ChrootDirectory     %h
ForceCommand internal-sftp

ただし、2番目の部分に移り、特定の条件を確認したいと思います。これには、ForceCommandinternal-sftpをスクリプトに置き換えることが含まれます。

スクリプト内で、チェック後:

sh -c $SSH_ORIGINAL_COMMAND

/usr/libexec/openssh/sftp-serverに解決されます。これは、SFTPなどのWinSCPクライアントによって送信されるリクエストであるためです(おそらくデフォルトです)。ユーザーはSFTPを使用できますが、ユーザーをホームディレクトリにChrootする機能はなくなります。

シェルスクリプトから、internal-sftpコマンド、およびChroot-ingユーザーをスクリプト内の%HOMEに強制または呼び出す方法がわかりません。本当に可能なら、どうすればいいですか?

[〜#〜] update [〜#〜]

以下の回答に従って、必要なシステムファイルをChrootディレクトリにコピーし、スクリプトで$SSH_ORIGINAL_COMMANDを呼び出そうとしました。

sshd_config

Match group <somegroup>
ChrootDirectory     %h
ForceCommand    /usr/local/bin/testssh.sh

testssh.sh script

#! /bin/bash
sh -c $SSH_ORIGINAL_COMMAND

ChrootDirectory (user home, complete path owned by root)

Contents
/bin
/etc
/lib

ただし、ユーザーはまだsftpセッションを開始できません。他に何が必要かもしれませんか?

1
user1173240

それはいけません。

internal-sftpは、バイナリではなく構成キーワードです。 sshdに組み込みのSFTPサーバーを実行するようにsshdに指示します。シェルコマンドから実行中のプロセスにコールバックすることはできません。

sftp-serverバイナリは、internal-sftpを使用できないこのようなシナリオのために特別に保持されていると思います。 OpenSSH:internal-sftpとsftp-serverの違い に対する私の答えを参照してください。

sftp-serverで実行できるはずですが、さらにセットアップが必要な場合があります。

1
Martin Prikryl