SSH / SCP / SFTPユーザーをディレクトリに制限する


36

SCP / SFTPユーザーをディレクトリに制限する簡単な方法はありますか?私が出会ったすべての方法では、バイナリをコピーしてchroot刑務所を設定する必要がありますが、それは必要ではないと思います。

回答:


29

SSHは、SFTPユーザーのネイティブのchrootをサポートします。あなただけを提供する必要があります

ChrootDirectory

sshd構成ファイルで、sshdを再起動します。

sftpを実行しているだけであれば、それ以上何もする必要はありません。残念ながら、これはscpでは機能しません。対話型シェルの場合、バイナリと/ devノードをchrootにコピーする必要があります。

単一ユーザーtestuserの構成例:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

sshd_configのmanページから、次の点に注意してください。

    パス名のすべてのコンポーネントは、次のものではないルート所有ディレクトリである必要があります
    他のユーザーまたはグループが書き込み可能。chrootの後、sshd(8)は
    作業ディレクトリからユーザーのホームディレクトリ。

詳細については、man sshd_configでChrootDirectoryを検索してください。


2
「Match User testuser」で始まる部分は、ユーザーがその時点から「testuser」である場合にのみ構成行が含まれるため、ファイルの最後にある必要があります。
マグナス

1
SFTPプロトコルの場合のみChrootを実行できますが、通常のSCP接続を許可することはできますか?
ラノックス

1
Ubuntu 14.04マシンでは、Subsystem sftp /usr/lib/openssh/sftp-server行を次のように変更する必要もありましたSubsystem sftp internal-sftp -f AUTH -l VERBOSE
-partofthething

@Magnusまたは別のMatchセクションまで。
ロアイマ

12

chrootはかなり単純な方法です。オペレーティングシステムには既にこのセキュリティ機能があるため、デーモン作成者はそれを再実装しようとしない傾向があります。

Rsshには、chroot刑務所のセットアップに関するガイドが付属しています。CHROOTソース配布物のファイルにあります。要するに、次のものが必要です。

  • ルートからコピーされたいくつかのバイナリ、: 、、/usr/bin/scp/usr/libexec/openssh/sftp-server/usr/bin/rssh_chroot_helper
  • {/usr,}/lib/lib*.so.[0-9]同様にコピーされた、ライブラリが使用するライブラリ()
  • A /etc/passwd(おそらくコピーではなく、マスターから派生)
  • :いくつかのデバイス/dev/null/dev/ttyまた、および/dev/logロギング用のソケット(およびあなたはそのソケットでリッスンするようにあなたのsyslogデーモンに伝える必要があります)

rsshのドキュメントにはない追加のヒント:chroot jailでアクセスできるファイルが必要な場合は、bindfsまたはLinuxを使用mount --bindして、jailの外部から追加のディレクトリ階層を作成できます。bindfs再マウントされたディレクトリに、たとえば読み取り専用など、より制限された権限を許可します。(mount --bindカーネルパッチを適用しない限り、Debianはこのパッチを東レニーから含めていますが、他のほとんどのディストリビューションには2011年の時点ではありません。)


7

あなたはscponly(または最近ではrssh)を見たいかもしれません。それは本質的にscpまたはsftpdサブシステムを起動するためにのみ使用できるログインシェルです。ではscponlycバリアントそれは問題のサブシステムを起動する前にchrootを実行します。


scponlyは、少なくともUbuntuでは非推奨のようです
-tobixen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.