web-dev-qa-db-ja.com

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

SCP/SFTPユーザーをディレクトリに制限する簡単な方法はありますか?私が遭遇したすべての方法では、バイナリをコピーしてchroot jailをセットアップする必要がありますが、それは必要ではないと思います。

37
user4518

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を検索してください。

30
gabe.

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

Rssh には、chroot jailのセットアップに関するガイドが付属しています。これは、ソース配布の CHROOT ファイルにあります。簡単に言えば、次のものが必要です。

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

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

scponly (または最近では rssh );を確認することをお勧めします。これは本質的にはログインシェルであり、scpまたはsftpdサブシステムの起動にonlyを使用できます。 scponlycバリアントでは、問題のサブシステムをアクティブにする前にchrootを実行します。

7
Shadur