
私は sftp ユーザーの chroot 設定に関する 6 種類のチュートリアルに従いましたが、jail されたユーザーは依然として親ディレクトリを参照できます。この部分がチュートリアル間で最も異なるため、権限が正しく設定されていないのではないかと思います。これまでに実行したことは次のとおりです。
1) CentOS 5.6 を使用していますが、デフォルトの OpenSSH はバージョン 4.3 なので、最新の 5.x バージョンを手動でインストールしました。sshd -v を実行すると、OpenSSH_5.9p1、OpenSSL 0.9.8e-fips-rhel5 が返されます。
2) /etc/ssh/sshd_config を編集して、サブシステム sftp を internal-sftp に変更し、以下を追加しました。
Match user guest
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
3) sshdを再起動しました。
4) ホームディレクトリ /var/www/uploads/guest を持つユーザー「guest」を作成しました。
5) /var/www/uploads は、モード 755 の root:root によって所有されています。
6) /var/www/uploads/guest は、モード 755 の guest:root によって所有されています。
Mac の Transmit sftp クライアントを使用して、ゲスト ユーザーとしてログインしました。デフォルトではユーザーのホーム ディレクトリが開きますが、ディレクトリ レベルを上へ移動して、サーバー上の他のディレクトリを参照できます。
一部のチュートリアルでは、/var/www/uploads のモードを 700 または 750 にする必要があると書かれています。これを実行すると、ゲスト ユーザーとしてログインできますが、デフォルトでサーバーのルート ディレクトリが表示され、他のすべてのディレクトリを参照できます。
他のチュートリアルでは、ゲスト ユーザーのシェルを /bin/false に変更する必要があると書かれていますが、これを実行すると、ゲスト ユーザーとしてログインできなくなります。パスワードを入力すると、Transmit は「ユーザー名またはパスワードがサーバーによって受け入れられませんでした」と表示し、コマンド ライン sftp クライアントは「接続が閉じられました」と表示します。
すべて試したと思いますが、何が足りないのかわかる人はいますか?
答え1
ChrootDirectory はホーム ディレクトリの 1 つ上のレベルを指す必要があるようです。
ゲストの家は/var/www/uploads/ゲスト、 そうしてChrootディレクトリ指すべき/var/www/アップロード
それは多分...別の考えが浮かびました:
新しい openssh を手動でインストールしましたが、古いバージョンは削除しましたか? 新しいバージョンはどこにインストールされましたか? 時々気をつけないと、新しいものがインストールされてしまいます/usr/local/の代わりに/usr、つまりsftp対応サーバーは設定ファイルを/usr/local/etc/ssh/...予想よりも/etc/ssh/...
少なくとも確認すべき点があります。
答え2
私もまったく同じ問題に悩まされましたが、chrootディレクトリを設定することで解決しましたすべての親ディレクトリ以下の権限を持つ
1) 所有者をルートに変更する:
sudo chown root [directory]
2) すべてのグループの書き込み権限を削除します。
sudo chmod 755 [directory]
残念ながら、ルートが所有していないフォルダーに直接ジャンプすることはできないと思いますが、この点について誰かが訂正してくれると嬉しいです!