私のSSH / SFTP
実装では、特定のユーザーグループに対して、ログイン後にユーザーをhome
フォルダーに制限し、SFTP
アクセシビリティを付与する前に他の条件を確認するようにしたいと思います。
ユーザーをホームディレクトリに制限するのは簡単でした、と私は付け加えました。
Match group <someGroup>
ChrootDirectory %h
ForceCommand internal-sftp
ただし、2番目の部分に移り、特定の条件を確認したいと思います。これには、ForceCommand
のinternal-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セッションを開始できません。他に何が必要かもしれませんか?
それはいけません。
internal-sftp
は、バイナリではなく構成キーワードです。 sshd
に組み込みのSFTPサーバーを実行するようにsshd
に指示します。シェルコマンドから実行中のプロセスにコールバックすることはできません。
sftp-server
バイナリは、internal-sftp
を使用できないこのようなシナリオのために特別に保持されていると思います。 OpenSSH:internal-sftpとsftp-serverの違い に対する私の答えを参照してください。
sftp-server
で実行できるはずですが、さらにセットアップが必要な場合があります。