OpenSSHは「internal-sftp」のようなものですが、SCP用ですか?


16

私はDebian安定版を実行しています。私の 'sftponly'グループのユーザー向けに次の環境を確立したいと考えています。

  • 投獄された
  • SFTPで転送できます
  • SCPで転送できます
  • SSHで対話的にログインできません

私の実験と研究から、sshd_configの次のスタンザで90%がそこに到達したようです:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

これにより、SFTPが投獄され、SSHは投獄されません。これは良いことです。しかし、SCPも無効にします。これは、かなりの数のクライアントがSFTPではなくSCPを使用するレガシーなスクリプトプロセスであるため、理想的ではありません(交換するサーバーは両方のプロトコルをサポートしています)。変更した場合、SCPを完全に無効にすることは実用的ではない可能性があります。

SCP接続を受信すると、sshdはユーザーのログインシェルを介してそのユーザーとして「scp」プロセスを生成するため、この構成ではSCPが無効になります。特別な 'internal-sftp'ハンドラーでない場合、SFTPでも同じことが通常当てはまるようです。

だから、私の質問は次のとおりだと思います:scponlyやrsshなどのサードパーティツールを使用せずに、「internal-sftp」と同じ効果を達成する方法はありますか?「internal-sftp」の本当に素晴らしい点は、サポートファイルを使用した刑務所のセットアップや、潜在的に悪用可能なサードパーティのsetuidバイナリ(特に、rsshにはエクスプロイトの履歴があります)を処理する必要がないことです。


1
クライアントはsshキーファイルを使用して接続していますか、それともパスワードを使用していますか?キーファイルの場合、できることを制限することができます。
ジェニーD

彼らはパスワードで接続しています。
ブライアンコーヘン

回答:


3

システムへのアクセスを制限できる代替シェルであるrsshを見てください

rsshは、ssh(1)を介してホストへの制限付きアクセスを提供するための制限されたシェルであり、シェルがrsshに設定されているユーザーが1つ以上のコマンドscp(1)、sftp(1)cvs(1 )、rdist(1)、rsync(1)、およびこれらのコマンドのみ。

rssh.confファイルを使用して、ユーザーごとまたはシステム全体で使用できるコマンドを構成できます。

あるいは、scponlyを使用して、必要なことを実行できます。sshスイートのラッパーとして機能し、ファイル転送を許可しますが、シェルアクセスは許可しません。


2

sshでこれを行う必要がありますか?

その場合、シェルを次のように設定してみてください。

/usr/libexec/openssh/sftp-server

そして、必ず上記を/ etc / shellsに追加してください

ビルトインアカウントの使用から切り離したい場合は、proftpdをセットアップできます。

proftpdを使用して安全なSFTPをセットアップします。次のようにproftpdをコンパイルします。

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

以下のこの記事と、Googleでの設定方法に関する詳細をご覧ください。

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html


2

お気づきのように、SFTPサーバーは組み込まれていますが、SCPサーバーは組み込まれていないため、OpenSSHで同様に簡単または信頼できるものはありません。

警告:ビンスバークによる提案は、いくつかの理由で悪いです:

  1. スタートアップファイルに関するシェルの動作は、環境変数の影響を受ける場合があります。環境変数は、サーバーの構成に応じてSSHでリモート設定できます。
  2. ユーザーはssh / bin / bashを実行するだけでシェルを取得できます。ttyを持たないため、使用するのは不便になりますが、...実行できる他のすべてのプログラムは言うまでもなく、おそらく彼にはしたくないでしょう。
  3. ユーザーが「ssh host rm -f .bash_profile」を実行できる場合、.bash_profileのアクセス許可を変更してもほとんど効果がありません。ホームディレクトリのアクセス許可については何も言及されていません。

... 等々。この種のアプローチは、あまりにも脆弱です。


0

これはサードパーティのツールであり、質問の範囲内ではありませんが、とにかく言及するに値すると思いました。

Jailkit:https ://olivier.sessink.nl/jailkit/

ユーザーの刑務所を簡単に設定できるツールのコレクションがあります-バイナリとライブラリを刑務所にコピーし、刑務所内からOSへのロギングを設定します。私はそれを使用してsftp / scp / rsync-only chrootsを構築しました。

また、jk_lsh(rootなしでscp / sftp / rsyncのみを許可する場合など)ユーザーが実行できるコマンドを制限するためにjailの外部で使用できる(jailkit限定シェル)も付属しています。


-1

このサーバーサイドを実行する方法のコツです。ユーザーのシェルを、たとえばbashに設定します。

usermod -S /bin/bash [username]

ここで、次の行を使用してhomedirに「.bash_profile」を作成します。

[ -n "$PS1" ] && exit

これにより、非対話型セッション(「scp」など)が続行されます。ただし、「ssh」ログインを試行すると、「exit」が呼び出され、接続が閉じられます。

新しい '.bash_profile'をホームディレクトリに 'sftp'できないことを確認してください!

chown root:root .bash_profile

お役に立てば幸いです!


このアプローチは、刑務所の要件を考慮していないようです。
ブライアンコーヘン

はい、残念ながら、sshd_configで指定されたchrootディレクトリと重複する「scp」側の手動chroot環境を作成し、制限したい各ユーザーに対して上記のトリックを実行する必要があります。「scp」は、内部sftpサーバーでは機能しません。
ヴィンスバーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.